docs: def loads(buf, mutable=True, value_encoding=None, value_errors=None):
      """Deserialize a BSER-encoded blob.
  
      @param buf: The buffer to deserialize.
      @type buf: bytes
  
      @param mutable: Whether to return mutable results.
      @type mutable: bool
  
      @param value_encoding: Optional codec to use to decode values. If
                             unspecified or None, return values as bytestrings.
      @type value_encoding: str
  
      @param value_errors: Optional error handler for codec. 'strict' by default.
                           The other most common argument is 'surrogateescape' on
                           Python 3. If value_encoding is None, this is ignored.
      @type value_errors: str
      """
  
      info = _pdu_info_helper(buf)
      expected_len = info[2]
      pos = info[3]
  
      if len(buf) != expected_len + pos:
          raise ValueError(
              "bser data len %d != header len %d" % (expected_len + pos, len(buf))
          )
  
      bunser = Bunser(
          mutable=mutable, value_encoding=value_encoding, value_errors=value_errors
      )
  
      return bunser.loads_recursive(buf, pos)[0]