readUint32() {
    let result = 0,
      shift = 0
    while (this.offset < this.buf.byteLength) {
      const nextByte = this.buf[this.offset]
      if (shift === 28 && (nextByte & 0xf0) !== 0) {
        // more than 5 bytes, or value > 0xffffffff
        throw new RangeError("number out of range")
      }
      result = (result | ((nextByte & 0x7f) << shift)) >>> 0 // right shift to interpret value as unsigned
      shift += 7
      this.offset++
      if ((nextByte & 0x80) === 0) return result
    }
    throw new RangeError("buffer ended with incomplete number")
  }
Reads a LEB128-encoded unsigned integer from the current position in the buffer.
Throws an exception if the value doesn't fit in a 32-bit unsigned int.