code: def decompress(data_blocks):
      
  
      # Currently, with no max_length parameter to decompress,
      # this routine will do one yield per IDAT chunk: Not very
      # incremental.
      d = zlib.decompressobj()
      # Each IDAT chunk is passed to the decompressor, then any
      # remaining state is decompressed out.
      for data in data_blocks:
          # :todo: add a max_length argument here to limit output size.
          yield bytearray(d.decompress(data))
      yield bytearray(d.flush())
docs: `data_blocks` should be an iterable that
      yields the compressed data (from the ``IDAT`` chunks).
      This yields decompressed byte strings.