public static BinaryReader decompress(BinaryReader reader, List<ArtBlock> blocks,
			TaskMonitor monitor) throws IOException {
		OverlayByteProvider provider = new OverlayByteProvider(reader.getByteProvider());
		BinaryReader decompressedReader = new BinaryReader(provider, reader.isLittleEndian());
		for (ArtBlock block : blocks) {
			byte[] compressedBytes =
				reader.readByteArray(block.getDataOffset(), block.getDataSize());
			byte[] decompressedBytes = Decompressor.decompress(block.getStorageMode(),
				compressedBytes, block.getImageSize(), monitor);
			if (decompressedBytes.length != block.getImageSize()) {
				throw new RuntimeException( "decompressed length mismatch!" );
			}
			provider.addRange(new OverlayRange(block.getImageOffset(), decompressedBytes));
		}
		return decompressedReader;
	}
Decompress the block bytes and pipe into a new binary reader.
Required to allow reading of the remainder of the ART header. 
@param reader binary reader containing compressed bytes
@param blocks list of ART blocks that need decompressing
@param monitor task monitor for controlling the task
@return binary reader containing decompressed bytes
@throws IOException should an error occur reading the bytes
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/util/DecompressionManager.java