public BitcoinAuxPOW parseAuxPow(ByteBuffer rawByteBuffer) {
	if (!this.readAuxPow) {
		return null;
	}
	// in case it does not contain auxpow we need to reset
	rawByteBuffer.mark();
	int currentVersion=rawByteBuffer.getInt();
	byte[] currentInCounterVarInt=BitcoinUtil.convertVarIntByteBufferToByteArray(rawByteBuffer);
	byte[] currentTransactionInputPrevTransactionHash=new byte[32];
	rawByteBuffer.get(currentTransactionInputPrevTransactionHash,0,32);
	byte[] prevTxOutIdx = new byte[4];
	rawByteBuffer.get(prevTxOutIdx,0,4);
	// detect auxPow
	rawByteBuffer.reset();
	byte[] expectedPrevTransactionHash=new byte[]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
	byte[] expectedPrevOutIdx = new byte[] {(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF};

	if ((!(Arrays.equals(prevTxOutIdx,expectedPrevOutIdx))||(!(Arrays.equals(currentTransactionInputPrevTransactionHash,expectedPrevTransactionHash))))) {
		return null;
	}
	// continue reading auxPow
 	// txIn (for all of them)
	currentVersion=rawByteBuffer.getInt();
	
	currentInCounterVarInt=BitcoinUtil.convertVarIntByteBufferToByteArray(rawByteBuffer);
	long currentNoOfInputs=BitcoinUtil.getVarInt(currentInCounterVarInt);
	List<BitcoinTransactionInput> currentTransactionInput = parseTransactionInputs(rawByteBuffer, currentNoOfInputs);

	// txOut (for all of them)
	byte[] currentOutCounterVarInt=BitcoinUtil.convertVarIntByteBufferToByteArray(rawByteBuffer);
	long currentNoOfOutput=BitcoinUtil.getVarInt(currentOutCounterVarInt);
	List<BitcoinTransactionOutput> currentTransactionOutput = parseTransactionOutputs(rawByteBuffer,currentNoOfOutput);
	int lockTime = rawByteBuffer.getInt();
	BitcoinTransaction coinbaseTransaction= new BitcoinTransaction(currentVersion,currentInCounterVarInt,currentTransactionInput, currentOutCounterVarInt, currentTransactionOutput,lockTime);

	// read branches
	// coinbase branch
	byte[] coinbaseParentBlockHeaderHash=new byte[32];
	rawByteBuffer.get(coinbaseParentBlockHeaderHash,0,32);
	
	BitcoinAuxPOWBranch coinbaseBranch = parseAuxPOWBranch(rawByteBuffer);
	
	// auxchain branch
	BitcoinAuxPOWBranch auxChainBranch = parseAuxPOWBranch(rawByteBuffer);

	// parent Block header
	
	byte[] parentBlockBits=new byte[4];
	byte[] parentBlockHashMerkleRoot=new byte[32];
	byte[] parentBlockHashPrevBlock=new byte[32];
	
	// version

	int parentBlockVersion=rawByteBuffer.getInt();
	// hashPrevBlock
	rawByteBuffer.get(parentBlockHashPrevBlock,0,32);
	// hashMerkleRoot
	rawByteBuffer.get(parentBlockHashMerkleRoot,0,32);	
	// time 
	int parentBlockTime=rawByteBuffer.getInt();
	// bits/difficulty
	rawByteBuffer.get(parentBlockBits,0,4);
	// nonce
	int parentBlockNonce=rawByteBuffer.getInt();
	BitcoinAuxPOWBlockHeader parentBlockheader = new BitcoinAuxPOWBlockHeader(parentBlockVersion, parentBlockHashPrevBlock, parentBlockHashMerkleRoot, parentBlockTime, parentBlockBits, parentBlockNonce);

	return new BitcoinAuxPOW(currentVersion, coinbaseTransaction, coinbaseParentBlockHeaderHash, coinbaseBranch, auxChainBranch, parentBlockheader);
}
public BitcoinAuxPOW parseAuxPow ( ByteBuffer rawByteBuffer ) { if ( ! this . readAuxPow ) { return null ; } rawByteBuffer . mark ( ) ; int currentVersion = rawByteBuffer . getInt ( ) ; byte [ ] currentInCounterVarInt = BitcoinUtil . convertVarIntByteBufferToByteArray ( rawByteBuffer ) ; byte [ ] currentTransactionInputPrevTransactionHash = new byte [ 32 ] ; rawByteBuffer . get ( currentTransactionInputPrevTransactionHash , 0 , 32 ) ; byte [ ] prevTxOutIdx = new byte [ 4 ] ; rawByteBuffer . get ( prevTxOutIdx , 0 , 4 ) ; rawByteBuffer . reset ( ) ; byte [ ] expectedPrevTransactionHash = new byte [ ] { 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 } ; byte [ ] expectedPrevOutIdx = new byte [ ] { ( byte ) 0xFF , ( byte ) 0xFF , ( byte ) 0xFF , ( byte ) 0xFF } ; if ( ( ! ( Arrays . equals ( prevTxOutIdx , expectedPrevOutIdx ) ) || ( ! ( Arrays . equals ( currentTransactionInputPrevTransactionHash , expectedPrevTransactionHash ) ) ) ) ) { return null ; } currentVersion = rawByteBuffer . getInt ( ) ; currentInCounterVarInt = BitcoinUtil . convertVarIntByteBufferToByteArray ( rawByteBuffer ) ; long currentNoOfInputs = BitcoinUtil . getVarInt ( currentInCounterVarInt ) ; List < BitcoinTransactionInput > currentTransactionInput = parseTransactionInputs ( rawByteBuffer , currentNoOfInputs ) ; byte [ ] currentOutCounterVarInt = BitcoinUtil . convertVarIntByteBufferToByteArray ( rawByteBuffer ) ; long currentNoOfOutput = BitcoinUtil . getVarInt ( currentOutCounterVarInt ) ; List < BitcoinTransactionOutput > currentTransactionOutput = parseTransactionOutputs ( rawByteBuffer , currentNoOfOutput ) ; int lockTime = rawByteBuffer . getInt ( ) ; BitcoinTransaction coinbaseTransaction = new BitcoinTransaction ( currentVersion , currentInCounterVarInt , currentTransactionInput , currentOutCounterVarInt , currentTransactionOutput , lockTime ) ; byte [ ] coinbaseParentBlockHeaderHash = new byte [ 32 ] ; rawByteBuffer . get ( coinbaseParentBlockHeaderHash , 0 , 32 ) ; BitcoinAuxPOWBranch coinbaseBranch = parseAuxPOWBranch ( rawByteBuffer ) ; BitcoinAuxPOWBranch auxChainBranch = parseAuxPOWBranch ( rawByteBuffer ) ; byte [ ] parentBlockBits = new byte [ 4 ] ; byte [ ] parentBlockHashMerkleRoot = new byte [ 32 ] ; byte [ ] parentBlockHashPrevBlock = new byte [ 32 ] ; int parentBlockVersion = rawByteBuffer . getInt ( ) ; rawByteBuffer . get ( parentBlockHashPrevBlock , 0 , 32 ) ; rawByteBuffer . get ( parentBlockHashMerkleRoot , 0 , 32 ) ; int parentBlockTime = rawByteBuffer . getInt ( ) ; rawByteBuffer . get ( parentBlockBits , 0 , 4 ) ; int parentBlockNonce = rawByteBuffer . getInt ( ) ; BitcoinAuxPOWBlockHeader parentBlockheader = new BitcoinAuxPOWBlockHeader ( parentBlockVersion , parentBlockHashPrevBlock , parentBlockHashMerkleRoot , parentBlockTime , parentBlockBits , parentBlockNonce ) ; return new BitcoinAuxPOW ( currentVersion , coinbaseTransaction , coinbaseParentBlockHeaderHash , coinbaseBranch , auxChainBranch , parentBlockheader ) ; }
Parses AuxPOW information (cf. https://en.bitcoin.it/wiki/Merged_mining_specification)

@param rawByteBuffer
@return