int indirectCount = fs.getSuperblock().getBlockSize() << 2;
int indirectCount = fs.getSuperblock().getBlockSize() >> 2;
	public byte[] getDataBlock(long i) throws IOException {		//get the direct blocks (0; 11)		if(i<12)			return fs.getBlock( Ext2Utils.get32(data,40+(int)i*4) );		//see the indirect blocks (12; indirectCount-1)		int indirectCount = fs.getSuperblock().getBlockSize() << 2; //a block index is 4 bytes long		if(i<12+indirectCount) {			long offset=i-12;			//the 12th index points to the indirect block			byte[] indirectBlock = fs.getBlock( Ext2Utils.get32(data,40+12*4) );			long blockIndex = Ext2Utils.get32(indirectBlock, (int)offset*4);			return fs.getBlock( blockIndex );		}				//see the double indirect blocks (indirectCount; doubleIndirectCount-1)		int doubleIndirectCount = indirectCount * indirectCount;		if(i<12+indirectCount+doubleIndirectCount) {			//the 13th index points to the double indirect block			byte[] doubleIndirectBlock = fs.getBlock( Ext2Utils.get32(data,40+13*4) );			long offset = i-indirectCount-12;			long indirectBlockNr = offset / indirectCount;			long indirectBlockOffset= offset % indirectCount;						byte[] indirectBlock = fs.getBlock( Ext2Utils.get32(doubleIndirectBlock, (int)indirectBlockNr) );			long blockIndex = Ext2Utils.get32(indirectBlock, (int)indirectBlockOffset*4);			return fs.getBlock( blockIndex );		}				//see the triple indirect blocks (doubleIndirectCount; tripleIndirectCount-1)		int tripleIndirectCount = indirectCount * indirectCount * indirectCount;		if(i<12+indirectCount+doubleIndirectCount+tripleIndirectCount) {			//the 14th index points to the triple indirect block			byte[] tripleIndirectBlock = fs.getBlock( Ext2Utils.get32(data,40+14*4) );			long offset = i-doubleIndirectCount-indirectCount-12;			long doubleIndirectBlockNr = offset / (indirectCount * indirectCount);			long doubleIndirectBlockOffset = offset % (indirectCount * indirectCount);						byte[] doubleIndirectBlock = fs.getBlock( Ext2Utils.get32(tripleIndirectBlock, (int)doubleIndirectBlockNr) );			long indirectBlockIndex = Ext2Utils.get32( doubleIndirectBlock, (int)doubleIndirectBlockOffset*4);			long indirectBlockOffset = offset % indirectCount;						byte[] indirectBlock = fs.getBlock( Ext2Utils.get32(doubleIndirectBlock, (int)indirectBlockIndex*4) );			long blockIndex = Ext2Utils.get32( indirectBlock, (int)indirectBlockOffset*4 );						return fs.getBlock( blockIndex );		}		else{			throw new IOException("file too big: more than "+12+indirectCount+doubleIndirectCount+tripleIndirectCount+" blocks");		}		}