{
  "version": 3,
  "sources": ["../../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js", "../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js", "../../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.js", "../../../node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js", "../../../node_modules/.pnpm/node-stdlib-browser@1.2.0/node_modules/node-stdlib-browser/helpers/esbuild/shim.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_overArg.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getPrototype.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js", "../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isPlainObject.js", "../../../node_modules/.pnpm/err-code@3.0.1/node_modules/err-code/index.js", "../../../node_modules/.pnpm/murmurhash3js-revisited@3.0.0/node_modules/murmurhash3js-revisited/lib/murmurHash3js.js", "../../../node_modules/.pnpm/murmurhash3js-revisited@3.0.0/node_modules/murmurhash3js-revisited/index.js", "../../../node_modules/.pnpm/sparse-array@1.3.2/node_modules/sparse-array/index.js", "../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js", "../../../node_modules/.pnpm/safe-buffer@5.2.1/node_modules/safe-buffer/index.js", "../../../node_modules/.pnpm/randombytes@2.1.0/node_modules/randombytes/browser.js", "../../../node_modules/.pnpm/inherits@2.0.4/node_modules/inherits/inherits_browser.js", "../../../node_modules/.pnpm/events@3.3.0/node_modules/events/events.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/errors-browser.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/.pnpm/util-deprecate@1.0.2/node_modules/util-deprecate/browser.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/.pnpm/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/async_iterator.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/from-browser.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/readable-browser.js", "../../../node_modules/.pnpm/hash-base@3.1.0/node_modules/hash-base/index.js", "../../../node_modules/.pnpm/md5.js@1.3.5/node_modules/md5.js/index.js", "../../../node_modules/.pnpm/ripemd160@2.0.2/node_modules/ripemd160/index.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/hash.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha1.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha256.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha224.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha512.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/sha384.js", "../../../node_modules/.pnpm/sha.js@2.4.11/node_modules/sha.js/index.js", "../../../node_modules/.pnpm/stream-browserify@3.0.0/node_modules/stream-browserify/index.js", "../../../node_modules/.pnpm/cipher-base@1.0.4/node_modules/cipher-base/index.js", "../../../node_modules/.pnpm/create-hash@1.2.0/node_modules/create-hash/browser.js", "../../../node_modules/.pnpm/create-hmac@1.1.7/node_modules/create-hmac/legacy.js", "../../../node_modules/.pnpm/create-hash@1.2.0/node_modules/create-hash/md5.js", "../../../node_modules/.pnpm/create-hmac@1.1.7/node_modules/create-hmac/browser.js", "../../../node_modules/.pnpm/browserify-sign@4.2.3/node_modules/browserify-sign/browser/algorithms.json", "../../../node_modules/.pnpm/browserify-sign@4.2.3/node_modules/browserify-sign/algos.js", "../../../node_modules/.pnpm/pbkdf2@3.1.2/node_modules/pbkdf2/lib/precondition.js", "../../../node_modules/.pnpm/pbkdf2@3.1.2/node_modules/pbkdf2/lib/default-encoding.js", "../../../node_modules/.pnpm/pbkdf2@3.1.2/node_modules/pbkdf2/lib/to-buffer.js", "../../../node_modules/.pnpm/pbkdf2@3.1.2/node_modules/pbkdf2/lib/sync-browser.js", "../../../node_modules/.pnpm/pbkdf2@3.1.2/node_modules/pbkdf2/lib/async.js", "../../../node_modules/.pnpm/pbkdf2@3.1.2/node_modules/pbkdf2/browser.js", "../../../node_modules/.pnpm/des.js@1.1.0/node_modules/des.js/lib/des/utils.js", "../../../node_modules/.pnpm/minimalistic-assert@1.0.1/node_modules/minimalistic-assert/index.js", "../../../node_modules/.pnpm/des.js@1.1.0/node_modules/des.js/lib/des/cipher.js", "../../../node_modules/.pnpm/des.js@1.1.0/node_modules/des.js/lib/des/des.js", "../../../node_modules/.pnpm/des.js@1.1.0/node_modules/des.js/lib/des/cbc.js", "../../../node_modules/.pnpm/des.js@1.1.0/node_modules/des.js/lib/des/ede.js", "../../../node_modules/.pnpm/des.js@1.1.0/node_modules/des.js/lib/des.js", "../../../node_modules/.pnpm/browserify-des@1.0.2/node_modules/browserify-des/index.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/ecb.js", "../../../node_modules/.pnpm/buffer-xor@1.0.3/node_modules/buffer-xor/index.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/cbc.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/cfb.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/cfb8.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/cfb1.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/ofb.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/incr32.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/ctr.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/list.json", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/modes/index.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/aes.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/ghash.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/authCipher.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/streamCipher.js", "../../../node_modules/.pnpm/evp_bytestokey@1.0.3/node_modules/evp_bytestokey/index.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/encrypter.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/decrypter.js", "../../../node_modules/.pnpm/browserify-aes@1.2.0/node_modules/browserify-aes/browser.js", "../../../node_modules/.pnpm/browserify-des@1.0.2/node_modules/browserify-des/modes.js", "../../../node_modules/.pnpm/browserify-cipher@1.0.1/node_modules/browserify-cipher/browser.js", "../../../node_modules/.pnpm/bn.js@4.12.0/node_modules/bn.js/lib/bn.js", "../../../node_modules/.pnpm/brorand@1.1.0/node_modules/brorand/index.js", "../../../node_modules/.pnpm/miller-rabin@4.0.1/node_modules/miller-rabin/lib/mr.js", "../../../node_modules/.pnpm/diffie-hellman@5.0.3/node_modules/diffie-hellman/lib/generatePrime.js", "../../../node_modules/.pnpm/diffie-hellman@5.0.3/node_modules/diffie-hellman/lib/primes.json", "../../../node_modules/.pnpm/diffie-hellman@5.0.3/node_modules/diffie-hellman/lib/dh.js", "../../../node_modules/.pnpm/diffie-hellman@5.0.3/node_modules/diffie-hellman/browser.js", "../../../node_modules/.pnpm/process-nextick-args@2.0.1/node_modules/process-nextick-args/index.js", "../../../node_modules/.pnpm/isarray@1.0.0/node_modules/isarray/index.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/internal/streams/stream-browser.js", "../../../node_modules/.pnpm/safe-buffer@5.1.2/node_modules/safe-buffer/index.js", "../../../node_modules/.pnpm/core-util-is@1.0.3/node_modules/core-util-is/lib/util.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/internal/streams/BufferList.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_writable.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_duplex.js", "../../../node_modules/.pnpm/string_decoder@1.1.1/node_modules/string_decoder/lib/string_decoder.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_readable.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_transform.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/lib/_stream_passthrough.js", "../../../node_modules/.pnpm/readable-stream@2.3.8/node_modules/readable-stream/readable-browser.js", "../../../node_modules/.pnpm/bn.js@5.2.1/node_modules/bn.js/lib/bn.js", "../../../node_modules/.pnpm/browserify-rsa@4.1.0/node_modules/browserify-rsa/index.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/package.json", "../../../node_modules/.pnpm/minimalistic-crypto-utils@1.0.1/node_modules/minimalistic-crypto-utils/lib/utils.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/utils.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/curve/base.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/curve/short.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/curve/mont.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/curve/edwards.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/curve/index.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/utils.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/common.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/sha/common.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/sha/1.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/sha/256.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/sha/224.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/sha/512.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/sha/384.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/sha.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/ripemd.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash/hmac.js", "../../../node_modules/.pnpm/hash.js@1.1.7/node_modules/hash.js/lib/hash.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/curves.js", "../../../node_modules/.pnpm/hmac-drbg@1.0.1/node_modules/hmac-drbg/lib/hmac-drbg.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/ec/key.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/ec/signature.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/ec/index.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/eddsa/key.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/eddsa/signature.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic/eddsa/index.js", "../../../node_modules/.pnpm/elliptic@6.5.7/node_modules/elliptic/lib/elliptic.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/api.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/base/reporter.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/base/buffer.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/base/node.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/base/index.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/constants/der.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/constants/index.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/decoders/der.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/decoders/pem.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/decoders/index.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/encoders/der.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/encoders/pem.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1/encoders/index.js", "../../../node_modules/.pnpm/asn1.js@4.10.1/node_modules/asn1.js/lib/asn1.js", "../../../node_modules/.pnpm/parse-asn1@5.1.7/node_modules/parse-asn1/certificate.js", "../../../node_modules/.pnpm/parse-asn1@5.1.7/node_modules/parse-asn1/asn1.js", "../../../node_modules/.pnpm/parse-asn1@5.1.7/node_modules/parse-asn1/aesid.json", "../../../node_modules/.pnpm/parse-asn1@5.1.7/node_modules/parse-asn1/fixProc.js", "../../../node_modules/.pnpm/parse-asn1@5.1.7/node_modules/parse-asn1/index.js", "../../../node_modules/.pnpm/browserify-sign@4.2.3/node_modules/browserify-sign/browser/curves.json", "../../../node_modules/.pnpm/browserify-sign@4.2.3/node_modules/browserify-sign/browser/sign.js", "../../../node_modules/.pnpm/browserify-sign@4.2.3/node_modules/browserify-sign/browser/verify.js", "../../../node_modules/.pnpm/browserify-sign@4.2.3/node_modules/browserify-sign/browser/index.js", "../../../node_modules/.pnpm/create-ecdh@4.0.4/node_modules/create-ecdh/browser.js", "../../../node_modules/.pnpm/public-encrypt@4.0.3/node_modules/public-encrypt/mgf.js", "../../../node_modules/.pnpm/public-encrypt@4.0.3/node_modules/public-encrypt/xor.js", "../../../node_modules/.pnpm/public-encrypt@4.0.3/node_modules/public-encrypt/withPublic.js", "../../../node_modules/.pnpm/public-encrypt@4.0.3/node_modules/public-encrypt/publicEncrypt.js", "../../../node_modules/.pnpm/public-encrypt@4.0.3/node_modules/public-encrypt/privateDecrypt.js", "../../../node_modules/.pnpm/public-encrypt@4.0.3/node_modules/public-encrypt/browser.js", "../../../node_modules/.pnpm/randomfill@1.0.4/node_modules/randomfill/browser.js", "../../../node_modules/.pnpm/crypto-browserify@3.12.0/node_modules/crypto-browserify/index.js", "../../../node_modules/.pnpm/@noble+ciphers@0.3.0/node_modules/@noble/ciphers/src/utils.ts", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/consts.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/config.js", "../../../node_modules/.pnpm/@noble+ciphers@0.3.0/node_modules/@noble/ciphers/src/webcrypto/crypto.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.3.0/node_modules/@noble/ciphers/src/webcrypto/utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_sha2.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_u64.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/sha512.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/utils.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/modular.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/curve.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/edwards.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/montgomery.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/ed25519.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/_shortw_utils.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/secp256k1.ts", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/utils/hex.js", "../../../node_modules/.pnpm/@noble+ciphers@0.3.0/node_modules/@noble/ciphers/src/_assert.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.3.0/node_modules/@noble/ciphers/src/_poly1305.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.3.0/node_modules/@noble/ciphers/src/_salsa.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.3.0/node_modules/@noble/ciphers/src/chacha.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/hkdf.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/_md.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/utils/compat.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/utils/symmetric.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/utils/elliptic.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/utils/index.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/keys/PublicKey.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/keys/PrivateKey.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/keys/index.js", "../../../node_modules/.pnpm/eciesjs@0.4.5/node_modules/eciesjs/dist/index.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/primordials.js", "../../../node_modules/.pnpm/abort-controller@3.0.0/node_modules/abort-controller/browser.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/util.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/errors.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/validators.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/utils.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/legacy.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/add-abort-signal.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/from.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/readable.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/writable.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/duplexify.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/duplex.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/transform.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/passthrough.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/compose.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/internal/streams/operators.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/stream/promises.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/stream.js", "../../../node_modules/.pnpm/readable-stream@4.5.2/node_modules/readable-stream/lib/ours/browser.js", "../../../node_modules/.pnpm/jsbi@4.3.0/node_modules/jsbi/tsc-out/jsbi.mjs", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/codegen/code.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/codegen/scope.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/codegen/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/util.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/names.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/errors.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/validate/boolSchema.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/rules.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/validate/applicability.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/validate/dataType.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/validate/defaults.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/code.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/validate/keyword.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/validate/subschema.ts", "../../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js", "../../../node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/resolve.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/validate/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/runtime/validation_error.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/ref_error.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/compile/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/data.json", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/index.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/urn-uuid.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/urn.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/mailto.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/wss.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/ws.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/https.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/schemes/http.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/uri.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/node_modules/punycode/punycode.es6.js", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/regexps-iri.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/regexps-uri.ts", "../../../node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/src/util.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/runtime/uri.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/core.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/core/id.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/core/ref.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/core/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/runtime/ucs2length.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/limitLength.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/pattern.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/required.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/limitItems.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/runtime/equal.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/const.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/enum.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/items.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/items2020.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/contains.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/properties.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/not.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/allOf.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/if.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/dynamic/dynamicAnchor.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/dynamic/dynamicRef.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/dynamic/recursiveAnchor.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/dynamic/recursiveRef.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/dynamic/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/dependentRequired.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/applicator/dependentSchemas.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/validation/limitContains.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/next.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedProperties.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedItems.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/unevaluated/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/format/format.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/format/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/metadata.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/draft2020.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/discriminator/types.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/vocabularies/discriminator/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/refs/json-schema-2020-12/index.ts", "../../../node_modules/.pnpm/ajv@8.12.0/node_modules/ajv/lib/2020.ts", "../../../node_modules/.pnpm/@isaacs+ttlcache@1.4.1/node_modules/@isaacs/ttlcache/index.js", "../../../node_modules/.pnpm/level-supports@4.0.1/node_modules/level-supports/index.js", "../../../node_modules/.pnpm/module-error@1.0.2/node_modules/module-error/index.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/text-endec.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/encoding.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/formats.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/lib/encodings.js", "../../../node_modules/.pnpm/level-transcoder@1.0.1/node_modules/level-transcoder/index.js", "../../../node_modules/.pnpm/catering@2.1.1/node_modules/catering/next-tick-browser.js", "../../../node_modules/.pnpm/catering@2.1.1/node_modules/catering/index.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/common.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/abstract-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/default-kv-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/deferred-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/abstract-chained-batch.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/default-chained-batch.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/range-options.js", "../../../node_modules/.pnpm/queue-microtask@1.2.3/node_modules/queue-microtask/index.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/next-tick-browser.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/abstract-sublevel-iterator.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/lib/abstract-sublevel.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/abstract-level.js", "../../../node_modules/.pnpm/abstract-level@1.0.4/node_modules/abstract-level/index.js", "../../../node_modules/.pnpm/run-parallel-limit@1.1.0/node_modules/run-parallel-limit/index.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/util/key-range.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/util/deserialize.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/iterator.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/util/clear.js", "../../../node_modules/.pnpm/browser-level@1.0.1/node_modules/browser-level/index.js", "../../../node_modules/.pnpm/level@8.0.1/node_modules/level/browser.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/ours/primordials.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/ours/util.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/ours/errors.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/validators.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/utils.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/destroy.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/legacy.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/add-abort-signal.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/state.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/from.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/readable.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/writable.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/duplexify.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/duplex.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/transform.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/passthrough.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/pipeline.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/compose.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/internal/streams/operators.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/stream/promises.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/stream.js", "../../../node_modules/.pnpm/readable-stream@4.4.2/node_modules/readable-stream/lib/ours/browser.js", "../../../node_modules/.pnpm/level@8.0.0/node_modules/level/browser.js", "../../../node_modules/.pnpm/canonicalize@2.0.0/node_modules/canonicalize/lib/canonicalize.js", "../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js", "../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js", "../../../node_modules/.pnpm/readable-web-to-node-stream@3.0.2/node_modules/readable-web-to-node-stream/lib/index.js", "../src/index.ts", "../src/identity-agent.ts", "../../agent/src/index.ts", "../../agent/src/types/dwn.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/index.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/jws.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/encoder.ts", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base64.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bytes.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/jose/algorithms/signing/signature-algorithms.ts", "../../../node_modules/.pnpm/@noble+ed25519@2.0.0/node_modules/@noble/ed25519/index.js", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/dwn-error.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/jose/algorithms/signing/ed25519.ts", "../../../node_modules/.pnpm/@noble+secp256k1@2.0.0/node_modules/@noble/secp256k1/index.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/varint.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/vendor/varint.js", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/secp256k1.ts", "../../../node_modules/.pnpm/@noble+curves@1.4.2/node_modules/@noble/curves/src/p256.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/_md.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/.pnpm/@noble+curves@1.4.2/node_modules/@noble/curves/src/_shortw_utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/.pnpm/@noble+curves@1.4.2/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../../node_modules/.pnpm/@noble+curves@1.4.2/node_modules/@noble/curves/src/abstract/curve.ts", "../../../node_modules/.pnpm/@noble+curves@1.4.2/node_modules/@noble/curves/src/abstract/modular.ts", "../../../node_modules/.pnpm/@noble+curves@1.4.2/node_modules/@noble/curves/src/abstract/utils.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/index.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/equals.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/xor.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/compare.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/concat.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/from-string.ts", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/util/bases.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/basics.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base10.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bytes.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/vendor/base-x.js", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base16.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base2.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base256emoji.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base32.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base36.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base58.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base64.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/base8.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/identity.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/codecs/json.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/codecs/raw.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/hashes/identity.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/hashes/digest.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/varint.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/vendor/varint.js", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/hashes/sha2-browser.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/hashes/hasher.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/index.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/cid.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/link/interface.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/interface.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/bases/interface.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/src/hashes/interface.ts", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/dist/src/codecs/interface.js", "../../../node_modules/.pnpm/multiformats@13.1.0/node_modules/multiformats/dist/src/block/interface.js", "../../../node_modules/.pnpm/uint8arrays@5.1.0/node_modules/uint8arrays/src/to-string.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/secp256r1.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/private-key-signer.ts", "../../../node_modules/.pnpm/lru-cache@9.1.2/node_modules/lru-cache/src/index.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/memory-cache.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/schema-validator.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/generated/precompiled-validators.js", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/jose/jws/general/verifier.ts", "../../../node_modules/.pnpm/@ipld+dag-cbor@9.0.3/node_modules/@ipld/dag-cbor/src/index.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/cborg.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/encode.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/is.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/token.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/bl.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/byte-utils.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/common.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/jump.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/0uint.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/1negint.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/2bytes.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/3string.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/4array.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/5map.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/6tag.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/7float.js", "../../../node_modules/.pnpm/cborg@2.0.5/node_modules/cborg/esm/lib/decode.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/cid.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base32.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/vendor/base-x.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bytes.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/interface.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base58.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/digest.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/varint.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/vendor/varint.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/link/interface.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/index.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/cid.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base58.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/bases/base32.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/link/interface.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/interface.js", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/blockstore-mock.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/index.ts", "../../../node_modules/.pnpm/it-first@3.0.6/node_modules/it-first/src/index.ts", "../../../node_modules/.pnpm/it-parallel-batch@3.0.6/node_modules/it-parallel-batch/src/index.ts", "../../../node_modules/.pnpm/it-batch@3.0.6/node_modules/it-batch/src/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/chunker/fixed-size.ts", "../../../node_modules/.pnpm/uint8arraylist@2.4.8/node_modules/uint8arraylist/src/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dag-builder/buffer-importer.ts", "../../../node_modules/.pnpm/@ipld+dag-pb@4.1.2/node_modules/@ipld/dag-pb/src/index.js", "../../../node_modules/.pnpm/@ipld+dag-pb@4.1.2/node_modules/@ipld/dag-pb/src/pb-decode.js", "../../../node_modules/.pnpm/@ipld+dag-pb@4.1.2/node_modules/@ipld/dag-pb/src/pb-encode.js", "../../../node_modules/.pnpm/@ipld+dag-pb@4.1.2/node_modules/@ipld/dag-pb/src/util.js", "../../../node_modules/.pnpm/ipfs-unixfs@11.1.4/node_modules/ipfs-unixfs/src/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs@11.1.4/node_modules/ipfs-unixfs/src/unixfs.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/index.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/decode.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/utils/reader.ts", "../../../node_modules/.pnpm/uint8-varint@2.0.4/node_modules/uint8-varint/src/index.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/utils/float.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/utils/longbits.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/utils/utf8.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/encode.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/utils/writer.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/utils/pool.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/codecs/enum.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/codec.ts", "../../../node_modules/.pnpm/protons-runtime@5.4.0/node_modules/protons-runtime/src/codecs/message.ts", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/codecs/raw.js", "../../../node_modules/.pnpm/progress-events@1.0.1/node_modules/progress-events/src/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/utils/persist.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dag-builder/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dag-builder/dir.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dag-builder/file.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dag-builder/validate-chunks.ts", "../../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/from-string.ts", "../../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/util/as-uint8array.ts", "../../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/util/bases.ts", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/basics.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base10.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base16.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base2.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base256emoji.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base36.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base64.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/base8.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/bases/identity.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/codecs/json.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/codecs/raw.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/identity.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/sha2-browser.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/hashes/hasher.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/index.js", "../../../node_modules/.pnpm/multiformats@12.1.3/node_modules/multiformats/src/interface.js", "../../../node_modules/.pnpm/uint8arrays@4.0.10/node_modules/uint8arrays/src/alloc.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/layout/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/layout/balanced.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/layout/flat.ts", "../../../node_modules/.pnpm/it-all@3.0.6/node_modules/it-all/src/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/layout/trickle.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/tree-builder.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dir-flat.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dir.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/flat-to-shard.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/dir-sharded.ts", "../../../node_modules/.pnpm/@multiformats+murmur3@2.1.8/node_modules/@multiformats/murmur3/src/index.js", "../../../node_modules/.pnpm/hamt-sharding@3.0.6/node_modules/hamt-sharding/src/index.ts", "../../../node_modules/.pnpm/hamt-sharding@3.0.6/node_modules/hamt-sharding/src/bucket.ts", "../../../node_modules/.pnpm/hamt-sharding@3.0.6/node_modules/hamt-sharding/src/consumable-hash.ts", "../../../node_modules/.pnpm/hamt-sharding@3.0.6/node_modules/hamt-sharding/src/consumable-buffer.ts", "../../../node_modules/.pnpm/ipfs-unixfs-importer@15.1.5/node_modules/ipfs-unixfs-importer/src/utils/to-path-components.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/cid.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/encryption.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/jose/jws/general/builder.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/webcrypto.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/crypto.ts", "../../../node_modules/.pnpm/@noble+ciphers@0.5.3/node_modules/@noble/ciphers/src/_assert.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/hd-key.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/string.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/object.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/message.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/protocols/permission-grant.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/types/records-types.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/filter.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/enums/dwn-interface-method.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/url.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/records.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/grant-authorization.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/types/permission-types.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/records-grant-authorization.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/intrinsicclass.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/slots.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/regex.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/ecmascript.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/intl.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/instant.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/calendar.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/plaindate.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/plaindatetime.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/duration.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/plainmonthday.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/now.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/plaintime.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/timezone.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/plainyearmonth.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/zoneddatetime.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/legacydate.ts", "../../../node_modules/.pnpm/@js-temporal+polyfill@0.4.4/node_modules/@js-temporal/polyfill/lib/index.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/time.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-write.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/auth.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/tenant-gate.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/abstract-message.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-query.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/data-stream.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/message-reply.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/messages.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/protocols/permission-request.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/protocols/permissions.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/messages-grant-authorization.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/messages-query.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/messages-query.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/messages-read.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/messages-read.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/messages-subscribe.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/messages-subscribe.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/protocols-configure.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/protocols-grant-authorization.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/types/protocols-types.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/protocols-configure.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/protocols-query.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/protocols-query.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/protocol-authorization.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-delete.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/resumable-task-manager.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-delete.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/types/query-types.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-query.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-read.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-read.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/interfaces/records-subscribe.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-subscribe.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/core/dwn-constant.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/storage-controller.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/handlers/records-write.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/index.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/types/did-core.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/types/did-resolution.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/did.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/did-error.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/index.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/index.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/cache.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/type-utils.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/convert.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/multicodec.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/object.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/stores.ts", "../../../node_modules/.pnpm/@web5+common@1.0.1/node_modules/@web5/common/src/stream-node.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/primitives/sha256.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/algorithms/crypto-algorithm.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/algorithms/sha-2.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/secp256k1.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/sha256.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_sha2.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_assert.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/crypto.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/modular.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/utils.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/curve.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/_shortw_utils.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/hmac.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/jose/utils.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/jose/jwk.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/primitives/secp256k1.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/p256.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/primitives/secp256r1.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/algorithms/ecdsa.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/ed25519.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/sha512.ts", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/_u64.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/edwards.ts", "../../../node_modules/.pnpm/@noble+curves@1.3.0/node_modules/@noble/curves/src/abstract/montgomery.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/primitives/ed25519.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/algorithms/eddsa.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/local-key-manager.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/utils.ts", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/dist/esm/jose/jwe.js", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/dist/esm/jose/jws.js", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/dist/esm/jose/jwt.js", "../../../node_modules/.pnpm/@web5+crypto@1.0.3/node_modules/@web5/crypto/src/primitives/x25519.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/index.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/cache.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/type-utils.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/convert.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/multicodec.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/object.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/stores.ts", "../../../node_modules/.pnpm/@web5+common@1.0.0/node_modules/@web5/common/src/stream-node.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/utils.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/bearer-did.ts", "../../../node_modules/.pnpm/bencode@4.0.0/node_modules/bencode/index.js", "../../../node_modules/.pnpm/bencode@4.0.0/node_modules/bencode/lib/encode.js", "../../../node_modules/.pnpm/uint8-util@2.2.5/node_modules/uint8-util/browser.js", "../../../node_modules/.pnpm/uint8-util@2.2.5/node_modules/uint8-util/util.js", "../../../node_modules/.pnpm/base64-arraybuffer@1.0.2/node_modules/src/index.ts", "../../../node_modules/.pnpm/bencode@4.0.0/node_modules/bencode/lib/util.js", "../../../node_modules/.pnpm/bencode@4.0.0/node_modules/bencode/lib/decode.js", "../../../node_modules/.pnpm/bencode@4.0.0/node_modules/bencode/lib/encoding-length.js", "../../../node_modules/.pnpm/@dnsquery+dns-packet@6.1.1/node_modules/@dnsquery/dns-packet/index.mjs", "../../../node_modules/.pnpm/@leichtgewicht+ip-codec@2.0.5/node_modules/@leichtgewicht/ip-codec/index.mjs", "../../../node_modules/.pnpm/@dnsquery+dns-packet@6.1.1/node_modules/@dnsquery/dns-packet/types.mjs", "../../../node_modules/.pnpm/@dnsquery+dns-packet@6.1.1/node_modules/@dnsquery/dns-packet/rcodes.mjs", "../../../node_modules/.pnpm/@dnsquery+dns-packet@6.1.1/node_modules/@dnsquery/dns-packet/opcodes.mjs", "../../../node_modules/.pnpm/@dnsquery+dns-packet@6.1.1/node_modules/@dnsquery/dns-packet/classes.mjs", "../../../node_modules/.pnpm/@dnsquery+dns-packet@6.1.1/node_modules/@dnsquery/dns-packet/optioncodes.mjs", "../../../node_modules/.pnpm/@dnsquery+dns-packet@6.1.1/node_modules/@dnsquery/dns-packet/buffer_utils.mjs", "../../../node_modules/.pnpm/utf8-codec@1.0.0/node_modules/utf8-codec/index.mjs", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/methods/did-method.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/methods/did-dht.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/index.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/Encoder.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/ErrorCode.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/IonError.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/IonRequest.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/InputValidator.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/enums/OperationKeyType.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/IonSdkConfig.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/JsonCanonicalizer.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/Multihash.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/enums/OperationType.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/enums/PatchAction.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/IonDid.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/enums/IonNetwork.ts", "../../../node_modules/.pnpm/@decentralized-identity+ion-sdk@1.0.4/node_modules/@decentralized-identity/ion-sdk/lib/enums/IonPublicKeyPurpose.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/methods/did-ion.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/methods/did-jwk.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/methods/did-key.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/methods/did-web.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/resolver/resolver-cache-level.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/resolver/resolver-cache-noop.ts", "../../../node_modules/.pnpm/@web5+dids@1.1.3/node_modules/@web5/dids/src/resolver/universal-resolver.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/dwn.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/utils/abort.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/level-wrapper.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/blockstore-level.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/index.ts", "../../../node_modules/.pnpm/it-last@3.0.6/node_modules/it-last/src/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/index.ts", "../../../node_modules/.pnpm/@ipld+dag-cbor@9.0.5/node_modules/@ipld/dag-cbor/src/index.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/cborg.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/encode.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/is.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/token.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/bl.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/byte-utils.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/common.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/jump.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/0uint.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/1negint.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/2bytes.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/3string.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/4array.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/5map.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/6tag.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/7float.js", "../../../node_modules/.pnpm/cborg@4.2.3/node_modules/cborg/lib/decode.js", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/identity.js", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/dag-cbor.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/identity.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/utils/extract-data-from-block.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/utils/validate-offset-and-length.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/raw.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/utils/find-cid-in-shard.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/directory.ts", "../../../node_modules/.pnpm/it-filter@3.1.1/node_modules/it-filter/src/index.ts", "../../../node_modules/.pnpm/it-peekable@3.0.5/node_modules/it-peekable/src/index.ts", "../../../node_modules/.pnpm/it-map@3.1.1/node_modules/it-map/src/index.ts", "../../../node_modules/.pnpm/it-parallel@3.0.8/node_modules/it-parallel/src/index.ts", "../../../node_modules/.pnpm/p-defer@4.0.1/node_modules/p-defer/index.js", "../../../node_modules/.pnpm/it-pipe@3.0.1/node_modules/it-pipe/src/index.ts", "../../../node_modules/.pnpm/it-pushable@3.2.3/node_modules/it-pushable/src/index.ts", "../../../node_modules/.pnpm/it-pushable@3.2.3/node_modules/it-pushable/src/fifo.ts", "../../../node_modules/.pnpm/it-merge@3.0.5/node_modules/it-merge/src/index.ts", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/file.ts", "../../../node_modules/.pnpm/p-queue@7.4.1/node_modules/p-queue/dist/index.js", "../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs", "../../../node_modules/.pnpm/p-timeout@5.1.0/node_modules/p-timeout/index.js", "../../../node_modules/.pnpm/p-queue@7.4.1/node_modules/p-queue/dist/priority-queue.js", "../../../node_modules/.pnpm/p-queue@7.4.1/node_modules/p-queue/dist/lower-bound.js", "../../../node_modules/.pnpm/ipfs-unixfs-exporter@13.1.5/node_modules/ipfs-unixfs-exporter/src/resolvers/unixfs-v1/content/hamt-sharded-directory.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/data-store-level.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/index-level.ts", "../../../node_modules/.pnpm/ulidx@2.1.0/node_modules/ulidx/dist/browser/index.js", "../../../node_modules/.pnpm/layerr@2.1.0/node_modules/layerr/dist/index.js", "../../../node_modules/.pnpm/layerr@2.1.0/node_modules/layerr/dist/layerr.js", "../../../node_modules/.pnpm/layerr@2.1.0/node_modules/layerr/dist/error.js", "../../../node_modules/.pnpm/layerr@2.1.0/node_modules/layerr/dist/tools.js", "../../../node_modules/.pnpm/layerr@2.1.0/node_modules/layerr/dist/types.js", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/event-log/event-log-level.ts", "../../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/block.js", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/message-store-level.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/store/resumable-task-store-level.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/src/event-log/event-emitter-stream.ts", "../../../node_modules/.pnpm/@tbd54566975+dwn-sdk-js@0.5.1/node_modules/@tbd54566975/dwn-sdk-js/tests/utils/poller.ts", "../../dids/src/index.ts", "../../dids/src/types/did-core.ts", "../../dids/src/types/did-resolution.ts", "../../dids/src/did.ts", "../../dids/src/did-error.ts", "../../crypto/src/index.ts", "../../common/src/index.ts", "../../common/src/cache.ts", "../../common/src/type-utils.ts", "../../common/src/convert.ts", "../../common/src/logger.ts", "../../common/src/multicodec.ts", "../../common/src/object.ts", "../../common/src/stores.ts", "../../common/src/stream.ts", "../../common/src/stream-node.ts", "../../crypto/src/primitives/sha256.ts", "../../crypto/src/algorithms/crypto-algorithm.ts", "../../crypto/src/algorithms/sha-2.ts", "../../crypto/src/jose/utils.ts", "../../crypto/src/jose/jwk.ts", "../../crypto/src/primitives/secp256k1.ts", "../../crypto/src/primitives/secp256r1.ts", "../../crypto/src/algorithms/ecdsa.ts", "../../crypto/src/primitives/ed25519.ts", "../../crypto/src/algorithms/eddsa.ts", "../../crypto/src/local-key-manager.ts", "../../crypto/src/utils.ts", "../../crypto/src/primitives/aes-gcm.ts", "../../crypto/src/algorithms/aes-gcm.ts", "../../crypto/dist/esm/jose/jwe.js", "../../crypto/dist/esm/jose/jws.js", "../../crypto/dist/esm/jose/jwt.js", "../../crypto/src/primitives/x25519.ts", "../../dids/src/utils.ts", "../../dids/src/bearer-did.ts", "../../dids/src/methods/did-method.ts", "../../dids/src/methods/did-dht.ts", "../../dids/src/methods/did-ion.ts", "../../dids/src/methods/did-jwk.ts", "../../dids/src/methods/did-key.ts", "../../dids/src/methods/did-web.ts", "../../dids/src/resolver/resolver-cache-level.ts", "../../dids/src/resolver/resolver-cache-noop.ts", "../../dids/src/resolver/universal-resolver.ts", "../../agent/src/agent-did-resolver-cache.ts", "../../agent/src/bearer-identity.ts", "../../agent/src/prototyping/crypto/primitives/hkdf.ts", "../../agent/src/prototyping/crypto/algorithms/hkdf.ts", "../../agent/src/prototyping/crypto/crypto-error.ts", "../../agent/src/prototyping/crypto/algorithms/ecdsa.ts", "../../agent/src/prototyping/crypto/algorithms/eddsa.ts", "../../agent/src/prototyping/crypto/primitives/aes-kw.ts", "../../agent/src/prototyping/crypto/algorithms/aes-kw.ts", "../../agent/src/prototyping/crypto/primitives/pbkdf2.ts", "../../agent/src/prototyping/crypto/algorithms/pbkdf2.ts", "../../agent/src/prototyping/crypto/algorithms/aes-gcm.ts", "../../agent/src/crypto-api.ts", "../../agent/src/store-data-protocols.ts", "../../agent/src/prototyping/dids/utils.ts", "../../agent/src/utils-internal.ts", "../../agent/src/store-data.ts", "../../agent/src/store-did.ts", "../../agent/src/did-api.ts", "../../agent/src/utils.ts", "../../agent/src/dwn-api.ts", "../../../node_modules/.pnpm/ed25519-keygen@0.4.11/node_modules/ed25519-keygen/hdkey.js", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/ripemd160.ts", "../../../node_modules/.pnpm/@scure+bip39@1.2.2/node_modules/@scure/bip39/esm/wordlists/english.js", "../../../node_modules/.pnpm/@scure+bip39@1.2.2/node_modules/@scure/bip39/esm/index.js", "../../../node_modules/.pnpm/@noble+hashes@1.3.3/node_modules/@noble/hashes/src/pbkdf2.ts", "../../../node_modules/.pnpm/@scure+base@1.1.7/node_modules/@scure/base/index.ts", "../../agent/src/store-key.ts", "../../agent/src/local-key-manager.ts", "../../agent/src/prototyping/crypto/jose/jwe.ts", "../../agent/src/prototyping/crypto/utils.ts", "../../agent/src/prototyping/common/object.ts", "../../agent/src/prototyping/crypto/jose/jwe-flattened.ts", "../../agent/src/prototyping/crypto/jose/jwe-compact.ts", "../../agent/src/hd-identity-vault.ts", "../../agent/src/store-identity.ts", "../../agent/src/identity-api.ts", "../../agent/src/permissions-api.ts", "../../agent/src/prototyping/clients/json-rpc.ts", "../../agent/src/prototyping/clients/dwn-server-info-cache-memory.ts", "../../agent/src/prototyping/clients/http-dwn-rpc-client.ts", "../../../node_modules/.pnpm/isomorphic-ws@5.0.0_ws@8.18.0/node_modules/isomorphic-ws/browser.js", "../../agent/src/prototyping/clients/json-rpc-socket.ts", "../../agent/src/prototyping/clients/web-socket-clients.ts", "../../agent/src/rpc-client.ts", "../../agent/src/sync-api.ts", "../../agent/src/sync-engine-level.ts", "../../agent/src/test-harness.ts", "../../agent/src/prototyping/dids/resolver-cache-memory.ts"],
  "sourcesContent": ["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    var proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    var copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        Buffer.from(buf).copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (var i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n  var alphabet = '0123456789abcdef'\n  var table = new Array(256)\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n", "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", "var _globalThis = function (Object) {\n  function get() {\n    var _global = this || self;\n\n    delete Object.prototype.__magic__;\n    return _global;\n  }\n\n  if (typeof globalThis === \"object\") {\n    return globalThis;\n  }\n\n  if (this) {\n    return get();\n  } else {\n    Object.defineProperty(Object.prototype, \"__magic__\", {\n      configurable: true,\n      get: get\n    });\n    var _global = __magic__;\n    return _global;\n  }\n}(Object);\n\nimport { Buffer } from 'buffer';\nimport process from 'process';\nvar _global = _globalThis;\nexport { Buffer, process, _global as global };\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n", "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", "'use strict';\n\n/**\n * @typedef {{ [key: string]: any }} Extensions\n * @typedef {Error} Err\n * @property {string} message\n */\n\n/**\n *\n * @param {Error} obj\n * @param {Extensions} props\n * @returns {Error & Extensions}\n */\nfunction assign(obj, props) {\n    for (const key in props) {\n        Object.defineProperty(obj, key, {\n            value: props[key],\n            enumerable: true,\n            configurable: true,\n        });\n    }\n\n    return obj;\n}\n\n/**\n *\n * @param {any} err - An Error\n * @param {string|Extensions} code - A string code or props to set on the error\n * @param {Extensions} [props] - Props to set on the error\n * @returns {Error & Extensions}\n */\nfunction createError(err, code, props) {\n    if (!err || typeof err === 'string') {\n        throw new TypeError('Please pass an Error to err-code');\n    }\n\n    if (!props) {\n        props = {};\n    }\n\n    if (typeof code === 'object') {\n        props = code;\n        code = '';\n    }\n\n    if (code) {\n        props.code = code;\n    }\n\n    try {\n        return assign(err, props);\n    } catch (_) {\n        props.message = err.message;\n        props.stack = err.stack;\n\n        const ErrClass = function () {};\n\n        ErrClass.prototype = Object.create(Object.getPrototypeOf(err));\n\n        // @ts-ignore\n        const output = assign(new ErrClass(), props);\n\n        return output;\n    }\n}\n\nmodule.exports = createError;\n", "/* jshint -W086: true */\n// +----------------------------------------------------------------------+\n// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js\n// | A javascript implementation of MurmurHash3's x86 hashing algorithms. |\n// |----------------------------------------------------------------------|\n// | Copyright (c) 2012-2015 Karan Lyons                                       |\n// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js |\n// | Freely distributable under the MIT license.                          |\n// +----------------------------------------------------------------------+\n\n;(function (root, undefined) {\n    'use strict';\n\n    // Create a local object that'll be exported or referenced globally.\n    var library = {\n        'version': '3.0.0',\n        'x86': {},\n        'x64': {},\n        'inputValidation': true\n    };\n\n    // PRIVATE FUNCTIONS\n    // -----------------\n\n    function _validBytes(bytes) {\n        // check the input is an array or a typed array\n        if (!Array.isArray(bytes) && !ArrayBuffer.isView(bytes)) {\n            return false;\n        }\n\n        // check all bytes are actually bytes\n        for (var i = 0; i < bytes.length; i++) {\n            if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function _x86Multiply(m, n) {\n        //\n        // Given two 32bit ints, returns the two multiplied together as a\n        // 32bit int.\n        //\n\n        return ((m & 0xffff) * n) + ((((m >>> 16) * n) & 0xffff) << 16);\n    }\n\n    function _x86Rotl(m, n) {\n        //\n        // Given a 32bit int and an int representing a number of bit positions,\n        // returns the 32bit int rotated left by that number of positions.\n        //\n\n        return (m << n) | (m >>> (32 - n));\n    }\n\n    function _x86Fmix(h) {\n        //\n        // Given a block, returns murmurHash3's final x86 mix of that block.\n        //\n\n        h ^= h >>> 16;\n        h = _x86Multiply(h, 0x85ebca6b);\n        h ^= h >>> 13;\n        h = _x86Multiply(h, 0xc2b2ae35);\n        h ^= h >>> 16;\n\n        return h;\n    }\n\n    function _x64Add(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // added together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n        n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n        var o = [0, 0, 0, 0];\n\n        o[3] += m[3] + n[3];\n        o[2] += o[3] >>> 16;\n        o[3] &= 0xffff;\n\n        o[2] += m[2] + n[2];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[1] += m[1] + n[1];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[0] += m[0] + n[0];\n        o[0] &= 0xffff;\n\n        return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n    }\n\n    function _x64Multiply(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // multiplied together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n        n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n        var o = [0, 0, 0, 0];\n\n        o[3] += m[3] * n[3];\n        o[2] += o[3] >>> 16;\n        o[3] &= 0xffff;\n\n        o[2] += m[2] * n[3];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[2] += m[3] * n[2];\n        o[1] += o[2] >>> 16;\n        o[2] &= 0xffff;\n\n        o[1] += m[1] * n[3];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[1] += m[2] * n[2];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[1] += m[3] * n[1];\n        o[0] += o[1] >>> 16;\n        o[1] &= 0xffff;\n\n        o[0] += (m[0] * n[3]) + (m[1] * n[2]) + (m[2] * n[1]) + (m[3] * n[0]);\n        o[0] &= 0xffff;\n\n        return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n    }\n\n    function _x64Rotl(m, n) {\n        //\n        // Given a 64bit int (as an array of two 32bit ints) and an int\n        // representing a number of bit positions, returns the 64bit int (as an\n        // array of two 32bit ints) rotated left by that number of positions.\n        //\n\n        n %= 64;\n\n        if (n === 32) {\n            return [m[1], m[0]];\n        } else if (n < 32) {\n            return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\n        } else {\n            n -= 32;\n            return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\n        }\n    }\n\n    function _x64LeftShift(m, n) {\n        //\n        // Given a 64bit int (as an array of two 32bit ints) and an int\n        // representing a number of bit positions, returns the 64bit int (as an\n        // array of two 32bit ints) shifted left by that number of positions.\n        //\n\n        n %= 64;\n\n        if (n === 0) {\n            return m;\n        } else if (n < 32) {\n            return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\n        } else {\n            return [m[1] << (n - 32), 0];\n        }\n    }\n\n    function _x64Xor(m, n) {\n        //\n        // Given two 64bit ints (as an array of two 32bit ints) returns the two\n        // xored together as a 64bit int (as an array of two 32bit ints).\n        //\n\n        return [m[0] ^ n[0], m[1] ^ n[1]];\n    }\n\n    function _x64Fmix(h) {\n        //\n        // Given a block, returns murmurHash3's final x64 mix of that block.\n        // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\n        // only place where we need to right shift 64bit ints.)\n        //\n\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n        h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n        h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n        h = _x64Xor(h, [0, h[0] >>> 1]);\n\n        return h;\n    }\n\n    // PUBLIC FUNCTIONS\n    // ----------------\n\n    library.x86.hash32 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 32 bit hash\n        // using the x86 flavor of MurmurHash3, as an unsigned int.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n        seed = seed || 0;\n\n        var remainder = bytes.length % 4;\n        var blocks = bytes.length - remainder;\n\n        var h1 = seed;\n\n        var k1 = 0;\n\n        var c1 = 0xcc9e2d51;\n        var c2 = 0x1b873593;\n\n        for (var i = 0; i < blocks; i = i + 4) {\n            k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n\n            k1 = _x86Multiply(k1, c1);\n            k1 = _x86Rotl(k1, 15);\n            k1 = _x86Multiply(k1, c2);\n\n            h1 ^= k1;\n            h1 = _x86Rotl(h1, 13);\n            h1 = _x86Multiply(h1, 5) + 0xe6546b64;\n        }\n\n        k1 = 0;\n\n        switch (remainder) {\n            case 3:\n                k1 ^= bytes[i + 2] << 16;\n\n            case 2:\n                k1 ^= bytes[i + 1] << 8;\n\n            case 1:\n                k1 ^= bytes[i];\n                k1 = _x86Multiply(k1, c1);\n                k1 = _x86Rotl(k1, 15);\n                k1 = _x86Multiply(k1, c2);\n                h1 ^= k1;\n        }\n\n        h1 ^= bytes.length;\n        h1 = _x86Fmix(h1);\n\n        return h1 >>> 0;\n    };\n\n    library.x86.hash128 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 128 bit\n        // hash using the x86 flavor of MurmurHash3, as an unsigned hex.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n\n        seed = seed || 0;\n        var remainder = bytes.length % 16;\n        var blocks = bytes.length - remainder;\n\n        var h1 = seed;\n        var h2 = seed;\n        var h3 = seed;\n        var h4 = seed;\n\n        var k1 = 0;\n        var k2 = 0;\n        var k3 = 0;\n        var k4 = 0;\n\n        var c1 = 0x239b961b;\n        var c2 = 0xab0e9789;\n        var c3 = 0x38b34ae5;\n        var c4 = 0xa1e38b93;\n\n        for (var i = 0; i < blocks; i = i + 16) {\n            k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\n            k2 = (bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24);\n            k3 = (bytes[i + 8]) | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24);\n            k4 = (bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24);\n\n            k1 = _x86Multiply(k1, c1);\n            k1 = _x86Rotl(k1, 15);\n            k1 = _x86Multiply(k1, c2);\n            h1 ^= k1;\n\n            h1 = _x86Rotl(h1, 19);\n            h1 += h2;\n            h1 = _x86Multiply(h1, 5) + 0x561ccd1b;\n\n            k2 = _x86Multiply(k2, c2);\n            k2 = _x86Rotl(k2, 16);\n            k2 = _x86Multiply(k2, c3);\n            h2 ^= k2;\n\n            h2 = _x86Rotl(h2, 17);\n            h2 += h3;\n            h2 = _x86Multiply(h2, 5) + 0x0bcaa747;\n\n            k3 = _x86Multiply(k3, c3);\n            k3 = _x86Rotl(k3, 17);\n            k3 = _x86Multiply(k3, c4);\n            h3 ^= k3;\n\n            h3 = _x86Rotl(h3, 15);\n            h3 += h4;\n            h3 = _x86Multiply(h3, 5) + 0x96cd1c35;\n\n            k4 = _x86Multiply(k4, c4);\n            k4 = _x86Rotl(k4, 18);\n            k4 = _x86Multiply(k4, c1);\n            h4 ^= k4;\n\n            h4 = _x86Rotl(h4, 13);\n            h4 += h1;\n            h4 = _x86Multiply(h4, 5) + 0x32ac3b17;\n        }\n\n        k1 = 0;\n        k2 = 0;\n        k3 = 0;\n        k4 = 0;\n\n        switch (remainder) {\n            case 15:\n                k4 ^= bytes[i + 14] << 16;\n\n            case 14:\n                k4 ^= bytes[i + 13] << 8;\n\n            case 13:\n                k4 ^= bytes[i + 12];\n                k4 = _x86Multiply(k4, c4);\n                k4 = _x86Rotl(k4, 18);\n                k4 = _x86Multiply(k4, c1);\n                h4 ^= k4;\n\n            case 12:\n                k3 ^= bytes[i + 11] << 24;\n\n            case 11:\n                k3 ^= bytes[i + 10] << 16;\n\n            case 10:\n                k3 ^= bytes[i + 9] << 8;\n\n            case 9:\n                k3 ^= bytes[i + 8];\n                k3 = _x86Multiply(k3, c3);\n                k3 = _x86Rotl(k3, 17);\n                k3 = _x86Multiply(k3, c4);\n                h3 ^= k3;\n\n            case 8:\n                k2 ^= bytes[i + 7] << 24;\n\n            case 7:\n                k2 ^= bytes[i + 6] << 16;\n\n            case 6:\n                k2 ^= bytes[i + 5] << 8;\n\n            case 5:\n                k2 ^= bytes[i + 4];\n                k2 = _x86Multiply(k2, c2);\n                k2 = _x86Rotl(k2, 16);\n                k2 = _x86Multiply(k2, c3);\n                h2 ^= k2;\n\n            case 4:\n                k1 ^= bytes[i + 3] << 24;\n\n            case 3:\n                k1 ^= bytes[i + 2] << 16;\n\n            case 2:\n                k1 ^= bytes[i + 1] << 8;\n\n            case 1:\n                k1 ^= bytes[i];\n                k1 = _x86Multiply(k1, c1);\n                k1 = _x86Rotl(k1, 15);\n                k1 = _x86Multiply(k1, c2);\n                h1 ^= k1;\n        }\n\n        h1 ^= bytes.length;\n        h2 ^= bytes.length;\n        h3 ^= bytes.length;\n        h4 ^= bytes.length;\n\n        h1 += h2;\n        h1 += h3;\n        h1 += h4;\n        h2 += h1;\n        h3 += h1;\n        h4 += h1;\n\n        h1 = _x86Fmix(h1);\n        h2 = _x86Fmix(h2);\n        h3 = _x86Fmix(h3);\n        h4 = _x86Fmix(h4);\n\n        h1 += h2;\n        h1 += h3;\n        h1 += h4;\n        h2 += h1;\n        h3 += h1;\n        h4 += h1;\n\n        return (\"00000000\" + (h1 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h3 >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h4 >>> 0).toString(16)).slice(-8);\n    };\n\n    library.x64.hash128 = function (bytes, seed) {\n        //\n        // Given a string and an optional seed as an int, returns a 128 bit\n        // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\n        //\n        if (library.inputValidation && !_validBytes(bytes)) {\n            return undefined;\n        }\n        seed = seed || 0;\n\n        var remainder = bytes.length % 16;\n        var blocks = bytes.length - remainder;\n\n        var h1 = [0, seed];\n        var h2 = [0, seed];\n\n        var k1 = [0, 0];\n        var k2 = [0, 0];\n\n        var c1 = [0x87c37b91, 0x114253d5];\n        var c2 = [0x4cf5ad43, 0x2745937f];\n\n        for (var i = 0; i < blocks; i = i + 16) {\n            k1 = [(bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24), (bytes[i]) |\n                (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24)];\n            k2 = [(bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24), (bytes[i + 8]) |\n                (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24)];\n\n            k1 = _x64Multiply(k1, c1);\n            k1 = _x64Rotl(k1, 31);\n            k1 = _x64Multiply(k1, c2);\n            h1 = _x64Xor(h1, k1);\n\n            h1 = _x64Rotl(h1, 27);\n            h1 = _x64Add(h1, h2);\n            h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n\n            k2 = _x64Multiply(k2, c2);\n            k2 = _x64Rotl(k2, 33);\n            k2 = _x64Multiply(k2, c1);\n            h2 = _x64Xor(h2, k2);\n\n            h2 = _x64Rotl(h2, 31);\n            h2 = _x64Add(h2, h1);\n            h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n        }\n\n        k1 = [0, 0];\n        k2 = [0, 0];\n\n        switch (remainder) {\n            case 15:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 14]], 48));\n\n            case 14:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 13]], 40));\n\n            case 13:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 12]], 32));\n\n            case 12:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 11]], 24));\n\n            case 11:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 10]], 16));\n\n            case 10:\n                k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 9]], 8));\n\n            case 9:\n                k2 = _x64Xor(k2, [0, bytes[i + 8]]);\n                k2 = _x64Multiply(k2, c2);\n                k2 = _x64Rotl(k2, 33);\n                k2 = _x64Multiply(k2, c1);\n                h2 = _x64Xor(h2, k2);\n\n            case 8:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 7]], 56));\n\n            case 7:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 6]], 48));\n\n            case 6:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 5]], 40));\n\n            case 5:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 4]], 32));\n\n            case 4:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 3]], 24));\n\n            case 3:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 2]], 16));\n\n            case 2:\n                k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 1]], 8));\n\n            case 1:\n                k1 = _x64Xor(k1, [0, bytes[i]]);\n                k1 = _x64Multiply(k1, c1);\n                k1 = _x64Rotl(k1, 31);\n                k1 = _x64Multiply(k1, c2);\n                h1 = _x64Xor(h1, k1);\n        }\n\n        h1 = _x64Xor(h1, [0, bytes.length]);\n        h2 = _x64Xor(h2, [0, bytes.length]);\n\n        h1 = _x64Add(h1, h2);\n        h2 = _x64Add(h2, h1);\n\n        h1 = _x64Fmix(h1);\n        h2 = _x64Fmix(h2);\n\n        h1 = _x64Add(h1, h2);\n        h2 = _x64Add(h2, h1);\n\n        return (\"00000000\" + (h1[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h1[1] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[0] >>> 0).toString(16)).slice(-8) + (\"00000000\" + (h2[1] >>> 0).toString(16)).slice(-8);\n    };\n\n    // INITIALIZATION\n    // --------------\n\n    // Export murmurHash3 for CommonJS, either as an AMD module or just as part\n    // of the global object.\n    if (typeof exports !== 'undefined') {\n\n        if (typeof module !== 'undefined' && module.exports) {\n            exports = module.exports = library;\n        }\n\n        exports.murmurHash3 = library;\n\n    } else if (typeof define === 'function' && define.amd) {\n\n        define([], function () {\n            return library;\n        });\n    } else {\n\n        // Use murmurHash3.noConflict to restore `murmurHash3` back to its\n        // original value. Returns a reference to the library object, to allow\n        // it to be used under a different name.\n        library._murmurHash3 = root.murmurHash3;\n\n        library.noConflict = function () {\n            root.murmurHash3 = library._murmurHash3;\n            library._murmurHash3 = undefined;\n            library.noConflict = undefined;\n\n            return library;\n        };\n\n        root.murmurHash3 = library;\n    }\n})(this);\n", "module.exports = require('./lib/murmurHash3js');\n", "'use strict'\n\n// JS treats subjects of bitwise operators as SIGNED 32 bit numbers,\n// which means the maximum amount of bits we can store inside each byte\n// is 7..\nconst BITS_PER_BYTE = 7\n\nmodule.exports = class SparseArray {\n  constructor () {\n    this._bitArrays = []\n    this._data = []\n    this._length = 0\n    this._changedLength = false\n    this._changedData = false\n  }\n\n  set (index, value) {\n    let pos = this._internalPositionFor(index, false)\n    if (value === undefined) {\n      // unsetting\n      if (pos !== -1) {\n        // remove item from bit array and array itself\n        this._unsetInternalPos(pos)\n        this._unsetBit(index)\n        this._changedLength = true\n        this._changedData = true\n      }\n    } else {\n      let needsSort = false\n      if (pos === -1) {\n        pos = this._data.length\n        this._setBit(index)\n        this._changedData = true\n      } else {\n        needsSort = true\n      }\n      this._setInternalPos(pos, index, value, needsSort)\n      this._changedLength = true\n    }\n  }\n\n  unset (index) {\n    this.set(index, undefined)\n  }\n\n  get (index) {\n    this._sortData()\n    const pos = this._internalPositionFor(index, true)\n    if (pos === -1) {\n      return undefined\n    }\n    return this._data[pos][1]\n  }\n\n  push (value) {\n    this.set(this.length, value)\n    return this.length\n  }\n\n  get length () {\n    this._sortData()\n    if (this._changedLength) {\n      const last = this._data[this._data.length - 1]\n      this._length = last ? last[0] + 1 : 0\n      this._changedLength = false\n    }\n    return this._length\n  }\n\n  forEach (iterator) {\n    let i = 0\n    while(i < this.length) {\n      iterator(this.get(i), i, this)\n      i++\n    }\n  }\n\n  map (iterator) {\n    let i = 0\n    let mapped = new Array(this.length)\n    while(i < this.length) {\n      mapped[i] = iterator(this.get(i), i, this)\n      i++\n    }\n    return mapped\n  }\n\n  reduce (reducer, initialValue) {\n    let i = 0\n    let acc = initialValue\n    while(i < this.length) {\n      const value = this.get(i)\n      acc = reducer(acc, value, i)\n      i++\n    }\n    return acc\n  }\n\n  find (finder) {\n    let i = 0, found, last\n    while ((i < this.length) && !found) {\n      last = this.get(i)\n      found = finder(last)\n      i++\n    }\n    return found ? last : undefined\n  }\n\n  _internalPositionFor (index, noCreate) {\n    const bytePos = this._bytePosFor(index, noCreate)\n    if (bytePos >= this._bitArrays.length) {\n      return -1\n    }\n    const byte = this._bitArrays[bytePos]\n    const bitPos = index - bytePos * BITS_PER_BYTE\n    const exists = (byte & (1 << bitPos)) > 0\n    if (!exists) {\n      return -1\n    }\n    const previousPopCount = this._bitArrays.slice(0, bytePos).reduce(popCountReduce, 0)\n\n    const mask = ~(0xffffffff << (bitPos + 1))\n    const bytePopCount = popCount(byte & mask)\n    const arrayPos = previousPopCount + bytePopCount - 1\n    return arrayPos\n  }\n\n  _bytePosFor (index, noCreate) {\n    const bytePos = Math.floor(index / BITS_PER_BYTE)\n    const targetLength = bytePos + 1\n    while (!noCreate && this._bitArrays.length < targetLength) {\n      this._bitArrays.push(0)\n    }\n    return bytePos\n  }\n\n  _setBit (index) {\n    const bytePos = this._bytePosFor(index, false)\n    this._bitArrays[bytePos] |= (1 << (index - (bytePos * BITS_PER_BYTE)))\n  }\n\n  _unsetBit(index) {\n    const bytePos = this._bytePosFor(index, false)\n    this._bitArrays[bytePos] &= ~(1 << (index - (bytePos * BITS_PER_BYTE)))\n  }\n\n  _setInternalPos(pos, index, value, needsSort) {\n    const data =this._data\n    const elem = [index, value]\n    if (needsSort) {\n      this._sortData()\n      data[pos] = elem\n    } else {\n      // new element. just shove it into the array\n      // but be nice about where we shove it\n      // in order to make sorting it later easier\n      if (data.length) {\n        if (data[data.length - 1][0] >= index) {\n          data.push(elem)\n        } else if (data[0][0] <= index) {\n          data.unshift(elem)\n        } else {\n          const randomIndex = Math.round(data.length / 2)\n          this._data = data.slice(0, randomIndex).concat(elem).concat(data.slice(randomIndex))\n        }\n      } else {\n        this._data.push(elem)\n      }\n      this._changedData = true\n      this._changedLength = true\n    }\n  }\n\n  _unsetInternalPos (pos) {\n    this._data.splice(pos, 1)\n  }\n\n  _sortData () {\n    if (this._changedData) {\n      this._data.sort(sortInternal)\n    }\n\n    this._changedData = false\n  }\n\n  bitField () {\n    const bytes = []\n    let pendingBitsForResultingByte = 8\n    let pendingBitsForNewByte = 0\n    let resultingByte = 0\n    let newByte\n    const pending = this._bitArrays.slice()\n    while (pending.length || pendingBitsForNewByte) {\n      if (pendingBitsForNewByte === 0) {\n        newByte = pending.shift()\n        pendingBitsForNewByte = 7\n      }\n\n      const usingBits = Math.min(pendingBitsForNewByte, pendingBitsForResultingByte)\n      const mask = ~(0b11111111 << usingBits)\n      const masked = newByte & mask\n      resultingByte |= masked << (8 - pendingBitsForResultingByte)\n      newByte = newByte >>> usingBits\n      pendingBitsForNewByte -= usingBits\n      pendingBitsForResultingByte -= usingBits\n\n      if (!pendingBitsForResultingByte || (!pendingBitsForNewByte && !pending.length)) {\n        bytes.push(resultingByte)\n        resultingByte = 0\n        pendingBitsForResultingByte = 8\n      }\n    }\n\n    // remove trailing zeroes\n    for(var i = bytes.length - 1; i > 0; i--) {\n      const value = bytes[i]\n      if (value === 0) {\n        bytes.pop()\n      } else {\n        break\n      }\n    }\n\n    return bytes\n  }\n\n  compactArray () {\n    this._sortData()\n    return this._data.map(valueOnly)\n  }\n}\n\nfunction popCountReduce (count, byte) {\n  return count + popCount(byte)\n}\n\nfunction popCount(_v) {\n  let v = _v\n  v = v - ((v >> 1) & 0x55555555)                    // reuse input as temporary\n  v = (v & 0x33333333) + ((v >> 2) & 0x33333333)     // temp\n  return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24\n}\n\nfunction sortInternal (a, b) {\n  return a[0] - b[0]\n}\n\nfunction valueOnly (elem) {\n  return elem[1]\n}", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n  var bytes = Buffer.allocUnsafe(size)\n\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n      }\n    } else {\n      crypto.getRandomValues(bytes)\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n", "if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n", "module.exports = require('events').EventEmitter;\n", "'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n  Buffer = _require.Buffer;\nvar _require2 = require('util'),\n  inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n  Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n  _createClass(BufferList, [{\n    key: \"push\",\n    value: function push(v) {\n      var entry = {\n        data: v,\n        next: null\n      };\n      if (this.length > 0) this.tail.next = entry;else this.head = entry;\n      this.tail = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"unshift\",\n    value: function unshift(v) {\n      var entry = {\n        data: v,\n        next: this.head\n      };\n      if (this.length === 0) this.tail = entry;\n      this.head = entry;\n      ++this.length;\n    }\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.length === 0) return;\n      var ret = this.head.data;\n      if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n      --this.length;\n      return ret;\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.head = this.tail = null;\n      this.length = 0;\n    }\n  }, {\n    key: \"join\",\n    value: function join(s) {\n      if (this.length === 0) return '';\n      var p = this.head;\n      var ret = '' + p.data;\n      while (p = p.next) ret += s + p.data;\n      return ret;\n    }\n  }, {\n    key: \"concat\",\n    value: function concat(n) {\n      if (this.length === 0) return Buffer.alloc(0);\n      var ret = Buffer.allocUnsafe(n >>> 0);\n      var p = this.head;\n      var i = 0;\n      while (p) {\n        copyBuffer(p.data, ret, i);\n        i += p.data.length;\n        p = p.next;\n      }\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes or characters from the buffered data.\n  }, {\n    key: \"consume\",\n    value: function consume(n, hasStrings) {\n      var ret;\n      if (n < this.head.data.length) {\n        // `slice` is the same for buffers and strings.\n        ret = this.head.data.slice(0, n);\n        this.head.data = this.head.data.slice(n);\n      } else if (n === this.head.data.length) {\n        // First chunk is a perfect match.\n        ret = this.shift();\n      } else {\n        // Result spans more than one buffer.\n        ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n      }\n      return ret;\n    }\n  }, {\n    key: \"first\",\n    value: function first() {\n      return this.head.data;\n    }\n\n    // Consumes a specified amount of characters from the buffered data.\n  }, {\n    key: \"_getString\",\n    value: function _getString(n) {\n      var p = this.head;\n      var c = 1;\n      var ret = p.data;\n      n -= ret.length;\n      while (p = p.next) {\n        var str = p.data;\n        var nb = n > str.length ? str.length : n;\n        if (nb === str.length) ret += str;else ret += str.slice(0, n);\n        n -= nb;\n        if (n === 0) {\n          if (nb === str.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = str.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Consumes a specified amount of bytes from the buffered data.\n  }, {\n    key: \"_getBuffer\",\n    value: function _getBuffer(n) {\n      var ret = Buffer.allocUnsafe(n);\n      var p = this.head;\n      var c = 1;\n      p.data.copy(ret);\n      n -= p.data.length;\n      while (p = p.next) {\n        var buf = p.data;\n        var nb = n > buf.length ? buf.length : n;\n        buf.copy(ret, ret.length - n, 0, nb);\n        n -= nb;\n        if (n === 0) {\n          if (nb === buf.length) {\n            ++c;\n            if (p.next) this.head = p.next;else this.head = this.tail = null;\n          } else {\n            this.head = p;\n            p.data = buf.slice(nb);\n          }\n          break;\n        }\n        ++c;\n      }\n      this.length -= c;\n      return ret;\n    }\n\n    // Make sure the linked list only shows the minimal necessary information.\n  }, {\n    key: custom,\n    value: function value(_, options) {\n      return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n        // Only inspect one level.\n        depth: 0,\n        // It should not recurse.\n        customInspect: false\n      }));\n    }\n  }]);\n  return BufferList;\n}();", "'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        process.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorNT, this, err);\n      }\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        process.nextTick(emitErrorAndCloseNT, _this, err);\n      } else {\n        process.nextTick(emitCloseNT, _this);\n      }\n    } else if (cb) {\n      process.nextTick(emitCloseNT, _this);\n      cb(err);\n    } else {\n      process.nextTick(emitCloseNT, _this);\n    }\n  });\n  return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n  emitErrorNT(self, err);\n  emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n  if (self._writableState && !self._writableState.emitClose) return;\n  if (self._readableState && !self._readableState.emitClose) return;\n  self.emit('close');\n}\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  var rState = stream._readableState;\n  var wState = stream._writableState;\n  if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy,\n  errorOrDestroy: errorOrDestroy\n};", "'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n  if (!Base) {\n    Base = Error;\n  }\n\n  function getMessage(arg1, arg2, arg3) {\n    if (typeof message === 'string') {\n      return message;\n    } else {\n      return message(arg1, arg2, arg3);\n    }\n  }\n\n  var NodeError =\n  /*#__PURE__*/\n  function (_Base) {\n    _inheritsLoose(NodeError, _Base);\n\n    function NodeError(arg1, arg2, arg3) {\n      return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n    }\n\n    return NodeError;\n  }(Base);\n\n  NodeError.prototype.name = Base.name;\n  NodeError.prototype.code = code;\n  codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n  if (Array.isArray(expected)) {\n    var len = expected.length;\n    expected = expected.map(function (i) {\n      return String(i);\n    });\n\n    if (len > 2) {\n      return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n    } else if (len === 2) {\n      return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n    } else {\n      return \"of \".concat(thing, \" \").concat(expected[0]);\n    }\n  } else {\n    return \"of \".concat(thing, \" \").concat(String(expected));\n  }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n  return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n  if (this_len === undefined || this_len > str.length) {\n    this_len = str.length;\n  }\n\n  return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n  if (typeof start !== 'number') {\n    start = 0;\n  }\n\n  if (start + search.length > str.length) {\n    return false;\n  } else {\n    return str.indexOf(search, start) !== -1;\n  }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n  return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n  // determiner: 'must be' or 'must not be'\n  var determiner;\n\n  if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n    determiner = 'must not be';\n    expected = expected.replace(/^not /, '');\n  } else {\n    determiner = 'must be';\n  }\n\n  var msg;\n\n  if (endsWith(name, ' argument')) {\n    // For cases like 'first argument'\n    msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  } else {\n    var type = includes(name, '.') ? 'property' : 'argument';\n    msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n  }\n\n  msg += \". Received type \".concat(typeof actual);\n  return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n  return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n  return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n  return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n", "'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n  if (hwm != null) {\n    if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n      var name = isDuplex ? duplexKey : 'highWaterMark';\n      throw new ERR_INVALID_OPT_VALUE(name, hwm);\n    }\n    return Math.floor(hwm);\n  }\n\n  // Default value\n  return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n  getHighWaterMark: getHighWaterMark\n};", "\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n  ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'finish' (and potentially 'end')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function writableStateBufferGetter() {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n  this._writableState = new WritableState(options, this, isDuplex);\n\n  // legacy.\n  this.writable = true;\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n  var er = new ERR_STREAM_WRITE_AFTER_END();\n  // TODO: defer error events consistently everywhere, not just the cb\n  errorOrDestroy(stream, er);\n  process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var er;\n  if (chunk === null) {\n    er = new ERR_STREAM_NULL_VALUES();\n  } else if (typeof chunk !== 'string' && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n  }\n  if (er) {\n    errorOrDestroy(stream, er);\n    process.nextTick(cb, er);\n    return false;\n  }\n  return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\nWritable.prototype.cork = function () {\n  this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n  return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    process.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    process.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    errorOrDestroy(stream, er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state) || stream.destroyed;\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n    if (sync) {\n      process.nextTick(afterWrite, stream, state, finished, cb);\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n  return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      errorOrDestroy(stream, err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.pendingcb++;\n      state.finalCalled = true;\n      process.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n      if (state.autoDestroy) {\n        // In case of duplex streams we need a way to detect\n        // if the readable side is ready for autoDestroy as well\n        var rState = stream._readableState;\n        if (!rState || rState.autoDestroy && rState.endEmitted) {\n          stream.destroy();\n        }\n      }\n    }\n  }\n  return need;\n}\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n  // Allow the keys array to be GC'ed.\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  this.allowHalfOpen = true;\n  if (options) {\n    if (options.readable === false) this.readable = false;\n    if (options.writable === false) this.writable = false;\n    if (options.allowHalfOpen === false) {\n      this.allowHalfOpen = false;\n      this.once('end', onend);\n    }\n  }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState && this._writableState.getBuffer();\n  }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.length;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // If the writable side ended, then we're ok.\n  if (this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n  self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    callback.apply(this, args);\n  };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n  if (typeof opts === 'function') return eos(stream, null, opts);\n  if (!opts) opts = {};\n  callback = once(callback || noop);\n  var readable = opts.readable || opts.readable !== false && stream.readable;\n  var writable = opts.writable || opts.writable !== false && stream.writable;\n  var onlegacyfinish = function onlegacyfinish() {\n    if (!stream.writable) onfinish();\n  };\n  var writableEnded = stream._writableState && stream._writableState.finished;\n  var onfinish = function onfinish() {\n    writable = false;\n    writableEnded = true;\n    if (!readable) callback.call(stream);\n  };\n  var readableEnded = stream._readableState && stream._readableState.endEmitted;\n  var onend = function onend() {\n    readable = false;\n    readableEnded = true;\n    if (!writable) callback.call(stream);\n  };\n  var onerror = function onerror(err) {\n    callback.call(stream, err);\n  };\n  var onclose = function onclose() {\n    var err;\n    if (readable && !readableEnded) {\n      if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n    if (writable && !writableEnded) {\n      if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n      return callback.call(stream, err);\n    }\n  };\n  var onrequest = function onrequest() {\n    stream.req.on('finish', onfinish);\n  };\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish);\n    stream.on('abort', onclose);\n    if (stream.req) onrequest();else stream.on('request', onrequest);\n  } else if (writable && !stream._writableState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish);\n    stream.on('close', onlegacyfinish);\n  }\n  stream.on('end', onend);\n  stream.on('finish', onfinish);\n  if (opts.error !== false) stream.on('error', onerror);\n  stream.on('close', onclose);\n  return function () {\n    stream.removeListener('complete', onfinish);\n    stream.removeListener('abort', onclose);\n    stream.removeListener('request', onrequest);\n    if (stream.req) stream.req.removeListener('finish', onfinish);\n    stream.removeListener('end', onlegacyfinish);\n    stream.removeListener('close', onlegacyfinish);\n    stream.removeListener('finish', onfinish);\n    stream.removeListener('end', onend);\n    stream.removeListener('error', onerror);\n    stream.removeListener('close', onclose);\n  };\n}\nmodule.exports = eos;", "'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n  return {\n    value: value,\n    done: done\n  };\n}\nfunction readAndResolve(iter) {\n  var resolve = iter[kLastResolve];\n  if (resolve !== null) {\n    var data = iter[kStream].read();\n    // we defer if data is null\n    // we can be expecting either 'end' or\n    // 'error'\n    if (data !== null) {\n      iter[kLastPromise] = null;\n      iter[kLastResolve] = null;\n      iter[kLastReject] = null;\n      resolve(createIterResult(data, false));\n    }\n  }\n}\nfunction onReadable(iter) {\n  // we wait for the next tick, because it might\n  // emit an error with process.nextTick\n  process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n  return function (resolve, reject) {\n    lastPromise.then(function () {\n      if (iter[kEnded]) {\n        resolve(createIterResult(undefined, true));\n        return;\n      }\n      iter[kHandlePromise](resolve, reject);\n    }, reject);\n  };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n  get stream() {\n    return this[kStream];\n  },\n  next: function next() {\n    var _this = this;\n    // if we have detected an error in the meanwhile\n    // reject straight away\n    var error = this[kError];\n    if (error !== null) {\n      return Promise.reject(error);\n    }\n    if (this[kEnded]) {\n      return Promise.resolve(createIterResult(undefined, true));\n    }\n    if (this[kStream].destroyed) {\n      // We need to defer via nextTick because if .destroy(err) is\n      // called, the error will be emitted via nextTick, and\n      // we cannot guarantee that there is no error lingering around\n      // waiting to be emitted.\n      return new Promise(function (resolve, reject) {\n        process.nextTick(function () {\n          if (_this[kError]) {\n            reject(_this[kError]);\n          } else {\n            resolve(createIterResult(undefined, true));\n          }\n        });\n      });\n    }\n\n    // if we have multiple next() calls\n    // we will wait for the previous Promise to finish\n    // this logic is optimized to support for await loops,\n    // where next() is only called once at a time\n    var lastPromise = this[kLastPromise];\n    var promise;\n    if (lastPromise) {\n      promise = new Promise(wrapForNext(lastPromise, this));\n    } else {\n      // fast path needed to support multiple this.push()\n      // without triggering the next() queue\n      var data = this[kStream].read();\n      if (data !== null) {\n        return Promise.resolve(createIterResult(data, false));\n      }\n      promise = new Promise(this[kHandlePromise]);\n    }\n    this[kLastPromise] = promise;\n    return promise;\n  }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n  return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n  var _this2 = this;\n  // destroy(err, cb) is a private API\n  // we can guarantee we have that here, because we control the\n  // Readable class this is attached to\n  return new Promise(function (resolve, reject) {\n    _this2[kStream].destroy(null, function (err) {\n      if (err) {\n        reject(err);\n        return;\n      }\n      resolve(createIterResult(undefined, true));\n    });\n  });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n  var _Object$create;\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n    value: stream,\n    writable: true\n  }), _defineProperty(_Object$create, kLastResolve, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kLastReject, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kError, {\n    value: null,\n    writable: true\n  }), _defineProperty(_Object$create, kEnded, {\n    value: stream._readableState.endEmitted,\n    writable: true\n  }), _defineProperty(_Object$create, kHandlePromise, {\n    value: function value(resolve, reject) {\n      var data = iterator[kStream].read();\n      if (data) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        resolve(createIterResult(data, false));\n      } else {\n        iterator[kLastResolve] = resolve;\n        iterator[kLastReject] = reject;\n      }\n    },\n    writable: true\n  }), _Object$create));\n  iterator[kLastPromise] = null;\n  finished(stream, function (err) {\n    if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n      var reject = iterator[kLastReject];\n      // reject if we are waiting for data in the Promise\n      // returned by next() and store the error\n      if (reject !== null) {\n        iterator[kLastPromise] = null;\n        iterator[kLastResolve] = null;\n        iterator[kLastReject] = null;\n        reject(err);\n      }\n      iterator[kError] = err;\n      return;\n    }\n    var resolve = iterator[kLastResolve];\n    if (resolve !== null) {\n      iterator[kLastPromise] = null;\n      iterator[kLastResolve] = null;\n      iterator[kLastReject] = null;\n      resolve(createIterResult(undefined, true));\n    }\n    iterator[kEnded] = true;\n  });\n  stream.on('readable', onReadable.bind(null, iterator));\n  return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;", "module.exports = function () {\n  throw new Error('Readable.from is not available in the browser')\n};\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n  getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n  ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n  ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n  this.paused = true;\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = options.emitClose !== false;\n\n  // Should .destroy() be called after 'end' (and potentially 'finish')\n  this.autoDestroy = !!options.autoDestroy;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5\n  var isDuplex = this instanceof Duplex;\n  this._readableState = new ReadableState(options, this, isDuplex);\n\n  // legacy\n  this.readable = true;\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n  Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  debug('readableAddChunk', chunk);\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      errorOrDestroy(stream, er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n      if (addToFront) {\n        if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n      } else if (state.destroyed) {\n        return false;\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n      maybeReadMore(stream, state);\n    }\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    state.awaitDrain = 0;\n    stream.emit('data', chunk);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n  }\n  return er;\n}\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  var decoder = new StringDecoder(enc);\n  this._readableState.decoder = decoder;\n  // If setEncoding(null), decoder.encoding equals utf8\n  this._readableState.encoding = this._readableState.decoder.encoding;\n\n  // Iterate over current buffer to convert already stored Buffers:\n  var p = this._readableState.buffer.head;\n  var content = '';\n  while (p !== null) {\n    content += decoder.write(p.data);\n    p = p.next;\n  }\n  this._readableState.buffer.clear();\n  if (content !== '') this._readableState.buffer.push(content);\n  this._readableState.length = content.length;\n  return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark;\n    n = 0;\n  } else {\n    state.length -= n;\n    state.awaitDrain = 0;\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk');\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n  if (state.sync) {\n    // if we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call\n    emitReadable(stream);\n  } else {\n    // emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false;\n    if (!state.emittedReadable) {\n      state.emittedReadable = true;\n      emitReadable_(stream);\n    }\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  debug('emitReadable', state.needReadable, state.emittedReadable);\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    process.nextTick(emitReadable_, stream);\n  }\n}\nfunction emitReadable_(stream) {\n  var state = stream._readableState;\n  debug('emitReadable_', state.destroyed, state.length, state.ended);\n  if (!state.destroyed && (state.length || state.ended)) {\n    stream.emit('readable');\n    state.emittedReadable = false;\n  }\n\n  // The stream needs another readable event if\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    process.nextTick(maybeReadMore_, stream, state);\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n    var len = state.length;\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    var ret = dest.write(chunk);\n    debug('dest.write', ret);\n    if (ret === false) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n  return dest;\n};\nfunction pipeOnDrain(src) {\n  return function pipeOnDrainFunctionResult() {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n      hasUnpiped: false\n    });\n    return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n  var state = this._readableState;\n  if (ev === 'data') {\n    // update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0;\n\n    // Try start flowing on next tick if stream isn't explicitly paused\n    if (state.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.flowing = false;\n      state.emittedReadable = false;\n      debug('on readable', state.length, state.reading);\n      if (state.length) {\n        emitReadable(this);\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this);\n      }\n    }\n  }\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n  var res = Stream.prototype.removeListener.call(this, ev, fn);\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n  var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this);\n  }\n  return res;\n};\nfunction updateReadableListening(self) {\n  var state = self._readableState;\n  state.readableListening = self.listenerCount('readable') > 0;\n  if (state.resumeScheduled && !state.paused) {\n    // flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true;\n\n    // crude way to check if we should resume\n  } else if (self.listenerCount('data') > 0) {\n    self.resume();\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    // we flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume()\n    state.flowing = !state.readableListening;\n    resume(this, state);\n  }\n  state.paused = false;\n  return this;\n};\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    process.nextTick(resume_, stream, state);\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading);\n  if (!state.reading) {\n    stream.read(0);\n  }\n  state.resumeScheduled = false;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (this._readableState.flowing !== false) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  this._readableState.paused = true;\n  return this;\n};\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function methodWrap(method) {\n        return function methodWrapReturnFunction() {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n  return this;\n};\nif (typeof Symbol === 'function') {\n  Readable.prototype[Symbol.asyncIterator] = function () {\n    if (createReadableStreamAsyncIterator === undefined) {\n      createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n    }\n    return createReadableStreamAsyncIterator(this);\n  };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState && this._readableState.buffer;\n  }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.flowing;\n  },\n  set: function set(state) {\n    if (this._readableState) {\n      this._readableState.flowing = state;\n    }\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.length;\n  }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = state.buffer.consume(n, state.decoder);\n  }\n  return ret;\n}\nfunction endReadable(stream) {\n  var state = stream._readableState;\n  debug('endReadable', state.endEmitted);\n  if (!state.endEmitted) {\n    state.ended = true;\n    process.nextTick(endReadableNT, state, stream);\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length);\n\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n    if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well\n      var wState = stream._writableState;\n      if (!wState || wState.autoDestroy && wState.finished) {\n        stream.destroy();\n      }\n    }\n  }\n}\nif (typeof Symbol === 'function') {\n  Readable.from = function (iterable, opts) {\n    if (from === undefined) {\n      from = require('./internal/streams/from');\n    }\n    return from(Readable, iterable, opts);\n  };\n}\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n  ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n  ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n  ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n  if (cb === null) {\n    return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n  }\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n  var _this = this;\n  if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n  if (ts.writechunk !== null && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\nTransform.prototype._destroy = function (err, cb) {\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n  });\n};\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null)\n    // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // TODO(BridgeAR): Write a test for these two error cases\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n  if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n  var called = false;\n  return function () {\n    if (called) return;\n    called = true;\n    callback.apply(void 0, arguments);\n  };\n}\nvar _require$codes = require('../../../errors').codes,\n  ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n  ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n  // Rethrow the error if it exists to avoid swallowing it\n  if (err) throw err;\n}\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n  callback = once(callback);\n  var closed = false;\n  stream.on('close', function () {\n    closed = true;\n  });\n  if (eos === undefined) eos = require('./end-of-stream');\n  eos(stream, {\n    readable: reading,\n    writable: writing\n  }, function (err) {\n    if (err) return callback(err);\n    closed = true;\n    callback();\n  });\n  var destroyed = false;\n  return function (err) {\n    if (closed) return;\n    if (destroyed) return;\n    destroyed = true;\n\n    // request.destroy just do .end - .abort is what we want\n    if (isRequest(stream)) return stream.abort();\n    if (typeof stream.destroy === 'function') return stream.destroy();\n    callback(err || new ERR_STREAM_DESTROYED('pipe'));\n  };\n}\nfunction call(fn) {\n  fn();\n}\nfunction pipe(from, to) {\n  return from.pipe(to);\n}\nfunction popCallback(streams) {\n  if (!streams.length) return noop;\n  if (typeof streams[streams.length - 1] !== 'function') return noop;\n  return streams.pop();\n}\nfunction pipeline() {\n  for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n    streams[_key] = arguments[_key];\n  }\n  var callback = popCallback(streams);\n  if (Array.isArray(streams[0])) streams = streams[0];\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams');\n  }\n  var error;\n  var destroys = streams.map(function (stream, i) {\n    var reading = i < streams.length - 1;\n    var writing = i > 0;\n    return destroyer(stream, reading, writing, function (err) {\n      if (!error) error = err;\n      if (err) destroys.forEach(call);\n      if (reading) return;\n      destroys.forEach(call);\n      callback(error);\n    });\n  });\n  return streams.reduce(pipe);\n}\nmodule.exports = pipeline;", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n", "'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n  if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n    throw new TypeError(prefix + ' must be a string or a buffer')\n  }\n}\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  throwIfNotStringOrBuffer(data, 'Data')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n", "'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n  var M = ARRAY16\n  for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n  var a = this._a\n  var b = this._b\n  var c = this._c\n  var d = this._d\n\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n  this._a = (this._a + a) | 0\n  this._b = (this._b + b) | 0\n  this._c = (this._c + c) | 0\n  this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n  return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n", "'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n", "var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n", "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n", "/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n", "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n", "/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n", "var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n", "var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n", "var exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n", "var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n", "'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n", "'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n", "var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n", "'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n", "{\n  \"sha224WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"RSA-SHA224\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"sha256WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"RSA-SHA256\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"sha384WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"RSA-SHA384\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"sha512WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA512\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA1\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"3021300906052b0e03021a05000414\"\n  },\n  \"ecdsa-with-SHA1\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"sha256\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"sha224\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"sha384\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"sha512\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA1\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-RIPEMD160\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"\"\n  },\n  \"ripemd160WithRSA\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"RSA-RIPEMD160\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"md5WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  },\n  \"RSA-MD5\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  }\n}\n", "'use strict';\n\nmodule.exports = require('./browser/algorithms.json');\n", "var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n", "var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n  defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n  defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n", "var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n  if (Buffer.isBuffer(thing)) {\n    return thing\n  } else if (typeof thing === 'string') {\n    return Buffer.from(thing, encoding)\n  } else if (ArrayBuffer.isView(thing)) {\n    return Buffer.from(thing.buffer)\n  } else {\n    throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n  }\n}\n", "var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n  function rmd160Func (data) {\n    return new RIPEMD160().update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n", "var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  sha: 'SHA-1',\n  'sha-1': 'SHA-1',\n  sha1: 'SHA-1',\n  sha256: 'SHA-256',\n  'sha-256': 'SHA-256',\n  sha384: 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\nvar nextTick\nfunction getNextTick () {\n  if (nextTick) {\n    return nextTick\n  }\n  if (global.process && global.process.nextTick) {\n    nextTick = global.process.nextTick\n  } else if (global.queueMicrotask) {\n    nextTick = global.queueMicrotask\n  } else if (global.setImmediate) {\n    nextTick = global.setImmediate\n  } else {\n    nextTick = global.setTimeout\n  }\n  return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\n\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    getNextTick()(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    getNextTick()(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n\n  if (!algo || typeof global.Promise !== 'function') {\n    getNextTick()(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n    return\n  }\n\n  checkParameters(iterations, keylen)\n  password = toBuffer(password, defaultEncoding, 'Password')\n  salt = toBuffer(salt, defaultEncoding, 'Salt')\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n    return sync(password, salt, iterations, keylen, digest)\n  }), callback)\n}\n", "exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n", "'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n", "module.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n  this.padding = options.padding !== false\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  if (this.padding === false) {\n    return false;\n  }\n\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  if (this.padding === false) {\n    return buffer;\n  }\n\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n", "'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n", "var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n", "exports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n", "module.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n", "var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n", "var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n", "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n", "var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n", "var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n", "function incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n", "var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n", "{\n  \"aes-128-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-192-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-256-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-192-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-256-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes128\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes192\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes256\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-192-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-256-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  }\n}\n", "var modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n", "// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n", "var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho V\u00E4h\u00E4-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n", "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n", "var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n", "var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n", "var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n", "var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n", "var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", "exports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n", "var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "var r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n", "var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8);\n\n  // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n  do\n    var a = new bn(this.rand.generate(min_bytes));\n  while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n", "var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n", "{\n    \"modp1\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n    },\n    \"modp2\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n    },\n    \"modp5\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n    },\n    \"modp14\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n    },\n    \"modp15\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n    },\n    \"modp16\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n    },\n    \"modp17\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n    },\n    \"modp18\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n    }\n}", "var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n", "var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n", "'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n", "module.exports = require('events').EventEmitter;\n", "/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n", "'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}", "'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};", "exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n", "(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this._strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // '0' - '9'\n    if (c >= 48 && c <= 57) {\n      return c - 48;\n    // 'A' - 'F'\n    } else if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    } else {\n      assert(false, 'Invalid character in ' + string);\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this._strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var b = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        b = c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        b = c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        b = c;\n      }\n      assert(c >= 0 && b < mul, 'Invalid character');\n      r += b;\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this._strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  function move (dest, src) {\n    dest.words = src.words;\n    dest.length = src.length;\n    dest.negative = src.negative;\n    dest.red = src.red;\n  }\n\n  BN.prototype._move = function _move (dest) {\n    move(dest, this);\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype._strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  // Check Symbol.for because not everywhere where Symbol defined\n  // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n  if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n    try {\n      BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n    } catch (e) {\n      BN.prototype.inspect = inspect;\n    }\n  } else {\n    BN.prototype.inspect = inspect;\n  }\n\n  function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  }\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modrn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16, 2);\n  };\n\n  if (Buffer) {\n    BN.prototype.toBuffer = function toBuffer (endian, length) {\n      return this.toArrayLike(Buffer, endian, length);\n    };\n  }\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  var allocate = function allocate (ArrayType, size) {\n    if (ArrayType.allocUnsafe) {\n      return ArrayType.allocUnsafe(size);\n    }\n    return new ArrayType(size);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    this._strip();\n\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    var res = allocate(ArrayType, reqLength);\n    var postfix = endian === 'le' ? 'LE' : 'BE';\n    this['_toArrayLike' + postfix](res, byteLength);\n    return res;\n  };\n\n  BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n    var position = 0;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position++] = word & 0xff;\n      if (position < res.length) {\n        res[position++] = (word >> 8) & 0xff;\n      }\n      if (position < res.length) {\n        res[position++] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position < res.length) {\n          res[position++] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position < res.length) {\n      res[position++] = carry;\n\n      while (position < res.length) {\n        res[position++] = 0;\n      }\n    }\n  };\n\n  BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n    var position = res.length - 1;\n    var carry = 0;\n\n    for (var i = 0, shift = 0; i < this.length; i++) {\n      var word = (this.words[i] << shift) | carry;\n\n      res[position--] = word & 0xff;\n      if (position >= 0) {\n        res[position--] = (word >> 8) & 0xff;\n      }\n      if (position >= 0) {\n        res[position--] = (word >> 16) & 0xff;\n      }\n\n      if (shift === 6) {\n        if (position >= 0) {\n          res[position--] = (word >> 24) & 0xff;\n        }\n        carry = 0;\n        shift = 0;\n      } else {\n        carry = word >>> 24;\n        shift += 2;\n      }\n    }\n\n    if (position >= 0) {\n      res[position--] = carry;\n\n      while (position >= 0) {\n        res[position--] = 0;\n      }\n    }\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] >>> wbit) & 0x01;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this._strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this._strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this._strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this._strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out._strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n    // var fftm = new FFTM();\n    // return fftm.mulp(self, num, out);\n    return bigMulTo(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out._strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this._strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) <= num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this._strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this._strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this._strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q._strip();\n    }\n    a._strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modrn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modrn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modrn = function modrn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return isNegNum ? -acc : acc;\n  };\n\n  // WARNING: DEPRECATED\n  BN.prototype.modn = function modn (num) {\n    return this.modrn(num);\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    var isNegNum = num < 0;\n    if (isNegNum) num = -num;\n\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    this._strip();\n    return isNegNum ? this.ineg() : this;\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this._strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is a BN v4 instance\n        r.strip();\n      } else {\n        // r is a BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n    move(a, a.umod(this.m)._forceRed(this));\n    return a;\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n", "var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n  var r = getr(priv)\n  var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n  return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n  var len = priv.modulus.byteLength()\n  var r\n  do {\n    r = new BN(randomBytes(len))\n  } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n  return r\n}\n\nfunction crt (msg, priv) {\n  var blinds = blind(priv)\n  var len = priv.modulus.byteLength()\n  var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n  var c1 = blinded.toRed(BN.mont(priv.prime1))\n  var c2 = blinded.toRed(BN.mont(priv.prime2))\n  var qinv = priv.coefficient\n  var p = priv.prime1\n  var q = priv.prime2\n  var m1 = c1.redPow(priv.exponent1).fromRed()\n  var m2 = c2.redPow(priv.exponent2).fromRed()\n  var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n  return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n", "{\n  \"name\": \"elliptic\",\n  \"version\": \"6.5.7\",\n  \"description\": \"EC cryptography\",\n  \"main\": \"lib/elliptic.js\",\n  \"files\": [\n    \"lib\"\n  ],\n  \"scripts\": {\n    \"lint\": \"eslint lib test\",\n    \"lint:fix\": \"npm run lint -- --fix\",\n    \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"version\": \"grunt dist && git add dist/\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:indutny/elliptic\"\n  },\n  \"keywords\": [\n    \"EC\",\n    \"Elliptic\",\n    \"curve\",\n    \"Cryptography\"\n  ],\n  \"author\": \"Fedor Indutny <fedor@indutny.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/indutny/elliptic/issues\"\n  },\n  \"homepage\": \"https://github.com/indutny/elliptic\",\n  \"devDependencies\": {\n    \"brfs\": \"^2.0.2\",\n    \"coveralls\": \"^3.1.0\",\n    \"eslint\": \"^7.6.0\",\n    \"grunt\": \"^1.2.1\",\n    \"grunt-browserify\": \"^5.3.0\",\n    \"grunt-cli\": \"^1.3.2\",\n    \"grunt-contrib-connect\": \"^3.0.0\",\n    \"grunt-contrib-copy\": \"^1.0.0\",\n    \"grunt-contrib-uglify\": \"^5.0.0\",\n    \"grunt-mocha-istanbul\": \"^5.0.2\",\n    \"grunt-saucelabs\": \"^9.0.1\",\n    \"istanbul\": \"^0.4.5\",\n    \"mocha\": \"^8.0.1\"\n  },\n  \"dependencies\": {\n    \"bn.js\": \"^4.11.9\",\n    \"brorand\": \"^1.1.0\",\n    \"hash.js\": \"^1.0.0\",\n    \"hmac-drbg\": \"^1.0.1\",\n    \"inherits\": \"^2.0.4\",\n    \"minimalistic-assert\": \"^1.0.1\",\n    \"minimalistic-crypto-utils\": \"^1.0.1\"\n  }\n}\n", "'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n", "'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n  var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n  var i;\n  for (i = 0; i < naf.length; i += 1) {\n    naf[i] = 0;\n  }\n\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n\n  for (i = 0; i < naf.length; i++) {\n    var z;\n    var mod = k.andln(ws - 1);\n    if (k.isOdd()) {\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n\n    naf[i] = z;\n    k.iushrn(1);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    [],\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  var m8;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n      this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n    bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  this._bitLength = this.n ? this.n.bitLength() : 0;\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1, this._bitLength);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  var j;\n  var nafW;\n  for (j = 0; j < naf.length; j += doubles.step) {\n    nafW = 0;\n    for (var l = j + doubles.step - 1; l >= j; l--)\n      nafW = (nafW << 1) + naf[l];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (j = 0; j < repr.length; j++) {\n      nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w, this._bitLength);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var l = 0; i >= 0 && naf[i] === 0; i--)\n      l++;\n    if (i >= 0)\n      l++;\n    acc = acc.dblp(l);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n  points,\n  coeffs,\n  len,\n  jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  var i;\n  var j;\n  var p;\n  for (i = 0; i < len; i++) {\n    p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n      naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b], /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3,  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (j = 0; j < len; j++) {\n      var z = tmp[j];\n      p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n      bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null,\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles,\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res,\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16),\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis,\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 },\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n      var npoints = this._endoWnafT1;\n      var ncoeffs = this._endoWnafT2;\n      for (var i = 0; i < points.length; i++) {\n        var split = this._endoSplit(coeffs[i]);\n        var p = points[i];\n        var beta = p._getBeta();\n\n        if (split.k1.negative) {\n          split.k1.ineg();\n          p = p.neg(true);\n        }\n        if (split.k2.negative) {\n          split.k2.ineg();\n          beta = beta.neg(true);\n        }\n\n        npoints[i * 2] = p;\n        npoints[i * 2 + 1] = beta;\n        ncoeffs[i * 2] = split.k1;\n        ncoeffs[i * 2 + 1] = split.k2;\n      }\n      var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n      // Clean-up references to points and coefficients\n      for (var j = 0; j < i * 2; j++) {\n        npoints[j] = null;\n        ncoeffs[j] = null;\n      }\n      return res;\n    };\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul),\n      },\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1),\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1),\n    },\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point)),\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point)),\n    },\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate),\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate),\n      },\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  var i;\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  var e;\n  var h;\n  var j;\n  if (this.curve.twisted) {\n    // E = a * C\n    e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      h = this.z.redSqr();\n      // J = F - 2 * H\n      j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    e = c.redAdd(d);\n    // H = (c * Z1)^2\n    h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n    this.y,\n    this.z,\n    this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n", "'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n", "'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n", "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n", "'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n", "'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n", "'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n", "'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n", "'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n", "var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n", "module.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n      ],\n    ],\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n      ],\n    ],\n  },\n};\n", "'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve,\n      });\n      return curve;\n    },\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n  ],\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n  ],\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n  ],\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n  ],\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n  ],\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9',\n  ],\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658',\n  ],\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3',\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15',\n    },\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre,\n  ],\n});\n", "'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc,\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc,\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  if(!pub.validate()) {\n    assert(pub.validate(), 'public point not validated');\n  }\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n", "'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n\n  // Indefinite length or overflow\n  if (octetLen === 0 || octetLen > 4) {\n    return false;\n  }\n\n  if(buf[p.place] === 0x00) {\n    return false;\n  }\n\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n    val >>>= 0;\n  }\n\n  // Leading zeroes\n  if (val <= 0x7f) {\n    return false;\n  }\n\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if (len === false) {\n    return false;\n  }\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  if (rlen === false) {\n    return false;\n  }\n  if ((data[p.place] & 128) !== 0) {\n    return false;\n  }\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (slen === false) {\n    return false;\n  }\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  if ((data[p.place] & 128) !== 0) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0) {\n    if (r[1] & 0x80) {\n      r = r.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n  if (s[0] === 0) {\n    if (s[1] & 0x80) {\n      s = s.slice(1);\n    } else {\n      // Leading zeroes\n      return false;\n    }\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n", "'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(Object.prototype.hasOwnProperty.call(curves, options),\n      'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray(),\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  for (;;) {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; ; iter++) {\n    var k = options.k ?\n      options.k(iter) :\n      new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n  var p;\n\n  if (!this.curve._maxwellTrick) {\n    p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n", "'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n", "'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    assert(sig.length === eddsa.encodingLength * 2, 'Signature has invalid size');\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength),\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n", "'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n    .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  if (sig.S().gte(sig.eddsa.curve.n) || sig.S().isNeg()) {\n    return false;\n  }\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n", "'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n", "var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n  try {\n    named = require('vm').runInThisContext(\n      '(function ' + this.name + '(entity) {\\n' +\n      '  this._initNamed(entity);\\n' +\n      '})'\n    );\n  } catch (e) {\n    named = function (entity) {\n      this._initNamed(entity);\n    };\n  }\n  inherits(named, base);\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n", "var inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n\n  var inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n", "var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  var res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!(item instanceof EncoderBuffer))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = new Buffer(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n", "var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState;\n\n  // Filter children and args\n  var children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      var res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  var result = state['default'];\n  var present = true;\n\n  var prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  var prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      if (state.any)\n        var save = input.save();\n      var body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any)\n      result = result;\n    else if (state.choice === null)\n      result = this._decodeGeneric(state.tag, input, options);\n    else\n      result = this._decodeChoice(input, options);\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n          ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n        ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  var state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    var save = input.save();\n    var node = state.choice[key];\n    try {\n      var value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  var result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  var result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default']\n    else\n      return;\n  }\n\n  // Encode children first\n  var content = null;\n  var primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        var state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  var result;\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n\n  var node = state.choice[data.type];\n  if (!node) {\n    assert(\n        false,\n        data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n", "var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n", "var constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n", "var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  var res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    var value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n", "var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer))\n    data = new base.DecoderBuffer(data, options);\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer,\n                                'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  var len = derDecodeLen(buffer,\n                         decodedTag.primitive,\n                         'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  var state = buffer.save();\n  var res = this._skipUntilEnd(\n      buffer,\n      'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    var res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len)\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n                                                    options) {\n  var result = [];\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    var str = '';\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  var first = (identifiers[0] / 40) | 0;\n  var second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  var tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  var num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n", "var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n\n  var label = options.label.toUpperCase();\n\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  var base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n", "var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n", "var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n                                                              primitive,\n                                                              cls,\n                                                              content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  var lenOctets = 1;\n  for (var i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  var size = 0;\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0)\n      size++;\n\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  var size = 1;\n  for (var i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  var out = new Array(size);\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null)\n    return false;\n\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n", "var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n\n  var p = buf.toString('base64');\n  var out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (var i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n", "var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n", "var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n", "// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n\tthis.choice({\n\t\tutcTime: this.utctime(),\n\t\tgeneralTime: this.gentime()\n\t});\n});\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n\tthis.seq().obj(\n\t\tthis.key('type').objid(),\n\t\tthis.key('value').any()\n\t);\n});\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('parameters').optional(),\n\t\tthis.key('curve').objid().optional()\n\t);\n});\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n\tthis.setof(AttributeTypeValue);\n});\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n\tthis.seqof(RelativeDistinguishedName);\n});\n\nvar Name = asn.define('Name', function () {\n\tthis.choice({\n\t\trdnSequence: this.use(RDNSequence)\n\t});\n});\n\nvar Validity = asn.define('Validity', function () {\n\tthis.seq().obj(\n\t\tthis.key('notBefore').use(Time),\n\t\tthis.key('notAfter').use(Time)\n\t);\n});\n\nvar Extension = asn.define('Extension', function () {\n\tthis.seq().obj(\n\t\tthis.key('extnID').objid(),\n\t\tthis.key('critical').bool().def(false),\n\t\tthis.key('extnValue').octstr()\n\t);\n});\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('version').explicit(0)['int']().optional(),\n\t\tthis.key('serialNumber')['int'](),\n\t\tthis.key('signature').use(AlgorithmIdentifier),\n\t\tthis.key('issuer').use(Name),\n\t\tthis.key('validity').use(Validity),\n\t\tthis.key('subject').use(Name),\n\t\tthis.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n\t\tthis.key('issuerUniqueID').implicit(1).bitstr().optional(),\n\t\tthis.key('subjectUniqueID').implicit(2).bitstr().optional(),\n\t\tthis.key('extensions').explicit(3).seqof(Extension).optional()\n\t);\n});\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n\tthis.seq().obj(\n\t\tthis.key('tbsCertificate').use(TBSCertificate),\n\t\tthis.key('signatureAlgorithm').use(AlgorithmIdentifier),\n\t\tthis.key('signatureValue').bitstr()\n\t);\n});\n\nmodule.exports = X509Certificate;\n", "// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int'](),\n\t\tthis.key('privateExponent')['int'](),\n\t\tthis.key('prime1')['int'](),\n\t\tthis.key('prime2')['int'](),\n\t\tthis.key('exponent1')['int'](),\n\t\tthis.key('exponent2')['int'](),\n\t\tthis.key('coefficient')['int']()\n\t);\n});\nexports.RSAPrivateKey = RSAPrivateKey;\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('modulus')['int'](),\n\t\tthis.key('publicExponent')['int']()\n\t);\n});\nexports.RSAPublicKey = RSAPublicKey;\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').objid(),\n\t\tthis.key('none').null_().optional(),\n\t\tthis.key('curve').objid().optional(),\n\t\tthis.key('params').seq().obj(\n\t\t\tthis.key('p')['int'](),\n\t\t\tthis.key('q')['int'](),\n\t\t\tthis.key('g')['int']()\n\t\t).optional()\n\t);\n});\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPublicKey').bitstr()\n\t);\n});\nexports.PublicKey = PublicKey;\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('algorithm').use(AlgorithmIdentifier),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n\tthis.seq().obj(\n\t\tthis.key('algorithm').seq().obj(\n\t\t\tthis.key('id').objid(),\n\t\t\tthis.key('decrypt').seq().obj(\n\t\t\t\tthis.key('kde').seq().obj(\n\t\t\t\t\tthis.key('id').objid(),\n\t\t\t\t\tthis.key('kdeparams').seq().obj(\n\t\t\t\t\t\tthis.key('salt').octstr(),\n\t\t\t\t\t\tthis.key('iters')['int']()\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\tthis.key('cipher').seq().obj(\n\t\t\t\t\tthis.key('algo').objid(),\n\t\t\t\t\tthis.key('iv').octstr()\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\t\tthis.key('subjectPrivateKey').octstr()\n\t);\n});\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('p')['int'](),\n\t\tthis.key('q')['int'](),\n\t\tthis.key('g')['int'](),\n\t\tthis.key('pub_key')['int'](),\n\t\tthis.key('priv_key')['int']()\n\t);\n});\nexports.DSAPrivateKey = DSAPrivateKey;\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n\tthis['int']();\n});\n\nvar ECParameters = asn1.define('ECParameters', function () {\n\tthis.choice({\n\t\tnamedCurve: this.objid()\n\t});\n});\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n\tthis.seq().obj(\n\t\tthis.key('version')['int'](),\n\t\tthis.key('privateKey').octstr(),\n\t\tthis.key('parameters').optional().explicit(0).use(ECParameters),\n\t\tthis.key('publicKey').optional().explicit(1).bitstr()\n\t);\n});\nexports.ECPrivateKey = ECPrivateKey;\n\nexports.signature = asn1.define('signature', function () {\n\tthis.seq().obj(\n\t\tthis.key('r')['int'](),\n\t\tthis.key('s')['int']()\n\t);\n});\n", "{\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}", "'use strict';\n\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m;\nvar evp = require('evp_bytestokey');\nvar ciphers = require('browserify-aes');\nvar Buffer = require('safe-buffer').Buffer;\nmodule.exports = function (okey, password) {\n\tvar key = okey.toString();\n\tvar match = key.match(findProc);\n\tvar decrypted;\n\tif (!match) {\n\t\tvar match2 = key.match(fullRegex);\n\t\tdecrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n\t} else {\n\t\tvar suite = 'aes' + match[1];\n\t\tvar iv = Buffer.from(match[2], 'hex');\n\t\tvar cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n\t\tvar cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n\t\tvar out = [];\n\t\tvar cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n\t\tout.push(cipher.update(cipherText));\n\t\tout.push(cipher['final']());\n\t\tdecrypted = Buffer.concat(out);\n\t}\n\tvar tag = key.match(startRegex)[1];\n\treturn {\n\t\ttag: tag,\n\t\tdata: decrypted\n\t};\n};\n", "'use strict';\n\nvar asn1 = require('./asn1');\nvar aesid = require('./aesid.json');\nvar fixProc = require('./fixProc');\nvar ciphers = require('browserify-aes');\nvar compat = require('pbkdf2');\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction decrypt(data, password) {\n\tvar salt = data.algorithm.decrypt.kde.kdeparams.salt;\n\tvar iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n\tvar algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n\tvar iv = data.algorithm.decrypt.cipher.iv;\n\tvar cipherText = data.subjectPrivateKey;\n\tvar keylen = parseInt(algo.split('-')[1], 10) / 8;\n\tvar key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n\tvar cipher = ciphers.createDecipheriv(algo, key, iv);\n\tvar out = [];\n\tout.push(cipher.update(cipherText));\n\tout.push(cipher['final']());\n\treturn Buffer.concat(out);\n}\n\nfunction parseKeys(buffer) {\n\tvar password;\n\tif (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n\t\tpassword = buffer.passphrase;\n\t\tbuffer = buffer.key;\n\t}\n\tif (typeof buffer === 'string') {\n\t\tbuffer = Buffer.from(buffer);\n\t}\n\n\tvar stripped = fixProc(buffer, password);\n\n\tvar type = stripped.tag;\n\tvar data = stripped.data;\n\tvar subtype, ndata;\n\tswitch (type) {\n\t\tcase 'CERTIFICATE':\n\t\t\tndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n\t\t\t// falls through\n\t\tcase 'PUBLIC KEY':\n\t\t\tif (!ndata) {\n\t\t\t\tndata = asn1.PublicKey.decode(data, 'der');\n\t\t\t}\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\tndata.subjectPrivateKey = ndata.subjectPublicKey;\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'ec',\n\t\t\t\t\t\tdata: ndata\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tdata: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'ENCRYPTED PRIVATE KEY':\n\t\t\tdata = asn1.EncryptedPrivateKey.decode(data, 'der');\n\t\t\tdata = decrypt(data, password);\n\t\t\t// falls through\n\t\tcase 'PRIVATE KEY':\n\t\t\tndata = asn1.PrivateKey.decode(data, 'der');\n\t\t\tsubtype = ndata.algorithm.algorithm.join('.');\n\t\t\tswitch (subtype) {\n\t\t\t\tcase '1.2.840.113549.1.1.1':\n\t\t\t\t\treturn asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\tcase '1.2.840.10045.2.1':\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcurve: ndata.algorithm.curve,\n\t\t\t\t\t\tprivateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n\t\t\t\t\t};\n\t\t\t\tcase '1.2.840.10040.4.1':\n\t\t\t\t\tndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'dsa',\n\t\t\t\t\t\tparams: ndata.algorithm.params\n\t\t\t\t\t};\n\t\t\t\tdefault: throw new Error('unknown key id ' + subtype);\n\t\t\t}\n\t\t\t// throw new Error('unknown key type ' + type)\n\t\tcase 'RSA PUBLIC KEY':\n\t\t\treturn asn1.RSAPublicKey.decode(data, 'der');\n\t\tcase 'RSA PRIVATE KEY':\n\t\t\treturn asn1.RSAPrivateKey.decode(data, 'der');\n\t\tcase 'DSA PRIVATE KEY':\n\t\t\treturn {\n\t\t\t\ttype: 'dsa',\n\t\t\t\tparams: asn1.DSAPrivateKey.decode(data, 'der')\n\t\t\t};\n\t\tcase 'EC PRIVATE KEY':\n\t\t\tdata = asn1.ECPrivateKey.decode(data, 'der');\n\t\t\treturn {\n\t\t\t\tcurve: data.parameters.value,\n\t\t\t\tprivateKey: data.privateKey\n\t\t\t};\n\t\tdefault: throw new Error('unknown key type ' + type);\n\t}\n}\nparseKeys.signature = asn1.signature;\n\nmodule.exports = parseKeys;\n", "{\n  \"1.3.132.0.10\": \"secp256k1\",\n  \"1.3.132.0.33\": \"p224\",\n  \"1.2.840.10045.3.1.1\": \"p192\",\n  \"1.2.840.10045.3.1.7\": \"p256\",\n  \"1.3.132.0.34\": \"p384\",\n  \"1.3.132.0.35\": \"p521\"\n}\n", "'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar createHmac = require('create-hmac');\nvar crt = require('browserify-rsa');\nvar EC = require('elliptic').ec;\nvar BN = require('bn.js');\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key);\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n    return ecSign(hash, priv);\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n    return dsaSign(hash, priv, hashType);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n  if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = priv.modulus.byteLength();\n  var pad = [0, 1];\n  while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) { pad.push(hash[i]); }\n\n  var out = crt(pad, priv);\n  return out;\n}\n\nfunction ecSign(hash, priv) {\n  var curveId = curves[priv.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var key = curve.keyFromPrivate(priv.privateKey);\n  var out = key.sign(hash);\n\n  return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n  var x = priv.params.priv_key;\n  var p = priv.params.p;\n  var q = priv.params.q;\n  var g = priv.params.g;\n  var r = new BN(0);\n  var k;\n  var H = bits2int(hash, q).mod(q);\n  var s = false;\n  var kv = getKey(x, q, hash, algo);\n  while (s === false) {\n    k = makeKey(q, kv, algo);\n    r = makeR(g, k, p, q);\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n    if (s.cmpn(0) === 0) {\n      s = false;\n      r = new BN(0);\n    }\n  }\n  return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n  r = r.toArray();\n  s = s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80) { r = [0].concat(r); }\n  if (s[0] & 0x80) { s = [0].concat(s); }\n\n  var total = r.length + s.length + 4;\n  var res = [\n    0x30, total, 0x02, r.length\n  ];\n  res = res.concat(r, [0x02, s.length], s);\n  return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n  x = Buffer.from(x.toArray());\n  if (x.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - x.length);\n    x = Buffer.concat([zeros, x]);\n  }\n  var hlen = hash.length;\n  var hbits = bits2octets(hash, q);\n  var v = Buffer.alloc(hlen);\n  v.fill(1);\n  var k = Buffer.alloc(hlen);\n  k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n  var bits = new BN(obits);\n  var shift = (obits.length << 3) - q.bitLength();\n  if (shift > 0) { bits.ishrn(shift); }\n  return bits;\n}\n\nfunction bits2octets(bits, q) {\n  bits = bits2int(bits, q);\n  bits = bits.mod(q);\n  var out = Buffer.from(bits.toArray());\n  if (out.length < q.byteLength()) {\n    var zeros = Buffer.alloc(q.byteLength() - out.length);\n    out = Buffer.concat([zeros, out]);\n  }\n  return out;\n}\n\nfunction makeKey(q, kv, algo) {\n  var t;\n  var k;\n\n  do {\n    t = Buffer.alloc(0);\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n      t = Buffer.concat([t, kv.v]);\n    }\n\n    k = bits2int(t, q);\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n  } while (k.cmp(q) !== -1);\n\n  return k;\n}\n\nfunction makeR(g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n", "'use strict';\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer;\nvar BN = require('bn.js');\nvar EC = require('elliptic').ec;\nvar parseKeys = require('parse-asn1');\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n  var pub = parseKeys(key);\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n    return ecVerify(sig, hash, pub);\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n    return dsaVerify(sig, hash, pub);\n  }\n  if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = pub.modulus.byteLength();\n  var pad = [1];\n  var padNum = 0;\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff);\n    padNum += 1;\n  }\n  pad.push(0x00);\n  var i = -1;\n  while (++i < hash.length) {\n    pad.push(hash[i]);\n  }\n  pad = Buffer.from(pad);\n  var red = BN.mont(pub.modulus);\n  sig = new BN(sig).toRed(red);\n\n  sig = sig.redPow(new BN(pub.publicExponent));\n  sig = Buffer.from(sig.fromRed().toArray());\n  var out = padNum < 8 ? 1 : 0;\n  len = Math.min(sig.length, pad.length);\n  if (sig.length !== pad.length) { out = 1; }\n\n  i = -1;\n  while (++i < len) { out |= sig[i] ^ pad[i]; }\n  return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')];\n  if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n  var curve = new EC(curveId);\n  var pubkey = pub.data.subjectPrivateKey.data;\n\n  return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n  var p = pub.data.p;\n  var q = pub.data.q;\n  var g = pub.data.g;\n  var y = pub.data.pub_key;\n  var unpacked = parseKeys.signature.decode(sig, 'der');\n  var s = unpacked.s;\n  var r = unpacked.r;\n  checkValue(s, q);\n  checkValue(r, q);\n  var montp = BN.mont(p);\n  var w = s.invm(q);\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q);\n  return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n  if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n  if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n", "'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\nvar createHash = require('create-hash');\nvar stream = require('readable-stream');\nvar inherits = require('inherits');\nvar sign = require('./sign');\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = Buffer.from(algorithms[key].id, 'hex');\n  algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hashType = data.hash;\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nSign.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n  this.end();\n  var hash = this._hash.digest();\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n  return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n  stream.Writable.call(this);\n\n  var data = algorithms[algorithm];\n  if (!data) { throw new Error('Unknown message digest'); }\n\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n  done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n  this._hash.update(typeof data === 'string' ? Buffer.from(data, enc) : data);\n\n  return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n  var sigBuffer = typeof sig === 'string' ? Buffer.from(sig, enc) : sig;\n\n  this.end();\n  var hash = this._hash.digest();\n  return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n  return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n  return new Verify(algorithm);\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n};\n", "var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n", "var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0)\n  var i = 0\n  var c\n  while (t.length < len) {\n    c = i2ops(i++)\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n  }\n  return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n  var out = Buffer.allocUnsafe(4)\n  out.writeUInt32BE(c, 0)\n  return out\n}\n", "module.exports = function xor (a, b) {\n  var len = a.length\n  var i = -1\n  while (++i < len) {\n    a[i] ^= b[i]\n  }\n  return a\n}\n", "var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n  return Buffer.from(paddedMsg\n    .toRed(BN.mont(key.modulus))\n    .redPow(new BN(key.publicExponent))\n    .fromRed()\n    .toArray())\n}\n\nmodule.exports = withPublic\n", "var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n  var padding\n  if (publicKey.padding) {\n    padding = publicKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n  var key = parseKeys(publicKey)\n  var paddedMsg\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg)\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg)\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus')\n    }\n  } else {\n    throw new Error('unknown padding')\n  }\n  if (reverse) {\n    return crt(paddedMsg, key)\n  } else {\n    return withPublic(paddedMsg, key)\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var mLen = msg.length\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  var hLen2 = 2 * hLen\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long')\n  }\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n  var dblen = k - hLen - 1\n  var seed = randomBytes(hLen)\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n  var mLen = msg.length\n  var k = key.modulus.byteLength()\n  if (mLen > k - 11) {\n    throw new Error('message too long')\n  }\n  var ps\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff)\n  } else {\n    ps = nonZero(k - mLen - 3)\n  }\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n  var out = Buffer.allocUnsafe(len)\n  var i = 0\n  var cache = randomBytes(len * 2)\n  var cur = 0\n  var num\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2)\n      cur = 0\n    }\n    num = cache[cur++]\n    if (num) {\n      out[i++] = num\n    }\n  }\n  return out\n}\n", "var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n  var padding\n  if (privateKey.padding) {\n    padding = privateKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n\n  var key = parseKeys(privateKey)\n  var k = key.modulus.byteLength()\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error')\n  }\n  var msg\n  if (reverse) {\n    msg = withPublic(new BN(enc), key)\n  } else {\n    msg = crt(enc, key)\n  }\n  var zBuffer = Buffer.alloc(k - msg.length)\n  msg = Buffer.concat([zBuffer, msg], k)\n  if (padding === 4) {\n    return oaep(key, msg)\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    return msg\n  } else {\n    throw new Error('unknown padding')\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  if (msg[0] !== 0) {\n    throw new Error('decryption error')\n  }\n  var maskedSeed = msg.slice(1, hLen + 1)\n  var maskedDb = msg.slice(hLen + 1)\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error')\n  }\n  var i = hLen\n  while (db[i] === 0) {\n    i++\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error')\n  }\n  return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n  var p1 = msg.slice(0, 2)\n  var i = 2\n  var status = 0\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++\n      break\n    }\n  }\n  var ps = msg.slice(2, i - 1)\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n    status++\n  }\n  if (ps.length < 8) {\n    status++\n  }\n  if (status) {\n    throw new Error('decryption error')\n  }\n  return msg.slice(i)\n}\nfunction compare (a, b) {\n  a = Buffer.from(a)\n  b = Buffer.from(b)\n  var dif = 0\n  var len = a.length\n  if (a.length !== b.length) {\n    dif++\n    len = Math.min(a.length, b.length)\n  }\n  var i = -1\n  while (++i < len) {\n    dif += (a[i] ^ b[i])\n  }\n  return dif\n}\n", "exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n  return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n  return exports.privateDecrypt(key, buf, true)\n}\n", "'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number')\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32')\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range')\n  }\n}\n\nfunction assertSize (size, offset, length) {\n  if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number')\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32')\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small')\n  }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n  exports.randomFill = randomFill\n  exports.randomFillSync = randomFillSync\n} else {\n  exports.randomFill = oldBrowser\n  exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset\n    offset = 0\n    size = buf.length\n  } else if (typeof size === 'function') {\n    cb = size\n    size = buf.length - offset\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function')\n  }\n  assertOffset(offset, buf.length)\n  assertSize(size, offset, buf.length)\n  return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer\n    var uint = new Uint8Array(ourBuf, offset, size)\n    crypto.getRandomValues(uint)\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf)\n      })\n      return\n    }\n    return buf\n  }\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err)\n      }\n      bytes.copy(buf, offset)\n      cb(null, buf)\n    })\n    return\n  }\n  var bytes = randombytes(size)\n  bytes.copy(buf, offset)\n  return buf\n}\nfunction randomFillSync (buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0\n  }\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  assertOffset(offset, buf.length)\n\n  if (size === undefined) size = buf.length - offset\n\n  assertSize(size, offset, buf.length)\n\n  return actualFill(buf, offset, size)\n}\n", "'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n", "/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u16 = (arr: TypedArray) =>\n  new Uint16Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 2));\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport function bytesToUtf8(bytes: Uint8Array): string {\n  return new TextDecoder().decode(bytes);\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj: any) =>\n  Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\n\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n    throw new Error('options must be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport function ensureBytes(b: any, len?: number) {\n  if (!(b instanceof Uint8Array)) throw new Error('Uint8Array expected');\n  if (typeof len === 'number')\n    if (b.length !== len) throw new Error(`Uint8Array length ${len} expected`);\n}\n\n// Constant-time equality\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n  // Should not happen\n  if (a.length !== b.length) throw new Error('equalBytes: Different size of Uint8Arrays');\n  let isSame = true;\n  for (let i = 0; i < a.length; i++) isSame &&= a[i] === b[i]; // Lets hope JIT won't optimize away.\n  return isSame;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n}\n\n// This will allow to re-use with composable things like packed & base encoders\n// Also, we probably can make tags composable\nexport type Cipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array): Uint8Array;\n};\n\nexport type AsyncCipher = {\n  tagLength?: number;\n  encrypt(plaintext: Uint8Array): Promise<Uint8Array>;\n  decrypt(ciphertext: Uint8Array): Promise<Uint8Array>;\n};\n\nexport type CipherWithOutput = Cipher & {\n  encrypt(plaintext: Uint8Array, output?: Uint8Array): Uint8Array;\n  decrypt(ciphertext: Uint8Array, output?: Uint8Array): Uint8Array;\n};\n\n// Polyfill for Safari 14\nexport function setBigUint64(\n  view: DataView,\n  byteOffset: number,\n  value: bigint,\n  isLE: boolean\n): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AEAD_TAG_LENGTH = exports.XCHACHA20_NONCE_LENGTH = exports.CURVE25519_PUBLIC_KEY_SIZE = exports.ETH_PUBLIC_KEY_SIZE = exports.UNCOMPRESSED_PUBLIC_KEY_SIZE = exports.COMPRESSED_PUBLIC_KEY_SIZE = exports.SECRET_KEY_LENGTH = void 0;\n// elliptic\nexports.SECRET_KEY_LENGTH = 32;\nexports.COMPRESSED_PUBLIC_KEY_SIZE = 33;\nexports.UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;\nexports.ETH_PUBLIC_KEY_SIZE = 64;\nexports.CURVE25519_PUBLIC_KEY_SIZE = 32;\n// symmetric\nexports.XCHACHA20_NONCE_LENGTH = 24;\nexports.AEAD_TAG_LENGTH = 16;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ephemeralKeySize = exports.symmetricNonceLength = exports.symmetricAlgorithm = exports.isHkdfKeyCompressed = exports.isEphemeralKeyCompressed = exports.ellipticCurve = exports.ECIES_CONFIG = void 0;\nvar consts_1 = require(\"./consts\");\nvar Config = /** @class */ (function () {\n    function Config() {\n        this.ellipticCurve = \"secp256k1\";\n        this.isEphemeralKeyCompressed = false; // secp256k1 only\n        this.isHkdfKeyCompressed = false; // secp256k1 only\n        this.symmetricAlgorithm = \"aes-256-gcm\";\n        this.symmetricNonceLength = 16; // aes-256-gcm only\n    }\n    return Config;\n}());\nexports.ECIES_CONFIG = new Config();\nvar ellipticCurve = function () { return exports.ECIES_CONFIG.ellipticCurve; };\nexports.ellipticCurve = ellipticCurve;\nvar isEphemeralKeyCompressed = function () { return exports.ECIES_CONFIG.isEphemeralKeyCompressed; };\nexports.isEphemeralKeyCompressed = isEphemeralKeyCompressed;\nvar isHkdfKeyCompressed = function () { return exports.ECIES_CONFIG.isHkdfKeyCompressed; };\nexports.isHkdfKeyCompressed = isHkdfKeyCompressed;\nvar symmetricAlgorithm = function () { return exports.ECIES_CONFIG.symmetricAlgorithm; };\nexports.symmetricAlgorithm = symmetricAlgorithm;\nvar symmetricNonceLength = function () { return exports.ECIES_CONFIG.symmetricNonceLength; };\nexports.symmetricNonceLength = symmetricNonceLength;\nvar ephemeralKeySize = function () {\n    var mapping = {\n        secp256k1: exports.ECIES_CONFIG.isEphemeralKeyCompressed\n            ? consts_1.COMPRESSED_PUBLIC_KEY_SIZE\n            : consts_1.UNCOMPRESSED_PUBLIC_KEY_SIZE,\n        x25519: consts_1.CURVE25519_PUBLIC_KEY_SIZE,\n        ed25519: consts_1.CURVE25519_PUBLIC_KEY_SIZE,\n    };\n    if (exports.ECIES_CONFIG.ellipticCurve in mapping) {\n        return mapping[exports.ECIES_CONFIG.ellipticCurve];\n    }\n    else {\n        throw new Error(\"Not implemented\");\n    }\n};\nexports.ephemeralKeySize = ephemeralKeySize;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.js on#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/ciphers/webcrypto/crypto';\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n\nexport function getWebcryptoSubtle() {\n  if (crypto && typeof crypto.subtle === 'object' && crypto.subtle != null) {\n    return crypto.subtle;\n  }\n  throw new Error('crypto.subtle must be defined');\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\n// copied from utils\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\n// Other libraries would silently corrupt the data instead of throwing an error,\n// when they don't support it.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!isBytes(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    exists(this);\n    output(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\n\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends SHA2<SHA512> {\n  // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n  // Also looks cleaner and easier to verify with spec.\n  // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number) {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean() {\n    SHA512_W_H.fill(0);\n    SHA512_W_L.fill(0);\n  }\n  destroy() {\n    this.buffer.fill(0);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\n}\n\nexport const sha512 = /* @__PURE__ */ wrapConstructor(() => new SHA512());\nexport const sha512_224 = /* @__PURE__ */ wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = /* @__PURE__ */ wrapConstructor(() => new SHA512_256());\nexport const sha384 = /* @__PURE__ */ wrapConstructor(() => new SHA384());\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\n    sum += a.length;\n  }\n  let res = new Uint8Array(sum);\n  let pad = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, FHash, Hex } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8);\n\n// Edwards curves must declare params a & d.\nexport type CurveType = BasicCurve<bigint> & {\n  a: bigint; // curve param a\n  d: bigint; // curve param d\n  hash: FHash; // Hashing\n  randomBytes: (bytesLength?: number) => Uint8Array; // CSPRNG\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing\n  uvRatio?: (u: bigint, v: bigint) => { isValid: boolean; value: bigint }; // Ratio \u221A(u/v)\n  prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify()\n  mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard\n};\n\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    curve,\n    {\n      hash: 'function',\n      a: 'bigint',\n      d: 'bigint',\n      randomBytes: 'function',\n    },\n    {\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      uvRatio: 'function',\n      mapToCurve: 'function',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...opts } as const);\n}\n\n// Instance of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointType extends Group<ExtPointType> {\n  readonly ex: bigint;\n  readonly ey: bigint;\n  readonly ez: bigint;\n  readonly et: bigint;\n  get x(): bigint;\n  get y(): bigint;\n  assertValidity(): void;\n  multiply(scalar: bigint): ExtPointType;\n  multiplyUnsafe(scalar: bigint): ExtPointType;\n  isSmallOrder(): boolean;\n  isTorsionFree(): boolean;\n  clearCofactor(): ExtPointType;\n  toAffine(iz?: bigint): AffinePoint<bigint>;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n// Static methods of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointConstructor extends GroupConstructor<ExtPointType> {\n  new (x: bigint, y: bigint, z: bigint, t: bigint): ExtPointType;\n  fromAffine(p: AffinePoint<bigint>): ExtPointType;\n  fromHex(hex: Hex): ExtPointType;\n  fromPrivateKey(privateKey: Hex): ExtPointType;\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;\n  verify: (\n    sig: Hex,\n    message: Hex,\n    publicKey: Hex,\n    options?: { context?: Hex; zip215: boolean }\n  ) => boolean;\n  ExtendedPoint: ExtPointConstructor;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    getExtendedPublicKey: (key: Hex) => {\n      head: Uint8Array;\n      prefix: Uint8Array;\n      scalar: bigint;\n      point: ExtPointType;\n      pointBytes: Uint8Array;\n    };\n  };\n};\n\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const {\n    Fp,\n    n: CURVE_ORDER,\n    prehash: prehash,\n    hash: cHash,\n    randomBytes,\n    nByteLength,\n    h: cofactor,\n  } = CURVE;\n  const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n  const modP = Fp.create; // Function overrides\n\n  // sqrt(u/v)\n  const uvRatio =\n    CURVE.uvRatio ||\n    ((u: bigint, v: bigint) => {\n      try {\n        return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n      } catch (e) {\n        return { isValid: false, value: _0n };\n      }\n    });\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes); // NOOP\n  const domain =\n    CURVE.domain ||\n    ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n      if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n      return data;\n    }); // NOOP\n  const inBig = (n: bigint) => typeof n === 'bigint' && _0n < n; // n in [1..]\n  const inRange = (n: bigint, max: bigint) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n  const in0MaskRange = (n: bigint) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n  function assertInRange(n: bigint, max: bigint) {\n    // n in [1..max-1]\n    if (inRange(n, max)) return n;\n    throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n  }\n  function assertGE0(n: bigint) {\n    // n in [0..CURVE_ORDER-1]\n    return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n  }\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function isPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ExtendedPoint expected');\n  }\n  // Extended Point works in extended coordinates: (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy).\n  // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n  class Point implements ExtPointType {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n    static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n\n    constructor(\n      readonly ex: bigint,\n      readonly ey: bigint,\n      readonly ez: bigint,\n      readonly et: bigint\n    ) {\n      if (!in0MaskRange(ex)) throw new Error('x required');\n      if (!in0MaskRange(ey)) throw new Error('y required');\n      if (!in0MaskRange(ez)) throw new Error('z required');\n      if (!in0MaskRange(et)) throw new Error('t required');\n    }\n\n    get x(): bigint {\n      return this.toAffine().x;\n    }\n    get y(): bigint {\n      return this.toAffine().y;\n    }\n\n    static fromAffine(p: AffinePoint<bigint>): Point {\n      if (p instanceof Point) throw new Error('extended point not allowed');\n      const { x, y } = p || {};\n      if (!in0MaskRange(x) || !in0MaskRange(y)) throw new Error('invalid affine point');\n      return new Point(x, y, _1n, modP(x * y));\n    }\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.ez));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n    // Not required for fromHex(), which always creates valid points.\n    // Could be useful for fromAffine().\n    assertValidity(): void {\n      const { a, d } = CURVE;\n      if (this.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n      // Equation in affine coordinates: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\n      // Equation in projective coordinates (X/Z, Y/Z, Z):  (aX\u00B2 + Y\u00B2)Z\u00B2 = Z\u2074 + dX\u00B2Y\u00B2\n      const { ex: X, ey: Y, ez: Z, et: T } = this;\n      const X2 = modP(X * X); // X\u00B2\n      const Y2 = modP(Y * Y); // Y\u00B2\n      const Z2 = modP(Z * Z); // Z\u00B2\n      const Z4 = modP(Z2 * Z2); // Z\u2074\n      const aX2 = modP(X2 * a); // aX\u00B2\n      const left = modP(Z2 * modP(aX2 + Y2)); // (aX\u00B2 + Y\u00B2)Z\u00B2\n      const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z\u2074 + dX\u00B2Y\u00B2\n      if (left !== right) throw new Error('bad point: equation left != right (1)');\n      // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n      const XY = modP(X * Y);\n      const ZT = modP(Z * T);\n      if (XY !== ZT) throw new Error('bad point: equation left != right (2)');\n    }\n\n    // Compare one point to another.\n    equals(other: Point): boolean {\n      isPoint(other);\n      const { ex: X1, ey: Y1, ez: Z1 } = this;\n      const { ex: X2, ey: Y2, ez: Z2 } = other;\n      const X1Z2 = modP(X1 * Z2);\n      const X2Z1 = modP(X2 * Z1);\n      const Y1Z2 = modP(Y1 * Z2);\n      const Y2Z1 = modP(Y2 * Z1);\n      return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n\n    protected is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    negate(): Point {\n      // Flips point sign to a negative one (-x, y in affine coords)\n      return new Point(modP(-this.ex), this.ey, this.ez, modP(-this.et));\n    }\n\n    // Fast algo for doubling Extended Point.\n    // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n    // Cost: 4M + 4S + 1*a + 6add + 1*2.\n    double(): Point {\n      const { a } = CURVE;\n      const { ex: X1, ey: Y1, ez: Z1 } = this;\n      const A = modP(X1 * X1); // A = X12\n      const B = modP(Y1 * Y1); // B = Y12\n      const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12\n      const D = modP(a * A); // D = a*A\n      const x1y1 = X1 + Y1;\n      const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B\n      const G = D + B; // G = D+B\n      const F = G - C; // F = G-C\n      const H = D - B; // H = D-B\n      const X3 = modP(E * F); // X3 = E*F\n      const Y3 = modP(G * H); // Y3 = G*H\n      const T3 = modP(E * H); // T3 = E*H\n      const Z3 = modP(F * G); // Z3 = F*G\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    // Fast algo for adding 2 Extended Points.\n    // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n    // Cost: 9M + 1*a + 1*d + 7add.\n    add(other: Point) {\n      isPoint(other);\n      const { a, d } = CURVE;\n      const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;\n      const { ex: X2, ey: Y2, ez: Z2, et: T2 } = other;\n      // Faster algo for adding 2 Extended Points when curve's a=-1.\n      // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-4\n      // Cost: 8M + 8add + 2*2.\n      // Note: It does not check whether the `other` point is valid.\n      if (a === BigInt(-1)) {\n        const A = modP((Y1 - X1) * (Y2 + X2));\n        const B = modP((Y1 + X1) * (Y2 - X2));\n        const F = modP(B - A);\n        if (F === _0n) return this.double(); // Same point. Tests say it doesn't affect timing\n        const C = modP(Z1 * _2n * T2);\n        const D = modP(T1 * _2n * Z2);\n        const E = D + C;\n        const G = B + A;\n        const H = D - C;\n        const X3 = modP(E * F);\n        const Y3 = modP(G * H);\n        const T3 = modP(E * H);\n        const Z3 = modP(F * G);\n        return new Point(X3, Y3, Z3, T3);\n      }\n      const A = modP(X1 * X2); // A = X1*X2\n      const B = modP(Y1 * Y2); // B = Y1*Y2\n      const C = modP(T1 * d * T2); // C = T1*d*T2\n      const D = modP(Z1 * Z2); // D = Z1*Z2\n      const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B\n      const F = D - C; // F = D-C\n      const G = D + C; // G = D+C\n      const H = modP(B - a * A); // H = B-a*A\n      const X3 = modP(E * F); // X3 = E*F\n      const Y3 = modP(G * H); // Y3 = G*H\n      const T3 = modP(E * H); // T3 = E*H\n      const Z3 = modP(F * G); // Z3 = F*G\n\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    subtract(other: Point): Point {\n      return this.add(other.negate());\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n    }\n\n    // Constant-time multiplication.\n    multiply(scalar: bigint): Point {\n      const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n      return Point.normalizeZ([p, f])[0];\n    }\n\n    // Non-constant-time multiplication. Uses double-and-add algorithm.\n    // It's faster, but should only be used when you don't care about\n    // an exposed private key e.g. sig verification.\n    // Does NOT allow scalars higher than CURVE.n.\n    multiplyUnsafe(scalar: bigint): Point {\n      let n = assertGE0(scalar); // 0 <= scalar < CURVE.n\n      if (n === _0n) return I;\n      if (this.equals(I) || n === _1n) return this;\n      if (this.equals(G)) return this.wNAF(n).p;\n      return wnaf.unsafeLadder(this, n);\n    }\n\n    // Checks if point is of small order.\n    // If you add something to small order point, you will have \"dirty\"\n    // point with torsion component.\n    // Multiplies point by cofactor and checks if the result is 0.\n    isSmallOrder(): boolean {\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    // Multiplies point by curve order and checks if the result is 0.\n    // Returns `false` is the point is dirty.\n    isTorsionFree(): boolean {\n      return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n    }\n\n    // Converts Extended point to default (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    toAffine(iz?: bigint): AffinePoint<bigint> {\n      const { ex: x, ey: y, ez: z } = this;\n      const is0 = this.is0();\n      if (iz == null) iz = is0 ? _8n : (Fp.inv(z) as bigint); // 8 was chosen arbitrarily\n      const ax = modP(x * iz);\n      const ay = modP(y * iz);\n      const zz = modP(z * iz);\n      if (is0) return { x: _0n, y: _1n };\n      if (zz !== _1n) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n\n    clearCofactor(): Point {\n      const { h: cofactor } = CURVE;\n      if (cofactor === _1n) return this;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    // Converts hash string or Uint8Array to Point.\n    // Uses algo from RFC8032 5.1.3.\n    static fromHex(hex: Hex, zip215 = false): Point {\n      const { d, a } = CURVE;\n      const len = Fp.BYTES;\n      hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\n      const normed = hex.slice(); // copy again, we'll manipulate it\n      const lastByte = hex[len - 1]; // select last byte\n      normed[len - 1] = lastByte & ~0x80; // clear last bit\n      const y = ut.bytesToNumberLE(normed);\n      if (y === _0n) {\n        // y=0 is allowed\n      } else {\n        // RFC8032 prohibits >= p, but ZIP215 doesn't\n        if (zip215) assertInRange(y, MASK); // zip215=true [1..P-1] (2^255-19-1 for ed25519)\n        else assertInRange(y, Fp.ORDER); // zip215=false [1..MASK-1] (2^256-1 for ed25519)\n      }\n\n      // Ed25519: x\u00B2 = (y\u00B2-1)/(dy\u00B2+1) mod p. Ed448: x\u00B2 = (y\u00B2-1)/(dy\u00B2-1) mod p. Generic case:\n      // ax\u00B2+y\u00B2=1+dx\u00B2y\u00B2 => y\u00B2-1=dx\u00B2y\u00B2-ax\u00B2 => y\u00B2-1=x\u00B2(dy\u00B2-a) => x\u00B2=(y\u00B2-1)/(dy\u00B2-a)\n      const y2 = modP(y * y); // denominator is always non-0 mod p.\n      const u = modP(y2 - _1n); // u = y\u00B2 - 1\n      const v = modP(d * y2 - a); // v = d y\u00B2 + 1.\n      let { isValid, value: x } = uvRatio(u, v); // \u221A(u/v)\n      if (!isValid) throw new Error('Point.fromHex: invalid y coordinate');\n      const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper\n      const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n      if (!zip215 && x === _0n && isLastByteOdd)\n        // if x=0 and x_0 = 1, fail\n        throw new Error('Point.fromHex: x=0 and x_0=1');\n      if (isLastByteOdd !== isXOdd) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n      return Point.fromAffine({ x, y });\n    }\n    static fromPrivateKey(privKey: Hex) {\n      return getExtendedPublicKey(privKey).point;\n    }\n    toRawBytes(): Uint8Array {\n      const { x, y } = this.toAffine();\n      const bytes = ut.numberToBytesLE(y, Fp.BYTES); // each y has 2 x values (x, -y)\n      bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0; // when compressing, it's enough to store y\n      return bytes; // and use the last byte to encode sign of x\n    }\n    toHex(): string {\n      return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n    }\n  }\n  const { BASE: G, ZERO: I } = Point;\n  const wnaf = wNAF(Point, nByteLength * 8);\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  // Little-endian SHA512 with modulo n\n  function modN_LE(hash: Uint8Array): bigint {\n    return modN(ut.bytesToNumberLE(hash));\n  }\n\n  /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n  function getExtendedPublicKey(key: Hex) {\n    const len = nByteLength;\n    key = ensureBytes('private key', key, len);\n    // Hash private key with curve's hash function to produce uniformingly random input\n    // Check byte lengths: ensure(64, h(ensure(32, key)))\n    const hashed = ensureBytes('hashed private key', cHash(key), 2 * len);\n    const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE\n    const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)\n    const scalar = modN_LE(head); // The actual private scalar\n    const point = G.multiply(scalar); // Point on Edwards curve aka public key\n    const pointBytes = point.toRawBytes(); // Uint8Array representation\n    return { head, prefix, scalar, point, pointBytes };\n  }\n\n  // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n  function getPublicKey(privKey: Hex): Uint8Array {\n    return getExtendedPublicKey(privKey).pointBytes;\n  }\n\n  // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n  function hashDomainToScalar(context: Hex = new Uint8Array(), ...msgs: Uint8Array[]) {\n    const msg = ut.concatBytes(...msgs);\n    return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n  }\n\n  /** Signs message with privateKey. RFC8032 5.1.6 */\n  function sign(msg: Hex, privKey: Hex, options: { context?: Hex } = {}): Uint8Array {\n    msg = ensureBytes('message', msg);\n    if (prehash) msg = prehash(msg); // for ed25519ph etc.\n    const { prefix, scalar, pointBytes } = getExtendedPublicKey(privKey);\n    const r = hashDomainToScalar(options.context, prefix, msg); // r = dom2(F, C) || prefix || PH(M)\n    const R = G.multiply(r).toRawBytes(); // R = rG\n    const k = hashDomainToScalar(options.context, R, pointBytes, msg); // R || A || PH(M)\n    const s = modN(r + k * scalar); // S = (r + k * s) mod L\n    assertGE0(s); // 0 <= s < l\n    const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n    return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n  }\n\n  const verifyOpts: { context?: Hex; zip215?: boolean } = VERIFY_DEFAULT;\n  function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean {\n    const { context, zip215 } = options;\n    const len = Fp.BYTES; // Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n    sig = ensureBytes('signature', sig, 2 * len); // An extended group equation is checked.\n    msg = ensureBytes('message', msg);\n    if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n    const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n    // zip215: true is good for consensus-critical apps and allows points < 2^256\n    // zip215: false follows RFC8032 / NIST186-5 and restricts points to CURVE.p\n    let A, R, SB;\n    try {\n      A = Point.fromHex(publicKey, zip215);\n      R = Point.fromHex(sig.slice(0, len), zip215);\n      SB = G.multiplyUnsafe(s); // 0 <= s < l is done inside\n    } catch (error) {\n      return false;\n    }\n    if (!zip215 && A.isSmallOrder()) return false;\n\n    const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n    const RkA = R.add(A.multiplyUnsafe(k));\n    // [8][S]B = [8]R + [8][k]A'\n    return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n  }\n\n  G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n\n  const utils = {\n    getExtendedPublicKey,\n    // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n    randomPrivateKey: (): Uint8Array => randomBytes(Fp.BYTES),\n\n    /**\n     * We're doing scalar multiplication (used in getPublicKey etc) with precomputed BASE_POINT\n     * values. This slows down first getPublicKey() by milliseconds (see Speed section),\n     * but allows to speed-up subsequent getPublicKey() calls up to 20x.\n     * @param windowSize 2, 4, 8, 16\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3));\n      return point;\n    },\n  };\n\n  return {\n    CURVE,\n    getPublicKey,\n    sign,\n    verify,\n    ExtendedPoint: Point,\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\ntype Hex = string | Uint8Array;\n\nexport type CurveType = {\n  P: bigint; // finite field prime\n  nByteLength: number;\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n  a: bigint;\n  montgomeryBits: number;\n  powPminus2?: (x: bigint) => bigint;\n  xyToU?: (x: bigint, y: bigint) => bigint;\n  Gu: bigint;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n};\nexport type CurveFn = {\n  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;\n  scalarMultBase: (scalar: Hex) => Uint8Array;\n  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  utils: { randomPrivateKey: () => Uint8Array };\n  GuBytes: Uint8Array;\n};\n\nfunction validateOpts(curve: CurveType) {\n  validateObject(\n    curve,\n    {\n      a: 'bigint',\n    },\n    {\n      montgomeryBits: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      powPminus2: 'function',\n      Gu: 'bigint',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...curve } as const);\n}\n\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef);\n  const { P } = CURVE;\n  const modP = (n: bigint) => mod(n, P);\n  const montgomeryBits = CURVE.montgomeryBits;\n  const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n  const fieldLen = CURVE.nByteLength;\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n  const powPminus2 = CURVE.powPminus2 || ((x: bigint) => pow(x, P - BigInt(2), P));\n\n  // cswap from RFC7748. But it is not from RFC7748!\n  /*\n    cswap(swap, x_2, x_3):\n         dummy = mask(swap) AND (x_2 XOR x_3)\n         x_2 = x_2 XOR dummy\n         x_3 = x_3 XOR dummy\n         Return (x_2, x_3)\n  Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n   and x_3, computed, e.g., as mask(swap) = 0 - swap.\n  */\n  function cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n    const dummy = modP(swap * (x_2 - x_3));\n    x_2 = modP(x_2 - dummy);\n    x_3 = modP(x_3 + dummy);\n    return [x_2, x_3];\n  }\n\n  // Accepts 0 as well\n  function assertFieldElement(n: bigint): bigint {\n    if (typeof n === 'bigint' && _0n <= n && n < P) return n;\n    throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n  }\n\n  // x25519 from 4\n  // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n  const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n  /**\n   *\n   * @param pointU u coordinate (x) on Montgomery Curve 25519\n   * @param scalar by which the point would be multiplied\n   * @returns new Point on Montgomery curve\n   */\n  function montgomeryLadder(pointU: bigint, scalar: bigint): bigint {\n    const u = assertFieldElement(pointU);\n    // Section 5: Implementations MUST accept non-canonical values and process them as\n    // if they had been reduced modulo the field prime.\n    const k = assertFieldElement(scalar);\n    const x_1 = u;\n    let x_2 = _1n;\n    let z_2 = _0n;\n    let x_3 = u;\n    let z_3 = _1n;\n    let swap = _0n;\n    let sw: [bigint, bigint];\n    for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n      const k_t = (k >> t) & _1n;\n      swap ^= k_t;\n      sw = cswap(swap, x_2, x_3);\n      x_2 = sw[0];\n      x_3 = sw[1];\n      sw = cswap(swap, z_2, z_3);\n      z_2 = sw[0];\n      z_3 = sw[1];\n      swap = k_t;\n\n      const A = x_2 + z_2;\n      const AA = modP(A * A);\n      const B = x_2 - z_2;\n      const BB = modP(B * B);\n      const E = AA - BB;\n      const C = x_3 + z_3;\n      const D = x_3 - z_3;\n      const DA = modP(D * A);\n      const CB = modP(C * B);\n      const dacb = DA + CB;\n      const da_cb = DA - CB;\n      x_3 = modP(dacb * dacb);\n      z_3 = modP(x_1 * modP(da_cb * da_cb));\n      x_2 = modP(AA * BB);\n      z_2 = modP(E * (AA + modP(a24 * E)));\n    }\n    // (x_2, x_3) = cswap(swap, x_2, x_3)\n    sw = cswap(swap, x_2, x_3);\n    x_2 = sw[0];\n    x_3 = sw[1];\n    // (z_2, z_3) = cswap(swap, z_2, z_3)\n    sw = cswap(swap, z_2, z_3);\n    z_2 = sw[0];\n    z_3 = sw[1];\n    // z_2^(p - 2)\n    const z2 = powPminus2(z_2);\n    // Return x_2 * (z_2^(p - 2))\n    return modP(x_2 * z2);\n  }\n\n  function encodeUCoordinate(u: bigint): Uint8Array {\n    return numberToBytesLE(modP(u), montgomeryBytes);\n  }\n\n  function decodeUCoordinate(uEnc: Hex): bigint {\n    // Section 5: When receiving such an array, implementations of X25519\n    // MUST mask the most significant bit in the final byte.\n    const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n    if (fieldLen === 32) u[31] &= 127; // 0b0111_1111\n    return bytesToNumberLE(u);\n  }\n  function decodeScalar(n: Hex): bigint {\n    const bytes = ensureBytes('scalar', n);\n    const len = bytes.length;\n    if (len !== montgomeryBytes && len !== fieldLen)\n      throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${len}`);\n    return bytesToNumberLE(adjustScalarBytes(bytes));\n  }\n  function scalarMult(scalar: Hex, u: Hex): Uint8Array {\n    const pointU = decodeUCoordinate(u);\n    const _scalar = decodeScalar(scalar);\n    const pu = montgomeryLadder(pointU, _scalar);\n    // The result was not contributory\n    // https://cr.yp.to/ecdh.html#validate\n    if (pu === _0n) throw new Error('Invalid private or public key received');\n    return encodeUCoordinate(pu);\n  }\n  // Computes public key from private. By doing scalar multiplication of base point.\n  const GuBytes = encodeUCoordinate(CURVE.Gu);\n  function scalarMultBase(scalar: Hex): Uint8Array {\n    return scalarMult(scalar, GuBytes);\n  }\n\n  return {\n    scalarMult,\n    scalarMultBase,\n    getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),\n    getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),\n    utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },\n    GuBytes: GuBytes,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { Group, GroupConstructor, AffinePoint } from './curve.js';\nimport { mod, IField } from './modular.js';\nimport type { CHash } from './utils.js';\nimport { bytesToNumberBE, isBytes, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\nfunction validateDST(dst: UnicodeOrBytes): Uint8Array {\n  if (isBytes(dst)) return dst;\n  if (typeof dst === 'string') return utf8ToBytes(dst);\n  throw new Error('DST must be Uint8Array or string');\n}\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\nfunction isNum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  isNum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (ell > 255) throw new Error('Invalid xmd length');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n// Produces a uniformly random byte string using an extendable-output function (XOF) H.\n// 1. The collision resistance of H MUST be at least k bits.\n// 2. H MUST be an XOF that has been proved indifferentiable from\n//    a random oracle under a reasonable cryptographic assumption.\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  isNum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://www.rfc-editor.org/rfc/rfc9380#section-5.2\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'stringOrUint8Array',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  abytes(msg);\n  isNum(count);\n  const DST = validateDST(_DST);\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve.\n    // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // Encodes byte string to elliptic curve.\n    // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha512 } from '@noble/hashes/sha512';\nimport { concatBytes, randomBytes, utf8ToBytes } from '@noble/hashes/utils';\nimport { ExtPointType, twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport {\n  bytesToHex,\n  bytesToNumberLE,\n  ensureBytes,\n  equalBytes,\n  Hex,\n  numberToBytesLE,\n} from './abstract/utils.js';\nimport { createHasher, htfBasicOpts, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { AffinePoint, Group } from './abstract/curve.js';\n\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\n\nconst ED25519_P = BigInt(\n  '57896044618658097711785492504343953926634992332820282019728792003956564819949'\n);\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt(\n  '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n\nfunction ed25519_pow_2_252_3(x: bigint) {\n  const P = ED25519_P;\n  const x2 = (x * x) % P;\n  const b2 = (x2 * x) % P; // x^3, 11\n  const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111\n  const b5 = (pow2(b4, _1n, P) * x) % P; // x^31\n  const b10 = (pow2(b5, _5n, P) * b5) % P;\n  const b20 = (pow2(b10, _10n, P) * b10) % P;\n  const b40 = (pow2(b20, _20n, P) * b20) % P;\n  const b80 = (pow2(b40, _40n, P) * b40) % P;\n  const b160 = (pow2(b80, _80n, P) * b80) % P;\n  const b240 = (pow2(b160, _80n, P) * b80) % P;\n  const b250 = (pow2(b240, _10n, P) * b10) % P;\n  const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P;\n  // ^ To pow to (p+3)/8, multiply it by x.\n  return { pow_p_5_8, b2 };\n}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\n  // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n  // set the three least significant bits of the first byte\n  bytes[0] &= 248; // 0b1111_1000\n  // and the most significant bit of the last to zero,\n  bytes[31] &= 127; // 0b0111_1111\n  // set the second most significant bit of the last byte to 1\n  bytes[31] |= 64; // 0b0100_0000\n  return bytes;\n}\n\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n  const P = ED25519_P;\n  const v3 = mod(v * v * v, P); // v\u00B3\n  const v7 = mod(v3 * v3 * v, P); // v\u2077\n  // (p+3)/8 and (p-5)/8\n  const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;\n  let x = mod(u * v3 * pow, P); // (uv\u00B3)(uv\u2077)^(p-5)/8\n  const vx2 = mod(v * x * x, P); // vx\u00B2\n  const root1 = x; // First root candidate\n  const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate\n  const useRoot1 = vx2 === u; // If vx\u00B2 = u (mod p), x is a square root\n  const useRoot2 = vx2 === mod(-u, P); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n  const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx\u00B2 = -u\u221A(-1)\n  if (useRoot1) x = root1;\n  if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n  if (isNegativeLE(x, P)) x = mod(-x, P);\n  return { isValid: useRoot1 || useRoot2, value: x };\n}\n\n// Just in case\nexport const ED25519_TORSION_SUBGROUP = [\n  '0100000000000000000000000000000000000000000000000000000000000000',\n  'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n  '0000000000000000000000000000000000000000000000000000000000000080',\n  '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n  'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n  '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n  '0000000000000000000000000000000000000000000000000000000000000000',\n  'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n];\n\nconst Fp = Field(ED25519_P, undefined, true);\n\nconst ed25519Defaults = {\n  // Param: a\n  a: BigInt(-1), // Fp.create(-1) is proper; our way still works and is faster\n  // d is equal to -121665/121666 over finite field.\n  // Negative number is P - number, and division is invert(number, P)\n  d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n  // Finite field \uD835\uDD3Dp over which we'll do calculations; 2n**255n - 19n\n  Fp,\n  // Subgroup order: how many points curve has\n  // 2n**252n + 27742317777372353535851937790883648493n;\n  n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),\n  // Cofactor\n  h: BigInt(8),\n  // Base point (x, y) aka generator point\n  Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n  Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n  hash: sha512,\n  randomBytes,\n  adjustScalarBytes,\n  // dom2\n  // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3.\n  // Constant-time, u/\u221Av\n  uvRatio,\n} as const;\n\nexport const ed25519 = /* @__PURE__ */ twistedEdwards(ed25519Defaults);\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n  if (ctx.length > 255) throw new Error('Context is too big');\n  return concatBytes(\n    utf8ToBytes('SigEd25519 no Ed25519 collisions'),\n    new Uint8Array([phflag ? 1 : 0, ctx.length]),\n    ctx,\n    data\n  );\n}\n\nexport const ed25519ctx = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n});\nexport const ed25519ph = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n  prehash: sha512,\n});\n\nexport const x25519 = /* @__PURE__ */ (() =>\n  montgomery({\n    P: ED25519_P,\n    a: BigInt(486662),\n    montgomeryBits: 255, // n is 253 bits\n    nByteLength: 32,\n    Gu: BigInt(9),\n    powPminus2: (x: bigint): bigint => {\n      const P = ED25519_P;\n      // x^(p-2) aka x^(2^255-21)\n      const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n      return mod(pow2(pow_p_5_8, BigInt(3), P) * b2, P);\n    },\n    adjustScalarBytes,\n    randomBytes,\n  }))();\n\n/**\n * Converts ed25519 public key to x25519 public key. Uses formula:\n * * `(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)`\n * * `(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))`\n * @example\n *   const someonesPub = ed25519.getPublicKey(ed25519.utils.randomPrivateKey());\n *   const aPriv = x25519.utils.randomPrivateKey();\n *   x25519.getSharedSecret(aPriv, edwardsToMontgomeryPub(someonesPub))\n */\nexport function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array {\n  const { y } = ed25519.ExtendedPoint.fromHex(edwardsPub);\n  const _1n = BigInt(1);\n  return Fp.toBytes(Fp.create((_1n + y) * Fp.inv(_1n - y)));\n}\nexport const edwardsToMontgomery = edwardsToMontgomeryPub; // deprecated\n\n/**\n * Converts ed25519 secret key to x25519 secret key.\n * @example\n *   const someonesPub = x25519.getPublicKey(x25519.utils.randomPrivateKey());\n *   const aPriv = ed25519.utils.randomPrivateKey();\n *   x25519.getSharedSecret(edwardsToMontgomeryPriv(aPriv), someonesPub)\n */\nexport function edwardsToMontgomeryPriv(edwardsPriv: Uint8Array): Uint8Array {\n  const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n  return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\n\n// Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)\n// NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since\n// SageMath returns different root first and everything falls apart\n\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8       # Integer arithmetic\n\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8       # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u: bigint) {\n  let tv1 = Fp.sqr(u);       //  1.  tv1 = u^2\n  tv1 = Fp.mul(tv1, _2n);       //  2.  tv1 = 2 * tv1\n  let xd = Fp.add(tv1, Fp.ONE); //  3.   xd = tv1 + 1         # Nonzero: -1 is square (mod p), tv1 is not\n  let x1n = Fp.neg(ELL2_J);  //  4.  x1n = -J              # x1 = x1n / xd = -J / (1 + 2 * u^2)\n  let tv2 = Fp.sqr(xd);      //  5.  tv2 = xd^2\n  let gxd = Fp.mul(tv2, xd);    //  6.  gxd = tv2 * xd        # gxd = xd^3\n  let gx1 = Fp.mul(tv1, ELL2_J); //  7.  gx1 = J * tv1         # x1n + J * xd\n  gx1 = Fp.mul(gx1, x1n);       //  8.  gx1 = gx1 * x1n       # x1n^2 + J * x1n * xd\n  gx1 = Fp.add(gx1, tv2);       //  9.  gx1 = gx1 + tv2       # x1n^2 + J * x1n * xd + xd^2\n  gx1 = Fp.mul(gx1, x1n);       //  10. gx1 = gx1 * x1n       # x1n^3 + J * x1n^2 * xd + x1n * xd^2\n  let tv3 = Fp.sqr(gxd);     //  11. tv3 = gxd^2\n  tv2 = Fp.sqr(tv3);         //  12. tv2 = tv3^2           # gxd^4\n  tv3 = Fp.mul(tv3, gxd);       //  13. tv3 = tv3 * gxd       # gxd^3\n  tv3 = Fp.mul(tv3, gx1);       //  14. tv3 = tv3 * gx1       # gx1 * gxd^3\n  tv2 = Fp.mul(tv2, tv3);       //  15. tv2 = tv2 * tv3       # gx1 * gxd^7\n  let y11 = Fp.pow(tv2, ELL2_C4); //  16. y11 = tv2^c4        # (gx1 * gxd^7)^((p - 5) / 8)\n  y11 = Fp.mul(y11, tv3);       //  17. y11 = y11 * tv3       # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8)\n  let y12 = Fp.mul(y11, ELL2_C3); //  18. y12 = y11 * c3\n  tv2 = Fp.sqr(y11);         //  19. tv2 = y11^2\n  tv2 = Fp.mul(tv2, gxd);       //  20. tv2 = tv2 * gxd\n  let e1 = Fp.eql(tv2, gx1); //  21.  e1 = tv2 == gx1\n  let y1 = Fp.cmov(y12, y11, e1); //  22.  y1 = CMOV(y12, y11, e1)  # If g(x1) is square, this is its sqrt\n  let x2n = Fp.mul(x1n, tv1);   //  23. x2n = x1n * tv1       # x2 = x2n / xd = 2 * u^2 * x1n / xd\n  let y21 = Fp.mul(y11, u);     //  24. y21 = y11 * u\n  y21 = Fp.mul(y21, ELL2_C2);   //  25. y21 = y21 * c2\n  let y22 = Fp.mul(y21, ELL2_C3); //  26. y22 = y21 * c3\n  let gx2 = Fp.mul(gx1, tv1);   //  27. gx2 = gx1 * tv1       # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)\n  tv2 = Fp.sqr(y21);         //  28. tv2 = y21^2\n  tv2 = Fp.mul(tv2, gxd);       //  29. tv2 = tv2 * gxd\n  let e2 = Fp.eql(tv2, gx2); //  30.  e2 = tv2 == gx2\n  let y2 = Fp.cmov(y22, y21, e2); //  31.  y2 = CMOV(y22, y21, e2)  # If g(x2) is square, this is its sqrt\n  tv2 = Fp.sqr(y1);          //  32. tv2 = y1^2\n  tv2 = Fp.mul(tv2, gxd);       //  33. tv2 = tv2 * gxd\n  let e3 = Fp.eql(tv2, gx1); //  34.  e3 = tv2 == gx1\n  let xn = Fp.cmov(x2n, x1n, e3); //  35.  xn = CMOV(x2n, x1n, e3)  # If e3, x = x1, else x = x2\n  let y = Fp.cmov(y2, y1, e3);  //  36.   y = CMOV(y2, y1, e3)    # If e3, y = y1, else y = y2\n  let e4 = Fp.isOdd(y);         //  37.  e4 = sgn0(y) == 1        # Fix sign of y\n  y = Fp.cmov(y, Fp.neg(y), e3 !== e4); //  38.   y = CMOV(y, -y, e3 XOR e4)\n  return { xMn: xn, xMd: xd, yMn: y, yMd: _1n }; //  39. return (xn, xd, y, 1)\n}\n\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\n  const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); //  1.  (xMn, xMd, yMn, yMd) =\n  // map_to_curve_elligator2_curve25519(u)\n  let xn = Fp.mul(xMn, yMd); //  2.  xn = xMn * yMd\n  xn = Fp.mul(xn, ELL2_C1_EDWARDS); //  3.  xn = xn * c1\n  let xd = Fp.mul(xMd, yMn); //  4.  xd = xMd * yMn    # xn / xd = c1 * xM / yM\n  let yn = Fp.sub(xMn, xMd); //  5.  yn = xMn - xMd\n  let yd = Fp.add(xMn, xMd); //  6.  yd = xMn + xMd    # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)\n  let tv1 = Fp.mul(xd, yd); //  7. tv1 = xd * yd\n  let e = Fp.eql(tv1, Fp.ZERO); //  8.   e = tv1 == 0\n  xn = Fp.cmov(xn, Fp.ZERO, e); //  9.  xn = CMOV(xn, 0, e)\n  xd = Fp.cmov(xd, Fp.ONE, e); //  10. xd = CMOV(xd, 1, e)\n  yn = Fp.cmov(yn, Fp.ONE, e); //  11. yn = CMOV(yn, 1, e)\n  yd = Fp.cmov(yd, Fp.ONE, e); //  12. yd = CMOV(yd, 1, e)\n\n  const inv = Fp.invertBatch([xd, yd]); // batch division\n  return { x: Fp.mul(xn, inv[0]), y: Fp.mul(yn, inv[1]) }; //  13. return (xn, xd, yn, yd)\n}\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    ed25519.ExtendedPoint,\n    (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n    {\n      DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',\n      encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha512,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n\nfunction assertRstPoint(other: unknown) {\n  if (!(other instanceof RistPoint)) throw new Error('RistrettoPoint expected');\n}\n\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// \u221A(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt(\n  '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / \u221A(a-d)\nconst INVSQRT_A_MINUS_D = BigInt(\n  '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d\u00B2\nconst ONE_MINUS_D_SQ = BigInt(\n  '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)\u00B2\nconst D_MINUS_ONE_SQ = BigInt(\n  '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/\u221A(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes: Uint8Array) =>\n  ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\ntype ExtendedPoint = ExtPointType;\n\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0: bigint): ExtendedPoint {\n  const { d } = ed25519.CURVE;\n  const P = ed25519.CURVE.Fp.ORDER;\n  const mod = ed25519.CURVE.Fp.create;\n  const r = mod(SQRT_M1 * r0 * r0); // 1\n  const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2\n  let c = BigInt(-1); // 3\n  const D = mod((c - d * r) * mod(r + d)); // 4\n  let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5\n  let s_ = mod(s * r0); // 6\n  if (!isNegativeLE(s_, P)) s_ = mod(-s_);\n  if (!Ns_D_is_sq) s = s_; // 7\n  if (!Ns_D_is_sq) c = r; // 8\n  const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9\n  const s2 = s * s;\n  const W0 = mod((s + s) * D); // 10\n  const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11\n  const W2 = mod(_1n - s2); // 12\n  const W3 = mod(_1n + s2); // 13\n  return new ed25519.ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n}\n\n/**\n * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be\n * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.\n * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint,\n * but it should work in its own namespace: do not combine those two.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-ristretto255-decaf448\n */\nclass RistPoint implements Group<RistPoint> {\n  static BASE: RistPoint;\n  static ZERO: RistPoint;\n  // Private property to discourage combining ExtendedPoint + RistrettoPoint\n  // Always use Ristretto encoding/decoding instead.\n  constructor(private readonly ep: ExtendedPoint) {}\n\n  static fromAffine(ap: AffinePoint<bigint>) {\n    return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n  }\n\n  /**\n   * Takes uniform output of 64-byte hash function like sha512 and converts it to `RistrettoPoint`.\n   * The hash-to-group operation applies Elligator twice and adds the results.\n   * **Note:** this is one-way map, there is no conversion from point to hash.\n   * https://ristretto.group/formulas/elligator.html\n   * @param hex 64-byte output of a hash function\n   */\n  static hashToCurve(hex: Hex): RistPoint {\n    hex = ensureBytes('ristrettoHash', hex, 64);\n    const r1 = bytes255ToNumberLE(hex.slice(0, 32));\n    const R1 = calcElligatorRistrettoMap(r1);\n    const r2 = bytes255ToNumberLE(hex.slice(32, 64));\n    const R2 = calcElligatorRistrettoMap(r2);\n    return new RistPoint(R1.add(R2));\n  }\n\n  /**\n   * Converts ristretto-encoded string to ristretto point.\n   * https://ristretto.group/formulas/decoding.html\n   * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n   */\n  static fromHex(hex: Hex): RistPoint {\n    hex = ensureBytes('ristrettoHex', hex, 32);\n    const { a, d } = ed25519.CURVE;\n    const P = ed25519.CURVE.Fp.ORDER;\n    const mod = ed25519.CURVE.Fp.create;\n    const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';\n    const s = bytes255ToNumberLE(hex);\n    // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.\n    // 3. Check that s is non-negative, or else abort\n    if (!equalBytes(numberToBytesLE(s, 32), hex) || isNegativeLE(s, P)) throw new Error(emsg);\n    const s2 = mod(s * s);\n    const u1 = mod(_1n + a * s2); // 4 (a is -1)\n    const u2 = mod(_1n - a * s2); // 5\n    const u1_2 = mod(u1 * u1);\n    const u2_2 = mod(u2 * u2);\n    const v = mod(a * d * u1_2 - u2_2); // 6\n    const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7\n    const Dx = mod(I * u2); // 8\n    const Dy = mod(I * Dx * v); // 9\n    let x = mod((s + s) * Dx); // 10\n    if (isNegativeLE(x, P)) x = mod(-x); // 10\n    const y = mod(u1 * Dy); // 11\n    const t = mod(x * y); // 12\n    if (!isValid || isNegativeLE(t, P) || y === _0n) throw new Error(emsg);\n    return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n  }\n\n  /**\n   * Encodes ristretto point to Uint8Array.\n   * https://ristretto.group/formulas/encoding.html\n   */\n  toRawBytes(): Uint8Array {\n    let { ex: x, ey: y, ez: z, et: t } = this.ep;\n    const P = ed25519.CURVE.Fp.ORDER;\n    const mod = ed25519.CURVE.Fp.create;\n    const u1 = mod(mod(z + y) * mod(z - y)); // 1\n    const u2 = mod(x * y); // 2\n    // Square root always exists\n    const u2sq = mod(u2 * u2);\n    const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3\n    const D1 = mod(invsqrt * u1); // 4\n    const D2 = mod(invsqrt * u2); // 5\n    const zInv = mod(D1 * D2 * t); // 6\n    let D: bigint; // 7\n    if (isNegativeLE(t * zInv, P)) {\n      let _x = mod(y * SQRT_M1);\n      let _y = mod(x * SQRT_M1);\n      x = _x;\n      y = _y;\n      D = mod(D1 * INVSQRT_A_MINUS_D);\n    } else {\n      D = D2; // 8\n    }\n    if (isNegativeLE(x * zInv, P)) y = mod(-y); // 9\n    let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n    if (isNegativeLE(s, P)) s = mod(-s);\n    return numberToBytesLE(s, 32); // 11\n  }\n\n  toHex(): string {\n    return bytesToHex(this.toRawBytes());\n  }\n\n  toString(): string {\n    return this.toHex();\n  }\n\n  // Compare one point to another.\n  equals(other: RistPoint): boolean {\n    assertRstPoint(other);\n    const { ex: X1, ey: Y1 } = this.ep;\n    const { ex: X2, ey: Y2 } = other.ep;\n    const mod = ed25519.CURVE.Fp.create;\n    // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)\n    const one = mod(X1 * Y2) === mod(Y1 * X2);\n    const two = mod(Y1 * Y2) === mod(X1 * X2);\n    return one || two;\n  }\n\n  add(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.add(other.ep));\n  }\n\n  subtract(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.subtract(other.ep));\n  }\n\n  multiply(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiply(scalar));\n  }\n\n  multiplyUnsafe(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiplyUnsafe(scalar));\n  }\n\n  double(): RistPoint {\n    return new RistPoint(this.ep.double());\n  }\n\n  negate(): RistPoint {\n    return new RistPoint(this.ep.negate());\n  }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n  if (!RistPoint.BASE) RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n  if (!RistPoint.ZERO) RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n  return RistPoint;\n})();\n\n// Hashing to ristretto255. https://www.rfc-editor.org/rfc/rfc9380#appendix-B\nexport const hashToRistretto255 = (msg: Uint8Array, options: htfBasicOpts) => {\n  const d = options.DST;\n  const DST = typeof d === 'string' ? utf8ToBytes(d) : d;\n  const uniform_bytes = expand_message_xmd(msg, DST, 64, sha512);\n  const P = RistPoint.hashToCurve(uniform_bytes);\n  return P;\n};\nexport const hash_to_ristretto255 = hashToRistretto255; // legacy\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\n    // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n    // since we always use positive integers here. It must always be empty:\n    // - add zero byte if exists\n    // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!ut.isBytes(data)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      if (this.is0()) {\n        // (0, 1, 0) aka ZERO is invalid in most contexts.\n        // In BLS, ZERO can be serialized, so we allow it.\n        // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n        if (CURVE.allowInfinityPoint && !Fp.is0(this.py)) return;\n        throw new Error('bad point: ZERO');\n      }\n      // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n      const { x, y } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(n);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.is0();\n      // If invZ was 0, we return zero point. However we still want to execute\n      // all operations, so we replace invZ with a random number, 1.\n      if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n      const ax = Fp.mul(x, iz);\n      const ay = Fp.mul(y, iz);\n      const zz = Fp.mul(z, iz);\n      if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || ut.isBytes(sg)) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest() {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  destroy() {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1P;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\n    a: BigInt(0), // equation params: a, b\n    b: BigInt(7), // Seem to be rigid: bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975\n    Fp, // Field's prime: 2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n\n    n: secp256k1N, // Curve order, total count of valid points in the field\n    // Base point (x, y) aka generator point\n    Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n    Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n    h: BigInt(1), // Cofactor\n    lowS: true, // Allow only low-S signatures by default in sign() and verify()\n    /**\n     * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n     * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n     * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n     * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n     */\n    endo: {\n      beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n      splitScalar: (k: bigint) => {\n        const n = secp256k1N;\n        const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n        const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n        const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n        const b2 = a1;\n        const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n        const c1 = divNearest(b2 * k, n);\n        const c2 = divNearest(-b1 * k, n);\n        let k1 = mod(k - c1 * a1 - c2 * a2, n);\n        let k2 = mod(-c1 * b1 - c2 * b2, n);\n        const k1neg = k1 > POW_2_128;\n        const k2neg = k2 > POW_2_128;\n        if (k1neg) k1 = n - k1;\n        if (k2neg) k2 = n - k2;\n        if (k1 > POW_2_128 || k2 > POW_2_128) {\n          throw new Error('splitScalar: Endomorphism failed, k=' + k);\n        }\n        return { k1neg, k1, k2neg, k2 };\n      },\n    },\n  },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = p.hasEvenY() ? d_ : modN(-d_);\n  return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n  const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  p.assertValidity();\n  return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(numTo32b(modN(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) return false;\n    const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n    const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\n\nexport const schnorr = /* @__PURE__ */ (() => ({\n  getPublicKey: schnorrGetPublicKey,\n  sign: schnorrSign,\n  verify: schnorrVerify,\n  utils: {\n    randomPrivateKey: secp256k1.utils.randomPrivateKey,\n    lift_x,\n    pointToBytes,\n    numberToBytesBE,\n    bytesToNumberBE,\n    taggedHash,\n    mod,\n  },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeHex = exports.remove0x = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nfunction remove0x(hex) {\n    if (hex.startsWith(\"0x\") || hex.startsWith(\"0X\")) {\n        return hex.slice(2);\n    }\n    return hex;\n}\nexports.remove0x = remove0x;\nfunction decodeHex(hex) {\n    return (0, utils_1.hexToBytes)(remove0x(hex));\n}\nexports.decodeHex = decodeHex;\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\nexport type Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('hash must be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "import { toBytes, Input, ensureBytes, Hash } from './utils.js';\nimport assert from './_assert.js';\n\n// Poly1305 is a fast and parallel secret-key message-authentication code.\n// https://cr.yp.to/mac.html, https://cr.yp.to/mac/poly1305-20050329.pdf\n// https://datatracker.ietf.org/doc/html/rfc8439\n\n// Based on Public Domain poly1305-donna https://github.com/floodyberry/poly1305-donna\nconst u8to16 = (a: Uint8Array, i: number) => (a[i++] & 0xff) | ((a[i++] & 0xff) << 8);\nclass Poly1305 implements Hash<Poly1305> {\n  readonly blockLen = 16;\n  readonly outputLen = 16;\n  private buffer = new Uint8Array(16);\n  private r = new Uint16Array(10);\n  private h = new Uint16Array(10);\n  private pad = new Uint16Array(8);\n  private pos = 0;\n  protected finished = false;\n\n  constructor(key: Input) {\n    key = toBytes(key);\n    ensureBytes(key, 32);\n    const t0 = u8to16(key, 0);\n    const t1 = u8to16(key, 2);\n    const t2 = u8to16(key, 4);\n    const t3 = u8to16(key, 6);\n    const t4 = u8to16(key, 8);\n    const t5 = u8to16(key, 10);\n    const t6 = u8to16(key, 12);\n    const t7 = u8to16(key, 14);\n\n    // https://github.com/floodyberry/poly1305-donna/blob/e6ad6e091d30d7f4ec2d4f978be1fcfcbce72781/poly1305-donna-16.h#L47\n    this.r[0] = t0 & 0x1fff;\n    this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n    this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n    this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n    this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n    this.r[5] = (t4 >>> 1) & 0x1ffe;\n    this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n    this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n    this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n    this.r[9] = (t7 >>> 5) & 0x007f;\n    for (let i = 0; i < 8; i++) this.pad[i] = u8to16(key, 16 + 2 * i);\n  }\n\n  private process(data: Uint8Array, offset: number, isLast = false) {\n    const hibit = isLast ? 0 : 1 << 11;\n    const { h, r } = this;\n    const r0 = r[0];\n    const r1 = r[1];\n    const r2 = r[2];\n    const r3 = r[3];\n    const r4 = r[4];\n    const r5 = r[5];\n    const r6 = r[6];\n    const r7 = r[7];\n    const r8 = r[8];\n    const r9 = r[9];\n\n    const t0 = u8to16(data, offset + 0);\n    const t1 = u8to16(data, offset + 2);\n    const t2 = u8to16(data, offset + 4);\n    const t3 = u8to16(data, offset + 6);\n    const t4 = u8to16(data, offset + 8);\n    const t5 = u8to16(data, offset + 10);\n    const t6 = u8to16(data, offset + 12);\n    const t7 = u8to16(data, offset + 14);\n\n    let h0 = h[0] + (t0 & 0x1fff);\n    let h1 = h[1] + (((t0 >>> 13) | (t1 << 3)) & 0x1fff);\n    let h2 = h[2] + (((t1 >>> 10) | (t2 << 6)) & 0x1fff);\n    let h3 = h[3] + (((t2 >>> 7) | (t3 << 9)) & 0x1fff);\n    let h4 = h[4] + (((t3 >>> 4) | (t4 << 12)) & 0x1fff);\n    let h5 = h[5] + ((t4 >>> 1) & 0x1fff);\n    let h6 = h[6] + (((t4 >>> 14) | (t5 << 2)) & 0x1fff);\n    let h7 = h[7] + (((t5 >>> 11) | (t6 << 5)) & 0x1fff);\n    let h8 = h[8] + (((t6 >>> 8) | (t7 << 8)) & 0x1fff);\n    let h9 = h[9] + ((t7 >>> 5) | hibit);\n\n    let c = 0;\n\n    let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n    c = d0 >>> 13;\n    d0 &= 0x1fff;\n    d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n    c += d0 >>> 13;\n    d0 &= 0x1fff;\n\n    let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n    c = d1 >>> 13;\n    d1 &= 0x1fff;\n    d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n    c += d1 >>> 13;\n    d1 &= 0x1fff;\n\n    let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n    c = d2 >>> 13;\n    d2 &= 0x1fff;\n    d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n    c += d2 >>> 13;\n    d2 &= 0x1fff;\n\n    let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n    c = d3 >>> 13;\n    d3 &= 0x1fff;\n    d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n    c += d3 >>> 13;\n    d3 &= 0x1fff;\n\n    let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n    c = d4 >>> 13;\n    d4 &= 0x1fff;\n    d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n    c += d4 >>> 13;\n    d4 &= 0x1fff;\n\n    let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n    c = d5 >>> 13;\n    d5 &= 0x1fff;\n    d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n    c += d5 >>> 13;\n    d5 &= 0x1fff;\n\n    let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n    c = d6 >>> 13;\n    d6 &= 0x1fff;\n    d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n    c += d6 >>> 13;\n    d6 &= 0x1fff;\n\n    let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n    c = d7 >>> 13;\n    d7 &= 0x1fff;\n    d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n    c += d7 >>> 13;\n    d7 &= 0x1fff;\n\n    let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n    c = d8 >>> 13;\n    d8 &= 0x1fff;\n    d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n    c += d8 >>> 13;\n    d8 &= 0x1fff;\n\n    let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n    c = d9 >>> 13;\n    d9 &= 0x1fff;\n    d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n    c += d9 >>> 13;\n    d9 &= 0x1fff;\n\n    c = ((c << 2) + c) | 0;\n    c = (c + d0) | 0;\n    d0 = c & 0x1fff;\n    c = c >>> 13;\n    d1 += c;\n\n    h[0] = d0;\n    h[1] = d1;\n    h[2] = d2;\n    h[3] = d3;\n    h[4] = d4;\n    h[5] = d5;\n    h[6] = d6;\n    h[7] = d7;\n    h[8] = d8;\n    h[9] = d9;\n  }\n\n  private finalize() {\n    const { h, pad } = this;\n    const g = new Uint16Array(10);\n    let c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    for (let i = 2; i < 10; i++) {\n      h[i] += c;\n      c = h[i] >>> 13;\n      h[i] &= 0x1fff;\n    }\n    h[0] += c * 5;\n    c = h[0] >>> 13;\n    h[0] &= 0x1fff;\n    h[1] += c;\n    c = h[1] >>> 13;\n    h[1] &= 0x1fff;\n    h[2] += c;\n\n    g[0] = h[0] + 5;\n    c = g[0] >>> 13;\n    g[0] &= 0x1fff;\n    for (let i = 1; i < 10; i++) {\n      g[i] = h[i] + c;\n      c = g[i] >>> 13;\n      g[i] &= 0x1fff;\n    }\n    g[9] -= 1 << 13;\n\n    let mask = (c ^ 1) - 1;\n    for (let i = 0; i < 10; i++) g[i] &= mask;\n    mask = ~mask;\n    for (let i = 0; i < 10; i++) h[i] = (h[i] & mask) | g[i];\n    h[0] = (h[0] | (h[1] << 13)) & 0xffff;\n    h[1] = ((h[1] >>> 3) | (h[2] << 10)) & 0xffff;\n    h[2] = ((h[2] >>> 6) | (h[3] << 7)) & 0xffff;\n    h[3] = ((h[3] >>> 9) | (h[4] << 4)) & 0xffff;\n    h[4] = ((h[4] >>> 12) | (h[5] << 1) | (h[6] << 14)) & 0xffff;\n    h[5] = ((h[6] >>> 2) | (h[7] << 11)) & 0xffff;\n    h[6] = ((h[7] >>> 5) | (h[8] << 8)) & 0xffff;\n    h[7] = ((h[8] >>> 8) | (h[9] << 5)) & 0xffff;\n\n    let f = h[0] + pad[0];\n    h[0] = f & 0xffff;\n    for (let i = 1; i < 8; i++) {\n      f = (((h[i] + pad[i]) | 0) + (f >>> 16)) | 0;\n      h[i] = f & 0xffff;\n    }\n  }\n  update(data: Input): this {\n    assert.exists(this);\n    const { buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input\n      if (take === blockLen) {\n        for (; blockLen <= len - pos; pos += blockLen) this.process(data, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(buffer, 0, false);\n        this.pos = 0;\n      }\n    }\n    return this;\n  }\n  destroy() {\n    this.h.fill(0);\n    this.r.fill(0);\n    this.buffer.fill(0);\n    this.pad.fill(0);\n  }\n  digestInto(out: Uint8Array) {\n    assert.exists(this);\n    assert.output(out, this);\n    this.finished = true;\n    const { buffer, h } = this;\n    let { pos } = this;\n    if (pos) {\n      buffer[pos++] = 1;\n      // buffer.subarray(pos).fill(0);\n      for (; pos < 16; pos++) buffer[pos] = 0;\n      this.process(buffer, 0, true);\n    }\n    this.finalize();\n    let opos = 0;\n    for (let i = 0; i < 8; i++) {\n      out[opos++] = h[i] >>> 0;\n      out[opos++] = h[i] >>> 8;\n    }\n    return out;\n  }\n  digest(): Uint8Array {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n}\n\nexport type CHash = ReturnType<typeof wrapConstructorWithKey>;\nexport function wrapConstructorWithKey<H extends Hash<H>>(hashCons: (key: Input) => Hash<H>) {\n  const hashC = (msg: Input, key: Input): Uint8Array => hashCons(key).update(toBytes(msg)).digest();\n  const tmp = hashCons(new Uint8Array(32));\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (key: Input) => hashCons(key);\n  return hashC;\n}\n\nexport const poly1305 = wrapConstructorWithKey((key) => new Poly1305(key));\n", "// Basic utils for salsa-like ciphers\n// Check out _micro.ts for descriptive documentation.\nimport assert from './_assert.js';\nimport { u32, utf8ToBytes, checkOpts } from './utils.js';\n\n/*\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n    const counter = new Uint8Array(4);\n    chacha(..., counter, ...); // counter is now 1\n    chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- Original papers don't allow mutating counters\n- Counter overflow is undefined: https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/\n- 3rd-party library stablelib implementation uses an approach where you can provide\n  nonce and counter instead of just nonce - and it will re-use it\n- We could have did something similar, but ChaCha has different counter position\n  (counter | nonce), which is not composable with XChaCha, because full counter\n  is (nonce16 | counter | nonce16). Stablelib doesn't support in-place counter for XChaCha.\n- We could separate nonce & counter and provide separate API for counter re-use, but\n  there are different counter sizes depending on an algorithm.\n- Salsa & ChaCha also differ in structures of key / sigma:\n\n    salsa:     c0 | k(4) | c1 | nonce(2) | ctr(2) | c2 | k(4) | c4\n    chacha:    c(4) | k(8) | ctr(1) | nonce(3)\n    chachaDJB: c(4) | k(8) | ctr(2) | nonce(2)\n- Creating function such as `setSalsaState(key, nonce, sigma, data)` won't work,\n  because we can't re-use counter array\n- 32-bit nonce is `2 ** 32 * 64` = 256GB with 32-bit counter\n- JS does not allow UintArrays bigger than 4GB, so supporting 64-bit counters doesn't matter\n\nStructure is as following:\n\nkey=16 -> sigma16, k=key|key\nkey=32 -> sigma32, k=key\n\nnonces:\nsalsa20:      8   (8-byte counter)\nchacha20djb:  8   (8-byte counter)\nchacha20tls:  12  (4-byte counter)\nxsalsa:       24  (16 -> hsalsa, 8 -> old nonce)\nxchacha:      24  (16 -> hchacha, 8 -> old nonce)\n\nhttps://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2\nUse the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since [RFC8439] specifies a 12-byte nonce).\n*/\n\nconst sigma16 = utf8ToBytes('expand 16-byte k');\nconst sigma32 = utf8ToBytes('expand 32-byte k');\nconst sigma16_32 = u32(sigma16);\nconst sigma32_32 = u32(sigma32);\n\nexport type SalsaOpts = {\n  core: (\n    c: Uint32Array,\n    key: Uint32Array,\n    nonce: Uint32Array,\n    out: Uint32Array,\n    counter: number,\n    rounds?: number\n  ) => void;\n  rounds?: number;\n  counterRight?: boolean; // counterRight ? nonce | counter : counter | nonce;\n  counterLen?: number;\n  blockLen?: number; // NOTE: not tested with different blockLens!\n  allow128bitKeys?: boolean; // Original salsa/chacha allows these, but not tested!\n  extendNonceFn?: (c: Uint32Array, key: Uint8Array, src: Uint8Array, dst: Uint8Array) => Uint8Array;\n};\n\n// Is byte array aligned to 4 byte offset (u32)?\nconst isAligned32 = (b: Uint8Array) => !(b.byteOffset % 4);\n\nexport const salsaBasic = (opts: SalsaOpts) => {\n  const { core, rounds, counterRight, counterLen, allow128bitKeys, extendNonceFn, blockLen } =\n    checkOpts(\n      { rounds: 20, counterRight: false, counterLen: 8, allow128bitKeys: true, blockLen: 64 },\n      opts\n    );\n  assert.number(counterLen);\n  assert.number(rounds);\n  assert.number(blockLen);\n  assert.bool(counterRight);\n  assert.bool(allow128bitKeys);\n  const blockLen32 = blockLen / 4;\n  if (blockLen % 4 !== 0) throw new Error('Salsa/ChaCha: blockLen must be aligned to 4 bytes');\n  return (\n    key: Uint8Array,\n    nonce: Uint8Array,\n    data: Uint8Array,\n    output?: Uint8Array,\n    counter = 0\n  ): Uint8Array => {\n    assert.bytes(key);\n    assert.bytes(nonce);\n    assert.bytes(data);\n    if (!output) output = new Uint8Array(data.length);\n    assert.bytes(output);\n    assert.number(counter);\n    // > new Uint32Array([2**32])\n    // Uint32Array(1) [ 0 ]\n    // > new Uint32Array([2**32-1])\n    // Uint32Array(1) [ 4294967295 ]\n    if (counter < 0 || counter >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n    if (output.length < data.length) {\n      throw new Error(\n        `Salsa/ChaCha: output (${output.length}) is shorter than data (${data.length})`\n      );\n    }\n    const toClean = [];\n    let k, sigma;\n    // Handle 128 byte keys\n    if (key.length === 32) {\n      if (isAligned32(key)) k = key;\n      else {\n        // Align key to 4 bytes\n        k = key.slice();\n        toClean.push(k);\n      }\n      sigma = sigma32_32;\n    } else if (key.length === 16 && allow128bitKeys) {\n      k = new Uint8Array(32);\n      k.set(key);\n      k.set(key, 16);\n      sigma = sigma16_32;\n      toClean.push(k);\n    } else throw new Error(`Salsa/ChaCha: invalid 32-byte key, got length=${key.length}`);\n    // Align nonce to 4 bytes\n    if (!isAligned32(nonce)) {\n      nonce = nonce.slice();\n      toClean.push(nonce);\n    }\n    // Handle extended nonce (HChaCha/HSalsa)\n    if (extendNonceFn) {\n      if (nonce.length <= 16)\n        throw new Error(`Salsa/ChaCha: extended nonce must be bigger than 16 bytes`);\n      k = extendNonceFn(sigma, k, nonce.subarray(0, 16), new Uint8Array(32));\n      toClean.push(k);\n      nonce = nonce.subarray(16);\n    }\n    // Handle nonce counter\n    const nonceLen = 16 - counterLen;\n    if (nonce.length !== nonceLen)\n      throw new Error(`Salsa/ChaCha: nonce must be ${nonceLen} or 16 bytes`);\n    // Pad counter when nonce is 64 bit\n    if (nonceLen !== 12) {\n      const nc = new Uint8Array(12);\n      nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n      toClean.push((nonce = nc));\n    }\n    // Counter positions\n    const block = new Uint8Array(blockLen);\n    // Cast to Uint32Array for speed\n    const b32 = u32(block);\n    const k32 = u32(k);\n    const n32 = u32(nonce);\n    // Make sure that buffers aligned to 4 bytes\n    const d32 = isAligned32(data) && u32(data);\n    const o32 = isAligned32(output) && u32(output);\n    toClean.push(b32);\n    const len = data.length;\n    for (let pos = 0, ctr = counter; pos < len; ctr++) {\n      core(sigma, k32, n32, b32, ctr, rounds);\n      if (ctr >= 2 ** 32 - 1) throw new Error('Salsa/ChaCha: counter overflow');\n      const take = Math.min(blockLen, len - pos);\n      // full block && aligned to 4 bytes\n      if (take === blockLen && o32 && d32) {\n        const pos32 = pos / 4;\n        if (pos % 4 !== 0) throw new Error('Salsa/ChaCha: invalid block position');\n        for (let j = 0; j < blockLen32; j++) o32[pos32 + j] = d32[pos32 + j] ^ b32[j];\n        pos += blockLen;\n        continue;\n      }\n      for (let j = 0; j < take; j++) output[pos + j] = data[pos + j] ^ block[j];\n      pos += take;\n    }\n    for (let i = 0; i < toClean.length; i++) toClean[i].fill(0);\n    return output;\n  };\n};\n", "import {\n  CipherWithOutput,\n  createView,\n  ensureBytes,\n  equalBytes,\n  setBigUint64,\n  u32,\n} from './utils.js';\nimport { poly1305 } from './_poly1305.js';\nimport { salsaBasic } from './_salsa.js';\n\n// ChaCha20 stream cipher was released in 2008. ChaCha aims to increase\n// the diffusion per round, but had slightly less cryptanalysis.\n// https://cr.yp.to/chacha.html, http://cr.yp.to/chacha/chacha-20080128.pdf\n\n// Left rotate for uint32\nconst rotl = (a: number, b: number) => (a << b) | (a >>> (32 - b));\n\n/**\n * ChaCha core function.\n */\n// prettier-ignore\nfunction chachaCore(\n  c: Uint32Array, k: Uint32Array, n: Uint32Array, out: Uint32Array, cnt: number, rounds = 20\n): void {\n  let y00 = c[0], y01 = c[1], y02 = c[2], y03 = c[3]; // \"expa\"   \"nd 3\"  \"2-by\"  \"te k\"\n  let y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3]; // Key      Key     Key     Key\n  let y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7]; // Key      Key     Key     Key\n  let y12 = cnt,  y13 = n[0], y14 = n[1], y15 = n[2]; // Counter  Counter\tNonce   Nonce\n  // Save state to temporary variables\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  // Main loop\n  for (let i = 0; i < rounds; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  // Write output\n  let oi = 0;\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n/**\n * hchacha helper method, used primarily in xchacha, to hash\n * key and nonce into key' and nonce'.\n * Same as chachaCore, but there doesn't seem to be a way to move the block\n * out without 25% performance hit.\n */\n// prettier-ignore\nexport function hchacha(\n  c: Uint32Array, key: Uint8Array, src: Uint8Array, out: Uint8Array\n): Uint8Array {\n  const k32 = u32(key);\n  const i32 = u32(src);\n  const o32 = u32(out);\n  let x00 = c[0],   x01 = c[1],   x02 = c[2],   x03 = c[3];\n  let x04 = k32[0], x05 = k32[1], x06 = k32[2], x07 = k32[3];\n  let x08 = k32[4], x09 = k32[5], x10 = k32[6], x11 = k32[7]\n  let x12 = i32[0], x13 = i32[1], x14 = i32[2], x15 = i32[3];\n   for (let i = 0; i < 20; i += 2) {\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 16);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 12);\n    x00 = (x00 + x04) | 0; x12 = rotl(x12 ^ x00, 8);\n    x08 = (x08 + x12) | 0; x04 = rotl(x04 ^ x08, 7);\n\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 16);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 12);\n    x01 = (x01 + x05) | 0; x13 = rotl(x13 ^ x01, 8);\n    x09 = (x09 + x13) | 0; x05 = rotl(x05 ^ x09, 7);\n\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 16);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 12);\n    x02 = (x02 + x06) | 0; x14 = rotl(x14 ^ x02, 8);\n    x10 = (x10 + x14) | 0; x06 = rotl(x06 ^ x10, 7);\n\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 16);\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 12);\n    x03 = (x03 + x07) | 0; x15 = rotl(x15 ^ x03, 8)\n    x11 = (x11 + x15) | 0; x07 = rotl(x07 ^ x11, 7);\n\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 16);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 12);\n    x00 = (x00 + x05) | 0; x15 = rotl(x15 ^ x00, 8);\n    x10 = (x10 + x15) | 0; x05 = rotl(x05 ^ x10, 7);\n\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 16);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 12);\n    x01 = (x01 + x06) | 0; x12 = rotl(x12 ^ x01, 8);\n    x11 = (x11 + x12) | 0; x06 = rotl(x06 ^ x11, 7);\n\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 16);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 12);\n    x02 = (x02 + x07) | 0; x13 = rotl(x13 ^ x02, 8);\n    x08 = (x08 + x13) | 0; x07 = rotl(x07 ^ x08, 7);\n\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 16)\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 12);\n    x03 = (x03 + x04) | 0; x14 = rotl(x14 ^ x03, 8);\n    x09 = (x09 + x14) | 0; x04 = rotl(x04 ^ x09, 7);\n  }\n  o32[0] = x00;\n  o32[1] = x01;\n  o32[2] = x02;\n  o32[3] = x03;\n  o32[4] = x12;\n  o32[5] = x13;\n  o32[6] = x14;\n  o32[7] = x15;\n  return out;\n}\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n */\nexport const chacha20orig = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 8,\n});\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  allow128bitKeys: false,\n});\n\n/**\n * XChaCha eXtended-nonce ChaCha. 24-byte nonce.\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n */\nexport const xchacha20 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 8,\n  extendNonceFn: hchacha,\n  allow128bitKeys: false,\n});\n\n/**\n * Reduced 8-round chacha, described in original paper.\n */\nexport const chacha8 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 8,\n});\n\n/**\n * Reduced 12-round chacha, described in original paper.\n */\nexport const chacha12 = /* @__PURE__ */ salsaBasic({\n  core: chachaCore,\n  counterRight: false,\n  counterLen: 4,\n  rounds: 12,\n});\n\nconst ZERO = /* @__PURE__ */ new Uint8Array(16);\n// Pad to digest size with zeros\nconst updatePadded = (h: ReturnType<typeof poly1305.create>, msg: Uint8Array) => {\n  h.update(msg);\n  const left = msg.length % 16;\n  if (left) h.update(ZERO.subarray(left));\n};\n\nconst computeTag = (\n  fn: typeof chacha20,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  AAD?: Uint8Array\n) => {\n  const authKey = fn(key, nonce, new Uint8Array(32));\n  const h = poly1305.create(authKey);\n  if (AAD) updatePadded(h, AAD);\n  updatePadded(h, data);\n  const num = new Uint8Array(16);\n  const view = createView(num);\n  setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n  setBigUint64(view, 8, BigInt(data.length), true);\n  h.update(num);\n  const res = h.digest();\n  authKey.fill(0);\n  return res;\n};\n\n/**\n * AEAD algorithm from RFC 8439.\n * Salsa20 and chacha (RFC 8439) use poly1305 differently.\n * We could have composed them similar to:\n * https://github.com/paulmillr/scure-base/blob/b266c73dde977b1dd7ef40ef7a23cc15aab526b3/index.ts#L250\n * But it's hard because of authKey:\n * In salsa20, authKey changes position in salsa stream.\n * In chacha, authKey can't be computed inside computeTag, it modifies the counter.\n */\nexport const _poly1305_aead =\n  (xorStream: typeof chacha20) =>\n  (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): CipherWithOutput => {\n    const tagLength = 16;\n    ensureBytes(key, 32);\n    ensureBytes(nonce);\n    return {\n      tagLength,\n      encrypt: (plaintext: Uint8Array, output?: Uint8Array) => {\n        const plength = plaintext.length;\n        const clength = plength + tagLength;\n        if (output) {\n          ensureBytes(output, clength);\n        } else {\n          output = new Uint8Array(clength);\n        }\n        xorStream(key, nonce, plaintext, output, 1);\n        const tag = computeTag(xorStream, key, nonce, output.subarray(0, -tagLength), AAD);\n        output.set(tag, plength); // append tag\n        return output;\n      },\n      decrypt: (ciphertext: Uint8Array, output?: Uint8Array) => {\n        const clength = ciphertext.length;\n        const plength = clength - tagLength;\n        if (clength < tagLength)\n          throw new Error(`encrypted data must be at least ${tagLength} bytes`);\n        if (output) {\n          ensureBytes(output, plength);\n        } else {\n          output = new Uint8Array(plength);\n        }\n        const data = ciphertext.subarray(0, -tagLength);\n        const passedTag = ciphertext.subarray(-tagLength);\n        const tag = computeTag(xorStream, key, nonce, data, AAD);\n        if (!equalBytes(passedTag, tag)) throw new Error('invalid tag');\n        xorStream(key, nonce, data, output, 1);\n        return output;\n      },\n    };\n  };\n\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20poly1305 = /* @__PURE__ */ _poly1305_aead(chacha20);\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n */\nexport const xchacha20poly1305 = /* @__PURE__ */ _poly1305_aead(xchacha20);\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\n// copied from utils\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(h: Hash) {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(h.outputLen);\n  number(h.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word: number, shift: number) =>\n  (word << shift) | ((word >>> (32 - shift)) >>> 0);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word: number) =>\n  ((word << 24) & 0xff000000) |\n  ((word << 8) & 0xff0000) |\n  ((word >>> 8) & 0xff00) |\n  ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n: number) => n : (n: number) => byteSwap(n);\n\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr: Uint32Array) {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest() {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  destroy() {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "import { hash as assertHash, number as assertNumber } from './_assert.js';\nimport { CHash, Input, toBytes } from './utils.js';\nimport { hmac } from './hmac.js';\n\n// HKDF (RFC 5869)\n// https://soatok.blog/2021/11/17/understanding-hkdf/\n\n/**\n * HKDF-Extract(IKM, salt) -> PRK\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash\n * @param ikm\n * @param salt\n * @returns\n */\nexport function extract(hash: CHash, ikm: Input, salt?: Input) {\n  assertHash(hash);\n  // NOTE: some libraries treat zero-length array as 'not provided';\n  // we don't, since we have undefined as 'not provided'\n  // https://github.com/RustCrypto/KDFs/issues/15\n  if (salt === undefined) salt = new Uint8Array(hash.outputLen); // if not provided, it is set to a string of HashLen zeros\n  return hmac(hash, toBytes(salt), toBytes(ikm));\n}\n\n// HKDF-Expand(PRK, info, L) -> OKM\nconst HKDF_COUNTER = /* @__PURE__ */ new Uint8Array([0]);\nconst EMPTY_BUFFER = /* @__PURE__ */ new Uint8Array();\n\n/**\n * HKDF-expand from the spec.\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in octets\n */\nexport function expand(hash: CHash, prk: Input, info?: Input, length: number = 32) {\n  assertHash(hash);\n  assertNumber(length);\n  if (length > 255 * hash.outputLen) throw new Error('Length should be <= 255*HashLen');\n  const blocks = Math.ceil(length / hash.outputLen);\n  if (info === undefined) info = EMPTY_BUFFER;\n  // first L(ength) octets of T\n  const okm = new Uint8Array(blocks * hash.outputLen);\n  // Re-use HMAC instance between blocks\n  const HMAC = hmac.create(hash, prk);\n  const HMACTmp = HMAC._cloneInto();\n  const T = new Uint8Array(HMAC.outputLen);\n  for (let counter = 0; counter < blocks; counter++) {\n    HKDF_COUNTER[0] = counter + 1;\n    // T(0) = empty string (zero length)\n    // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n    HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n      .update(info)\n      .update(HKDF_COUNTER)\n      .digestInto(T);\n    okm.set(T, hash.outputLen * counter);\n    HMAC._cloneInto(HMACTmp);\n  }\n  HMAC.destroy();\n  HMACTmp.destroy();\n  T.fill(0);\n  HKDF_COUNTER.fill(0);\n  return okm.slice(0, length);\n}\n\n/**\n * HKDF (RFC 5869): extract + expand in one step.\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information\n * @param length - length of output keying material in octets\n */\nexport const hkdf = (\n  hash: CHash,\n  ikm: Input,\n  salt: Input | undefined,\n  info: Input | undefined,\n  length: number\n) => expand(hash, extract(hash, ikm, salt), info, length);\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Choice: a ? b : c\nexport const Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nexport const Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    exists(this);\n    output(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends HashMD<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = SHA256_IV[0] | 0;\n  B = SHA256_IV[1] | 0;\n  C = SHA256_IV[2] | 0;\n  D = SHA256_IV[3] | 0;\n  E = SHA256_IV[4] | 0;\n  F = SHA256_IV[5] | 0;\n  G = SHA256_IV[6] | 0;\n  H = SHA256_IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.aes256gcm = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar crypto_1 = require(\"crypto\");\nvar consts_1 = require(\"../consts\");\n// make `node:crypto`'s aes compatible with `@noble/ciphers`\nfunction aes256gcm(key, nonce, AAD) {\n    var encrypt = function (plainText) {\n        var cipher = (0, crypto_1.createCipheriv)(\"aes-256-gcm\", key, nonce);\n        if (AAD) {\n            cipher.setAAD(AAD);\n        }\n        var updated = cipher.update(plainText);\n        var finalized = cipher.final();\n        return (0, utils_1.concatBytes)(updated, finalized, cipher.getAuthTag());\n    };\n    var decrypt = function (cipherText) {\n        var encrypted = cipherText.subarray(0, cipherText.length - consts_1.AEAD_TAG_LENGTH);\n        var tag = cipherText.subarray(-consts_1.AEAD_TAG_LENGTH);\n        var decipher = (0, crypto_1.createDecipheriv)(\"aes-256-gcm\", key, nonce);\n        if (AAD) {\n            decipher.setAAD(AAD);\n        }\n        decipher.setAuthTag(tag);\n        var updated = decipher.update(encrypted);\n        var finalized = decipher.final();\n        return (0, utils_1.concatBytes)(updated, finalized);\n    };\n    return {\n        tagLength: consts_1.AEAD_TAG_LENGTH,\n        encrypt: encrypt,\n        decrypt: decrypt,\n    };\n}\nexports.aes256gcm = aes256gcm;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deriveKey = exports.aesDecrypt = exports.aesEncrypt = void 0;\nvar chacha_1 = require(\"@noble/ciphers/chacha\");\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar utils_2 = require(\"@noble/ciphers/webcrypto/utils\");\nvar hkdf_1 = require(\"@noble/hashes/hkdf\");\nvar sha256_1 = require(\"@noble/hashes/sha256\");\nvar config_1 = require(\"../config\");\nvar consts_1 = require(\"../consts\");\nvar compat_1 = require(\"./compat\");\nfunction aesEncrypt(key, plainText) {\n    // TODO: Rename to symEncrypt\n    return _exec(true, key, plainText);\n}\nexports.aesEncrypt = aesEncrypt;\nfunction aesDecrypt(key, cipherText) {\n    // TODO: Rename to symDecrypt\n    return _exec(false, key, cipherText);\n}\nexports.aesDecrypt = aesDecrypt;\nfunction deriveKey(master) {\n    // 32 bytes shared secret for aes and xchacha20\n    return (0, hkdf_1.hkdf)(sha256_1.sha256, master, undefined, undefined, 32);\n}\nexports.deriveKey = deriveKey;\nfunction _exec(is_encryption, key, data) {\n    var algorithm = (0, config_1.symmetricAlgorithm)();\n    var callback = is_encryption ? _encrypt : _decrypt;\n    if (algorithm === \"aes-256-gcm\") {\n        return callback(compat_1.aes256gcm, key, data, (0, config_1.symmetricNonceLength)());\n    }\n    else if (algorithm === \"xchacha20\") {\n        return callback(chacha_1.xchacha20poly1305, key, data, consts_1.XCHACHA20_NONCE_LENGTH);\n    }\n    else {\n        throw new Error(\"Not implemented\");\n    }\n}\nfunction _encrypt(func, key, plainText, nonceLength) {\n    var nonce = (0, utils_2.randomBytes)(nonceLength);\n    var cipher = func(key, nonce);\n    var ciphered = cipher.encrypt(plainText); // TAG + encrypted\n    var encrypted = ciphered.subarray(0, ciphered.length - consts_1.AEAD_TAG_LENGTH);\n    var tag = ciphered.subarray(-consts_1.AEAD_TAG_LENGTH);\n    return (0, utils_1.concatBytes)(nonce, tag, encrypted);\n}\nfunction _decrypt(func, key, cipherText, nonceLength) {\n    var nonceTagLength = nonceLength + consts_1.AEAD_TAG_LENGTH;\n    var nonce = cipherText.subarray(0, nonceLength);\n    var tag = cipherText.subarray(nonceLength, nonceTagLength);\n    var encrypted = cipherText.subarray(nonceTagLength);\n    var decipher = func(key, Uint8Array.from(nonce)); // to reset byteOffset\n    var ciphered = (0, utils_1.concatBytes)(encrypted, tag);\n    return decipher.decrypt(ciphered);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hexToPublicKey = exports.convertPublicKeyFormat = exports.getSharedPoint = exports.getSharedKey = exports.getPublicKey = exports.isValidPrivateKey = exports.getValidSecret = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar utils_2 = require(\"@noble/ciphers/webcrypto/utils\");\nvar ed25519_1 = require(\"@noble/curves/ed25519\");\nvar secp256k1_1 = require(\"@noble/curves/secp256k1\");\nvar config_1 = require(\"../config\");\nvar consts_1 = require(\"../consts\");\nvar hex_1 = require(\"./hex\");\nvar symmetric_1 = require(\"./symmetric\");\nfunction getValidSecret() {\n    var key;\n    do {\n        key = (0, utils_2.randomBytes)(consts_1.SECRET_KEY_LENGTH);\n    } while (!isValidPrivateKey(key));\n    return key;\n}\nexports.getValidSecret = getValidSecret;\nfunction isValidPrivateKey(secret) {\n    // on secp256k1: only key \u2208 (0, group order) is valid\n    // on curve25519: any 32-byte key is valid\n    return _exec(function (curve) { return curve.utils.isValidPrivateKey(secret); }, function () { return true; }, function () { return true; });\n}\nexports.isValidPrivateKey = isValidPrivateKey;\nfunction getPublicKey(secret) {\n    return _exec(function (curve) { return curve.getPublicKey(secret); }, function (curve) { return curve.getPublicKey(secret); }, function (curve) { return curve.getPublicKey(secret); });\n}\nexports.getPublicKey = getPublicKey;\nfunction getSharedKey(ephemeralPoint, sharedPoint) {\n    return (0, symmetric_1.deriveKey)((0, utils_1.concatBytes)(ephemeralPoint, sharedPoint));\n}\nexports.getSharedKey = getSharedKey;\nfunction getSharedPoint(sk, pk, compressed) {\n    return _exec(function (curve) { return curve.getSharedSecret(sk, pk, compressed); }, function (curve) { return curve.getSharedSecret(sk, pk); }, function (curve) {\n        // Note: scalar is hashed from sk\n        var scalar = curve.utils.getExtendedPublicKey(sk).scalar;\n        var point = curve.ExtendedPoint.fromHex(pk).multiply(scalar);\n        return point.toRawBytes();\n    });\n}\nexports.getSharedPoint = getSharedPoint;\nfunction convertPublicKeyFormat(pk, compressed) {\n    // only for secp256k1\n    return _exec(function (curve) { return curve.getSharedSecret(BigInt(1), pk, compressed); }, function () { return pk; }, function () { return pk; });\n}\nexports.convertPublicKeyFormat = convertPublicKeyFormat;\nfunction hexToPublicKey(hex) {\n    var decoded = (0, hex_1.decodeHex)(hex);\n    return _exec(function () {\n        if (decoded.length === consts_1.ETH_PUBLIC_KEY_SIZE) {\n            var fixed = new Uint8Array(1 + decoded.length);\n            fixed.set([0x04]);\n            fixed.set(decoded, 1);\n            return fixed;\n        }\n        return decoded;\n    }, function () { return decoded; }, function () { return decoded; });\n}\nexports.hexToPublicKey = hexToPublicKey;\nfunction _exec(secp256k1Callback, x25519Callback, ed25519Callback) {\n    if ((0, config_1.ellipticCurve)() === \"secp256k1\") {\n        return secp256k1Callback(secp256k1_1.secp256k1);\n    }\n    else if ((0, config_1.ellipticCurve)() === \"x25519\") {\n        return x25519Callback(ed25519_1.x25519);\n    }\n    else if ((0, config_1.ellipticCurve)() === \"ed25519\") {\n        return ed25519Callback(ed25519_1.ed25519);\n    }\n    else {\n        throw new Error(\"Not implemented\");\n    }\n}\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// under this folder no `Buffer`\n__exportStar(require(\"./elliptic\"), exports);\n__exportStar(require(\"./hex\"), exports);\n__exportStar(require(\"./symmetric\"), exports);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PublicKey = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar config_1 = require(\"../config\");\nvar utils_2 = require(\"../utils\");\nvar PublicKey = /** @class */ (function () {\n    function PublicKey(data) {\n        this.data = (0, utils_2.convertPublicKeyFormat)(data, true);\n    }\n    PublicKey.fromHex = function (hex) {\n        return new PublicKey((0, utils_2.hexToPublicKey)(hex));\n    };\n    Object.defineProperty(PublicKey.prototype, \"uncompressed\", {\n        get: function () {\n            // TODO: Uint8Array\n            return Buffer.from((0, utils_2.convertPublicKeyFormat)(this.data, false));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(PublicKey.prototype, \"compressed\", {\n        get: function () {\n            // TODO: Uint8Array\n            return Buffer.from(this.data);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PublicKey.prototype.toHex = function (compressed) {\n        if (compressed === void 0) { compressed = true; }\n        if (compressed) {\n            return (0, utils_1.bytesToHex)(this.data);\n        }\n        else {\n            return (0, utils_1.bytesToHex)(this.uncompressed);\n        }\n    };\n    PublicKey.prototype.decapsulate = function (sk) {\n        var senderPoint;\n        var sharedPoint;\n        if ((0, config_1.isHkdfKeyCompressed)()) {\n            senderPoint = this.data;\n            sharedPoint = sk.multiply(this, true);\n        }\n        else {\n            senderPoint = this.uncompressed;\n            sharedPoint = sk.multiply(this, false);\n        }\n        return (0, utils_2.getSharedKey)(senderPoint, sharedPoint);\n    };\n    PublicKey.prototype.equals = function (other) {\n        return (0, utils_1.equalBytes)(this.data, other.data);\n    };\n    return PublicKey;\n}());\nexports.PublicKey = PublicKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PrivateKey = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar config_1 = require(\"../config\");\nvar utils_2 = require(\"../utils\");\nvar PublicKey_1 = require(\"./PublicKey\");\nvar PrivateKey = /** @class */ (function () {\n    function PrivateKey(secret) {\n        var sk = secret === undefined ? (0, utils_2.getValidSecret)() : secret;\n        if (!(0, utils_2.isValidPrivateKey)(sk)) {\n            throw new Error(\"Invalid private key\");\n        }\n        this.data = sk;\n        this.publicKey = new PublicKey_1.PublicKey((0, utils_2.getPublicKey)(sk));\n    }\n    PrivateKey.fromHex = function (hex) {\n        return new PrivateKey((0, utils_2.decodeHex)(hex));\n    };\n    Object.defineProperty(PrivateKey.prototype, \"secret\", {\n        get: function () {\n            // TODO: Uint8Array\n            return Buffer.from(this.data);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PrivateKey.prototype.toHex = function () {\n        return (0, utils_1.bytesToHex)(this.data);\n    };\n    PrivateKey.prototype.encapsulate = function (pk) {\n        var senderPoint;\n        var sharedPoint;\n        if ((0, config_1.isHkdfKeyCompressed)()) {\n            senderPoint = this.publicKey.compressed;\n            sharedPoint = this.multiply(pk, true);\n        }\n        else {\n            senderPoint = this.publicKey.uncompressed;\n            sharedPoint = this.multiply(pk, false);\n        }\n        return (0, utils_2.getSharedKey)(senderPoint, sharedPoint);\n    };\n    PrivateKey.prototype.multiply = function (pk, compressed) {\n        if (compressed === void 0) { compressed = false; }\n        return (0, utils_2.getSharedPoint)(this.data, pk.compressed, compressed);\n    };\n    PrivateKey.prototype.equals = function (other) {\n        return (0, utils_1.equalBytes)(this.data, other.data);\n    };\n    return PrivateKey;\n}());\nexports.PrivateKey = PrivateKey;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PublicKey = exports.PrivateKey = void 0;\n// treat Buffer as Uint8array, i.e. no call of Buffer specific functions\n// finally Uint8Array only\nvar PrivateKey_1 = require(\"./PrivateKey\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return PrivateKey_1.PrivateKey; } });\nvar PublicKey_1 = require(\"./PublicKey\");\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return PublicKey_1.PublicKey; } });\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.utils = exports.PublicKey = exports.PrivateKey = exports.ECIES_CONFIG = exports.decrypt = exports.encrypt = void 0;\nvar utils_1 = require(\"@noble/ciphers/utils\");\nvar config_1 = require(\"./config\");\nvar keys_1 = require(\"./keys\");\nvar utils_2 = require(\"./utils\");\nfunction encrypt(receiverRawPK, msg) {\n    var ephemeralKey = new keys_1.PrivateKey();\n    var receiverPK = receiverRawPK instanceof Uint8Array\n        ? new keys_1.PublicKey(receiverRawPK)\n        : keys_1.PublicKey.fromHex(receiverRawPK);\n    var symKey = ephemeralKey.encapsulate(receiverPK);\n    var encrypted = (0, utils_2.aesEncrypt)(symKey, msg);\n    var pk;\n    if ((0, config_1.isEphemeralKeyCompressed)()) {\n        pk = ephemeralKey.publicKey.compressed;\n    }\n    else {\n        pk = ephemeralKey.publicKey.uncompressed;\n    }\n    return Buffer.from((0, utils_1.concatBytes)(pk, encrypted));\n}\nexports.encrypt = encrypt;\nfunction decrypt(receiverRawSK, msg) {\n    var receiverSK = receiverRawSK instanceof Uint8Array\n        ? new keys_1.PrivateKey(receiverRawSK)\n        : keys_1.PrivateKey.fromHex(receiverRawSK);\n    var keySize = (0, config_1.ephemeralKeySize)();\n    var senderPK = new keys_1.PublicKey(msg.subarray(0, keySize));\n    var encrypted = msg.subarray(keySize);\n    var symKey = senderPK.decapsulate(receiverSK);\n    return Buffer.from((0, utils_2.aesDecrypt)(symKey, encrypted));\n}\nexports.decrypt = decrypt;\nvar config_2 = require(\"./config\");\nObject.defineProperty(exports, \"ECIES_CONFIG\", { enumerable: true, get: function () { return config_2.ECIES_CONFIG; } });\nvar keys_2 = require(\"./keys\");\nObject.defineProperty(exports, \"PrivateKey\", { enumerable: true, get: function () { return keys_2.PrivateKey; } });\nObject.defineProperty(exports, \"PublicKey\", { enumerable: true, get: function () { return keys_2.PublicKey; } });\nexports.utils = {\n    // TODO: review these before 0.5.0\n    aesDecrypt: utils_2.aesDecrypt,\n    aesEncrypt: utils_2.aesEncrypt,\n    decodeHex: utils_2.decodeHex,\n    getValidSecret: utils_2.getValidSecret,\n    remove0x: utils_2.remove0x,\n};\n", "'use strict'\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/per_context/primordials.js\n\n  Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n  ArrayIsArray(self) {\n    return Array.isArray(self)\n  },\n  ArrayPrototypeIncludes(self, el) {\n    return self.includes(el)\n  },\n  ArrayPrototypeIndexOf(self, el) {\n    return self.indexOf(el)\n  },\n  ArrayPrototypeJoin(self, sep) {\n    return self.join(sep)\n  },\n  ArrayPrototypeMap(self, fn) {\n    return self.map(fn)\n  },\n  ArrayPrototypePop(self, el) {\n    return self.pop(el)\n  },\n  ArrayPrototypePush(self, el) {\n    return self.push(el)\n  },\n  ArrayPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  Error,\n  FunctionPrototypeCall(fn, thisArgs, ...args) {\n    return fn.call(thisArgs, ...args)\n  },\n  FunctionPrototypeSymbolHasInstance(self, instance) {\n    return Function.prototype[Symbol.hasInstance].call(self, instance)\n  },\n  MathFloor: Math.floor,\n  Number,\n  NumberIsInteger: Number.isInteger,\n  NumberIsNaN: Number.isNaN,\n  NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n  NumberParseInt: Number.parseInt,\n  ObjectDefineProperties(self, props) {\n    return Object.defineProperties(self, props)\n  },\n  ObjectDefineProperty(self, name, prop) {\n    return Object.defineProperty(self, name, prop)\n  },\n  ObjectGetOwnPropertyDescriptor(self, name) {\n    return Object.getOwnPropertyDescriptor(self, name)\n  },\n  ObjectKeys(obj) {\n    return Object.keys(obj)\n  },\n  ObjectSetPrototypeOf(target, proto) {\n    return Object.setPrototypeOf(target, proto)\n  },\n  Promise,\n  PromisePrototypeCatch(self, fn) {\n    return self.catch(fn)\n  },\n  PromisePrototypeThen(self, thenFn, catchFn) {\n    return self.then(thenFn, catchFn)\n  },\n  PromiseReject(err) {\n    return Promise.reject(err)\n  },\n  PromiseResolve(val) {\n    return Promise.resolve(val)\n  },\n  ReflectApply: Reflect.apply,\n  RegExpPrototypeTest(self, value) {\n    return self.test(value)\n  },\n  SafeSet: Set,\n  String,\n  StringPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  StringPrototypeToLowerCase(self) {\n    return self.toLowerCase()\n  },\n  StringPrototypeToUpperCase(self) {\n    return self.toUpperCase()\n  },\n  StringPrototypeTrim(self) {\n    return self.trim()\n  },\n  Symbol,\n  SymbolFor: Symbol.for,\n  SymbolAsyncIterator: Symbol.asyncIterator,\n  SymbolHasInstance: Symbol.hasInstance,\n  SymbolIterator: Symbol.iterator,\n  SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n  SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n  TypedArrayPrototypeSet(self, buf, len) {\n    return self.set(buf, len)\n  },\n  Boolean: Boolean,\n  Uint8Array\n}\n", "/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n    typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n", "'use strict'\n\nconst bufferModule = require('buffer')\nconst { kResistStopPropagation, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        // eslint-disable-next-line indent\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nconst validateFunction = (value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n}\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n  constructor(errors) {\n    if (!Array.isArray(errors)) {\n      throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n    }\n    let message = ''\n    for (let i = 0; i < errors.length; i++) {\n      message += `    ${errors[i].stack}\\n`\n    }\n    super(message)\n    this.name = 'AggregateError'\n    this.errors = errors\n  }\n}\nmodule.exports = {\n  AggregateError,\n  kEmptyObject: Object.freeze({}),\n  once(callback) {\n    let called = false\n    return function (...args) {\n      if (called) {\n        return\n      }\n      called = true\n      callback.apply(this, args)\n    }\n  },\n  createDeferredPromise: function () {\n    let resolve\n    let reject\n\n    // eslint-disable-next-line promise/param-names\n    const promise = new Promise((res, rej) => {\n      resolve = res\n      reject = rej\n    })\n    return {\n      promise,\n      resolve,\n      reject\n    }\n  },\n  promisify(fn) {\n    return new Promise((resolve, reject) => {\n      fn((err, ...args) => {\n        if (err) {\n          return reject(err)\n        }\n        return resolve(...args)\n      })\n    })\n  },\n  debuglog() {\n    return function () {}\n  },\n  format(format, ...args) {\n    // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n    return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n      const replacement = args.shift()\n      if (type === 'f') {\n        return replacement.toFixed(6)\n      } else if (type === 'j') {\n        return JSON.stringify(replacement)\n      } else if (type === 's' && typeof replacement === 'object') {\n        const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n        return `${ctor} {}`.trim()\n      } else {\n        return replacement.toString()\n      }\n    })\n  },\n  inspect(value) {\n    // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n    switch (typeof value) {\n      case 'string':\n        if (value.includes(\"'\")) {\n          if (!value.includes('\"')) {\n            return `\"${value}\"`\n          } else if (!value.includes('`') && !value.includes('${')) {\n            return `\\`${value}\\``\n          }\n        }\n        return `'${value}'`\n      case 'number':\n        if (isNaN(value)) {\n          return 'NaN'\n        } else if (Object.is(value, -0)) {\n          return String(value)\n        }\n        return value\n      case 'bigint':\n        return `${String(value)}n`\n      case 'boolean':\n      case 'undefined':\n        return String(value)\n      case 'object':\n        return '{}'\n    }\n  },\n  types: {\n    isAsyncFunction(fn) {\n      return fn instanceof AsyncFunction\n    },\n    isArrayBufferView(arr) {\n      return ArrayBuffer.isView(arr)\n    }\n  },\n  isBlob,\n  deprecate(fn, message) {\n    return fn\n  },\n  addAbortListener:\n    require('events').addAbortListener ||\n    function addAbortListener(signal, listener) {\n      if (signal === undefined) {\n        throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n      }\n      validateAbortSignal(signal, 'signal')\n      validateFunction(listener, 'listener')\n      let removeEventListener\n      if (signal.aborted) {\n        queueMicrotask(() => listener())\n      } else {\n        signal.addEventListener('abort', listener, {\n          __proto__: null,\n          once: true,\n          [kResistStopPropagation]: true\n        })\n        removeEventListener = () => {\n          signal.removeEventListener('abort', listener)\n        }\n      }\n      return {\n        __proto__: null,\n        [SymbolDispose]() {\n          var _removeEventListener\n          ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n            ? undefined\n            : _removeEventListener()\n        }\n      }\n    },\n  AbortSignalAny:\n    AbortSignal.any ||\n    function AbortSignalAny(signals) {\n      // Fast path if there is only one signal.\n      if (signals.length === 1) {\n        return signals[0]\n      }\n      const ac = new AbortController()\n      const abort = () => ac.abort()\n      signals.forEach((signal) => {\n        validateAbortSignal(signal, 'signals')\n        signal.addEventListener('abort', abort, {\n          once: true\n        })\n      })\n      ac.signal.addEventListener(\n        'abort',\n        () => {\n          signals.forEach((signal) => signal.removeEventListener('abort', abort))\n        },\n        {\n          once: true\n        }\n      )\n      return ac.signal\n    }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n", "'use strict'\n\nconst { format, inspect, AggregateError: CustomAggregateError } = require('./util')\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/errors.js\n\n  Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n  with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n  'string',\n  'function',\n  'number',\n  'object',\n  // Accept 'Function' and 'Object' as alternative to the lower cased version.\n  'Function',\n  'Object',\n  'boolean',\n  'bigint',\n  'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n  if (!value) {\n    throw new codes.ERR_INTERNAL_ASSERTION(message)\n  }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n  if (typeof msg === 'function') {\n    assert(\n      msg.length <= args.length,\n      // Default options do not count.\n      `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n    )\n    return msg(...args)\n  }\n  const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n  assert(\n    expectedLength === args.length,\n    `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n  )\n  if (args.length === 0) {\n    return msg\n  }\n  return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n  if (!Base) {\n    Base = Error\n  }\n  class NodeError extends Base {\n    constructor(...args) {\n      super(getMessage(code, message, args))\n    }\n    toString() {\n      return `${this.name} [${code}]: ${this.message}`\n    }\n  }\n  Object.defineProperties(NodeError.prototype, {\n    name: {\n      value: Base.name,\n      writable: true,\n      enumerable: false,\n      configurable: true\n    },\n    toString: {\n      value() {\n        return `${this.name} [${code}]: ${this.message}`\n      },\n      writable: true,\n      enumerable: false,\n      configurable: true\n    }\n  })\n  NodeError.prototype.code = code\n  NodeError.prototype[kIsNodeError] = true\n  codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n  // We rename the functions that will be hidden to cut off the stacktrace\n  // at the outermost one\n  const hidden = nodeInternalPrefix + fn.name\n  Object.defineProperty(fn, 'name', {\n    value: hidden\n  })\n  return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n  if (innerError && outerError && innerError !== outerError) {\n    if (Array.isArray(outerError.errors)) {\n      // If `outerError` is already an `AggregateError`.\n      outerError.errors.push(innerError)\n      return outerError\n    }\n    const err = new AggregateError([outerError, innerError], outerError.message)\n    err.code = outerError.code\n    return err\n  }\n  return innerError || outerError\n}\nclass AbortError extends Error {\n  constructor(message = 'The operation was aborted', options = undefined) {\n    if (options !== undefined && typeof options !== 'object') {\n      throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n    }\n    super(message, options)\n    this.code = 'ABORT_ERR'\n    this.name = 'AbortError'\n  }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n  'ERR_INVALID_ARG_TYPE',\n  (name, expected, actual) => {\n    assert(typeof name === 'string', \"'name' must be a string\")\n    if (!Array.isArray(expected)) {\n      expected = [expected]\n    }\n    let msg = 'The '\n    if (name.endsWith(' argument')) {\n      // For cases like 'first argument'\n      msg += `${name} `\n    } else {\n      msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n    }\n    msg += 'must be '\n    const types = []\n    const instances = []\n    const other = []\n    for (const value of expected) {\n      assert(typeof value === 'string', 'All expected entries have to be of type string')\n      if (kTypes.includes(value)) {\n        types.push(value.toLowerCase())\n      } else if (classRegExp.test(value)) {\n        instances.push(value)\n      } else {\n        assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n        other.push(value)\n      }\n    }\n\n    // Special handle `object` in case other instances are allowed to outline\n    // the differences between each other.\n    if (instances.length > 0) {\n      const pos = types.indexOf('object')\n      if (pos !== -1) {\n        types.splice(types, pos, 1)\n        instances.push('Object')\n      }\n    }\n    if (types.length > 0) {\n      switch (types.length) {\n        case 1:\n          msg += `of type ${types[0]}`\n          break\n        case 2:\n          msg += `one of type ${types[0]} or ${types[1]}`\n          break\n        default: {\n          const last = types.pop()\n          msg += `one of type ${types.join(', ')}, or ${last}`\n        }\n      }\n      if (instances.length > 0 || other.length > 0) {\n        msg += ' or '\n      }\n    }\n    if (instances.length > 0) {\n      switch (instances.length) {\n        case 1:\n          msg += `an instance of ${instances[0]}`\n          break\n        case 2:\n          msg += `an instance of ${instances[0]} or ${instances[1]}`\n          break\n        default: {\n          const last = instances.pop()\n          msg += `an instance of ${instances.join(', ')}, or ${last}`\n        }\n      }\n      if (other.length > 0) {\n        msg += ' or '\n      }\n    }\n    switch (other.length) {\n      case 0:\n        break\n      case 1:\n        if (other[0].toLowerCase() !== other[0]) {\n          msg += 'an '\n        }\n        msg += `${other[0]}`\n        break\n      case 2:\n        msg += `one of ${other[0]} or ${other[1]}`\n        break\n      default: {\n        const last = other.pop()\n        msg += `one of ${other.join(', ')}, or ${last}`\n      }\n    }\n    if (actual == null) {\n      msg += `. Received ${actual}`\n    } else if (typeof actual === 'function' && actual.name) {\n      msg += `. Received function ${actual.name}`\n    } else if (typeof actual === 'object') {\n      var _actual$constructor\n      if (\n        (_actual$constructor = actual.constructor) !== null &&\n        _actual$constructor !== undefined &&\n        _actual$constructor.name\n      ) {\n        msg += `. Received an instance of ${actual.constructor.name}`\n      } else {\n        const inspected = inspect(actual, {\n          depth: -1\n        })\n        msg += `. Received ${inspected}`\n      }\n    } else {\n      let inspected = inspect(actual, {\n        colors: false\n      })\n      if (inspected.length > 25) {\n        inspected = `${inspected.slice(0, 25)}...`\n      }\n      msg += `. Received type ${typeof actual} (${inspected})`\n    }\n    return msg\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_ARG_VALUE',\n  (name, value, reason = 'is invalid') => {\n    let inspected = inspect(value)\n    if (inspected.length > 128) {\n      inspected = inspected.slice(0, 128) + '...'\n    }\n    const type = name.includes('.') ? 'property' : 'argument'\n    return `The ${type} '${name}' ${reason}. Received ${inspected}`\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_RETURN_VALUE',\n  (input, name, value) => {\n    var _value$constructor\n    const type =\n      value !== null &&\n      value !== undefined &&\n      (_value$constructor = value.constructor) !== null &&\n      _value$constructor !== undefined &&\n      _value$constructor.name\n        ? `instance of ${value.constructor.name}`\n        : `type ${typeof value}`\n    return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n  },\n  TypeError\n)\nE(\n  'ERR_MISSING_ARGS',\n  (...args) => {\n    assert(args.length > 0, 'At least one arg needs to be specified')\n    let msg\n    const len = args.length\n    args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n    switch (len) {\n      case 1:\n        msg += `The ${args[0]} argument`\n        break\n      case 2:\n        msg += `The ${args[0]} and ${args[1]} arguments`\n        break\n      default:\n        {\n          const last = args.pop()\n          msg += `The ${args.join(', ')}, and ${last} arguments`\n        }\n        break\n    }\n    return `${msg} must be specified`\n  },\n  TypeError\n)\nE(\n  'ERR_OUT_OF_RANGE',\n  (str, range, input) => {\n    assert(range, 'Missing \"range\" argument')\n    let received\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > 2n ** 32n || input < -(2n ** 32n)) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    } else {\n      received = inspect(input)\n    }\n    return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n  },\n  RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n  AbortError,\n  aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n  hideStackFrames,\n  codes\n}\n", "/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n  ArrayIsArray,\n  ArrayPrototypeIncludes,\n  ArrayPrototypeJoin,\n  ArrayPrototypeMap,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberMAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER,\n  NumberParseInt,\n  ObjectPrototypeHasOwnProperty,\n  RegExpPrototypeExec,\n  String,\n  StringPrototypeToUpperCase,\n  StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n  hideStackFrames,\n  codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n  return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n  return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n  if (typeof value === 'undefined') {\n    value = def\n  }\n  if (typeof value === 'string') {\n    if (RegExpPrototypeExec(octalReg, value) === null) {\n      throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n    }\n    value = NumberParseInt(value, 8)\n  }\n  validateUint32(value, name)\n  return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n  // The defaults for min and max correspond to the limits of 32-bit integers.\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  const min = positive ? 1 : 0\n  // 2 ** 32 === 4294967296\n  const max = 4294967295\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n  if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (\n    (min != null && value < min) ||\n    (max != null && value > max) ||\n    ((min != null || max != null) && NumberIsNaN(value))\n  ) {\n    throw new ERR_OUT_OF_RANGE(\n      name,\n      `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n      value\n    )\n  }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n  if (!ArrayPrototypeIncludes(oneOf, value)) {\n    const allowed = ArrayPrototypeJoin(\n      ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n      ', '\n    )\n    const reason = 'must be one of: ' + allowed\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n  if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n  return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n *   allowArray?: boolean,\n *   allowFunction?: boolean,\n *   nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n  const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n  const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n  const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n  if (\n    (!nullable && value === null) ||\n    (!allowArray && ArrayIsArray(value)) ||\n    (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n  ) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n  }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n *                                of \"dictionary\" here, which means any value\n *                                whose Type is either Undefined, Null, or\n *                                Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n  if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n  }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n  if (!ArrayIsArray(value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n  }\n  if (value.length < minLength) {\n    const reason = `must be longer than ${minLength}`\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateString(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateBoolean(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    const signal = value[i]\n    const indexedName = `${name}[${i}]`\n    if (signal == null) {\n      throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n    }\n    validateAbortSignal(signal, indexedName)\n  }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n  validateString(signal, name)\n  if (signals[signal] === undefined) {\n    if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n      throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n    }\n    throw new ERR_UNKNOWN_SIGNAL(signal)\n  }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n  if (!isArrayBufferView(buffer)) {\n    throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n  }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n  const normalizedEncoding = normalizeEncoding(encoding)\n  const length = data.length\n  if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n    throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n  }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n  if (\n    (typeof port !== 'number' && typeof port !== 'string') ||\n    (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n    +port !== +port >>> 0 ||\n    port > 0xffff ||\n    (port === 0 && !allowZero)\n  ) {\n    throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n  }\n  return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n  if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n  if (!ArrayPrototypeIncludes(union, value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n  }\n}\n\n/*\n  The rules for the Link header field are described here:\n  https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n  This regex validates any string surrounded by angle brackets\n  (not necessarily a valid URI reference) followed by zero or more\n  link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n  if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n    throw new ERR_INVALID_ARG_VALUE(\n      name,\n      value,\n      'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n    )\n  }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n  if (typeof hints === 'string') {\n    validateLinkHeaderFormat(hints, 'hints')\n    return hints\n  } else if (ArrayIsArray(hints)) {\n    const hintsLength = hints.length\n    let result = ''\n    if (hintsLength === 0) {\n      return result\n    }\n    for (let i = 0; i < hintsLength; i++) {\n      const link = hints[i]\n      validateLinkHeaderFormat(link, 'hints')\n      result += link\n      if (i !== hintsLength - 1) {\n        result += ', '\n      }\n    }\n    return result\n  }\n  throw new ERR_INVALID_ARG_VALUE(\n    'hints',\n    hints,\n    'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n  )\n}\nmodule.exports = {\n  isInt32,\n  isUint32,\n  parseFileMode,\n  validateArray,\n  validateStringArray,\n  validateBooleanArray,\n  validateAbortSignalArray,\n  validateBoolean,\n  validateBuffer,\n  validateDictionary,\n  validateEncoding,\n  validateFunction,\n  validateInt32,\n  validateInteger,\n  validateNumber,\n  validateObject,\n  validateOneOf,\n  validatePlainFunction,\n  validatePort,\n  validateSignalName,\n  validateString,\n  validateUint32,\n  validateUndefined,\n  validateUnion,\n  validateAbortSignal,\n  validateLinkHeaderValue\n}\n", "'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n  var _obj$_readableState\n  return !!(\n    (\n      obj &&\n      typeof obj.pipe === 'function' &&\n      typeof obj.on === 'function' &&\n      (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n      (!obj._writableState ||\n        ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n          ? undefined\n          : _obj$_readableState.readable) !== false) &&\n      // Duplex\n      (!obj._writableState || obj._readableState)\n    ) // Writable has .pipe.\n  )\n}\n\nfunction isWritableNodeStream(obj) {\n  var _obj$_writableState\n  return !!(\n    (\n      obj &&\n      typeof obj.write === 'function' &&\n      typeof obj.on === 'function' &&\n      (!obj._readableState ||\n        ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n          ? undefined\n          : _obj$_writableState.writable) !== false)\n    ) // Duplex\n  )\n}\n\nfunction isDuplexNodeStream(obj) {\n  return !!(\n    obj &&\n    typeof obj.pipe === 'function' &&\n    obj._readableState &&\n    typeof obj.on === 'function' &&\n    typeof obj.write === 'function'\n  )\n}\nfunction isNodeStream(obj) {\n  return (\n    obj &&\n    (obj._readableState ||\n      obj._writableState ||\n      (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n      (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n  )\n}\nfunction isReadableStream(obj) {\n  return !!(\n    obj &&\n    !isNodeStream(obj) &&\n    typeof obj.pipeThrough === 'function' &&\n    typeof obj.getReader === 'function' &&\n    typeof obj.cancel === 'function'\n  )\n}\nfunction isWritableStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n  return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n  if (obj == null) return false\n  if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n  if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n  return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableEnded === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n  return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableFinished === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n  return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n  if (!isReadableNodeStream(stream)) return null\n  if (stream.readableEnded === true) return true\n  const rState = stream._readableState\n  if (!rState || rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n  return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n  if (!isReadableNodeStream(stream)) return null\n  const rState = stream._readableState\n  if (rState !== null && rState !== undefined && rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n  return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n  if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n  if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (isDestroyed(stream)) {\n    return true\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n    return false\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n    return false\n  }\n  return true\n}\nfunction isWritableErrored(stream) {\n  var _stream$_writableStat, _stream$_writableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.writableErrored) {\n    return stream.writableErrored\n  }\n  return (_stream$_writableStat =\n    (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n      ? undefined\n      : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n    ? _stream$_writableStat\n    : null\n}\nfunction isReadableErrored(stream) {\n  var _stream$_readableStat, _stream$_readableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.readableErrored) {\n    return stream.readableErrored\n  }\n  return (_stream$_readableStat =\n    (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n      ? undefined\n      : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n    ? _stream$_readableStat\n    : null\n}\nfunction isClosed(stream) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (typeof stream.closed === 'boolean') {\n    return stream.closed\n  }\n  const wState = stream._writableState\n  const rState = stream._readableState\n  if (\n    typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n    typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n  ) {\n    return (\n      (wState === null || wState === undefined ? undefined : wState.closed) ||\n      (rState === null || rState === undefined ? undefined : rState.closed)\n    )\n  }\n  if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n    return stream._closed\n  }\n  return null\n}\nfunction isOutgoingMessage(stream) {\n  return (\n    typeof stream._closed === 'boolean' &&\n    typeof stream._defaultKeepAlive === 'boolean' &&\n    typeof stream._removedConnection === 'boolean' &&\n    typeof stream._removedContLen === 'boolean'\n  )\n}\nfunction isServerResponse(stream) {\n  return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n  var _stream$req\n  return (\n    typeof stream._consuming === 'boolean' &&\n    typeof stream._dumped === 'boolean' &&\n    ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n      undefined\n  )\n}\nfunction willEmitClose(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return (\n    (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n  )\n}\nfunction isDisturbed(stream) {\n  var _stream$kIsDisturbed\n  return !!(\n    stream &&\n    ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n      ? _stream$kIsDisturbed\n      : stream.readableDidRead || stream.readableAborted)\n  )\n}\nfunction isErrored(stream) {\n  var _ref,\n    _ref2,\n    _ref3,\n    _ref4,\n    _ref5,\n    _stream$kIsErrored,\n    _stream$_readableStat3,\n    _stream$_writableStat3,\n    _stream$_readableStat4,\n    _stream$_writableStat4\n  return !!(\n    stream &&\n    ((_ref =\n      (_ref2 =\n        (_ref3 =\n          (_ref4 =\n            (_ref5 =\n              (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n                ? _stream$kIsErrored\n                : stream.readableErrored) !== null && _ref5 !== undefined\n              ? _ref5\n              : stream.writableErrored) !== null && _ref4 !== undefined\n            ? _ref4\n            : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n            ? undefined\n            : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n          ? _ref3\n          : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n          ? undefined\n          : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n        ? _ref2\n        : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n        ? undefined\n        : _stream$_readableStat4.errored) !== null && _ref !== undefined\n      ? _ref\n      : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n      ? undefined\n      : _stream$_writableStat4.errored)\n  )\n}\nmodule.exports = {\n  isDestroyed,\n  kIsDestroyed,\n  isDisturbed,\n  kIsDisturbed,\n  isErrored,\n  kIsErrored,\n  isReadable,\n  kIsReadable,\n  kIsClosedPromise,\n  kControllerErrorFunction,\n  kIsWritable,\n  isClosed,\n  isDuplexNodeStream,\n  isFinished,\n  isIterable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableEnded,\n  isReadableFinished,\n  isReadableErrored,\n  isNodeStream,\n  isWebStream,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableEnded,\n  isWritableFinished,\n  isWritableErrored,\n  isServerRequest,\n  isServerResponse,\n  willEmitClose,\n  isTransformStream\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n  isClosed,\n  isReadable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableFinished,\n  isReadableErrored,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableFinished,\n  isWritableErrored,\n  isNodeStream,\n  willEmitClose: _willEmitClose,\n  kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n  var _options$readable, _options$writable\n  if (arguments.length === 2) {\n    callback = options\n    options = kEmptyObject\n  } else if (options == null) {\n    options = kEmptyObject\n  } else {\n    validateObject(options, 'options')\n  }\n  validateFunction(callback, 'callback')\n  validateAbortSignal(options.signal, 'options.signal')\n  callback = once(callback)\n  if (isReadableStream(stream) || isWritableStream(stream)) {\n    return eosWeb(stream, options, callback)\n  }\n  if (!isNodeStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  const readable =\n    (_options$readable = options.readable) !== null && _options$readable !== undefined\n      ? _options$readable\n      : isReadableNodeStream(stream)\n  const writable =\n    (_options$writable = options.writable) !== null && _options$writable !== undefined\n      ? _options$writable\n      : isWritableNodeStream(stream)\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const onlegacyfinish = () => {\n    if (!stream.writable) {\n      onfinish()\n    }\n  }\n\n  // TODO (ronag): Improve soft detection to include core modules and\n  // common ecosystem modules that do properly emit 'close' but fail\n  // this generic check.\n  let willEmitClose =\n    _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n  let writableFinished = isWritableFinished(stream, false)\n  const onfinish = () => {\n    writableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.readable || readable)) {\n      return\n    }\n    if (!readable || readableFinished) {\n      callback.call(stream)\n    }\n  }\n  let readableFinished = isReadableFinished(stream, false)\n  const onend = () => {\n    readableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.writable || writable)) {\n      return\n    }\n    if (!writable || writableFinished) {\n      callback.call(stream)\n    }\n  }\n  const onerror = (err) => {\n    callback.call(stream, err)\n  }\n  let closed = isClosed(stream)\n  const onclose = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n      if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    if (writable && !writableFinished) {\n      if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    callback.call(stream)\n  }\n  const onclosed = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    callback.call(stream)\n  }\n  const onrequest = () => {\n    stream.req.on('finish', onfinish)\n  }\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish)\n    if (!willEmitClose) {\n      stream.on('abort', onclose)\n    }\n    if (stream.req) {\n      onrequest()\n    } else {\n      stream.on('request', onrequest)\n    }\n  } else if (writable && !wState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish)\n    stream.on('close', onlegacyfinish)\n  }\n\n  // Not all streams will emit 'close' after 'aborted'.\n  if (!willEmitClose && typeof stream.aborted === 'boolean') {\n    stream.on('aborted', onclose)\n  }\n  stream.on('end', onend)\n  stream.on('finish', onfinish)\n  if (options.error !== false) {\n    stream.on('error', onerror)\n  }\n  stream.on('close', onclose)\n  if (closed) {\n    process.nextTick(onclose)\n  } else if (\n    (wState !== null && wState !== undefined && wState.errorEmitted) ||\n    (rState !== null && rState !== undefined && rState.errorEmitted)\n  ) {\n    if (!willEmitClose) {\n      process.nextTick(onclosed)\n    }\n  } else if (\n    !readable &&\n    (!willEmitClose || isReadable(stream)) &&\n    (writableFinished || isWritable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (\n    !writable &&\n    (!willEmitClose || isWritable(stream)) &&\n    (readableFinished || isReadable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (rState && stream.req && stream.aborted) {\n    process.nextTick(onclosed)\n  }\n  const cleanup = () => {\n    callback = nop\n    stream.removeListener('aborted', onclose)\n    stream.removeListener('complete', onfinish)\n    stream.removeListener('abort', onclose)\n    stream.removeListener('request', onrequest)\n    if (stream.req) stream.req.removeListener('finish', onfinish)\n    stream.removeListener('end', onlegacyfinish)\n    stream.removeListener('close', onlegacyfinish)\n    stream.removeListener('finish', onfinish)\n    stream.removeListener('end', onend)\n    stream.removeListener('error', onerror)\n    stream.removeListener('close', onclose)\n  }\n  if (options.signal && !closed) {\n    const abort = () => {\n      // Keep it because cleanup removes it.\n      const endCallback = callback\n      cleanup()\n      endCallback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n  let isAborted = false\n  let abort = nop\n  if (options.signal) {\n    abort = () => {\n      isAborted = true\n      callback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n      const disposable = addAbortListener(options.signal, abort)\n      const originalCallback = callback\n      callback = once((...args) => {\n        disposable[SymbolDispose]()\n        originalCallback.apply(stream, args)\n      })\n    }\n  }\n  const resolverFn = (...args) => {\n    if (!isAborted) {\n      process.nextTick(() => callback.apply(stream, args))\n    }\n  }\n  PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n  return nop\n}\nfunction finished(stream, opts) {\n  var _opts\n  let autoCleanup = false\n  if (opts === null) {\n    opts = kEmptyObject\n  }\n  if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n    validateBoolean(opts.cleanup, 'cleanup')\n    autoCleanup = opts.cleanup\n  }\n  return new Promise((resolve, reject) => {\n    const cleanup = eos(stream, opts, (err) => {\n      if (autoCleanup) {\n        cleanup()\n      }\n      if (err) {\n        reject(err)\n      } else {\n        resolve()\n      }\n    })\n  })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  aggregateTwoErrors,\n  codes: { ERR_MULTIPLE_CALLBACK },\n  AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n  if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n  }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n  const r = this._readableState\n  const w = this._writableState\n  // With duplex streams we use the writable side for state.\n  const s = w || r\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    if (typeof cb === 'function') {\n      cb()\n    }\n    return this\n  }\n\n  // We set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n  checkError(err, w, r)\n  if (w) {\n    w.destroyed = true\n  }\n  if (r) {\n    r.destroyed = true\n  }\n\n  // If still constructing then defer calling _destroy.\n  if (!s.constructed) {\n    this.once(kDestroy, function (er) {\n      _destroy(this, aggregateTwoErrors(er, err), cb)\n    })\n  } else {\n    _destroy(this, err, cb)\n  }\n  return this\n}\nfunction _destroy(self, err, cb) {\n  let called = false\n  function onDestroy(err) {\n    if (called) {\n      return\n    }\n    called = true\n    const r = self._readableState\n    const w = self._writableState\n    checkError(err, w, r)\n    if (w) {\n      w.closed = true\n    }\n    if (r) {\n      r.closed = true\n    }\n    if (typeof cb === 'function') {\n      cb(err)\n    }\n    if (err) {\n      process.nextTick(emitErrorCloseNT, self, err)\n    } else {\n      process.nextTick(emitCloseNT, self)\n    }\n  }\n  try {\n    self._destroy(err || null, onDestroy)\n  } catch (err) {\n    onDestroy(err)\n  }\n}\nfunction emitErrorCloseNT(self, err) {\n  emitErrorNT(self, err)\n  emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n  const r = self._readableState\n  const w = self._writableState\n  if (w) {\n    w.closeEmitted = true\n  }\n  if (r) {\n    r.closeEmitted = true\n  }\n  if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n    self.emit('close')\n  }\n}\nfunction emitErrorNT(self, err) {\n  const r = self._readableState\n  const w = self._writableState\n  if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n    return\n  }\n  if (w) {\n    w.errorEmitted = true\n  }\n  if (r) {\n    r.errorEmitted = true\n  }\n  self.emit('error', err)\n}\nfunction undestroy() {\n  const r = this._readableState\n  const w = this._writableState\n  if (r) {\n    r.constructed = true\n    r.closed = false\n    r.closeEmitted = false\n    r.destroyed = false\n    r.errored = null\n    r.errorEmitted = false\n    r.reading = false\n    r.ended = r.readable === false\n    r.endEmitted = r.readable === false\n  }\n  if (w) {\n    w.constructed = true\n    w.destroyed = false\n    w.closed = false\n    w.closeEmitted = false\n    w.errored = null\n    w.errorEmitted = false\n    w.finalCalled = false\n    w.prefinished = false\n    w.ended = w.writable === false\n    w.ending = w.writable === false\n    w.finished = w.writable === false\n  }\n}\nfunction errorOrDestroy(stream, err, sync) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  const r = stream._readableState\n  const w = stream._writableState\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    return this\n  }\n  if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n    stream.destroy(err)\n  else if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n    if (sync) {\n      process.nextTick(emitErrorNT, stream, err)\n    } else {\n      emitErrorNT(stream, err)\n    }\n  }\n}\nfunction construct(stream, cb) {\n  if (typeof stream._construct !== 'function') {\n    return\n  }\n  const r = stream._readableState\n  const w = stream._writableState\n  if (r) {\n    r.constructed = false\n  }\n  if (w) {\n    w.constructed = false\n  }\n  stream.once(kConstruct, cb)\n  if (stream.listenerCount(kConstruct) > 1) {\n    // Duplex\n    return\n  }\n  process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n  let called = false\n  function onConstruct(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    const r = stream._readableState\n    const w = stream._writableState\n    const s = w || r\n    if (r) {\n      r.constructed = true\n    }\n    if (w) {\n      w.constructed = true\n    }\n    if (s.destroyed) {\n      stream.emit(kDestroy, err)\n    } else if (err) {\n      errorOrDestroy(stream, err, true)\n    } else {\n      process.nextTick(emitConstructNT, stream)\n    }\n  }\n  try {\n    stream._construct((err) => {\n      process.nextTick(onConstruct, err)\n    })\n  } catch (err) {\n    process.nextTick(onConstruct, err)\n  }\n}\nfunction emitConstructNT(stream) {\n  stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n  return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n  stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n  stream.emit('error', err)\n  process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n  if (!stream || isDestroyed(stream)) {\n    return\n  }\n  if (!err && !isFinished(stream)) {\n    err = new AbortError()\n  }\n\n  // TODO: Remove isRequest branches.\n  if (isServerRequest(stream)) {\n    stream.socket = null\n    stream.destroy(err)\n  } else if (isRequest(stream)) {\n    stream.abort()\n  } else if (isRequest(stream.req)) {\n    stream.req.abort()\n  } else if (typeof stream.destroy === 'function') {\n    stream.destroy(err)\n  } else if (typeof stream.close === 'function') {\n    // TODO: Don't lose err?\n    stream.close()\n  } else if (err) {\n    process.nextTick(emitErrorCloseLegacy, stream, err)\n  } else {\n    process.nextTick(emitCloseLegacy, stream)\n  }\n  if (!stream.destroyed) {\n    stream[kIsDestroyed] = true\n  }\n}\nmodule.exports = {\n  construct,\n  destroyer,\n  destroy,\n  undestroy,\n  errorOrDestroy\n}\n", "'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n  EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n  const source = this\n  function ondata(chunk) {\n    if (dest.writable && dest.write(chunk) === false && source.pause) {\n      source.pause()\n    }\n  }\n  source.on('data', ondata)\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume()\n    }\n  }\n  dest.on('drain', ondrain)\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend)\n    source.on('close', onclose)\n  }\n  let didOnEnd = false\n  function onend() {\n    if (didOnEnd) return\n    didOnEnd = true\n    dest.end()\n  }\n  function onclose() {\n    if (didOnEnd) return\n    didOnEnd = true\n    if (typeof dest.destroy === 'function') dest.destroy()\n  }\n\n  // Don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup()\n    if (EE.listenerCount(this, 'error') === 0) {\n      this.emit('error', er)\n    }\n  }\n  prependListener(source, 'error', onerror)\n  prependListener(dest, 'error', onerror)\n\n  // Remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata)\n    dest.removeListener('drain', ondrain)\n    source.removeListener('end', onend)\n    source.removeListener('close', onclose)\n    source.removeListener('error', onerror)\n    dest.removeListener('error', onerror)\n    source.removeListener('end', cleanup)\n    source.removeListener('close', cleanup)\n    dest.removeListener('close', cleanup)\n  }\n  source.on('end', cleanup)\n  source.on('close', cleanup)\n  dest.on('close', cleanup)\n  dest.emit('pipe', source)\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest\n}\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n  else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n  else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n  Stream,\n  prependListener\n}\n", "'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n  validateAbortSignal(signal, 'signal')\n  if (!isNodeStream(stream) && !isWebStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    return stream\n  }\n  const onAbort = isNodeStream(stream)\n    ? () => {\n        stream.destroy(\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n    : () => {\n        stream[kControllerErrorFunction](\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n  if (signal.aborted) {\n    onAbort()\n  } else {\n    addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n    const disposable = addAbortListener(signal, onAbort)\n    eos(stream, disposable[SymbolDispose])\n  }\n  return stream\n}\n", "'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n  constructor() {\n    this.head = null\n    this.tail = null\n    this.length = 0\n  }\n  push(v) {\n    const entry = {\n      data: v,\n      next: null\n    }\n    if (this.length > 0) this.tail.next = entry\n    else this.head = entry\n    this.tail = entry\n    ++this.length\n  }\n  unshift(v) {\n    const entry = {\n      data: v,\n      next: this.head\n    }\n    if (this.length === 0) this.tail = entry\n    this.head = entry\n    ++this.length\n  }\n  shift() {\n    if (this.length === 0) return\n    const ret = this.head.data\n    if (this.length === 1) this.head = this.tail = null\n    else this.head = this.head.next\n    --this.length\n    return ret\n  }\n  clear() {\n    this.head = this.tail = null\n    this.length = 0\n  }\n  join(s) {\n    if (this.length === 0) return ''\n    let p = this.head\n    let ret = '' + p.data\n    while ((p = p.next) !== null) ret += s + p.data\n    return ret\n  }\n  concat(n) {\n    if (this.length === 0) return Buffer.alloc(0)\n    const ret = Buffer.allocUnsafe(n >>> 0)\n    let p = this.head\n    let i = 0\n    while (p) {\n      TypedArrayPrototypeSet(ret, p.data, i)\n      i += p.data.length\n      p = p.next\n    }\n    return ret\n  }\n\n  // Consumes a specified amount of bytes or characters from the buffered data.\n  consume(n, hasStrings) {\n    const data = this.head.data\n    if (n < data.length) {\n      // `slice` is the same for buffers and strings.\n      const slice = data.slice(0, n)\n      this.head.data = data.slice(n)\n      return slice\n    }\n    if (n === data.length) {\n      // First chunk is a perfect match.\n      return this.shift()\n    }\n    // Result spans more than one buffer.\n    return hasStrings ? this._getString(n) : this._getBuffer(n)\n  }\n  first() {\n    return this.head.data\n  }\n  *[SymbolIterator]() {\n    for (let p = this.head; p; p = p.next) {\n      yield p.data\n    }\n  }\n\n  // Consumes a specified amount of characters from the buffered data.\n  _getString(n) {\n    let ret = ''\n    let p = this.head\n    let c = 0\n    do {\n      const str = p.data\n      if (n > str.length) {\n        ret += str\n        n -= str.length\n      } else {\n        if (n === str.length) {\n          ret += str\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          ret += StringPrototypeSlice(str, 0, n)\n          this.head = p\n          p.data = StringPrototypeSlice(str, n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Consumes a specified amount of bytes from the buffered data.\n  _getBuffer(n) {\n    const ret = Buffer.allocUnsafe(n)\n    const retLen = n\n    let p = this.head\n    let c = 0\n    do {\n      const buf = p.data\n      if (n > buf.length) {\n        TypedArrayPrototypeSet(ret, buf, retLen - n)\n        n -= buf.length\n      } else {\n        if (n === buf.length) {\n          TypedArrayPrototypeSet(ret, buf, retLen - n)\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n          this.head = p\n          p.data = buf.slice(n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Make sure the linked list only shows the minimal necessary information.\n  [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n    return inspect(this, {\n      ...options,\n      // Only inspect one level.\n      depth: 0,\n      // It should not recurse.\n      customInspect: false\n    })\n  }\n}\n", "'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n  return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n  validateInteger(value, 'value', 0)\n  if (objectMode) {\n    defaultHighWaterMarkObjectMode = value\n  } else {\n    defaultHighWaterMarkBytes = value\n  }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n  if (hwm != null) {\n    if (!NumberIsInteger(hwm) || hwm < 0) {\n      const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n      throw new ERR_INVALID_ARG_VALUE(name, hwm)\n    }\n    return MathFloor(hwm)\n  }\n\n  // Default value\n  return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n  getHighWaterMark,\n  getDefaultHighWaterMark,\n  setDefaultHighWaterMark\n}\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n  let iterator\n  if (typeof iterable === 'string' || iterable instanceof Buffer) {\n    return new Readable({\n      objectMode: true,\n      ...opts,\n      read() {\n        this.push(iterable)\n        this.push(null)\n      }\n    })\n  }\n  let isAsync\n  if (iterable && iterable[SymbolAsyncIterator]) {\n    isAsync = true\n    iterator = iterable[SymbolAsyncIterator]()\n  } else if (iterable && iterable[SymbolIterator]) {\n    isAsync = false\n    iterator = iterable[SymbolIterator]()\n  } else {\n    throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n  }\n  const readable = new Readable({\n    objectMode: true,\n    highWaterMark: 1,\n    // TODO(ronag): What options should be allowed?\n    ...opts\n  })\n\n  // Flag to protect against _read\n  // being called before last iteration completion.\n  let reading = false\n  readable._read = function () {\n    if (!reading) {\n      reading = true\n      next()\n    }\n  }\n  readable._destroy = function (error, cb) {\n    PromisePrototypeThen(\n      close(error),\n      () => process.nextTick(cb, error),\n      // nextTick is here in case cb throws\n      (e) => process.nextTick(cb, e || error)\n    )\n  }\n  async function close(error) {\n    const hadError = error !== undefined && error !== null\n    const hasThrow = typeof iterator.throw === 'function'\n    if (hadError && hasThrow) {\n      const { value, done } = await iterator.throw(error)\n      await value\n      if (done) {\n        return\n      }\n    }\n    if (typeof iterator.return === 'function') {\n      const { value } = await iterator.return()\n      await value\n    }\n  }\n  async function next() {\n    for (;;) {\n      try {\n        const { value, done } = isAsync ? await iterator.next() : iterator.next()\n        if (done) {\n          readable.push(null)\n        } else {\n          const res = value && typeof value.then === 'function' ? await value : value\n          if (res === null) {\n            reading = false\n            throw new ERR_STREAM_NULL_VALUES()\n          } else if (readable.push(res)) {\n            continue\n          } else {\n            reading = false\n          }\n        }\n      } catch (err) {\n        readable.destroy(err)\n      }\n      break\n    }\n  }\n  return readable\n}\nmodule.exports = from\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst {\n  ArrayPrototypeIndexOf,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberParseInt,\n  ObjectDefineProperties,\n  ObjectKeys,\n  ObjectSetPrototypeOf,\n  Promise,\n  SafeSet,\n  SymbolAsyncDispose,\n  SymbolAsyncIterator,\n  Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n  debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_OUT_OF_RANGE,\n    ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n  return {\n    enumerable: false,\n    get() {\n      return (this.state & bit) !== 0\n    },\n    set(value) {\n      if (value) this.state |= bit\n      else this.state &= ~bit\n    }\n  }\n}\nObjectDefineProperties(ReadableState.prototype, {\n  objectMode: makeBitMapDescriptor(kObjectMode),\n  ended: makeBitMapDescriptor(kEnded),\n  endEmitted: makeBitMapDescriptor(kEndEmitted),\n  reading: makeBitMapDescriptor(kReading),\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  constructed: makeBitMapDescriptor(kConstructed),\n  // A flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  sync: makeBitMapDescriptor(kSync),\n  // Whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  needReadable: makeBitMapDescriptor(kNeedReadable),\n  emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n  readableListening: makeBitMapDescriptor(kReadableListening),\n  resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n  // True if the error was already emitted and should not be thrown again.\n  errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n  emitClose: makeBitMapDescriptor(kEmitClose),\n  autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n  // Has it been destroyed.\n  destroyed: makeBitMapDescriptor(kDestroyed),\n  // Indicates whether the stream has finished destroying.\n  closed: makeBitMapDescriptor(kClosed),\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n  multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n  // If true, a maybeReadMore has been scheduled.\n  readingMore: makeBitMapDescriptor(kReadingMore),\n  dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Bit map field to store ReadableState more effciently with 1 bit per field\n  // instead of a V8 slot per field.\n  this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n  // Object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away.\n  if (options && options.objectMode) this.state |= kObjectMode\n  if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n  // The point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift().\n  this.buffer = new BufferList()\n  this.length = 0\n  this.pipes = []\n  this.flowing = null\n  this[kPaused] = null\n\n  // Should close be emitted on destroy. Defaults to true.\n  if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n  // Should .destroy() be called after 'end' (and potentially 'finish').\n  if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n  // Indicates whether the stream has errored. When true no further\n  // _read calls, 'data' or 'readable' events should occur. This is needed\n  // since when autoDestroy is disabled we need a way to tell whether the\n  // stream has failed.\n  this.errored = null\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Ref the piped dest which we need a drain event on it\n  // type: null | Writable | Set<Writable>.\n  this.awaitDrainWriters = null\n  this.decoder = null\n  this.encoding = null\n  if (options && options.encoding) {\n    this.decoder = new StringDecoder(options.encoding)\n    this.encoding = options.encoding\n  }\n}\nfunction Readable(options) {\n  if (!(this instanceof Readable)) return new Readable(options)\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  this._readableState = new ReadableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    if (this._readableState.needReadable) {\n      maybeReadMore(this, this._readableState)\n    }\n  })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n  let error\n  if (!this.destroyed) {\n    error = this.readableEnded ? null : new AbortError()\n    this.destroy(error)\n  }\n  return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n  debug('readableAddChunk', chunk)\n  const state = stream._readableState\n  let err\n  if ((state.state & kObjectMode) === 0) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding\n      if (state.encoding !== encoding) {\n        if (addToFront && state.encoding) {\n          // When unshifting, if state.encoding is set, we have to save\n          // the string in the BufferList with the state encoding.\n          chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n        } else {\n          chunk = Buffer.from(chunk, encoding)\n          encoding = ''\n        }\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = ''\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = ''\n    } else if (chunk != null) {\n      err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  if (err) {\n    errorOrDestroy(stream, err)\n  } else if (chunk === null) {\n    state.state &= ~kReading\n    onEofChunk(stream, state)\n  } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n    if (addToFront) {\n      if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n      else if (state.destroyed || state.errored) return false\n      else addChunk(stream, state, chunk, true)\n    } else if (state.ended) {\n      errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n    } else if (state.destroyed || state.errored) {\n      return false\n    } else {\n      state.state &= ~kReading\n      if (state.decoder && !encoding) {\n        chunk = state.decoder.write(chunk)\n        if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n        else maybeReadMore(stream, state)\n      } else {\n        addChunk(stream, state, chunk, false)\n      }\n    }\n  } else if (!addToFront) {\n    state.state &= ~kReading\n    maybeReadMore(stream, state)\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n    // Use the guard to avoid creating `Set()` repeatedly\n    // when we have multiple pipes.\n    if ((state.state & kMultiAwaitDrain) !== 0) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n    state.dataEmitted = true\n    stream.emit('data', chunk)\n  } else {\n    // Update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length\n    if (addToFront) state.buffer.unshift(chunk)\n    else state.buffer.push(chunk)\n    if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n  }\n  maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n  const state = this._readableState\n  return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  const decoder = new StringDecoder(enc)\n  this._readableState.decoder = decoder\n  // If setEncoding(null), decoder.encoding equals utf8.\n  this._readableState.encoding = this._readableState.decoder.encoding\n  const buffer = this._readableState.buffer\n  // Iterate over current buffer to convert already stored Buffers:\n  let content = ''\n  for (const data of buffer) {\n    content += decoder.write(data)\n  }\n  buffer.clear()\n  if (content !== '') buffer.push(content)\n  this._readableState.length = content.length\n  return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n  if (n > MAX_HWM) {\n    throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts.\n    n--\n    n |= n >>> 1\n    n |= n >>> 2\n    n |= n >>> 4\n    n |= n >>> 8\n    n |= n >>> 16\n    n++\n  }\n  return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || (state.length === 0 && state.ended)) return 0\n  if ((state.state & kObjectMode) !== 0) return 1\n  if (NumberIsNaN(n)) {\n    // Only flow one buffer at a time.\n    if (state.flowing && state.length) return state.buffer.first().length\n    return state.length\n  }\n  if (n <= state.length) return n\n  return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n)\n  // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n  // in this scenario, so we are doing it manually.\n  if (n === undefined) {\n    n = NaN\n  } else if (!NumberIsInteger(n)) {\n    n = NumberParseInt(n, 10)\n  }\n  const state = this._readableState\n  const nOrig = n\n\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n  if (n !== 0) state.state &= ~kEmittedReadable\n\n  // If we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (\n    n === 0 &&\n    state.needReadable &&\n    ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n  ) {\n    debug('read: emitReadable', state.length, state.ended)\n    if (state.length === 0 && state.ended) endReadable(this)\n    else emitReadable(this)\n    return null\n  }\n  n = howMuchToRead(n, state)\n\n  // If we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this)\n    return null\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  let doRead = (state.state & kNeedReadable) !== 0\n  debug('need readable', doRead)\n\n  // If we currently have less than the highWaterMark, then also read some.\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true\n    debug('length less than watermark', doRead)\n  }\n\n  // However, if we've ended, then there's no point, if we're already\n  // reading, then it's unnecessary, if we're constructing we have to wait,\n  // and if we're destroyed or errored, then it's not allowed,\n  if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n    doRead = false\n    debug('reading, ended or constructing', doRead)\n  } else if (doRead) {\n    debug('do read')\n    state.state |= kReading | kSync\n    // If the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.state |= kNeedReadable\n\n    // Call internal read method\n    try {\n      this._read(state.highWaterMark)\n    } catch (err) {\n      errorOrDestroy(this, err)\n    }\n    state.state &= ~kSync\n\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state)\n  }\n  let ret\n  if (n > 0) ret = fromList(n, state)\n  else ret = null\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark\n    n = 0\n  } else {\n    state.length -= n\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this)\n  }\n  if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n    state.dataEmitted = true\n    this.emit('data', ret)\n  }\n  return ret\n}\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk')\n  if (state.ended) return\n  if (state.decoder) {\n    const chunk = state.decoder.end()\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk)\n      state.length += state.objectMode ? 1 : chunk.length\n    }\n  }\n  state.ended = true\n  if (state.sync) {\n    // If we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call.\n    emitReadable(stream)\n  } else {\n    // Emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false\n    state.emittedReadable = true\n    // We have to emit readable now that we are EOF. Modules\n    // in the ecosystem (e.g. dicer) rely on this event being sync.\n    emitReadable_(stream)\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  const state = stream._readableState\n  debug('emitReadable', state.needReadable, state.emittedReadable)\n  state.needReadable = false\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing)\n    state.emittedReadable = true\n    process.nextTick(emitReadable_, stream)\n  }\n}\nfunction emitReadable_(stream) {\n  const state = stream._readableState\n  debug('emitReadable_', state.destroyed, state.length, state.ended)\n  if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n    stream.emit('readable')\n    state.emittedReadable = false\n  }\n\n  // The stream needs another readable event if:\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n  flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore && state.constructed) {\n    state.readingMore = true\n    process.nextTick(maybeReadMore_, stream, state)\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (\n    !state.reading &&\n    !state.ended &&\n    (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n  ) {\n    const len = state.length\n    debug('maybeReadMore read 0')\n    stream.read(0)\n    if (len === state.length)\n      // Didn't get any data, stop spinning.\n      break\n  }\n  state.readingMore = false\n}\n\n// Abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  const src = this\n  const state = this._readableState\n  if (state.pipes.length === 1) {\n    if (!state.multiAwaitDrain) {\n      state.multiAwaitDrain = true\n      state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n    }\n  }\n  state.pipes.push(dest)\n  debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n  const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n  const endFn = doEnd ? onend : unpipe\n  if (state.endEmitted) process.nextTick(endFn)\n  else src.once('end', endFn)\n  dest.on('unpipe', onunpipe)\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe')\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true\n        cleanup()\n      }\n    }\n  }\n  function onend() {\n    debug('onend')\n    dest.end()\n  }\n  let ondrain\n  let cleanedUp = false\n  function cleanup() {\n    debug('cleanup')\n    // Cleanup event handlers once the pipe is broken.\n    dest.removeListener('close', onclose)\n    dest.removeListener('finish', onfinish)\n    if (ondrain) {\n      dest.removeListener('drain', ondrain)\n    }\n    dest.removeListener('error', onerror)\n    dest.removeListener('unpipe', onunpipe)\n    src.removeListener('end', onend)\n    src.removeListener('end', unpipe)\n    src.removeListener('data', ondata)\n    cleanedUp = true\n\n    // If the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n  }\n  function pause() {\n    // If the user unpiped during `dest.write()`, it is possible\n    // to get stuck in a permanently paused state if that write\n    // also returned false.\n    // => Check whether `dest` is still a piping destination.\n    if (!cleanedUp) {\n      if (state.pipes.length === 1 && state.pipes[0] === dest) {\n        debug('false write response, pause', 0)\n        state.awaitDrainWriters = dest\n        state.multiAwaitDrain = false\n      } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n        debug('false write response, pause', state.awaitDrainWriters.size)\n        state.awaitDrainWriters.add(dest)\n      }\n      src.pause()\n    }\n    if (!ondrain) {\n      // When the dest drains, it reduces the awaitDrain counter\n      // on the source.  This would be more elegant with a .once()\n      // handler in flow(), but adding and removing repeatedly is\n      // too slow.\n      ondrain = pipeOnDrain(src, dest)\n      dest.on('drain', ondrain)\n    }\n  }\n  src.on('data', ondata)\n  function ondata(chunk) {\n    debug('ondata')\n    const ret = dest.write(chunk)\n    debug('dest.write', ret)\n    if (ret === false) {\n      pause()\n    }\n  }\n\n  // If the dest has an error, then stop piping into it.\n  // However, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er)\n    unpipe()\n    dest.removeListener('error', onerror)\n    if (dest.listenerCount('error') === 0) {\n      const s = dest._writableState || dest._readableState\n      if (s && !s.errorEmitted) {\n        // User incorrectly emitted 'error' directly on the stream.\n        errorOrDestroy(dest, er)\n      } else {\n        dest.emit('error', er)\n      }\n    }\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror)\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish)\n    unpipe()\n  }\n  dest.once('close', onclose)\n  function onfinish() {\n    debug('onfinish')\n    dest.removeListener('close', onclose)\n    unpipe()\n  }\n  dest.once('finish', onfinish)\n  function unpipe() {\n    debug('unpipe')\n    src.unpipe(dest)\n  }\n\n  // Tell the dest that it's being piped to.\n  dest.emit('pipe', src)\n\n  // Start the flow if it hasn't been started already.\n\n  if (dest.writableNeedDrain === true) {\n    pause()\n  } else if (!state.flowing) {\n    debug('pipe resume')\n    src.resume()\n  }\n  return dest\n}\nfunction pipeOnDrain(src, dest) {\n  return function pipeOnDrainFunctionResult() {\n    const state = src._readableState\n\n    // `ondrain` will call directly,\n    // `this` maybe not a reference to dest,\n    // so we use the real dest here.\n    if (state.awaitDrainWriters === dest) {\n      debug('pipeOnDrain', 1)\n      state.awaitDrainWriters = null\n    } else if (state.multiAwaitDrain) {\n      debug('pipeOnDrain', state.awaitDrainWriters.size)\n      state.awaitDrainWriters.delete(dest)\n    }\n    if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n      src.resume()\n    }\n  }\n}\nReadable.prototype.unpipe = function (dest) {\n  const state = this._readableState\n  const unpipeInfo = {\n    hasUnpiped: false\n  }\n\n  // If we're not piping anywhere, then do nothing.\n  if (state.pipes.length === 0) return this\n  if (!dest) {\n    // remove all.\n    const dests = state.pipes\n    state.pipes = []\n    this.pause()\n    for (let i = 0; i < dests.length; i++)\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      })\n    return this\n  }\n\n  // Try to find the right one.\n  const index = ArrayPrototypeIndexOf(state.pipes, dest)\n  if (index === -1) return this\n  state.pipes.splice(index, 1)\n  if (state.pipes.length === 0) this.pause()\n  dest.emit('unpipe', this, unpipeInfo)\n  return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n  const res = Stream.prototype.on.call(this, ev, fn)\n  const state = this._readableState\n  if (ev === 'data') {\n    // Update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0\n\n    // Try start flowing on next tick if stream isn't explicitly paused.\n    if (state.flowing !== false) this.resume()\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true\n      state.flowing = false\n      state.emittedReadable = false\n      debug('on readable', state.length, state.reading)\n      if (state.length) {\n        emitReadable(this)\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this)\n      }\n    }\n  }\n  return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n  const res = Stream.prototype.removeListener.call(this, ev, fn)\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n  const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nfunction updateReadableListening(self) {\n  const state = self._readableState\n  state.readableListening = self.listenerCount('readable') > 0\n  if (state.resumeScheduled && state[kPaused] === false) {\n    // Flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true\n\n    // Crude way to check if we should resume.\n  } else if (self.listenerCount('data') > 0) {\n    self.resume()\n  } else if (!state.readableListening) {\n    state.flowing = null\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0')\n  self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  const state = this._readableState\n  if (!state.flowing) {\n    debug('resume')\n    // We flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume().\n    state.flowing = !state.readableListening\n    resume(this, state)\n  }\n  state[kPaused] = false\n  return this\n}\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true\n    process.nextTick(resume_, stream, state)\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading)\n  if (!state.reading) {\n    stream.read(0)\n  }\n  state.resumeScheduled = false\n  stream.emit('resume')\n  flow(stream)\n  if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing)\n  if (this._readableState.flowing !== false) {\n    debug('pause')\n    this._readableState.flowing = false\n    this.emit('pause')\n  }\n  this._readableState[kPaused] = true\n  return this\n}\nfunction flow(stream) {\n  const state = stream._readableState\n  debug('flow', state.flowing)\n  while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  let paused = false\n\n  // TODO (ronag): Should this.destroy(err) emit\n  // 'error' on the wrapped stream? Would require\n  // a static factory method, e.g. Readable.wrap(stream).\n\n  stream.on('data', (chunk) => {\n    if (!this.push(chunk) && stream.pause) {\n      paused = true\n      stream.pause()\n    }\n  })\n  stream.on('end', () => {\n    this.push(null)\n  })\n  stream.on('error', (err) => {\n    errorOrDestroy(this, err)\n  })\n  stream.on('close', () => {\n    this.destroy()\n  })\n  stream.on('destroy', () => {\n    this.destroy()\n  })\n  this._read = () => {\n    if (paused && stream.resume) {\n      paused = false\n      stream.resume()\n    }\n  }\n\n  // Proxy all the other methods. Important when wrapping filters and duplexes.\n  const streamKeys = ObjectKeys(stream)\n  for (let j = 1; j < streamKeys.length; j++) {\n    const i = streamKeys[j]\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = stream[i].bind(stream)\n    }\n  }\n  return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n  return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n  if (options !== undefined) {\n    validateObject(options, 'options')\n  }\n  return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n  if (typeof stream.read !== 'function') {\n    stream = Readable.wrap(stream, {\n      objectMode: true\n    })\n  }\n  const iter = createAsyncIterator(stream, options)\n  iter.stream = stream\n  return iter\n}\nasync function* createAsyncIterator(stream, options) {\n  let callback = nop\n  function next(resolve) {\n    if (this === stream) {\n      callback()\n      callback = nop\n    } else {\n      callback = resolve\n    }\n  }\n  stream.on('readable', next)\n  let error\n  const cleanup = eos(\n    stream,\n    {\n      writable: false\n    },\n    (err) => {\n      error = err ? aggregateTwoErrors(error, err) : null\n      callback()\n      callback = nop\n    }\n  )\n  try {\n    while (true) {\n      const chunk = stream.destroyed ? null : stream.read()\n      if (chunk !== null) {\n        yield chunk\n      } else if (error) {\n        throw error\n      } else if (error === null) {\n        return\n      } else {\n        await new Promise(next)\n      }\n    }\n  } catch (err) {\n    error = aggregateTwoErrors(error, err)\n    throw error\n  } finally {\n    if (\n      (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n      (error === undefined || stream._readableState.autoDestroy)\n    ) {\n      destroyImpl.destroyer(stream, null)\n    } else {\n      stream.off('readable', next)\n      cleanup()\n    }\n  }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n  readable: {\n    __proto__: null,\n    get() {\n      const r = this._readableState\n      // r.readable === false means that this is part of a Duplex stream\n      // where the readable side was disabled upon construction.\n      // Compat. The user might manually disable readable side through\n      // deprecated setter.\n      return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n    },\n    set(val) {\n      // Backwards compat.\n      if (this._readableState) {\n        this._readableState.readable = !!val\n      }\n    }\n  },\n  readableDidRead: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.dataEmitted\n    }\n  },\n  readableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._readableState.readable !== false &&\n        (this._readableState.destroyed || this._readableState.errored) &&\n        !this._readableState.endEmitted\n      )\n    }\n  },\n  readableHighWaterMark: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.highWaterMark\n    }\n  },\n  readableBuffer: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState && this._readableState.buffer\n    }\n  },\n  readableFlowing: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.flowing\n    },\n    set: function (state) {\n      if (this._readableState) {\n        this._readableState.flowing = state\n      }\n    }\n  },\n  readableLength: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState.length\n    }\n  },\n  readableObjectMode: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.objectMode : false\n    }\n  },\n  readableEncoding: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.encoding : null\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.errored : null\n    }\n  },\n  closed: {\n    __proto__: null,\n    get() {\n      return this._readableState ? this._readableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.destroyed : false\n    },\n    set(value) {\n      // We ignore the value if the stream\n      // has not been initialized yet.\n      if (!this._readableState) {\n        return\n      }\n\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      this._readableState.destroyed = value\n    }\n  },\n  readableEnded: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.endEmitted : false\n    }\n  }\n})\nObjectDefineProperties(ReadableState.prototype, {\n  // Legacy getter for `pipesCount`.\n  pipesCount: {\n    __proto__: null,\n    get() {\n      return this.pipes.length\n    }\n  },\n  // Legacy property for `paused`.\n  paused: {\n    __proto__: null,\n    get() {\n      return this[kPaused] !== false\n    },\n    set(value) {\n      this[kPaused] = !!value\n    }\n  }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered.\n  if (state.length === 0) return null\n  let ret\n  if (state.objectMode) ret = state.buffer.shift()\n  else if (!n || n >= state.length) {\n    // Read it all, truncate the list.\n    if (state.decoder) ret = state.buffer.join('')\n    else if (state.buffer.length === 1) ret = state.buffer.first()\n    else ret = state.buffer.concat(state.length)\n    state.buffer.clear()\n  } else {\n    // read part of list.\n    ret = state.buffer.consume(n, state.decoder)\n  }\n  return ret\n}\nfunction endReadable(stream) {\n  const state = stream._readableState\n  debug('endReadable', state.endEmitted)\n  if (!state.endEmitted) {\n    state.ended = true\n    process.nextTick(endReadableNT, state, stream)\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length)\n\n  // Check that we didn't get one last unshift.\n  if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n    state.endEmitted = true\n    stream.emit('end')\n    if (stream.writable && stream.allowHalfOpen === false) {\n      process.nextTick(endWritableNT, stream)\n    } else if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well.\n      const wState = stream._writableState\n      const autoDestroy =\n        !wState ||\n        (wState.autoDestroy &&\n          // We don't expect the writable to ever 'finish'\n          // if writable is explicitly set to false.\n          (wState.finished || wState.writable === false))\n      if (autoDestroy) {\n        stream.destroy()\n      }\n    }\n  }\n}\nfunction endWritableNT(stream) {\n  const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n  if (writable) {\n    stream.end()\n  }\n}\nReadable.from = function (iterable, opts) {\n  return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n  return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n  return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n  var _ref, _src$readableObjectMo\n  return new Readable({\n    objectMode:\n      (_ref =\n        (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n          ? _src$readableObjectMo\n          : src.objectMode) !== null && _ref !== undefined\n        ? _ref\n        : true,\n    ...options,\n    destroy(err, callback) {\n      destroyImpl.destroyer(src, err)\n      callback(err)\n    }\n  }).wrap(src)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n;('use strict')\nconst {\n  ArrayPrototypeSlice,\n  Error,\n  FunctionPrototypeSymbolHasInstance,\n  ObjectDefineProperty,\n  ObjectDefineProperties,\n  ObjectSetPrototypeOf,\n  StringPrototypeToLowerCase,\n  Symbol,\n  SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED,\n  ERR_STREAM_ALREADY_FINISHED,\n  ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n  // The point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write().\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // if _final has been called.\n  this.finalCalled = false\n\n  // drain event flag.\n  this.needDrain = false\n  // At the start of calling end()\n  this.ending = false\n  // When end() has been called, and returned.\n  this.ended = false\n  // When 'finish' is emitted.\n  this.finished = false\n\n  // Has it been destroyed\n  this.destroyed = false\n\n  // Should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  const noDecode = !!(options && options.decodeStrings === false)\n  this.decodeStrings = !noDecode\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0\n\n  // A flag to see when we're in the middle of a write.\n  this.writing = false\n\n  // When true all writes will be buffered until .uncork() call.\n  this.corked = 0\n\n  // A flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true\n\n  // A flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false\n\n  // The callback that's passed to _write(chunk, cb).\n  this.onwrite = onwrite.bind(undefined, stream)\n\n  // The callback that the user supplies to write(chunk, encoding, cb).\n  this.writecb = null\n\n  // The amount that is being written when _write is called.\n  this.writelen = 0\n\n  // Storage for data passed to the afterWrite() callback in case of\n  // synchronous _write() completion.\n  this.afterWriteTickInfo = null\n  resetBuffer(this)\n\n  // Number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted.\n  this.pendingcb = 0\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // Emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams.\n  this.prefinished = false\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'finish' (and potentially 'end').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Indicates whether the stream has errored. When true all write() calls\n  // should return false. This is needed since when autoDestroy\n  // is disabled we need a way to tell whether the stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n  this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n  state.buffered = []\n  state.bufferedIndex = 0\n  state.allBuffers = true\n  state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n  __proto__: null,\n  get() {\n    return this.buffered.length - this.bufferedIndex\n  }\n})\nfunction Writable(options) {\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n  this._writableState = new WritableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write\n    if (typeof options.writev === 'function') this._writev = options.writev\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.final === 'function') this._final = options.final\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    const state = this._writableState\n    if (!state.writing) {\n      clearBuffer(this, state)\n    }\n    finishMaybe(this, state)\n  })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n  __proto__: null,\n  value: function (object) {\n    if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n    if (this !== Writable) return false\n    return object && object._writableState instanceof WritableState\n  }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n  const state = stream._writableState\n  if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = state.defaultEncoding\n  } else {\n    if (!encoding) encoding = state.defaultEncoding\n    else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n    if (typeof cb !== 'function') cb = nop\n  }\n  if (chunk === null) {\n    throw new ERR_STREAM_NULL_VALUES()\n  } else if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      if (state.decodeStrings !== false) {\n        chunk = Buffer.from(chunk, encoding)\n        encoding = 'buffer'\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = 'buffer'\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = 'buffer'\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  let err\n  if (state.ending) {\n    err = new ERR_STREAM_WRITE_AFTER_END()\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('write')\n  }\n  if (err) {\n    process.nextTick(cb, err)\n    errorOrDestroy(stream, err, true)\n    return err\n  }\n  state.pendingcb++\n  return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n  this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n  const state = this._writableState\n  if (state.corked) {\n    state.corked--\n    if (!state.writing) clearBuffer(this, state)\n  }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n  if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n  this._writableState.defaultEncoding = encoding\n  return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n  const len = state.objectMode ? 1 : chunk.length\n  state.length += len\n\n  // stream._write resets state.length\n  const ret = state.length < state.highWaterMark\n  // We must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true\n  if (state.writing || state.corked || state.errored || !state.constructed) {\n    state.buffered.push({\n      chunk,\n      encoding,\n      callback\n    })\n    if (state.allBuffers && encoding !== 'buffer') {\n      state.allBuffers = false\n    }\n    if (state.allNoop && callback !== nop) {\n      state.allNoop = false\n    }\n  } else {\n    state.writelen = len\n    state.writecb = callback\n    state.writing = true\n    state.sync = true\n    stream._write(chunk, encoding, state.onwrite)\n    state.sync = false\n  }\n\n  // Return false if errored or destroyed in order to break\n  // any synchronous while(stream.write(data)) loops.\n  return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len\n  state.writecb = cb\n  state.writing = true\n  state.sync = true\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n  else if (writev) stream._writev(chunk, state.onwrite)\n  else stream._write(chunk, encoding, state.onwrite)\n  state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n  --state.pendingcb\n  cb(er)\n  // Ensure callbacks are invoked even when autoDestroy is\n  // not enabled. Passing `er` here doesn't make sense since\n  // it's related to one specific write, not to the buffered\n  // writes.\n  errorBuffer(state)\n  // This can emit error, but error must always follow cb.\n  errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n  const state = stream._writableState\n  const sync = state.sync\n  const cb = state.writecb\n  if (typeof cb !== 'function') {\n    errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n    return\n  }\n  state.writing = false\n  state.writecb = null\n  state.length -= state.writelen\n  state.writelen = 0\n  if (er) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    er.stack // eslint-disable-line no-unused-expressions\n\n    if (!state.errored) {\n      state.errored = er\n    }\n\n    // In case of duplex streams we need to notify the readable side of the\n    // error.\n    if (stream._readableState && !stream._readableState.errored) {\n      stream._readableState.errored = er\n    }\n    if (sync) {\n      process.nextTick(onwriteError, stream, state, er, cb)\n    } else {\n      onwriteError(stream, state, er, cb)\n    }\n  } else {\n    if (state.buffered.length > state.bufferedIndex) {\n      clearBuffer(stream, state)\n    }\n    if (sync) {\n      // It is a common case that the callback passed to .write() is always\n      // the same. In that case, we do not schedule a new nextTick(), but\n      // rather just increase a counter, to improve performance and avoid\n      // memory allocations.\n      if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n        state.afterWriteTickInfo.count++\n      } else {\n        state.afterWriteTickInfo = {\n          count: 1,\n          cb,\n          stream,\n          state\n        }\n        process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n      }\n    } else {\n      afterWrite(stream, state, 1, cb)\n    }\n  }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n  state.afterWriteTickInfo = null\n  return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n  const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n  if (needDrain) {\n    state.needDrain = false\n    stream.emit('drain')\n  }\n  while (count-- > 0) {\n    state.pendingcb--\n    cb()\n  }\n  if (state.destroyed) {\n    errorBuffer(state)\n  }\n  finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n  if (state.writing) {\n    return\n  }\n  for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n    var _state$errored\n    const { chunk, callback } = state.buffered[n]\n    const len = state.objectMode ? 1 : chunk.length\n    state.length -= len\n    callback(\n      (_state$errored = state.errored) !== null && _state$errored !== undefined\n        ? _state$errored\n        : new ERR_STREAM_DESTROYED('write')\n    )\n  }\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    var _state$errored2\n    onfinishCallbacks[i](\n      (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n        ? _state$errored2\n        : new ERR_STREAM_DESTROYED('end')\n    )\n  }\n  resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n  if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n    return\n  }\n  const { buffered, bufferedIndex, objectMode } = state\n  const bufferedLength = buffered.length - bufferedIndex\n  if (!bufferedLength) {\n    return\n  }\n  let i = bufferedIndex\n  state.bufferProcessing = true\n  if (bufferedLength > 1 && stream._writev) {\n    state.pendingcb -= bufferedLength - 1\n    const callback = state.allNoop\n      ? nop\n      : (err) => {\n          for (let n = i; n < buffered.length; ++n) {\n            buffered[n].callback(err)\n          }\n        }\n    // Make a copy of `buffered` if it's going to be used by `callback` above,\n    // since `doWrite` will mutate the array.\n    const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n    chunks.allBuffers = state.allBuffers\n    doWrite(stream, state, true, state.length, chunks, '', callback)\n    resetBuffer(state)\n  } else {\n    do {\n      const { chunk, encoding, callback } = buffered[i]\n      buffered[i++] = null\n      const len = objectMode ? 1 : chunk.length\n      doWrite(stream, state, false, len, chunk, encoding, callback)\n    } while (i < buffered.length && !state.writing)\n    if (i === buffered.length) {\n      resetBuffer(state)\n    } else if (i > 256) {\n      buffered.splice(0, i)\n      state.bufferedIndex = 0\n    } else {\n      state.bufferedIndex = i\n    }\n  }\n  state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  if (this._writev) {\n    this._writev(\n      [\n        {\n          chunk,\n          encoding\n        }\n      ],\n      cb\n    )\n  } else {\n    throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n  }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n  const state = this._writableState\n  if (typeof chunk === 'function') {\n    cb = chunk\n    chunk = null\n    encoding = null\n  } else if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = null\n  }\n  let err\n  if (chunk !== null && chunk !== undefined) {\n    const ret = _write(this, chunk, encoding)\n    if (ret instanceof Error) {\n      err = ret\n    }\n  }\n\n  // .end() fully uncorks.\n  if (state.corked) {\n    state.corked = 1\n    this.uncork()\n  }\n  if (err) {\n    // Do nothing...\n  } else if (!state.errored && !state.ending) {\n    // This is forgiving in terms of unnecessary calls to end() and can hide\n    // logic errors. However, usually such errors are harmless and causing a\n    // hard error can be disproportionately destructive. It is not always\n    // trivial for the user to determine whether end() needs to be called\n    // or not.\n\n    state.ending = true\n    finishMaybe(this, state, true)\n    state.ended = true\n  } else if (state.finished) {\n    err = new ERR_STREAM_ALREADY_FINISHED('end')\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('end')\n  }\n  if (typeof cb === 'function') {\n    if (err || state.finished) {\n      process.nextTick(cb, err)\n    } else {\n      state[kOnFinished].push(cb)\n    }\n  }\n  return this\n}\nfunction needFinish(state) {\n  return (\n    state.ending &&\n    !state.destroyed &&\n    state.constructed &&\n    state.length === 0 &&\n    !state.errored &&\n    state.buffered.length === 0 &&\n    !state.finished &&\n    !state.writing &&\n    !state.errorEmitted &&\n    !state.closeEmitted\n  )\n}\nfunction callFinal(stream, state) {\n  let called = false\n  function onFinish(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    state.pendingcb--\n    if (err) {\n      const onfinishCallbacks = state[kOnFinished].splice(0)\n      for (let i = 0; i < onfinishCallbacks.length; i++) {\n        onfinishCallbacks[i](err)\n      }\n      errorOrDestroy(stream, err, state.sync)\n    } else if (needFinish(state)) {\n      state.prefinished = true\n      stream.emit('prefinish')\n      // Backwards compat. Don't check state.sync here.\n      // Some streams assume 'finish' will be emitted\n      // asynchronously relative to _final callback.\n      state.pendingcb++\n      process.nextTick(finish, stream, state)\n    }\n  }\n  state.sync = true\n  state.pendingcb++\n  try {\n    stream._final(onFinish)\n  } catch (err) {\n    onFinish(err)\n  }\n  state.sync = false\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.finalCalled = true\n      callFinal(stream, state)\n    } else {\n      state.prefinished = true\n      stream.emit('prefinish')\n    }\n  }\n}\nfunction finishMaybe(stream, state, sync) {\n  if (needFinish(state)) {\n    prefinish(stream, state)\n    if (state.pendingcb === 0) {\n      if (sync) {\n        state.pendingcb++\n        process.nextTick(\n          (stream, state) => {\n            if (needFinish(state)) {\n              finish(stream, state)\n            } else {\n              state.pendingcb--\n            }\n          },\n          stream,\n          state\n        )\n      } else if (needFinish(state)) {\n        state.pendingcb++\n        finish(stream, state)\n      }\n    }\n  }\n}\nfunction finish(stream, state) {\n  state.pendingcb--\n  state.finished = true\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    onfinishCallbacks[i]()\n  }\n  stream.emit('finish')\n  if (state.autoDestroy) {\n    // In case of duplex streams we need a way to detect\n    // if the readable side is ready for autoDestroy as well.\n    const rState = stream._readableState\n    const autoDestroy =\n      !rState ||\n      (rState.autoDestroy &&\n        // We don't expect the readable to ever 'end'\n        // if readable is explicitly set to false.\n        (rState.endEmitted || rState.readable === false))\n    if (autoDestroy) {\n      stream.destroy()\n    }\n  }\n}\nObjectDefineProperties(Writable.prototype, {\n  closed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.destroyed : false\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly managing destroyed.\n      if (this._writableState) {\n        this._writableState.destroyed = value\n      }\n    }\n  },\n  writable: {\n    __proto__: null,\n    get() {\n      const w = this._writableState\n      // w.writable === false means that this is part of a Duplex stream\n      // where the writable side was disabled upon construction.\n      // Compat. The user might manually disable writable side through\n      // deprecated setter.\n      return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n    },\n    set(val) {\n      // Backwards compatible.\n      if (this._writableState) {\n        this._writableState.writable = !!val\n      }\n    }\n  },\n  writableFinished: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.finished : false\n    }\n  },\n  writableObjectMode: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.objectMode : false\n    }\n  },\n  writableBuffer: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.getBuffer()\n    }\n  },\n  writableEnded: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.ending : false\n    }\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    get() {\n      const wState = this._writableState\n      if (!wState) return false\n      return !wState.destroyed && !wState.ending && wState.needDrain\n    }\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.highWaterMark\n    }\n  },\n  writableCorked: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.corked : 0\n    }\n  },\n  writableLength: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.length\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._writableState ? this._writableState.errored : null\n    }\n  },\n  writableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._writableState.writable !== false &&\n        (this._writableState.destroyed || this._writableState.errored) &&\n        !this._writableState.finished\n      )\n    }\n  }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n  const state = this._writableState\n\n  // Invoke pending callbacks.\n  if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n    process.nextTick(errorBuffer, state)\n  }\n  destroy.call(this, err, cb)\n  return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n  return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n  return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n  isReadable,\n  isWritable,\n  isIterable,\n  isNodeStream,\n  isReadableNodeStream,\n  isWritableNodeStream,\n  isDuplexNodeStream,\n  isReadableStream,\n  isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n  constructor(options) {\n    super(options)\n\n    // https://github.com/nodejs/node/pull/34385\n\n    if ((options === null || options === undefined ? undefined : options.readable) === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if ((options === null || options === undefined ? undefined : options.writable) === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  }\n}\nmodule.exports = function duplexify(body, name) {\n  if (isDuplexNodeStream(body)) {\n    return body\n  }\n  if (isReadableNodeStream(body)) {\n    return _duplexify({\n      readable: body\n    })\n  }\n  if (isWritableNodeStream(body)) {\n    return _duplexify({\n      writable: body\n    })\n  }\n  if (isNodeStream(body)) {\n    return _duplexify({\n      writable: false,\n      readable: false\n    })\n  }\n  if (isReadableStream(body)) {\n    return _duplexify({\n      readable: Readable.fromWeb(body)\n    })\n  }\n  if (isWritableStream(body)) {\n    return _duplexify({\n      writable: Writable.fromWeb(body)\n    })\n  }\n  if (typeof body === 'function') {\n    const { value, write, final, destroy } = fromAsyncGen(body)\n    if (isIterable(value)) {\n      return from(Duplexify, value, {\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        write,\n        final,\n        destroy\n      })\n    }\n    const then = value === null || value === undefined ? undefined : value.then\n    if (typeof then === 'function') {\n      let d\n      const promise = FunctionPrototypeCall(\n        then,\n        value,\n        (val) => {\n          if (val != null) {\n            throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n          }\n        },\n        (err) => {\n          destroyer(d, err)\n        }\n      )\n      return (d = new Duplexify({\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        readable: false,\n        write,\n        final(cb) {\n          final(async () => {\n            try {\n              await promise\n              process.nextTick(cb, null)\n            } catch (err) {\n              process.nextTick(cb, err)\n            }\n          })\n        },\n        destroy\n      }))\n    }\n    throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n  }\n  if (isBlob(body)) {\n    return duplexify(body.arrayBuffer())\n  }\n  if (isIterable(body)) {\n    return from(Duplexify, body, {\n      // TODO (ronag): highWaterMark?\n      objectMode: true,\n      writable: false\n    })\n  }\n  if (\n    isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n    isWritableStream(body === null || body === undefined ? undefined : body.writable)\n  ) {\n    return Duplexify.fromWeb(body)\n  }\n  if (\n    typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n    typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n  ) {\n    const readable =\n      body !== null && body !== undefined && body.readable\n        ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.readable\n          : duplexify(body.readable)\n        : undefined\n    const writable =\n      body !== null && body !== undefined && body.writable\n        ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.writable\n          : duplexify(body.writable)\n        : undefined\n    return _duplexify({\n      readable,\n      writable\n    })\n  }\n  const then = body === null || body === undefined ? undefined : body.then\n  if (typeof then === 'function') {\n    let d\n    FunctionPrototypeCall(\n      then,\n      body,\n      (val) => {\n        if (val != null) {\n          d.push(val)\n        }\n        d.push(null)\n      },\n      (err) => {\n        destroyer(d, err)\n      }\n    )\n    return (d = new Duplexify({\n      objectMode: true,\n      writable: false,\n      read() {}\n    }))\n  }\n  throw new ERR_INVALID_ARG_TYPE(\n    name,\n    [\n      'Blob',\n      'ReadableStream',\n      'WritableStream',\n      'Stream',\n      'Iterable',\n      'AsyncIterable',\n      'Function',\n      '{ readable, writable } pair',\n      'Promise'\n    ],\n    body\n  )\n}\nfunction fromAsyncGen(fn) {\n  let { promise, resolve } = createDeferredPromise()\n  const ac = new AbortController()\n  const signal = ac.signal\n  const value = fn(\n    (async function* () {\n      while (true) {\n        const _promise = promise\n        promise = null\n        const { chunk, done, cb } = await _promise\n        process.nextTick(cb)\n        if (done) return\n        if (signal.aborted)\n          throw new AbortError(undefined, {\n            cause: signal.reason\n          })\n        ;({ promise, resolve } = createDeferredPromise())\n        yield chunk\n      }\n    })(),\n    {\n      signal\n    }\n  )\n  return {\n    value,\n    write(chunk, encoding, cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        chunk,\n        done: false,\n        cb\n      })\n    },\n    final(cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        done: true,\n        cb\n      })\n    },\n    destroy(err, cb) {\n      ac.abort()\n      cb(err)\n    }\n  }\n}\nfunction _duplexify(pair) {\n  const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n  const w = pair.writable\n  let readable = !!isReadable(r)\n  let writable = !!isWritable(w)\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    }\n  }\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplexify({\n    // TODO (ronag): highWaterMark?\n    readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n    writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n    readable,\n    writable\n  })\n  if (writable) {\n    eos(w, (err) => {\n      writable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    d._write = function (chunk, encoding, callback) {\n      if (w.write(chunk, encoding)) {\n        callback()\n      } else {\n        ondrain = callback\n      }\n    }\n    d._final = function (callback) {\n      w.end()\n      onfinish = callback\n    }\n    w.on('drain', function () {\n      if (ondrain) {\n        const cb = ondrain\n        ondrain = null\n        cb()\n      }\n    })\n    w.on('finish', function () {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    eos(r, (err) => {\n      readable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    r.on('readable', function () {\n      if (onreadable) {\n        const cb = onreadable\n        onreadable = null\n        cb()\n      }\n    })\n    r.on('end', function () {\n      d.push(null)\n    })\n    d._read = function () {\n      while (true) {\n        const buf = r.read()\n        if (buf === null) {\n          onreadable = d._read\n          return\n        }\n        if (!d.push(buf)) {\n          return\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      destroyer(w, err)\n      destroyer(r, err)\n    }\n  }\n  return d\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n  ObjectDefineProperties,\n  ObjectGetOwnPropertyDescriptor,\n  ObjectKeys,\n  ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n  const keys = ObjectKeys(Writable.prototype)\n  // Allow the keys array to be GC'ed.\n  for (let i = 0; i < keys.length; i++) {\n    const method = keys[i]\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options)\n  Readable.call(this, options)\n  Writable.call(this, options)\n  if (options) {\n    this.allowHalfOpen = options.allowHalfOpen !== false\n    if (options.readable === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if (options.writable === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  } else {\n    this.allowHalfOpen = true\n  }\n}\nObjectDefineProperties(Duplex.prototype, {\n  writable: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n  },\n  writableObjectMode: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n  },\n  writableBuffer: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n  },\n  writableLength: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n  },\n  writableFinished: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n  },\n  writableCorked: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n  },\n  writableEnded: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      if (this._readableState === undefined || this._writableState === undefined) {\n        return false\n      }\n      return this._readableState.destroyed && this._writableState.destroyed\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      if (this._readableState && this._writableState) {\n        this._readableState.destroyed = value\n        this._writableState.destroyed = value\n      }\n    }\n  }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n  return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n  return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n  if (!duplexify) {\n    duplexify = require('./duplexify')\n  }\n  return duplexify(body, 'body')\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options)\n\n  // TODO (ronag): This should preferably always be\n  // applied but would be semver-major. Or even better;\n  // make Transform a Readable with the Writable interface.\n  const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n  if (readableHighWaterMark === 0) {\n    // A Duplex will buffer both on the writable and readable side while\n    // a Transform just wants to buffer hwm number of elements. To avoid\n    // buffering twice we disable buffering on the writable side.\n    options = {\n      ...options,\n      highWaterMark: null,\n      readableHighWaterMark,\n      // TODO (ronag): 0 is not optimal since we have\n      // a \"bug\" where we check needDrain before calling _write and not after.\n      // Refs: https://github.com/nodejs/node/pull/32887\n      // Refs: https://github.com/nodejs/node/pull/35941\n      writableHighWaterMark: options.writableHighWaterMark || 0\n    }\n  }\n  Duplex.call(this, options)\n\n  // We have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false\n  this[kCallback] = null\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform\n    if (typeof options.flush === 'function') this._flush = options.flush\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  // Backwards compat. Some Transform streams incorrectly implement _final\n  // instead of or in addition to _flush. By using 'prefinish' instead of\n  // implementing _final we continue supporting this unfortunate use case.\n  this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n  if (typeof this._flush === 'function' && !this.destroyed) {\n    this._flush((er, data) => {\n      if (er) {\n        if (cb) {\n          cb(er)\n        } else {\n          this.destroy(er)\n        }\n        return\n      }\n      if (data != null) {\n        this.push(data)\n      }\n      this.push(null)\n      if (cb) {\n        cb()\n      }\n    })\n  } else {\n    this.push(null)\n    if (cb) {\n      cb()\n    }\n  }\n}\nfunction prefinish() {\n  if (this._final !== final) {\n    final.call(this)\n  }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n  const rState = this._readableState\n  const wState = this._writableState\n  const length = rState.length\n  this._transform(chunk, encoding, (err, val) => {\n    if (err) {\n      callback(err)\n      return\n    }\n    if (val != null) {\n      this.push(val)\n    }\n    if (\n      wState.ended ||\n      // Backwards compat.\n      length === rState.length ||\n      // Backwards compat.\n      rState.length < rState.highWaterMark\n    ) {\n      callback()\n    } else {\n      this[kCallback] = callback\n    }\n  })\n}\nTransform.prototype._read = function () {\n  if (this[kCallback]) {\n    const callback = this[kCallback]\n    this[kCallback] = null\n    callback()\n  }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options)\n  Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED,\n    ERR_STREAM_PREMATURE_CLOSE\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n  isIterable,\n  isReadable,\n  isReadableNodeStream,\n  isNodeStream,\n  isTransformStream,\n  isWebStream,\n  isReadableStream,\n  isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n  let finished = false\n  stream.on('close', () => {\n    finished = true\n  })\n  const cleanup = eos(\n    stream,\n    {\n      readable: reading,\n      writable: writing\n    },\n    (err) => {\n      finished = !err\n    }\n  )\n  return {\n    destroy: (err) => {\n      if (finished) return\n      finished = true\n      destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n    },\n    cleanup\n  }\n}\nfunction popCallback(streams) {\n  // Streams should never be an empty array. It should always contain at least\n  // a single stream. Therefore optimize for the average case instead of\n  // checking for length === 0 as well.\n  validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n  return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n  if (isIterable(val)) {\n    return val\n  } else if (isReadableNodeStream(val)) {\n    // Legacy streams are not Iterable.\n    return fromReadable(val)\n  }\n  throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n  if (!Readable) {\n    Readable = require('./readable')\n  }\n  yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n  let error\n  let onresolve = null\n  const resume = (err) => {\n    if (err) {\n      error = err\n    }\n    if (onresolve) {\n      const callback = onresolve\n      onresolve = null\n      callback()\n    }\n  }\n  const wait = () =>\n    new Promise((resolve, reject) => {\n      if (error) {\n        reject(error)\n      } else {\n        onresolve = () => {\n          if (error) {\n            reject(error)\n          } else {\n            resolve()\n          }\n        }\n      }\n    })\n  writable.on('drain', resume)\n  const cleanup = eos(\n    writable,\n    {\n      readable: false\n    },\n    resume\n  )\n  try {\n    if (writable.writableNeedDrain) {\n      await wait()\n    }\n    for await (const chunk of iterable) {\n      if (!writable.write(chunk)) {\n        await wait()\n      }\n    }\n    if (end) {\n      writable.end()\n      await wait()\n    }\n    finish()\n  } catch (err) {\n    finish(error !== err ? aggregateTwoErrors(error, err) : err)\n  } finally {\n    cleanup()\n    writable.off('drain', resume)\n  }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n  if (isTransformStream(writable)) {\n    writable = writable.writable\n  }\n  // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n  const writer = writable.getWriter()\n  try {\n    for await (const chunk of readable) {\n      await writer.ready\n      writer.write(chunk).catch(() => {})\n    }\n    await writer.ready\n    if (end) {\n      await writer.close()\n    }\n    finish()\n  } catch (err) {\n    try {\n      await writer.abort(err)\n      finish(err)\n    } catch (err) {\n      finish(err)\n    }\n  }\n}\nfunction pipeline(...streams) {\n  return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n  if (streams.length === 1 && ArrayIsArray(streams[0])) {\n    streams = streams[0]\n  }\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n  // Need to cleanup event listeners if last stream is readable\n  // https://github.com/nodejs/node/issues/35452\n  const lastStreamCleanup = []\n  validateAbortSignal(outerSignal, 'options.signal')\n  function abort() {\n    finishImpl(new AbortError())\n  }\n  addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n  let disposable\n  if (outerSignal) {\n    disposable = addAbortListener(outerSignal, abort)\n  }\n  let error\n  let value\n  const destroys = []\n  let finishCount = 0\n  function finish(err) {\n    finishImpl(err, --finishCount === 0)\n  }\n  function finishImpl(err, final) {\n    var _disposable\n    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n      error = err\n    }\n    if (!error && !final) {\n      return\n    }\n    while (destroys.length) {\n      destroys.shift()(error)\n    }\n    ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n    ac.abort()\n    if (final) {\n      if (!error) {\n        lastStreamCleanup.forEach((fn) => fn())\n      }\n      process.nextTick(callback, error, value)\n    }\n  }\n  let ret\n  for (let i = 0; i < streams.length; i++) {\n    const stream = streams[i]\n    const reading = i < streams.length - 1\n    const writing = i > 0\n    const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n    const isLastStream = i === streams.length - 1\n    if (isNodeStream(stream)) {\n      if (end) {\n        const { destroy, cleanup } = destroyer(stream, reading, writing)\n        destroys.push(destroy)\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n\n      // Catch stream errors that occur after pipe/pump has completed.\n      function onError(err) {\n        if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n          finish(err)\n        }\n      }\n      stream.on('error', onError)\n      if (isReadable(stream) && isLastStream) {\n        lastStreamCleanup.push(() => {\n          stream.removeListener('error', onError)\n        })\n      }\n    }\n    if (i === 0) {\n      if (typeof stream === 'function') {\n        ret = stream({\n          signal\n        })\n        if (!isIterable(ret)) {\n          throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n        }\n      } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n        ret = stream\n      } else {\n        ret = Duplex.from(stream)\n      }\n    } else if (typeof stream === 'function') {\n      if (isTransformStream(ret)) {\n        var _ret\n        ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n      } else {\n        ret = makeAsyncIterable(ret)\n      }\n      ret = stream(ret, {\n        signal\n      })\n      if (reading) {\n        if (!isIterable(ret, true)) {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n        }\n      } else {\n        var _ret2\n        if (!PassThrough) {\n          PassThrough = require('./passthrough')\n        }\n\n        // If the last argument to pipeline is not a stream\n        // we must create a proxy stream so that pipeline(...)\n        // always returns a stream which can be further\n        // composed through `.pipe(stream)`.\n\n        const pt = new PassThrough({\n          objectMode: true\n        })\n\n        // Handle Promises/A+ spec, `then` could be a getter that throws on\n        // second use.\n        const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n        if (typeof then === 'function') {\n          finishCount++\n          then.call(\n            ret,\n            (val) => {\n              value = val\n              if (val != null) {\n                pt.write(val)\n              }\n              if (end) {\n                pt.end()\n              }\n              process.nextTick(finish)\n            },\n            (err) => {\n              pt.destroy(err)\n              process.nextTick(finish, err)\n            }\n          )\n        } else if (isIterable(ret, true)) {\n          finishCount++\n          pumpToNode(ret, pt, finish, {\n            end\n          })\n        } else if (isReadableStream(ret) || isTransformStream(ret)) {\n          const toRead = ret.readable || ret\n          finishCount++\n          pumpToNode(toRead, pt, finish, {\n            end\n          })\n        } else {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n        }\n        ret = pt\n        const { destroy, cleanup } = destroyer(ret, false, true)\n        destroys.push(destroy)\n        if (isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n    } else if (isNodeStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount += 2\n        const cleanup = pipe(ret, stream, finish, {\n          end\n        })\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      } else if (isTransformStream(ret) || isReadableStream(ret)) {\n        const toRead = ret.readable || ret\n        finishCount++\n        pumpToNode(toRead, stream, finish, {\n          end\n        })\n      } else if (isIterable(ret)) {\n        finishCount++\n        pumpToNode(ret, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else if (isWebStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount++\n        pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n          end\n        })\n      } else if (isReadableStream(ret) || isIterable(ret)) {\n        finishCount++\n        pumpToWeb(ret, stream, finish, {\n          end\n        })\n      } else if (isTransformStream(ret)) {\n        finishCount++\n        pumpToWeb(ret.readable, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else {\n      ret = Duplex.from(stream)\n    }\n  }\n  if (\n    (signal !== null && signal !== undefined && signal.aborted) ||\n    (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n  ) {\n    process.nextTick(abort)\n  }\n  return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n  let ended = false\n  dst.on('close', () => {\n    if (!ended) {\n      // Finish if the destination closes before the source has completed.\n      finish(new ERR_STREAM_PREMATURE_CLOSE())\n    }\n  })\n  src.pipe(dst, {\n    end: false\n  }) // If end is true we already will have a listener to end dst.\n\n  if (end) {\n    // Compat. Before node v10.12.0 stdio used to throw an error so\n    // pipe() did/does not end() stdio destinations.\n    // Now they allow it but \"secretly\" don't close the underlying fd.\n\n    function endFn() {\n      ended = true\n      dst.end()\n    }\n    if (isReadableFinished(src)) {\n      // End the destination if the source has already ended.\n      process.nextTick(endFn)\n    } else {\n      src.once('end', endFn)\n    }\n  } else {\n    finish()\n  }\n  eos(\n    src,\n    {\n      readable: true,\n      writable: false\n    },\n    (err) => {\n      const rState = src._readableState\n      if (\n        err &&\n        err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n        rState &&\n        rState.ended &&\n        !rState.errored &&\n        !rState.errorEmitted\n      ) {\n        // Some readable streams will emit 'close' before 'end'. However, since\n        // this is on the readable side 'end' should still be emitted if the\n        // stream has been ended and no error emitted. This should be allowed in\n        // favor of backwards compatibility. Since the stream is piped to a\n        // destination this should not result in any observable difference.\n        // We don't need to check if this is a writable premature close since\n        // eos will only fail with premature close on the reading side for\n        // duplex streams.\n        src.once('end', finish).once('error', finish)\n      } else {\n        finish(err)\n      }\n    }\n  )\n  return eos(\n    dst,\n    {\n      readable: false,\n      writable: true\n    },\n    finish\n  )\n}\nmodule.exports = {\n  pipelineImpl,\n  pipeline\n}\n", "'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n  isNodeStream,\n  isReadable,\n  isWritable,\n  isWebStream,\n  isTransformStream,\n  isWritableStream,\n  isReadableStream\n} = require('./utils')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n  if (streams.length === 0) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  if (streams.length === 1) {\n    return Duplex.from(streams[0])\n  }\n  const orgStreams = [...streams]\n  if (typeof streams[0] === 'function') {\n    streams[0] = Duplex.from(streams[0])\n  }\n  if (typeof streams[streams.length - 1] === 'function') {\n    const idx = streams.length - 1\n    streams[idx] = Duplex.from(streams[idx])\n  }\n  for (let n = 0; n < streams.length; ++n) {\n    if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n      // TODO(ronag): Add checks for non streams.\n      continue\n    }\n    if (\n      n < streams.length - 1 &&\n      !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n    ) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n    }\n    if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n    }\n  }\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    } else if (!readable && !writable) {\n      d.destroy()\n    }\n  }\n  const head = streams[0]\n  const tail = pipeline(streams, onfinished)\n  const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n  const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplex({\n    // TODO (ronag): highWaterMark?\n    writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n    readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n    writable,\n    readable\n  })\n  if (writable) {\n    if (isNodeStream(head)) {\n      d._write = function (chunk, encoding, callback) {\n        if (head.write(chunk, encoding)) {\n          callback()\n        } else {\n          ondrain = callback\n        }\n      }\n      d._final = function (callback) {\n        head.end()\n        onfinish = callback\n      }\n      head.on('drain', function () {\n        if (ondrain) {\n          const cb = ondrain\n          ondrain = null\n          cb()\n        }\n      })\n    } else if (isWebStream(head)) {\n      const writable = isTransformStream(head) ? head.writable : head\n      const writer = writable.getWriter()\n      d._write = async function (chunk, encoding, callback) {\n        try {\n          await writer.ready\n          writer.write(chunk).catch(() => {})\n          callback()\n        } catch (err) {\n          callback(err)\n        }\n      }\n      d._final = async function (callback) {\n        try {\n          await writer.ready\n          writer.close().catch(() => {})\n          onfinish = callback\n        } catch (err) {\n          callback(err)\n        }\n      }\n    }\n    const toRead = isTransformStream(tail) ? tail.readable : tail\n    eos(toRead, () => {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    if (isNodeStream(tail)) {\n      tail.on('readable', function () {\n        if (onreadable) {\n          const cb = onreadable\n          onreadable = null\n          cb()\n        }\n      })\n      tail.on('end', function () {\n        d.push(null)\n      })\n      d._read = function () {\n        while (true) {\n          const buf = tail.read()\n          if (buf === null) {\n            onreadable = d._read\n            return\n          }\n          if (!d.push(buf)) {\n            return\n          }\n        }\n      }\n    } else if (isWebStream(tail)) {\n      const readable = isTransformStream(tail) ? tail.readable : tail\n      const reader = readable.getReader()\n      d._read = async function () {\n        while (true) {\n          try {\n            const { value, done } = await reader.read()\n            if (!d.push(value)) {\n              return\n            }\n            if (done) {\n              d.push(null)\n              return\n            }\n          } catch {\n            return\n          }\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      if (isNodeStream(tail)) {\n        destroyer(tail, err)\n      }\n    }\n  }\n  return d\n}\n", "'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n  codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n  AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n  ArrayPrototypePush,\n  Boolean,\n  MathFloor,\n  Number,\n  NumberIsNaN,\n  Promise,\n  PromiseReject,\n  PromiseResolve,\n  PromisePrototypeThen,\n  Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  if (isNodeStream(stream) && !isWritable(stream)) {\n    throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n  }\n  const composedStream = staticCompose(this, stream)\n  if (options !== null && options !== undefined && options.signal) {\n    // Not validating as we already validated before\n    addAbortSignalNoValidate(options.signal, composedStream)\n  }\n  return composedStream\n}\nfunction map(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let concurrency = 1\n  if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n    concurrency = MathFloor(options.concurrency)\n  }\n  let highWaterMark = concurrency - 1\n  if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n    highWaterMark = MathFloor(options.highWaterMark)\n  }\n  validateInteger(concurrency, 'options.concurrency', 1)\n  validateInteger(highWaterMark, 'options.highWaterMark', 0)\n  highWaterMark += concurrency\n  return async function* map() {\n    const signal = require('../../ours/util').AbortSignalAny(\n      [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n    )\n    const stream = this\n    const queue = []\n    const signalOpt = {\n      signal\n    }\n    let next\n    let resume\n    let done = false\n    let cnt = 0\n    function onCatch() {\n      done = true\n      afterItemProcessed()\n    }\n    function afterItemProcessed() {\n      cnt -= 1\n      maybeResume()\n    }\n    function maybeResume() {\n      if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n        resume()\n        resume = null\n      }\n    }\n    async function pump() {\n      try {\n        for await (let val of stream) {\n          if (done) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          try {\n            val = fn(val, signalOpt)\n            if (val === kEmpty) {\n              continue\n            }\n            val = PromiseResolve(val)\n          } catch (err) {\n            val = PromiseReject(err)\n          }\n          cnt += 1\n          PromisePrototypeThen(val, afterItemProcessed, onCatch)\n          queue.push(val)\n          if (next) {\n            next()\n            next = null\n          }\n          if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n            await new Promise((resolve) => {\n              resume = resolve\n            })\n          }\n        }\n        queue.push(kEof)\n      } catch (err) {\n        const val = PromiseReject(err)\n        PromisePrototypeThen(val, afterItemProcessed, onCatch)\n        queue.push(val)\n      } finally {\n        done = true\n        if (next) {\n          next()\n          next = null\n        }\n      }\n    }\n    pump()\n    try {\n      while (true) {\n        while (queue.length > 0) {\n          const val = await queue[0]\n          if (val === kEof) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          if (val !== kEmpty) {\n            yield val\n          }\n          queue.shift()\n          maybeResume()\n        }\n        await new Promise((resolve) => {\n          next = resolve\n        })\n      }\n    } finally {\n      done = true\n      if (resume) {\n        resume()\n        resume = null\n      }\n    }\n  }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  return async function* asIndexedPairs() {\n    let index = 0\n    for await (const val of this) {\n      var _options$signal\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal = options.signal) !== null &&\n        _options$signal !== undefined &&\n        _options$signal.aborted\n      ) {\n        throw new AbortError({\n          cause: options.signal.reason\n        })\n      }\n      yield [index++, val]\n    }\n  }.call(this)\n}\nasync function some(fn, options = undefined) {\n  for await (const unused of filter.call(this, fn, options)) {\n    return true\n  }\n  return false\n}\nasync function every(fn, options = undefined) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n  return !(await some.call(\n    this,\n    async (...args) => {\n      return !(await fn(...args))\n    },\n    options\n  ))\n}\nasync function find(fn, options) {\n  for await (const result of filter.call(this, fn, options)) {\n    return result\n  }\n  return undefined\n}\nasync function forEach(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function forEachFn(value, options) {\n    await fn(value, options)\n    return kEmpty\n  }\n  // eslint-disable-next-line no-unused-vars\n  for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function filterFn(value, options) {\n    if (await fn(value, options)) {\n      return value\n    }\n    return kEmpty\n  }\n  return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n  constructor() {\n    super('reduce')\n    this.message = 'Reduce of an empty stream requires an initial value'\n  }\n}\nasync function reduce(reducer, initialValue, options) {\n  var _options$signal2\n  if (typeof reducer !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let hasInitialValue = arguments.length > 1\n  if (\n    options !== null &&\n    options !== undefined &&\n    (_options$signal2 = options.signal) !== null &&\n    _options$signal2 !== undefined &&\n    _options$signal2.aborted\n  ) {\n    const err = new AbortError(undefined, {\n      cause: options.signal.reason\n    })\n    this.once('error', () => {}) // The error is already propagated\n    await finished(this.destroy(err))\n    throw err\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  if (options !== null && options !== undefined && options.signal) {\n    const opts = {\n      once: true,\n      [kWeakHandler]: this,\n      [kResistStopPropagation]: true\n    }\n    options.signal.addEventListener('abort', () => ac.abort(), opts)\n  }\n  let gotAnyItemFromStream = false\n  try {\n    for await (const value of this) {\n      var _options$signal3\n      gotAnyItemFromStream = true\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal3 = options.signal) !== null &&\n        _options$signal3 !== undefined &&\n        _options$signal3.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (!hasInitialValue) {\n        initialValue = value\n        hasInitialValue = true\n      } else {\n        initialValue = await reducer(initialValue, value, {\n          signal\n        })\n      }\n    }\n    if (!gotAnyItemFromStream && !hasInitialValue) {\n      throw new ReduceAwareErrMissingArgs()\n    }\n  } finally {\n    ac.abort()\n  }\n  return initialValue\n}\nasync function toArray(options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  const result = []\n  for await (const val of this) {\n    var _options$signal4\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal4 = options.signal) !== null &&\n      _options$signal4 !== undefined &&\n      _options$signal4.aborted\n    ) {\n      throw new AbortError(undefined, {\n        cause: options.signal.reason\n      })\n    }\n    ArrayPrototypePush(result, val)\n  }\n  return result\n}\nfunction flatMap(fn, options) {\n  const values = map.call(this, fn, options)\n  return async function* flatMap() {\n    for await (const val of values) {\n      yield* val\n    }\n  }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n  // We coerce here to align with the spec\n  // https://github.com/tc39/proposal-iterator-helpers/issues/169\n  number = Number(number)\n  if (NumberIsNaN(number)) {\n    return 0\n  }\n  if (number < 0) {\n    throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n  }\n  return number\n}\nfunction drop(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* drop() {\n    var _options$signal5\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal5 = options.signal) !== null &&\n      _options$signal5 !== undefined &&\n      _options$signal5.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal6\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal6 = options.signal) !== null &&\n        _options$signal6 !== undefined &&\n        _options$signal6.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- <= 0) {\n        yield val\n      }\n    }\n  }.call(this)\n}\nfunction take(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* take() {\n    var _options$signal7\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal7 = options.signal) !== null &&\n      _options$signal7 !== undefined &&\n      _options$signal7.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal8\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal8 = options.signal) !== null &&\n        _options$signal8 !== undefined &&\n        _options$signal8.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- > 0) {\n        yield val\n      }\n\n      // Don't get another item from iterator in case we reached the end\n      if (number <= 0) {\n        return\n      }\n    }\n  }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n  asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n  drop,\n  filter,\n  flatMap,\n  map,\n  take,\n  compose\n}\nmodule.exports.promiseReturningOperators = {\n  every,\n  forEach,\n  reduce,\n  toArray,\n  some,\n  find\n}\n", "'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n  return new Promise((resolve, reject) => {\n    let signal\n    let end\n    const lastArg = streams[streams.length - 1]\n    if (\n      lastArg &&\n      typeof lastArg === 'object' &&\n      !isNodeStream(lastArg) &&\n      !isIterable(lastArg) &&\n      !isWebStream(lastArg)\n    ) {\n      const options = ArrayPrototypePop(streams)\n      signal = options.signal\n      end = options.end\n    }\n    pl(\n      streams,\n      (err, value) => {\n        if (err) {\n          reject(err)\n        } else {\n          resolve(value)\n        }\n      },\n      {\n        signal,\n        end\n      }\n    )\n  })\n}\nmodule.exports = {\n  finished,\n  pipeline\n}\n", "/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n  promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n  codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n  const op = streamReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return Stream.Readable.from(ReflectApply(op, this, args))\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n  const op = promiseReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return ReflectApply(op, this, args)\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n  __proto__: null,\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.pipeline\n  }\n})\nObjectDefineProperty(eos, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.finished\n  }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n  return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n", "'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n", "// Copyright 2018 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the “License”);\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// <https://apache.org/licenses/LICENSE-2.0>.\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an “AS IS” BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass JSBI extends Array {\n    constructor(length, sign) {\n        super(length);\n        this.sign = sign;\n        // Explicitly set the prototype as per\n        // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n        Object.setPrototypeOf(this, JSBI.prototype);\n        if (length > JSBI.__kMaxLength) {\n            throw new RangeError('Maximum BigInt size exceeded');\n        }\n    }\n    static BigInt(arg) {\n        if (typeof arg === 'number') {\n            if (arg === 0)\n                return JSBI.__zero();\n            if (JSBI.__isOneDigitInt(arg)) {\n                if (arg < 0) {\n                    return JSBI.__oneDigit(-arg, true);\n                }\n                return JSBI.__oneDigit(arg, false);\n            }\n            if (!Number.isFinite(arg) || Math.floor(arg) !== arg) {\n                throw new RangeError('The number ' + arg + ' cannot be converted to ' +\n                    'BigInt because it is not an integer');\n            }\n            return JSBI.__fromDouble(arg);\n        }\n        else if (typeof arg === 'string') {\n            const result = JSBI.__fromString(arg);\n            if (result === null) {\n                throw new SyntaxError('Cannot convert ' + arg + ' to a BigInt');\n            }\n            return result;\n        }\n        else if (typeof arg === 'boolean') {\n            if (arg === true) {\n                return JSBI.__oneDigit(1, false);\n            }\n            return JSBI.__zero();\n        }\n        else if (typeof arg === 'object') {\n            if (arg.constructor === JSBI)\n                return arg;\n            const primitive = JSBI.__toPrimitive(arg);\n            return JSBI.BigInt(primitive);\n        }\n        throw new TypeError('Cannot convert ' + arg + ' to a BigInt');\n    }\n    toDebugString() {\n        const result = ['BigInt['];\n        for (const digit of this) {\n            result.push((digit ? (digit >>> 0).toString(16) : digit) + ', ');\n        }\n        result.push(']');\n        return result.join('');\n    }\n    toString(radix = 10) {\n        if (radix < 2 || radix > 36) {\n            throw new RangeError('toString() radix argument must be between 2 and 36');\n        }\n        if (this.length === 0)\n            return '0';\n        if ((radix & (radix - 1)) === 0) {\n            return JSBI.__toStringBasePowerOfTwo(this, radix);\n        }\n        return JSBI.__toStringGeneric(this, radix, false);\n    }\n    valueOf() {\n        throw new Error('Convert JSBI instances to native numbers using `toNumber`.');\n    }\n    // Equivalent of \"Number(my_bigint)\" in the native implementation.\n    // TODO: add more tests\n    static toNumber(x) {\n        const xLength = x.length;\n        if (xLength === 0)\n            return 0;\n        if (xLength === 1) {\n            const value = x.__unsignedDigit(0);\n            return x.sign ? -value : value;\n        }\n        const xMsd = x.__digit(xLength - 1);\n        const msdLeadingZeros = JSBI.__clz30(xMsd);\n        const xBitLength = xLength * 30 - msdLeadingZeros;\n        if (xBitLength > 1024)\n            return x.sign ? -Infinity : Infinity;\n        let exponent = xBitLength - 1;\n        let currentDigit = xMsd;\n        let digitIndex = xLength - 1;\n        const shift = msdLeadingZeros + 3;\n        let mantissaHigh = (shift === 32) ? 0 : currentDigit << shift;\n        mantissaHigh >>>= 12;\n        const mantissaHighBitsUnset = shift - 12;\n        let mantissaLow = (shift >= 12) ? 0 : (currentDigit << (20 + shift));\n        let mantissaLowBitsUnset = 20 + shift;\n        if (mantissaHighBitsUnset > 0 && digitIndex > 0) {\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            mantissaHigh |= (currentDigit >>> (30 - mantissaHighBitsUnset));\n            mantissaLow = currentDigit << mantissaHighBitsUnset + 2;\n            mantissaLowBitsUnset = mantissaHighBitsUnset + 2;\n        }\n        while (mantissaLowBitsUnset > 0 && digitIndex > 0) {\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            if (mantissaLowBitsUnset >= 30) {\n                mantissaLow |= (currentDigit << (mantissaLowBitsUnset - 30));\n            }\n            else {\n                mantissaLow |= (currentDigit >>> (30 - mantissaLowBitsUnset));\n            }\n            mantissaLowBitsUnset -= 30;\n        }\n        const rounding = JSBI.__decideRounding(x, mantissaLowBitsUnset, digitIndex, currentDigit);\n        if (rounding === 1 || (rounding === 0 && (mantissaLow & 1) === 1)) {\n            mantissaLow = (mantissaLow + 1) >>> 0;\n            if (mantissaLow === 0) {\n                // Incrementing mantissaLow overflowed.\n                mantissaHigh++;\n                if ((mantissaHigh >>> 20) !== 0) {\n                    // Incrementing mantissaHigh overflowed.\n                    mantissaHigh = 0;\n                    exponent++;\n                    if (exponent > 1023) {\n                        // Incrementing the exponent overflowed.\n                        return x.sign ? -Infinity : Infinity;\n                    }\n                }\n            }\n        }\n        const signBit = x.sign ? (1 << 31) : 0;\n        exponent = (exponent + 0x3FF) << 20;\n        JSBI.__kBitConversionInts[1] = signBit | exponent | mantissaHigh;\n        JSBI.__kBitConversionInts[0] = mantissaLow;\n        return JSBI.__kBitConversionDouble[0];\n    }\n    // Operations.\n    static unaryMinus(x) {\n        if (x.length === 0)\n            return x;\n        const result = x.__copy();\n        result.sign = !x.sign;\n        return result;\n    }\n    static bitwiseNot(x) {\n        if (x.sign) {\n            // ~(-x) == ~(~(x-1)) == x-1\n            return JSBI.__absoluteSubOne(x).__trim();\n        }\n        // ~x == -x-1 == -(x+1)\n        return JSBI.__absoluteAddOne(x, true);\n    }\n    static exponentiate(x, y) {\n        if (y.sign) {\n            throw new RangeError('Exponent must be positive');\n        }\n        if (y.length === 0) {\n            return JSBI.__oneDigit(1, false);\n        }\n        if (x.length === 0)\n            return x;\n        if (x.length === 1 && x.__digit(0) === 1) {\n            // (-1) ** even_number == 1.\n            if (x.sign && (y.__digit(0) & 1) === 0) {\n                return JSBI.unaryMinus(x);\n            }\n            // (-1) ** odd_number == -1, 1 ** anything == 1.\n            return x;\n        }\n        // For all bases >= 2, very large exponents would lead to unrepresentable\n        // results.\n        if (y.length > 1)\n            throw new RangeError('BigInt too big');\n        let expValue = y.__unsignedDigit(0);\n        if (expValue === 1)\n            return x;\n        if (expValue >= JSBI.__kMaxLengthBits) {\n            throw new RangeError('BigInt too big');\n        }\n        if (x.length === 1 && x.__digit(0) === 2) {\n            // Fast path for 2^n.\n            const neededDigits = 1 + ((expValue / 30) | 0);\n            const sign = x.sign && ((expValue & 1) !== 0);\n            const result = new JSBI(neededDigits, sign);\n            result.__initializeDigits();\n            // All bits are zero. Now set the n-th bit.\n            const msd = 1 << (expValue % 30);\n            result.__setDigit(neededDigits - 1, msd);\n            return result;\n        }\n        let result = null;\n        let runningSquare = x;\n        // This implicitly sets the result's sign correctly.\n        if ((expValue & 1) !== 0)\n            result = x;\n        expValue >>= 1;\n        for (; expValue !== 0; expValue >>= 1) {\n            runningSquare = JSBI.multiply(runningSquare, runningSquare);\n            if ((expValue & 1) !== 0) {\n                if (result === null) {\n                    result = runningSquare;\n                }\n                else {\n                    result = JSBI.multiply(result, runningSquare);\n                }\n            }\n        }\n        // TODO see if there's a way for tsc to infer this will always happen?\n        return result;\n    }\n    static multiply(x, y) {\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return y;\n        let resultLength = x.length + y.length;\n        if (x.__clzmsd() + y.__clzmsd() >= 30) {\n            resultLength--;\n        }\n        const result = new JSBI(resultLength, x.sign !== y.sign);\n        result.__initializeDigits();\n        for (let i = 0; i < x.length; i++) {\n            JSBI.__multiplyAccumulate(y, x.__digit(i), result, i);\n        }\n        return result.__trim();\n    }\n    static divide(x, y) {\n        if (y.length === 0)\n            throw new RangeError('Division by zero');\n        if (JSBI.__absoluteCompare(x, y) < 0)\n            return JSBI.__zero();\n        const resultSign = x.sign !== y.sign;\n        const divisor = y.__unsignedDigit(0);\n        let quotient;\n        if (y.length === 1 && divisor <= 0x7FFF) {\n            if (divisor === 1) {\n                return resultSign === x.sign ? x : JSBI.unaryMinus(x);\n            }\n            quotient = JSBI.__absoluteDivSmall(x, divisor, null);\n        }\n        else {\n            quotient = JSBI.__absoluteDivLarge(x, y, true, false);\n        }\n        quotient.sign = resultSign;\n        return quotient.__trim();\n    }\n    static remainder(x, y) {\n        if (y.length === 0)\n            throw new RangeError('Division by zero');\n        if (JSBI.__absoluteCompare(x, y) < 0)\n            return x;\n        const divisor = y.__unsignedDigit(0);\n        if (y.length === 1 && divisor <= 0x7FFF) {\n            if (divisor === 1)\n                return JSBI.__zero();\n            const remainderDigit = JSBI.__absoluteModSmall(x, divisor);\n            if (remainderDigit === 0)\n                return JSBI.__zero();\n            return JSBI.__oneDigit(remainderDigit, x.sign);\n        }\n        const remainder = JSBI.__absoluteDivLarge(x, y, false, true);\n        remainder.sign = x.sign;\n        return remainder.__trim();\n    }\n    static add(x, y) {\n        const sign = x.sign;\n        if (sign === y.sign) {\n            // x + y == x + y\n            // -x + -y == -(x + y)\n            return JSBI.__absoluteAdd(x, y, sign);\n        }\n        // x + -y == x - y == -(y - x)\n        // -x + y == y - x == -(x - y)\n        if (JSBI.__absoluteCompare(x, y) >= 0) {\n            return JSBI.__absoluteSub(x, y, sign);\n        }\n        return JSBI.__absoluteSub(y, x, !sign);\n    }\n    static subtract(x, y) {\n        const sign = x.sign;\n        if (sign !== y.sign) {\n            // x - (-y) == x + y\n            // (-x) - y == -(x + y)\n            return JSBI.__absoluteAdd(x, y, sign);\n        }\n        // x - y == -(y - x)\n        // (-x) - (-y) == y - x == -(x - y)\n        if (JSBI.__absoluteCompare(x, y) >= 0) {\n            return JSBI.__absoluteSub(x, y, sign);\n        }\n        return JSBI.__absoluteSub(y, x, !sign);\n    }\n    static leftShift(x, y) {\n        if (y.length === 0 || x.length === 0)\n            return x;\n        if (y.sign)\n            return JSBI.__rightShiftByAbsolute(x, y);\n        return JSBI.__leftShiftByAbsolute(x, y);\n    }\n    static signedRightShift(x, y) {\n        if (y.length === 0 || x.length === 0)\n            return x;\n        if (y.sign)\n            return JSBI.__leftShiftByAbsolute(x, y);\n        return JSBI.__rightShiftByAbsolute(x, y);\n    }\n    static unsignedRightShift() {\n        throw new TypeError('BigInts have no unsigned right shift; use >> instead');\n    }\n    static lessThan(x, y) {\n        return JSBI.__compareToBigInt(x, y) < 0;\n    }\n    static lessThanOrEqual(x, y) {\n        return JSBI.__compareToBigInt(x, y) <= 0;\n    }\n    static greaterThan(x, y) {\n        return JSBI.__compareToBigInt(x, y) > 0;\n    }\n    static greaterThanOrEqual(x, y) {\n        return JSBI.__compareToBigInt(x, y) >= 0;\n    }\n    static equal(x, y) {\n        if (x.sign !== y.sign)\n            return false;\n        if (x.length !== y.length)\n            return false;\n        for (let i = 0; i < x.length; i++) {\n            if (x.__digit(i) !== y.__digit(i))\n                return false;\n        }\n        return true;\n    }\n    static notEqual(x, y) {\n        return !JSBI.equal(x, y);\n    }\n    static bitwiseAnd(x, y) {\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteAnd(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            const resultLength = Math.max(x.length, y.length) + 1;\n            // (-x) & (-y) == ~(x-1) & ~(y-1) == ~((x-1) | (y-1))\n            // == -(((x-1) | (y-1)) + 1)\n            let result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            result = JSBI.__absoluteOr(result, y1, result);\n            return JSBI.__absoluteAddOne(result, true, result).__trim();\n        }\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x & (-y) == x & ~(y-1) == x &~ (y-1)\n        return JSBI.__absoluteAndNot(x, JSBI.__absoluteSubOne(y)).__trim();\n    }\n    static bitwiseXor(x, y) {\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteXor(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            // (-x) ^ (-y) == ~(x-1) ^ ~(y-1) == (x-1) ^ (y-1)\n            const resultLength = Math.max(x.length, y.length);\n            const result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            return JSBI.__absoluteXor(result, y1, result).__trim();\n        }\n        const resultLength = Math.max(x.length, y.length) + 1;\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x ^ (-y) == x ^ ~(y-1) == ~(x ^ (y-1)) == -((x ^ (y-1)) + 1)\n        let result = JSBI.__absoluteSubOne(y, resultLength);\n        result = JSBI.__absoluteXor(result, x, result);\n        return JSBI.__absoluteAddOne(result, true, result).__trim();\n    }\n    static bitwiseOr(x, y) {\n        const resultLength = Math.max(x.length, y.length);\n        if (!x.sign && !y.sign) {\n            return JSBI.__absoluteOr(x, y).__trim();\n        }\n        else if (x.sign && y.sign) {\n            // (-x) | (-y) == ~(x-1) | ~(y-1) == ~((x-1) & (y-1))\n            // == -(((x-1) & (y-1)) + 1)\n            let result = JSBI.__absoluteSubOne(x, resultLength);\n            const y1 = JSBI.__absoluteSubOne(y);\n            result = JSBI.__absoluteAnd(result, y1, result);\n            return JSBI.__absoluteAddOne(result, true, result).__trim();\n        }\n        // Assume that x is the positive BigInt.\n        if (x.sign) {\n            [x, y] = [y, x];\n        }\n        // x | (-y) == x | ~(y-1) == ~((y-1) &~ x) == -(((y-1) ~& x) + 1)\n        let result = JSBI.__absoluteSubOne(y, resultLength);\n        result = JSBI.__absoluteAndNot(result, x, result);\n        return JSBI.__absoluteAddOne(result, true, result).__trim();\n    }\n    static asIntN(n, x) {\n        if (x.length === 0)\n            return x;\n        n = Math.floor(n);\n        if (n < 0) {\n            throw new RangeError('Invalid value: not (convertible to) a safe integer');\n        }\n        if (n === 0)\n            return JSBI.__zero();\n        // If {x} has less than {n} bits, return it directly.\n        if (n >= JSBI.__kMaxLengthBits)\n            return x;\n        const neededLength = ((n + 29) / 30) | 0;\n        if (x.length < neededLength)\n            return x;\n        const topDigit = x.__unsignedDigit(neededLength - 1);\n        const compareDigit = 1 << ((n - 1) % 30);\n        if (x.length === neededLength && topDigit < compareDigit)\n            return x;\n        // Otherwise truncate and simulate two's complement.\n        const hasBit = (topDigit & compareDigit) === compareDigit;\n        if (!hasBit)\n            return JSBI.__truncateToNBits(n, x);\n        if (!x.sign)\n            return JSBI.__truncateAndSubFromPowerOfTwo(n, x, true);\n        if ((topDigit & (compareDigit - 1)) === 0) {\n            for (let i = neededLength - 2; i >= 0; i--) {\n                if (x.__digit(i) !== 0) {\n                    return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n                }\n            }\n            if (x.length === neededLength && topDigit === compareDigit)\n                return x;\n            return JSBI.__truncateToNBits(n, x);\n        }\n        return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n    }\n    static asUintN(n, x) {\n        if (x.length === 0)\n            return x;\n        n = Math.floor(n);\n        if (n < 0) {\n            throw new RangeError('Invalid value: not (convertible to) a safe integer');\n        }\n        if (n === 0)\n            return JSBI.__zero();\n        // If {x} is negative, simulate two's complement representation.\n        if (x.sign) {\n            if (n > JSBI.__kMaxLengthBits) {\n                throw new RangeError('BigInt too big');\n            }\n            return JSBI.__truncateAndSubFromPowerOfTwo(n, x, false);\n        }\n        // If {x} is positive and has up to {n} bits, return it directly.\n        if (n >= JSBI.__kMaxLengthBits)\n            return x;\n        const neededLength = ((n + 29) / 30) | 0;\n        if (x.length < neededLength)\n            return x;\n        const bitsInTopDigit = n % 30;\n        if (x.length == neededLength) {\n            if (bitsInTopDigit === 0)\n                return x;\n            const topDigit = x.__digit(neededLength - 1);\n            if ((topDigit >>> bitsInTopDigit) === 0)\n                return x;\n        }\n        // Otherwise, truncate.\n        return JSBI.__truncateToNBits(n, x);\n    }\n    // Operators.\n    static ADD(x, y) {\n        x = JSBI.__toPrimitive(x);\n        y = JSBI.__toPrimitive(y);\n        if (typeof x === 'string') {\n            if (typeof y !== 'string')\n                y = y.toString();\n            return x + y;\n        }\n        if (typeof y === 'string') {\n            return x.toString() + y;\n        }\n        x = JSBI.__toNumeric(x);\n        y = JSBI.__toNumeric(y);\n        if (JSBI.__isBigInt(x) && JSBI.__isBigInt(y)) {\n            return JSBI.add(x, y);\n        }\n        if (typeof x === 'number' && typeof y === 'number') {\n            return x + y;\n        }\n        throw new TypeError('Cannot mix BigInt and other types, use explicit conversions');\n    }\n    static LT(x, y) {\n        return JSBI.__compare(x, y, 0);\n    }\n    static LE(x, y) {\n        return JSBI.__compare(x, y, 1);\n    }\n    static GT(x, y) {\n        return JSBI.__compare(x, y, 2);\n    }\n    static GE(x, y) {\n        return JSBI.__compare(x, y, 3);\n    }\n    static EQ(x, y) {\n        while (true) {\n            if (JSBI.__isBigInt(x)) {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.equal(x, y);\n                return JSBI.EQ(y, x);\n            }\n            else if (typeof x === 'number') {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.__equalToNumber(y, x);\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'string') {\n                if (JSBI.__isBigInt(y)) {\n                    x = JSBI.__fromString(x);\n                    if (x === null)\n                        return false;\n                    return JSBI.equal(x, y);\n                }\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'boolean') {\n                if (JSBI.__isBigInt(y))\n                    return JSBI.__equalToNumber(y, +x);\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'symbol') {\n                if (JSBI.__isBigInt(y))\n                    return false;\n                if (typeof y !== 'object')\n                    return x == y;\n                y = JSBI.__toPrimitive(y);\n            }\n            else if (typeof x === 'object') {\n                if (typeof y === 'object' && y.constructor !== JSBI)\n                    return x == y;\n                x = JSBI.__toPrimitive(x);\n            }\n            else {\n                return x == y;\n            }\n        }\n    }\n    static NE(x, y) {\n        return !JSBI.EQ(x, y);\n    }\n    // DataView-related functionality.\n    static DataViewGetBigInt64(dataview, byteOffset, littleEndian = false) {\n        return JSBI.asIntN(64, JSBI.DataViewGetBigUint64(dataview, byteOffset, littleEndian));\n    }\n    static DataViewGetBigUint64(dataview, byteOffset, littleEndian = false) {\n        const [h, l] = littleEndian ? [4, 0] : [0, 4];\n        const high = dataview.getUint32(byteOffset + h, littleEndian);\n        const low = dataview.getUint32(byteOffset + l, littleEndian);\n        const result = new JSBI(3, false);\n        result.__setDigit(0, low & 0x3FFFFFFF);\n        result.__setDigit(1, ((high & 0xFFFFFFF) << 2) | (low >>> 30));\n        result.__setDigit(2, high >>> 28);\n        return result.__trim();\n    }\n    static DataViewSetBigInt64(dataview, byteOffset, value, littleEndian = false) {\n        JSBI.DataViewSetBigUint64(dataview, byteOffset, value, littleEndian);\n    }\n    static DataViewSetBigUint64(dataview, byteOffset, value, littleEndian = false) {\n        value = JSBI.asUintN(64, value);\n        let high = 0;\n        let low = 0;\n        if (value.length > 0) {\n            low = value.__digit(0);\n            if (value.length > 1) {\n                const d1 = value.__digit(1);\n                low = low | d1 << 30;\n                high = d1 >>> 2;\n                if (value.length > 2) {\n                    high = high | (value.__digit(2) << 28);\n                }\n            }\n        }\n        const [h, l] = littleEndian ? [4, 0] : [0, 4];\n        dataview.setUint32(byteOffset + h, high, littleEndian);\n        dataview.setUint32(byteOffset + l, low, littleEndian);\n    }\n    // Helpers.\n    static __zero() {\n        return new JSBI(0, false);\n    }\n    static __oneDigit(value, sign) {\n        const result = new JSBI(1, sign);\n        result.__setDigit(0, value);\n        return result;\n    }\n    __copy() {\n        const result = new JSBI(this.length, this.sign);\n        for (let i = 0; i < this.length; i++) {\n            result[i] = this[i];\n        }\n        return result;\n    }\n    __trim() {\n        let newLength = this.length;\n        let last = this[newLength - 1];\n        while (last === 0) {\n            newLength--;\n            last = this[newLength - 1];\n            this.pop();\n        }\n        if (newLength === 0)\n            this.sign = false;\n        return this;\n    }\n    __initializeDigits() {\n        for (let i = 0; i < this.length; i++) {\n            this[i] = 0;\n        }\n    }\n    static __decideRounding(x, mantissaBitsUnset, digitIndex, currentDigit) {\n        if (mantissaBitsUnset > 0)\n            return -1;\n        let topUnconsumedBit;\n        if (mantissaBitsUnset < 0) {\n            topUnconsumedBit = -mantissaBitsUnset - 1;\n        }\n        else {\n            // {currentDigit} fit the mantissa exactly; look at the next digit.\n            if (digitIndex === 0)\n                return -1;\n            digitIndex--;\n            currentDigit = x.__digit(digitIndex);\n            topUnconsumedBit = 29;\n        }\n        // If the most significant remaining bit is 0, round down.\n        let mask = 1 << topUnconsumedBit;\n        if ((currentDigit & mask) === 0)\n            return -1;\n        // If any other remaining bit is set, round up.\n        mask -= 1;\n        if ((currentDigit & mask) !== 0)\n            return 1;\n        while (digitIndex > 0) {\n            digitIndex--;\n            if (x.__digit(digitIndex) !== 0)\n                return 1;\n        }\n        return 0;\n    }\n    static __fromDouble(value) {\n        const sign = value < 0;\n        JSBI.__kBitConversionDouble[0] = value;\n        const rawExponent = (JSBI.__kBitConversionInts[1] >>> 20) & 0x7FF;\n        const exponent = rawExponent - 0x3FF;\n        const digits = ((exponent / 30) | 0) + 1;\n        const result = new JSBI(digits, sign);\n        const kHiddenBit = 0x00100000;\n        let mantissaHigh = (JSBI.__kBitConversionInts[1] & 0xFFFFF) | kHiddenBit;\n        let mantissaLow = JSBI.__kBitConversionInts[0];\n        const kMantissaHighTopBit = 20;\n        // 0-indexed position of most significant bit in most significant digit.\n        const msdTopBit = exponent % 30;\n        // Number of unused bits in the mantissa. We'll keep them shifted to the\n        // left (i.e. most significant part).\n        let remainingMantissaBits = 0;\n        // Next digit under construction.\n        let digit;\n        // First, build the MSD by shifting the mantissa appropriately.\n        if (msdTopBit < kMantissaHighTopBit) {\n            const shift = kMantissaHighTopBit - msdTopBit;\n            remainingMantissaBits = shift + 32;\n            digit = mantissaHigh >>> shift;\n            mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n            mantissaLow = mantissaLow << (32 - shift);\n        }\n        else if (msdTopBit === kMantissaHighTopBit) {\n            remainingMantissaBits = 32;\n            digit = mantissaHigh;\n            mantissaHigh = mantissaLow;\n            mantissaLow = 0;\n        }\n        else {\n            const shift = msdTopBit - kMantissaHighTopBit;\n            remainingMantissaBits = 32 - shift;\n            digit = (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n            mantissaHigh = mantissaLow << shift;\n            mantissaLow = 0;\n        }\n        result.__setDigit(digits - 1, digit);\n        // Then fill in the rest of the digits.\n        for (let digitIndex = digits - 2; digitIndex >= 0; digitIndex--) {\n            if (remainingMantissaBits > 0) {\n                remainingMantissaBits -= 30;\n                digit = mantissaHigh >>> 2;\n                mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n                mantissaLow = (mantissaLow << 30);\n            }\n            else {\n                digit = 0;\n            }\n            result.__setDigit(digitIndex, digit);\n        }\n        return result.__trim();\n    }\n    static __isWhitespace(c) {\n        if (c <= 0x0D && c >= 0x09)\n            return true;\n        if (c <= 0x9F)\n            return c === 0x20;\n        if (c <= 0x01FFFF) {\n            return c === 0xA0 || c === 0x1680;\n        }\n        if (c <= 0x02FFFF) {\n            c &= 0x01FFFF;\n            return c <= 0x0A || c === 0x28 || c === 0x29 || c === 0x2F ||\n                c === 0x5F || c === 0x1000;\n        }\n        return c === 0xFEFF;\n    }\n    static __fromString(string, radix = 0) {\n        let sign = 0;\n        let leadingZero = false;\n        const length = string.length;\n        let cursor = 0;\n        if (cursor === length)\n            return JSBI.__zero();\n        let current = string.charCodeAt(cursor);\n        // Skip whitespace.\n        while (JSBI.__isWhitespace(current)) {\n            if (++cursor === length)\n                return JSBI.__zero();\n            current = string.charCodeAt(cursor);\n        }\n        // Detect radix.\n        if (current === 0x2B) { // '+'\n            if (++cursor === length)\n                return null;\n            current = string.charCodeAt(cursor);\n            sign = 1;\n        }\n        else if (current === 0x2D) { // '-'\n            if (++cursor === length)\n                return null;\n            current = string.charCodeAt(cursor);\n            sign = -1;\n        }\n        if (radix === 0) {\n            radix = 10;\n            if (current === 0x30) { // '0'\n                if (++cursor === length)\n                    return JSBI.__zero();\n                current = string.charCodeAt(cursor);\n                if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n                    radix = 16;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else if (current === 0x4F || current === 0x6F) { // 'O' or 'o'\n                    radix = 8;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else if (current === 0x42 || current === 0x62) { // 'B' or 'b'\n                    radix = 2;\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else {\n                    leadingZero = true;\n                }\n            }\n        }\n        else if (radix === 16) {\n            if (current === 0x30) { // '0'\n                // Allow \"0x\" prefix.\n                if (++cursor === length)\n                    return JSBI.__zero();\n                current = string.charCodeAt(cursor);\n                if (current === 0x58 || current === 0x78) { // 'X' or 'x'\n                    if (++cursor === length)\n                        return null;\n                    current = string.charCodeAt(cursor);\n                }\n                else {\n                    leadingZero = true;\n                }\n            }\n        }\n        if (sign !== 0 && radix !== 10)\n            return null;\n        // Skip leading zeros.\n        while (current === 0x30) {\n            leadingZero = true;\n            if (++cursor === length)\n                return JSBI.__zero();\n            current = string.charCodeAt(cursor);\n        }\n        // Allocate result.\n        const chars = length - cursor;\n        let bitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n        let roundup = JSBI.__kBitsPerCharTableMultiplier - 1;\n        if (chars > (1 << 30) / bitsPerChar)\n            return null;\n        const bitsMin = (bitsPerChar * chars + roundup) >>> JSBI.__kBitsPerCharTableShift;\n        const resultLength = ((bitsMin + 29) / 30) | 0;\n        const result = new JSBI(resultLength, false);\n        // Parse.\n        const limDigit = radix < 10 ? radix : 10;\n        const limAlpha = radix > 10 ? radix - 10 : 0;\n        if ((radix & (radix - 1)) === 0) {\n            // Power-of-two radix.\n            bitsPerChar >>= JSBI.__kBitsPerCharTableShift;\n            const parts = [];\n            const partsBits = [];\n            let done = false;\n            do {\n                let part = 0;\n                let bits = 0;\n                while (true) {\n                    let d;\n                    if (((current - 48) >>> 0) < limDigit) {\n                        d = current - 48;\n                    }\n                    else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n                        d = (current | 32) - 87;\n                    }\n                    else {\n                        done = true;\n                        break;\n                    }\n                    bits += bitsPerChar;\n                    part = (part << bitsPerChar) | d;\n                    if (++cursor === length) {\n                        done = true;\n                        break;\n                    }\n                    current = string.charCodeAt(cursor);\n                    if (bits + bitsPerChar > 30)\n                        break;\n                }\n                parts.push(part);\n                partsBits.push(bits);\n            } while (!done);\n            JSBI.__fillFromParts(result, parts, partsBits);\n        }\n        else {\n            result.__initializeDigits();\n            let done = false;\n            let charsSoFar = 0;\n            do {\n                let part = 0;\n                let multiplier = 1;\n                while (true) {\n                    let d;\n                    if (((current - 48) >>> 0) < limDigit) {\n                        d = current - 48;\n                    }\n                    else if ((((current | 32) - 97) >>> 0) < limAlpha) {\n                        d = (current | 32) - 87;\n                    }\n                    else {\n                        done = true;\n                        break;\n                    }\n                    const m = multiplier * radix;\n                    if (m > 0x3FFFFFFF)\n                        break;\n                    multiplier = m;\n                    part = part * radix + d;\n                    charsSoFar++;\n                    if (++cursor === length) {\n                        done = true;\n                        break;\n                    }\n                    current = string.charCodeAt(cursor);\n                }\n                roundup = JSBI.__kBitsPerCharTableMultiplier * 30 - 1;\n                const digitsSoFar = (((bitsPerChar * charsSoFar + roundup) >>>\n                    JSBI.__kBitsPerCharTableShift) / 30) | 0;\n                result.__inplaceMultiplyAdd(multiplier, part, digitsSoFar);\n            } while (!done);\n        }\n        if (cursor !== length) {\n            if (!JSBI.__isWhitespace(current))\n                return null;\n            for (cursor++; cursor < length; cursor++) {\n                current = string.charCodeAt(cursor);\n                if (!JSBI.__isWhitespace(current))\n                    return null;\n            }\n        }\n        // Get result.\n        result.sign = (sign === -1);\n        return result.__trim();\n    }\n    static __fillFromParts(result, parts, partsBits) {\n        let digitIndex = 0;\n        let digit = 0;\n        let bitsInDigit = 0;\n        for (let i = parts.length - 1; i >= 0; i--) {\n            const part = parts[i];\n            const partBits = partsBits[i];\n            digit |= (part << bitsInDigit);\n            bitsInDigit += partBits;\n            if (bitsInDigit === 30) {\n                result.__setDigit(digitIndex++, digit);\n                bitsInDigit = 0;\n                digit = 0;\n            }\n            else if (bitsInDigit > 30) {\n                result.__setDigit(digitIndex++, digit & 0x3FFFFFFF);\n                bitsInDigit -= 30;\n                digit = part >>> (partBits - bitsInDigit);\n            }\n        }\n        if (digit !== 0) {\n            if (digitIndex >= result.length)\n                throw new Error('implementation bug');\n            result.__setDigit(digitIndex++, digit);\n        }\n        for (; digitIndex < result.length; digitIndex++) {\n            result.__setDigit(digitIndex, 0);\n        }\n    }\n    static __toStringBasePowerOfTwo(x, radix) {\n        const length = x.length;\n        let bits = radix - 1;\n        bits = ((bits >>> 1) & 0x55) + (bits & 0x55);\n        bits = ((bits >>> 2) & 0x33) + (bits & 0x33);\n        bits = ((bits >>> 4) & 0x0F) + (bits & 0x0F);\n        const bitsPerChar = bits;\n        const charMask = radix - 1;\n        const msd = x.__digit(length - 1);\n        const msdLeadingZeros = JSBI.__clz30(msd);\n        const bitLength = length * 30 - msdLeadingZeros;\n        let charsRequired = ((bitLength + bitsPerChar - 1) / bitsPerChar) | 0;\n        if (x.sign)\n            charsRequired++;\n        if (charsRequired > (1 << 28))\n            throw new Error('string too long');\n        const result = new Array(charsRequired);\n        let pos = charsRequired - 1;\n        let digit = 0;\n        let availableBits = 0;\n        for (let i = 0; i < length - 1; i++) {\n            const newDigit = x.__digit(i);\n            const current = (digit | (newDigit << availableBits)) & charMask;\n            result[pos--] = JSBI.__kConversionChars[current];\n            const consumedBits = bitsPerChar - availableBits;\n            digit = newDigit >>> consumedBits;\n            availableBits = 30 - consumedBits;\n            while (availableBits >= bitsPerChar) {\n                result[pos--] = JSBI.__kConversionChars[digit & charMask];\n                digit >>>= bitsPerChar;\n                availableBits -= bitsPerChar;\n            }\n        }\n        const current = (digit | (msd << availableBits)) & charMask;\n        result[pos--] = JSBI.__kConversionChars[current];\n        digit = msd >>> (bitsPerChar - availableBits);\n        while (digit !== 0) {\n            result[pos--] = JSBI.__kConversionChars[digit & charMask];\n            digit >>>= bitsPerChar;\n        }\n        if (x.sign)\n            result[pos--] = '-';\n        if (pos !== -1)\n            throw new Error('implementation bug');\n        return result.join('');\n    }\n    static __toStringGeneric(x, radix, isRecursiveCall) {\n        const length = x.length;\n        if (length === 0)\n            return '';\n        if (length === 1) {\n            let result = x.__unsignedDigit(0).toString(radix);\n            if (isRecursiveCall === false && x.sign) {\n                result = '-' + result;\n            }\n            return result;\n        }\n        const bitLength = length * 30 - JSBI.__clz30(x.__digit(length - 1));\n        const maxBitsPerChar = JSBI.__kMaxBitsPerChar[radix];\n        const minBitsPerChar = maxBitsPerChar - 1;\n        let charsRequired = bitLength * JSBI.__kBitsPerCharTableMultiplier;\n        charsRequired += minBitsPerChar - 1;\n        charsRequired = (charsRequired / minBitsPerChar) | 0;\n        const secondHalfChars = (charsRequired + 1) >> 1;\n        // Divide-and-conquer: split by a power of {radix} that's approximately\n        // the square root of {x}, then recurse.\n        const conqueror = JSBI.exponentiate(JSBI.__oneDigit(radix, false), JSBI.__oneDigit(secondHalfChars, false));\n        let quotient;\n        let secondHalf;\n        const divisor = conqueror.__unsignedDigit(0);\n        if (conqueror.length === 1 && divisor <= 0x7FFF) {\n            quotient = new JSBI(x.length, false);\n            quotient.__initializeDigits();\n            let remainder = 0;\n            for (let i = x.length * 2 - 1; i >= 0; i--) {\n                const input = (remainder << 15) | x.__halfDigit(i);\n                quotient.__setHalfDigit(i, (input / divisor) | 0);\n                remainder = (input % divisor) | 0;\n            }\n            secondHalf = remainder.toString(radix);\n        }\n        else {\n            const divisionResult = JSBI.__absoluteDivLarge(x, conqueror, true, true);\n            quotient = divisionResult.quotient;\n            const remainder = divisionResult.remainder.__trim();\n            secondHalf = JSBI.__toStringGeneric(remainder, radix, true);\n        }\n        quotient.__trim();\n        let firstHalf = JSBI.__toStringGeneric(quotient, radix, true);\n        while (secondHalf.length < secondHalfChars) {\n            secondHalf = '0' + secondHalf;\n        }\n        if (isRecursiveCall === false && x.sign) {\n            firstHalf = '-' + firstHalf;\n        }\n        return firstHalf + secondHalf;\n    }\n    static __unequalSign(leftNegative) {\n        return leftNegative ? -1 : 1;\n    }\n    static __absoluteGreater(bothNegative) {\n        return bothNegative ? -1 : 1;\n    }\n    static __absoluteLess(bothNegative) {\n        return bothNegative ? 1 : -1;\n    }\n    static __compareToBigInt(x, y) {\n        const xSign = x.sign;\n        if (xSign !== y.sign)\n            return JSBI.__unequalSign(xSign);\n        const result = JSBI.__absoluteCompare(x, y);\n        if (result > 0)\n            return JSBI.__absoluteGreater(xSign);\n        if (result < 0)\n            return JSBI.__absoluteLess(xSign);\n        return 0;\n    }\n    static __compareToNumber(x, y) {\n        if (JSBI.__isOneDigitInt(y)) {\n            const xSign = x.sign;\n            const ySign = (y < 0);\n            if (xSign !== ySign)\n                return JSBI.__unequalSign(xSign);\n            if (x.length === 0) {\n                if (ySign)\n                    throw new Error('implementation bug');\n                return y === 0 ? 0 : -1;\n            }\n            // Any multi-digit BigInt is bigger than an int32.\n            if (x.length > 1)\n                return JSBI.__absoluteGreater(xSign);\n            const yAbs = Math.abs(y);\n            const xDigit = x.__unsignedDigit(0);\n            if (xDigit > yAbs)\n                return JSBI.__absoluteGreater(xSign);\n            if (xDigit < yAbs)\n                return JSBI.__absoluteLess(xSign);\n            return 0;\n        }\n        return JSBI.__compareToDouble(x, y);\n    }\n    static __compareToDouble(x, y) {\n        if (y !== y)\n            return y; // NaN.\n        if (y === Infinity)\n            return -1;\n        if (y === -Infinity)\n            return 1;\n        const xSign = x.sign;\n        const ySign = (y < 0);\n        if (xSign !== ySign)\n            return JSBI.__unequalSign(xSign);\n        if (y === 0) {\n            throw new Error('implementation bug: should be handled elsewhere');\n        }\n        if (x.length === 0)\n            return -1;\n        JSBI.__kBitConversionDouble[0] = y;\n        const rawExponent = (JSBI.__kBitConversionInts[1] >>> 20) & 0x7FF;\n        if (rawExponent === 0x7FF) {\n            throw new Error('implementation bug: handled elsewhere');\n        }\n        const exponent = rawExponent - 0x3FF;\n        if (exponent < 0) {\n            // The absolute value of y is less than 1. Only 0n has an absolute\n            // value smaller than that, but we've already covered that case.\n            return JSBI.__absoluteGreater(xSign);\n        }\n        const xLength = x.length;\n        let xMsd = x.__digit(xLength - 1);\n        const msdLeadingZeros = JSBI.__clz30(xMsd);\n        const xBitLength = xLength * 30 - msdLeadingZeros;\n        const yBitLength = exponent + 1;\n        if (xBitLength < yBitLength)\n            return JSBI.__absoluteLess(xSign);\n        if (xBitLength > yBitLength)\n            return JSBI.__absoluteGreater(xSign);\n        // Same sign, same bit length. Shift mantissa to align with x and compare\n        // bit for bit.\n        const kHiddenBit = 0x00100000;\n        let mantissaHigh = (JSBI.__kBitConversionInts[1] & 0xFFFFF) | kHiddenBit;\n        let mantissaLow = JSBI.__kBitConversionInts[0];\n        const kMantissaHighTopBit = 20;\n        const msdTopBit = 29 - msdLeadingZeros;\n        if (msdTopBit !== (((xBitLength - 1) % 30) | 0)) {\n            throw new Error('implementation bug');\n        }\n        let compareMantissa; // Shifted chunk of mantissa.\n        let remainingMantissaBits = 0;\n        // First, compare most significant digit against beginning of mantissa.\n        if (msdTopBit < kMantissaHighTopBit) {\n            const shift = kMantissaHighTopBit - msdTopBit;\n            remainingMantissaBits = shift + 32;\n            compareMantissa = mantissaHigh >>> shift;\n            mantissaHigh = (mantissaHigh << (32 - shift)) | (mantissaLow >>> shift);\n            mantissaLow = mantissaLow << (32 - shift);\n        }\n        else if (msdTopBit === kMantissaHighTopBit) {\n            remainingMantissaBits = 32;\n            compareMantissa = mantissaHigh;\n            mantissaHigh = mantissaLow;\n            mantissaLow = 0;\n        }\n        else {\n            const shift = msdTopBit - kMantissaHighTopBit;\n            remainingMantissaBits = 32 - shift;\n            compareMantissa =\n                (mantissaHigh << shift) | (mantissaLow >>> (32 - shift));\n            mantissaHigh = mantissaLow << shift;\n            mantissaLow = 0;\n        }\n        xMsd = xMsd >>> 0;\n        compareMantissa = compareMantissa >>> 0;\n        if (xMsd > compareMantissa)\n            return JSBI.__absoluteGreater(xSign);\n        if (xMsd < compareMantissa)\n            return JSBI.__absoluteLess(xSign);\n        // Then, compare additional digits against remaining mantissa bits.\n        for (let digitIndex = xLength - 2; digitIndex >= 0; digitIndex--) {\n            if (remainingMantissaBits > 0) {\n                remainingMantissaBits -= 30;\n                compareMantissa = mantissaHigh >>> 2;\n                mantissaHigh = (mantissaHigh << 30) | (mantissaLow >>> 2);\n                mantissaLow = (mantissaLow << 30);\n            }\n            else {\n                compareMantissa = 0;\n            }\n            const digit = x.__unsignedDigit(digitIndex);\n            if (digit > compareMantissa)\n                return JSBI.__absoluteGreater(xSign);\n            if (digit < compareMantissa)\n                return JSBI.__absoluteLess(xSign);\n        }\n        // Integer parts are equal; check whether {y} has a fractional part.\n        if (mantissaHigh !== 0 || mantissaLow !== 0) {\n            if (remainingMantissaBits === 0)\n                throw new Error('implementation bug');\n            return JSBI.__absoluteLess(xSign);\n        }\n        return 0;\n    }\n    static __equalToNumber(x, y) {\n        if (JSBI.__isOneDigitInt(y)) {\n            if (y === 0)\n                return x.length === 0;\n            // Any multi-digit BigInt is bigger than an int32.\n            return (x.length === 1) && (x.sign === (y < 0)) &&\n                (x.__unsignedDigit(0) === Math.abs(y));\n        }\n        return JSBI.__compareToDouble(x, y) === 0;\n    }\n    // Comparison operations, chosen such that \"op ^ 2\" reverses direction:\n    // 0 - lessThan\n    // 1 - lessThanOrEqual\n    // 2 - greaterThan\n    // 3 - greaterThanOrEqual\n    static __comparisonResultToBool(result, op) {\n        switch (op) {\n            case 0: return result < 0;\n            case 1: return result <= 0;\n            case 2: return result > 0;\n            case 3: return result >= 0;\n        }\n    }\n    static __compare(x, y, op) {\n        x = JSBI.__toPrimitive(x);\n        y = JSBI.__toPrimitive(y);\n        if (typeof x === 'string' && typeof y === 'string') {\n            switch (op) {\n                case 0: return x < y;\n                case 1: return x <= y;\n                case 2: return x > y;\n                case 3: return x >= y;\n            }\n        }\n        if (JSBI.__isBigInt(x) && typeof y === 'string') {\n            y = JSBI.__fromString(y);\n            if (y === null)\n                return false;\n            return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n        }\n        if (typeof x === 'string' && JSBI.__isBigInt(y)) {\n            x = JSBI.__fromString(x);\n            if (x === null)\n                return false;\n            return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n        }\n        x = JSBI.__toNumeric(x);\n        y = JSBI.__toNumeric(y);\n        if (JSBI.__isBigInt(x)) {\n            if (JSBI.__isBigInt(y)) {\n                return JSBI.__comparisonResultToBool(JSBI.__compareToBigInt(x, y), op);\n            }\n            if (typeof y !== 'number')\n                throw new Error('implementation bug');\n            return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(x, y), op);\n        }\n        if (typeof x !== 'number')\n            throw new Error('implementation bug');\n        if (JSBI.__isBigInt(y)) {\n            // Note that \"op ^ 2\" reverses the op's direction.\n            return JSBI.__comparisonResultToBool(JSBI.__compareToNumber(y, x), (op ^ 2));\n        }\n        if (typeof y !== 'number')\n            throw new Error('implementation bug');\n        switch (op) {\n            case 0: return x < y;\n            case 1: return x <= y;\n            case 2: return x > y;\n            case 3: return x >= y;\n        }\n    }\n    __clzmsd() {\n        return JSBI.__clz30(this.__digit(this.length - 1));\n    }\n    static __absoluteAdd(x, y, resultSign) {\n        if (x.length < y.length)\n            return JSBI.__absoluteAdd(y, x, resultSign);\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n        let resultLength = x.length;\n        if (x.__clzmsd() === 0 || (y.length === x.length && y.__clzmsd() === 0)) {\n            resultLength++;\n        }\n        const result = new JSBI(resultLength, resultSign);\n        let carry = 0;\n        let i = 0;\n        for (; i < y.length; i++) {\n            const r = x.__digit(i) + y.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < x.length; i++) {\n            const r = x.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (i < result.length) {\n            result.__setDigit(i, carry);\n        }\n        return result.__trim();\n    }\n    static __absoluteSub(x, y, resultSign) {\n        if (x.length === 0)\n            return x;\n        if (y.length === 0)\n            return x.sign === resultSign ? x : JSBI.unaryMinus(x);\n        const result = new JSBI(x.length, resultSign);\n        let borrow = 0;\n        let i = 0;\n        for (; i < y.length; i++) {\n            const r = x.__digit(i) - y.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < x.length; i++) {\n            const r = x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        return result.__trim();\n    }\n    static __absoluteAddOne(x, sign, result = null) {\n        const inputLength = x.length;\n        if (result === null) {\n            result = new JSBI(inputLength, sign);\n        }\n        else {\n            result.sign = sign;\n        }\n        let carry = 1;\n        for (let i = 0; i < inputLength; i++) {\n            const r = x.__digit(i) + carry;\n            carry = r >>> 30;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (carry !== 0) {\n            result.__setDigitGrow(inputLength, 1);\n        }\n        return result;\n    }\n    static __absoluteSubOne(x, resultLength) {\n        const length = x.length;\n        resultLength = resultLength || length;\n        const result = new JSBI(resultLength, false);\n        let borrow = 1;\n        for (let i = 0; i < length; i++) {\n            const r = x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (borrow !== 0)\n            throw new Error('implementation bug');\n        for (let i = length; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteAnd(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = numPairs;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) & y.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteAndNot(x, y, result = null) {\n        const xLength = x.length;\n        const yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) & ~y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteOr(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) | y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteXor(x, y, result = null) {\n        let xLength = x.length;\n        let yLength = y.length;\n        let numPairs = yLength;\n        if (xLength < yLength) {\n            numPairs = xLength;\n            const tmp = x;\n            const tmpLength = xLength;\n            x = y;\n            xLength = yLength;\n            y = tmp;\n            yLength = tmpLength;\n        }\n        let resultLength = xLength;\n        if (result === null) {\n            result = new JSBI(resultLength, false);\n        }\n        else {\n            resultLength = result.length;\n        }\n        let i = 0;\n        for (; i < numPairs; i++) {\n            result.__setDigit(i, x.__digit(i) ^ y.__digit(i));\n        }\n        for (; i < xLength; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        for (; i < resultLength; i++) {\n            result.__setDigit(i, 0);\n        }\n        return result;\n    }\n    static __absoluteCompare(x, y) {\n        const diff = x.length - y.length;\n        if (diff !== 0)\n            return diff;\n        let i = x.length - 1;\n        while (i >= 0 && x.__digit(i) === y.__digit(i))\n            i--;\n        if (i < 0)\n            return 0;\n        return x.__unsignedDigit(i) > y.__unsignedDigit(i) ? 1 : -1;\n    }\n    static __multiplyAccumulate(multiplicand, multiplier, accumulator, accumulatorIndex) {\n        if (multiplier === 0)\n            return;\n        const m2Low = multiplier & 0x7FFF;\n        const m2High = multiplier >>> 15;\n        let carry = 0;\n        let high = 0;\n        for (let i = 0; i < multiplicand.length; i++, accumulatorIndex++) {\n            let acc = accumulator.__digit(accumulatorIndex);\n            const m1 = multiplicand.__digit(i);\n            const m1Low = m1 & 0x7FFF;\n            const m1High = m1 >>> 15;\n            const rLow = JSBI.__imul(m1Low, m2Low);\n            const rMid1 = JSBI.__imul(m1Low, m2High);\n            const rMid2 = JSBI.__imul(m1High, m2Low);\n            const rHigh = JSBI.__imul(m1High, m2High);\n            acc += high + rLow + carry;\n            carry = acc >>> 30;\n            acc &= 0x3FFFFFFF;\n            acc += ((rMid1 & 0x7FFF) << 15) + ((rMid2 & 0x7FFF) << 15);\n            carry += acc >>> 30;\n            high = rHigh + (rMid1 >>> 15) + (rMid2 >>> 15);\n            accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n        }\n        for (; carry !== 0 || high !== 0; accumulatorIndex++) {\n            let acc = accumulator.__digit(accumulatorIndex);\n            acc += carry + high;\n            high = 0;\n            carry = acc >>> 30;\n            accumulator.__setDigit(accumulatorIndex, acc & 0x3FFFFFFF);\n        }\n    }\n    static __internalMultiplyAdd(source, factor, summand, n, result) {\n        let carry = summand;\n        let high = 0;\n        for (let i = 0; i < n; i++) {\n            const digit = source.__digit(i);\n            const rx = JSBI.__imul(digit & 0x7FFF, factor);\n            const ry = JSBI.__imul(digit >>> 15, factor);\n            const r = rx + ((ry & 0x7FFF) << 15) + high + carry;\n            carry = r >>> 30;\n            high = ry >>> 15;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        if (result.length > n) {\n            result.__setDigit(n++, carry + high);\n            while (n < result.length) {\n                result.__setDigit(n++, 0);\n            }\n        }\n        else {\n            if (carry + high !== 0)\n                throw new Error('implementation bug');\n        }\n    }\n    __inplaceMultiplyAdd(multiplier, summand, length) {\n        if (length > this.length)\n            length = this.length;\n        const mLow = multiplier & 0x7FFF;\n        const mHigh = multiplier >>> 15;\n        let carry = 0;\n        let high = summand;\n        for (let i = 0; i < length; i++) {\n            const d = this.__digit(i);\n            const dLow = d & 0x7FFF;\n            const dHigh = d >>> 15;\n            const pLow = JSBI.__imul(dLow, mLow);\n            const pMid1 = JSBI.__imul(dLow, mHigh);\n            const pMid2 = JSBI.__imul(dHigh, mLow);\n            const pHigh = JSBI.__imul(dHigh, mHigh);\n            let result = high + pLow + carry;\n            carry = result >>> 30;\n            result &= 0x3FFFFFFF;\n            result += ((pMid1 & 0x7FFF) << 15) + ((pMid2 & 0x7FFF) << 15);\n            carry += result >>> 30;\n            high = pHigh + (pMid1 >>> 15) + (pMid2 >>> 15);\n            this.__setDigit(i, result & 0x3FFFFFFF);\n        }\n        if (carry !== 0 || high !== 0) {\n            throw new Error('implementation bug');\n        }\n    }\n    static __absoluteDivSmall(x, divisor, quotient = null) {\n        if (quotient === null)\n            quotient = new JSBI(x.length, false);\n        let remainder = 0;\n        for (let i = x.length * 2 - 1; i >= 0; i -= 2) {\n            let input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n            const upperHalf = (input / divisor) | 0;\n            remainder = (input % divisor) | 0;\n            input = ((remainder << 15) | x.__halfDigit(i - 1)) >>> 0;\n            const lowerHalf = (input / divisor) | 0;\n            remainder = (input % divisor) | 0;\n            quotient.__setDigit(i >>> 1, (upperHalf << 15) | lowerHalf);\n        }\n        return quotient;\n    }\n    static __absoluteModSmall(x, divisor) {\n        let remainder = 0;\n        for (let i = x.length * 2 - 1; i >= 0; i--) {\n            const input = ((remainder << 15) | x.__halfDigit(i)) >>> 0;\n            remainder = (input % divisor) | 0;\n        }\n        return remainder;\n    }\n    static __absoluteDivLarge(dividend, divisor, wantQuotient, wantRemainder) {\n        const n = divisor.__halfDigitLength();\n        const n2 = divisor.length;\n        const m = dividend.__halfDigitLength() - n;\n        let q = null;\n        if (wantQuotient) {\n            q = new JSBI((m + 2) >>> 1, false);\n            q.__initializeDigits();\n        }\n        const qhatv = new JSBI((n + 2) >>> 1, false);\n        qhatv.__initializeDigits();\n        // D1.\n        const shift = JSBI.__clz15(divisor.__halfDigit(n - 1));\n        if (shift > 0) {\n            divisor = JSBI.__specialLeftShift(divisor, shift, 0 /* add no digits*/);\n        }\n        const u = JSBI.__specialLeftShift(dividend, shift, 1 /* add one digit */);\n        // D2.\n        const vn1 = divisor.__halfDigit(n - 1);\n        let halfDigitBuffer = 0;\n        for (let j = m; j >= 0; j--) {\n            // D3.\n            let qhat = 0x7FFF;\n            const ujn = u.__halfDigit(j + n);\n            if (ujn !== vn1) {\n                const input = ((ujn << 15) | u.__halfDigit(j + n - 1)) >>> 0;\n                qhat = (input / vn1) | 0;\n                let rhat = (input % vn1) | 0;\n                const vn2 = divisor.__halfDigit(n - 2);\n                const ujn2 = u.__halfDigit(j + n - 2);\n                while ((JSBI.__imul(qhat, vn2) >>> 0) > (((rhat << 16) | ujn2) >>> 0)) {\n                    qhat--;\n                    rhat += vn1;\n                    if (rhat > 0x7FFF)\n                        break;\n                }\n            }\n            // D4.\n            JSBI.__internalMultiplyAdd(divisor, qhat, 0, n2, qhatv);\n            let c = u.__inplaceSub(qhatv, j, n + 1);\n            if (c !== 0) {\n                c = u.__inplaceAdd(divisor, j, n);\n                u.__setHalfDigit(j + n, (u.__halfDigit(j + n) + c) & 0x7FFF);\n                qhat--;\n            }\n            if (wantQuotient) {\n                if (j & 1) {\n                    halfDigitBuffer = qhat << 15;\n                }\n                else {\n                    // TODO make this statically determinable\n                    q.__setDigit(j >>> 1, halfDigitBuffer | qhat);\n                }\n            }\n        }\n        if (wantRemainder) {\n            u.__inplaceRightShift(shift);\n            if (wantQuotient) {\n                return { quotient: q, remainder: u };\n            }\n            return u;\n        }\n        if (wantQuotient)\n            return q;\n        // TODO find a way to make this statically unreachable?\n        throw new Error('unreachable');\n    }\n    static __clz15(value) {\n        return JSBI.__clz30(value) - 15;\n    }\n    // TODO: work on full digits, like __inplaceSub?\n    __inplaceAdd(summand, startIndex, halfDigits) {\n        let carry = 0;\n        for (let i = 0; i < halfDigits; i++) {\n            const sum = this.__halfDigit(startIndex + i) +\n                summand.__halfDigit(i) +\n                carry;\n            carry = sum >>> 15;\n            this.__setHalfDigit(startIndex + i, sum & 0x7FFF);\n        }\n        return carry;\n    }\n    __inplaceSub(subtrahend, startIndex, halfDigits) {\n        const fullSteps = (halfDigits - 1) >>> 1;\n        let borrow = 0;\n        if (startIndex & 1) {\n            // this:   [..][..][..]\n            // subtr.:   [..][..]\n            startIndex >>= 1;\n            let current = this.__digit(startIndex);\n            let r0 = current & 0x7FFF;\n            let i = 0;\n            for (; i < fullSteps; i++) {\n                const sub = subtrahend.__digit(i);\n                const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n                borrow = (r15 >>> 15) & 1;\n                this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n                current = this.__digit(startIndex + i + 1);\n                r0 = (current & 0x7FFF) - (sub >>> 15) - borrow;\n                borrow = (r0 >>> 15) & 1;\n            }\n            // Unrolling the last iteration gives a 5% performance benefit!\n            const sub = subtrahend.__digit(i);\n            const r15 = (current >>> 15) - (sub & 0x7FFF) - borrow;\n            borrow = (r15 >>> 15) & 1;\n            this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n            const subTop = sub >>> 15;\n            if (startIndex + i + 1 >= this.length) {\n                throw new RangeError('out of bounds');\n            }\n            if ((halfDigits & 1) === 0) {\n                current = this.__digit(startIndex + i + 1);\n                r0 = (current & 0x7FFF) - subTop - borrow;\n                borrow = (r0 >>> 15) & 1;\n                this.__setDigit(startIndex + subtrahend.length, (current & 0x3FFF8000) | (r0 & 0x7FFF));\n            }\n        }\n        else {\n            startIndex >>= 1;\n            let i = 0;\n            for (; i < subtrahend.length - 1; i++) {\n                const current = this.__digit(startIndex + i);\n                const sub = subtrahend.__digit(i);\n                const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n                borrow = (r0 >>> 15) & 1;\n                const r15 = (current >>> 15) - (sub >>> 15) - borrow;\n                borrow = (r15 >>> 15) & 1;\n                this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n            }\n            const current = this.__digit(startIndex + i);\n            const sub = subtrahend.__digit(i);\n            const r0 = (current & 0x7FFF) - (sub & 0x7FFF) - borrow;\n            borrow = (r0 >>> 15) & 1;\n            let r15 = 0;\n            if ((halfDigits & 1) === 0) {\n                r15 = (current >>> 15) - (sub >>> 15) - borrow;\n                borrow = (r15 >>> 15) & 1;\n            }\n            this.__setDigit(startIndex + i, ((r15 & 0x7FFF) << 15) | (r0 & 0x7FFF));\n        }\n        return borrow;\n    }\n    __inplaceRightShift(shift) {\n        if (shift === 0)\n            return;\n        let carry = this.__digit(0) >>> shift;\n        const last = this.length - 1;\n        for (let i = 0; i < last; i++) {\n            const d = this.__digit(i + 1);\n            this.__setDigit(i, ((d << (30 - shift)) & 0x3FFFFFFF) | carry);\n            carry = d >>> shift;\n        }\n        this.__setDigit(last, carry);\n    }\n    static __specialLeftShift(x, shift, addDigit) {\n        const n = x.length;\n        const resultLength = n + addDigit;\n        const result = new JSBI(resultLength, false);\n        if (shift === 0) {\n            for (let i = 0; i < n; i++)\n                result.__setDigit(i, x.__digit(i));\n            if (addDigit > 0)\n                result.__setDigit(n, 0);\n            return result;\n        }\n        let carry = 0;\n        for (let i = 0; i < n; i++) {\n            const d = x.__digit(i);\n            result.__setDigit(i, ((d << shift) & 0x3FFFFFFF) | carry);\n            carry = d >>> (30 - shift);\n        }\n        if (addDigit > 0) {\n            result.__setDigit(n, carry);\n        }\n        return result;\n    }\n    static __leftShiftByAbsolute(x, y) {\n        const shift = JSBI.__toShiftAmount(y);\n        if (shift < 0)\n            throw new RangeError('BigInt too big');\n        const digitShift = (shift / 30) | 0;\n        const bitsShift = shift % 30;\n        const length = x.length;\n        const grow = bitsShift !== 0 &&\n            (x.__digit(length - 1) >>> (30 - bitsShift)) !== 0;\n        const resultLength = length + digitShift + (grow ? 1 : 0);\n        const result = new JSBI(resultLength, x.sign);\n        if (bitsShift === 0) {\n            let i = 0;\n            for (; i < digitShift; i++)\n                result.__setDigit(i, 0);\n            for (; i < resultLength; i++) {\n                result.__setDigit(i, x.__digit(i - digitShift));\n            }\n        }\n        else {\n            let carry = 0;\n            for (let i = 0; i < digitShift; i++)\n                result.__setDigit(i, 0);\n            for (let i = 0; i < length; i++) {\n                const d = x.__digit(i);\n                result.__setDigit(i + digitShift, ((d << bitsShift) & 0x3FFFFFFF) | carry);\n                carry = d >>> (30 - bitsShift);\n            }\n            if (grow) {\n                result.__setDigit(length + digitShift, carry);\n            }\n            else {\n                if (carry !== 0)\n                    throw new Error('implementation bug');\n            }\n        }\n        return result.__trim();\n    }\n    static __rightShiftByAbsolute(x, y) {\n        const length = x.length;\n        const sign = x.sign;\n        const shift = JSBI.__toShiftAmount(y);\n        if (shift < 0)\n            return JSBI.__rightShiftByMaximum(sign);\n        const digitShift = (shift / 30) | 0;\n        const bitsShift = shift % 30;\n        let resultLength = length - digitShift;\n        if (resultLength <= 0)\n            return JSBI.__rightShiftByMaximum(sign);\n        // For negative numbers, round down if any bit was shifted out (so that\n        // e.g. -5n >> 1n == -3n and not -2n). Check now whether this will happen\n        // and whether itc an cause overflow into a new digit. If we allocate the\n        // result large enough up front, it avoids having to do grow it later.\n        let mustRoundDown = false;\n        if (sign) {\n            const mask = (1 << bitsShift) - 1;\n            if ((x.__digit(digitShift) & mask) !== 0) {\n                mustRoundDown = true;\n            }\n            else {\n                for (let i = 0; i < digitShift; i++) {\n                    if (x.__digit(i) !== 0) {\n                        mustRoundDown = true;\n                        break;\n                    }\n                }\n            }\n        }\n        // If bitsShift is non-zero, it frees up bits, preventing overflow.\n        if (mustRoundDown && bitsShift === 0) {\n            // Overflow cannot happen if the most significant digit has unset bits.\n            const msd = x.__digit(length - 1);\n            const roundingCanOverflow = ~msd === 0;\n            if (roundingCanOverflow)\n                resultLength++;\n        }\n        let result = new JSBI(resultLength, sign);\n        if (bitsShift === 0) {\n            // Zero out any overflow digit (see \"roundingCanOverflow\" above).\n            result.__setDigit(resultLength - 1, 0);\n            for (let i = digitShift; i < length; i++) {\n                result.__setDigit(i - digitShift, x.__digit(i));\n            }\n        }\n        else {\n            let carry = x.__digit(digitShift) >>> bitsShift;\n            const last = length - digitShift - 1;\n            for (let i = 0; i < last; i++) {\n                const d = x.__digit(i + digitShift + 1);\n                result.__setDigit(i, ((d << (30 - bitsShift)) & 0x3FFFFFFF) | carry);\n                carry = d >>> bitsShift;\n            }\n            result.__setDigit(last, carry);\n        }\n        if (mustRoundDown) {\n            // Since the result is negative, rounding down means adding one to its\n            // absolute value. This cannot overflow.\n            result = JSBI.__absoluteAddOne(result, true, result);\n        }\n        return result.__trim();\n    }\n    static __rightShiftByMaximum(sign) {\n        if (sign) {\n            return JSBI.__oneDigit(1, true);\n        }\n        return JSBI.__zero();\n    }\n    static __toShiftAmount(x) {\n        if (x.length > 1)\n            return -1;\n        const value = x.__unsignedDigit(0);\n        if (value > JSBI.__kMaxLengthBits)\n            return -1;\n        return value;\n    }\n    static __toPrimitive(obj, hint = 'default') {\n        if (typeof obj !== 'object')\n            return obj;\n        if (obj.constructor === JSBI)\n            return obj;\n        if (typeof Symbol !== 'undefined' &&\n            typeof Symbol.toPrimitive === 'symbol') {\n            const exoticToPrim = obj[Symbol.toPrimitive];\n            if (exoticToPrim) {\n                const primitive = exoticToPrim(hint);\n                if (typeof primitive !== 'object')\n                    return primitive;\n                throw new TypeError('Cannot convert object to primitive value');\n            }\n        }\n        const valueOf = obj.valueOf;\n        if (valueOf) {\n            const primitive = valueOf.call(obj);\n            if (typeof primitive !== 'object')\n                return primitive;\n        }\n        const toString = obj.toString;\n        if (toString) {\n            const primitive = toString.call(obj);\n            if (typeof primitive !== 'object')\n                return primitive;\n        }\n        throw new TypeError('Cannot convert object to primitive value');\n    }\n    static __toNumeric(value) {\n        if (JSBI.__isBigInt(value))\n            return value;\n        return +value;\n    }\n    static __isBigInt(value) {\n        return typeof value === 'object' && value !== null &&\n            value.constructor === JSBI;\n    }\n    static __truncateToNBits(n, x) {\n        const neededDigits = ((n + 29) / 30) | 0;\n        const result = new JSBI(neededDigits, x.sign);\n        const last = neededDigits - 1;\n        for (let i = 0; i < last; i++) {\n            result.__setDigit(i, x.__digit(i));\n        }\n        let msd = x.__digit(last);\n        if ((n % 30) !== 0) {\n            const drop = 32 - (n % 30);\n            msd = (msd << drop) >>> drop;\n        }\n        result.__setDigit(last, msd);\n        return result.__trim();\n    }\n    static __truncateAndSubFromPowerOfTwo(n, x, resultSign) {\n        const neededDigits = ((n + 29) / 30) | 0;\n        const result = new JSBI(neededDigits, resultSign);\n        let i = 0;\n        const last = neededDigits - 1;\n        let borrow = 0;\n        const limit = Math.min(last, x.length);\n        for (; i < limit; i++) {\n            const r = 0 - x.__digit(i) - borrow;\n            borrow = (r >>> 30) & 1;\n            result.__setDigit(i, r & 0x3FFFFFFF);\n        }\n        for (; i < last; i++) {\n            result.__setDigit(i, (-borrow & 0x3FFFFFFF) | 0);\n        }\n        let msd = last < x.length ? x.__digit(last) : 0;\n        const msdBitsConsumed = n % 30;\n        let resultMsd;\n        if (msdBitsConsumed === 0) {\n            resultMsd = 0 - msd - borrow;\n            resultMsd &= 0x3FFFFFFF;\n        }\n        else {\n            const drop = 32 - msdBitsConsumed;\n            msd = (msd << drop) >>> drop;\n            const minuendMsd = 1 << (32 - drop);\n            resultMsd = minuendMsd - msd - borrow;\n            resultMsd &= (minuendMsd - 1);\n        }\n        result.__setDigit(last, resultMsd);\n        return result.__trim();\n    }\n    // Digit helpers.\n    __digit(i) {\n        return this[i];\n    }\n    __unsignedDigit(i) {\n        return this[i] >>> 0;\n    }\n    __setDigit(i, digit) {\n        this[i] = digit | 0;\n    }\n    __setDigitGrow(i, digit) {\n        this[i] = digit | 0;\n    }\n    __halfDigitLength() {\n        const len = this.length;\n        if (this.__unsignedDigit(len - 1) <= 0x7FFF)\n            return len * 2 - 1;\n        return len * 2;\n    }\n    __halfDigit(i) {\n        return (this[i >>> 1] >>> ((i & 1) * 15)) & 0x7FFF;\n    }\n    __setHalfDigit(i, value) {\n        const digitIndex = i >>> 1;\n        const previous = this.__digit(digitIndex);\n        const updated = (i & 1) ? (previous & 0x7FFF) | (value << 15)\n            : (previous & 0x3FFF8000) | (value & 0x7FFF);\n        this.__setDigit(digitIndex, updated);\n    }\n    static __digitPow(base, exponent) {\n        let result = 1;\n        while (exponent > 0) {\n            if (exponent & 1)\n                result *= base;\n            exponent >>>= 1;\n            base *= base;\n        }\n        return result;\n    }\n    static __isOneDigitInt(x) {\n        return (x & 0x3FFFFFFF) === x;\n    }\n}\nJSBI.__kMaxLength = 1 << 25;\nJSBI.__kMaxLengthBits = JSBI.__kMaxLength << 5;\n// Lookup table for the maximum number of bits required per character of a\n// base-N string representation of a number. To increase accuracy, the array\n// value is the actual value multiplied by 32. To generate this table:\n//\n// for (let i = 0; i <= 36; i++) {\n//   console.log(Math.ceil(Math.log2(i) * 32) + ',');\n// }\nJSBI.__kMaxBitsPerChar = [\n    0, 0, 32, 51, 64, 75, 83, 90, 96,\n    102, 107, 111, 115, 119, 122, 126, 128,\n    131, 134, 136, 139, 141, 143, 145, 147,\n    149, 151, 153, 154, 156, 158, 159, 160,\n    162, 163, 165, 166, // 33..36\n];\nJSBI.__kBitsPerCharTableShift = 5;\nJSBI.__kBitsPerCharTableMultiplier = 1 << JSBI.__kBitsPerCharTableShift;\nJSBI.__kConversionChars = '0123456789abcdefghijklmnopqrstuvwxyz'.split('');\nJSBI.__kBitConversionBuffer = new ArrayBuffer(8);\nJSBI.__kBitConversionDouble = new Float64Array(JSBI.__kBitConversionBuffer);\nJSBI.__kBitConversionInts = new Int32Array(JSBI.__kBitConversionBuffer);\n// For IE11 compatibility.\n// Note that the custom replacements are tailored for JSBI's needs, and as\n// such are not reusable as general-purpose polyfills.\nJSBI.__clz30 = Math.clz32 ? function (x) {\n    return Math.clz32(x) - 2;\n} : function (x) {\n    if (x === 0)\n        return 30;\n    return 29 - (Math.log(x >>> 0) / Math.LN2 | 0) | 0;\n};\nJSBI.__imul = Math.imul || function (a, b) {\n    return (a * b) | 0;\n};\nexport default JSBI;\n//# sourceMappingURL=jsbi.js.map", "export abstract class _CodeOrName {\n  abstract readonly str: string\n  abstract readonly names: UsedNames\n  abstract toString(): string\n  abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n  readonly str: string\n  constructor(s: string) {\n    super()\n    if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n    this.str = s\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    return false\n  }\n\n  get names(): UsedNames {\n    return {[this.str]: 1}\n  }\n}\n\nexport class _Code extends _CodeOrName {\n  readonly _items: readonly CodeItem[]\n  private _str?: string\n  private _names?: UsedNames\n\n  constructor(code: string | readonly CodeItem[]) {\n    super()\n    this._items = typeof code === \"string\" ? [code] : code\n  }\n\n  toString(): string {\n    return this.str\n  }\n\n  emptyStr(): boolean {\n    if (this._items.length > 1) return false\n    const item = this._items[0]\n    return item === \"\" || item === '\"\"'\n  }\n\n  get str(): string {\n    return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n  }\n\n  get names(): UsedNames {\n    return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n      if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n      return names\n    }, {}))\n  }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n  const code: CodeItem[] = [strs[0]]\n  let i = 0\n  while (i < args.length) {\n    addCodeArg(code, args[i])\n    code.push(strs[++i])\n  }\n  return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n  const expr: CodeItem[] = [safeStringify(strs[0])]\n  let i = 0\n  while (i < args.length) {\n    expr.push(plus)\n    addCodeArg(expr, args[i])\n    expr.push(plus, safeStringify(strs[++i]))\n  }\n  optimize(expr)\n  return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n  if (arg instanceof _Code) code.push(...arg._items)\n  else if (arg instanceof Name) code.push(arg)\n  else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n  let i = 1\n  while (i < expr.length - 1) {\n    if (expr[i] === plus) {\n      const res = mergeExprItems(expr[i - 1], expr[i + 1])\n      if (res !== undefined) {\n        expr.splice(i - 1, 3, res)\n        continue\n      }\n      expr[i++] = \"+\"\n    }\n    i++\n  }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n  if (b === '\"\"') return a\n  if (a === '\"\"') return b\n  if (typeof a == \"string\") {\n    if (b instanceof Name || a[a.length - 1] !== '\"') return\n    if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n    if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n    return\n  }\n  if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n  return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n  return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n  return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n    ? x\n    : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n  return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n  return JSON.stringify(x)\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n  return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n  if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n    return new _Code(`${key}`)\n  }\n  throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n  return new _Code(rx.toString())\n}\n", "import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n  prefix: string\n  index: number\n}\n\nexport interface NameValue {\n  ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n  key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n  code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n  readonly value?: NameValue\n  constructor(name: ValueScopeName) {\n    super(`CodeGen: \"code\" for ${name} not defined`)\n    this.value = name.value\n  }\n}\n\ninterface ScopeOptions {\n  prefixes?: Set<string>\n  parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n  scope: ScopeStore\n  es5?: boolean\n  lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n  [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n  [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n  Started,\n  Completed,\n}\n\nexport type UsedScopeValues = {\n  [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n  const: new Name(\"const\"),\n  let: new Name(\"let\"),\n  var: new Name(\"var\"),\n}\n\nexport class Scope {\n  protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n  protected readonly _prefixes?: Set<string>\n  protected readonly _parent?: Scope\n\n  constructor({prefixes, parent}: ScopeOptions = {}) {\n    this._prefixes = prefixes\n    this._parent = parent\n  }\n\n  toName(nameOrPrefix: Name | string): Name {\n    return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n  }\n\n  name(prefix: string): Name {\n    return new Name(this._newName(prefix))\n  }\n\n  protected _newName(prefix: string): string {\n    const ng = this._names[prefix] || this._nameGroup(prefix)\n    return `${prefix}${ng.index++}`\n  }\n\n  private _nameGroup(prefix: string): NameGroup {\n    if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n      throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n    }\n    return (this._names[prefix] = {prefix, index: 0})\n  }\n}\n\ninterface ScopePath {\n  property: string\n  itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n  readonly prefix: string\n  value?: NameValue\n  scopePath?: Code\n\n  constructor(prefix: string, nameStr: string) {\n    super(nameStr)\n    this.prefix = prefix\n  }\n\n  setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n    this.value = value\n    this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n  }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n  _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n  protected readonly _values: ScopeValues = {}\n  protected readonly _scope: ScopeStore\n  readonly opts: VSOptions\n\n  constructor(opts: ValueScopeOptions) {\n    super(opts)\n    this._scope = opts.scope\n    this.opts = {...opts, _n: opts.lines ? line : nil}\n  }\n\n  get(): ScopeStore {\n    return this._scope\n  }\n\n  name(prefix: string): ValueScopeName {\n    return new ValueScopeName(prefix, this._newName(prefix))\n  }\n\n  value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n    if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n    const name = this.toName(nameOrPrefix) as ValueScopeName\n    const {prefix} = name\n    const valueKey = value.key ?? value.ref\n    let vs = this._values[prefix]\n    if (vs) {\n      const _name = vs.get(valueKey)\n      if (_name) return _name\n    } else {\n      vs = this._values[prefix] = new Map()\n    }\n    vs.set(valueKey, name)\n\n    const s = this._scope[prefix] || (this._scope[prefix] = [])\n    const itemIndex = s.length\n    s[itemIndex] = value.ref\n    name.setValue(value, {property: prefix, itemIndex})\n    return name\n  }\n\n  getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    const vs = this._values[prefix]\n    if (!vs) return\n    return vs.get(keyOrRef)\n  }\n\n  scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n    return this._reduceValues(values, (name: ValueScopeName) => {\n      if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n      return _`${scopeName}${name.scopePath}`\n    })\n  }\n\n  scopeCode(\n    values: ScopeValues | ScopeValueSets = this._values,\n    usedValues?: UsedScopeValues,\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    return this._reduceValues(\n      values,\n      (name: ValueScopeName) => {\n        if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n        return name.value.code\n      },\n      usedValues,\n      getCode\n    )\n  }\n\n  private _reduceValues(\n    values: ScopeValues | ScopeValueSets,\n    valueCode: (n: ValueScopeName) => Code | undefined,\n    usedValues: UsedScopeValues = {},\n    getCode?: (n: ValueScopeName) => Code | undefined\n  ): Code {\n    let code: Code = nil\n    for (const prefix in values) {\n      const vs = values[prefix]\n      if (!vs) continue\n      const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n      vs.forEach((name: ValueScopeName) => {\n        if (nameSet.has(name)) return\n        nameSet.set(name, UsedValueState.Started)\n        let c = valueCode(name)\n        if (c) {\n          const def = this.opts.es5 ? varKinds.var : varKinds.const\n          code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n        } else if ((c = getCode?.(name))) {\n          code = _`${code}${c}${this.opts._n}`\n        } else {\n          throw new ValueError(name)\n        }\n        nameSet.set(name, UsedValueState.Completed)\n      })\n    }\n    return code\n  }\n}\n", "import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n  GT: new _Code(\">\"),\n  GTE: new _Code(\">=\"),\n  LT: new _Code(\"<\"),\n  LTE: new _Code(\"<=\"),\n  EQ: new _Code(\"===\"),\n  NEQ: new _Code(\"!==\"),\n  NOT: new _Code(\"!\"),\n  OR: new _Code(\"||\"),\n  AND: new _Code(\"&&\"),\n  ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n  abstract readonly names: UsedNames\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    return this\n  }\n\n  optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n    return this\n  }\n\n  // get count(): number {\n  //   return 1\n  // }\n}\n\nclass Def extends Node {\n  constructor(private readonly varKind: Name, private readonly name: Name, private rhs?: SafeExpr) {\n    super()\n  }\n\n  render({es5, _n}: CGOptions): string {\n    const varKind = es5 ? varKinds.var : this.varKind\n    const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n    return `${varKind} ${this.name}${rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!names[this.name.str]) return\n    if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n  }\n}\n\nclass Assign extends Node {\n  constructor(readonly lhs: Code, public rhs: SafeExpr, private readonly sideEffects?: boolean) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} = ${this.rhs};` + _n\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n    this.rhs = optimizeExpr(this.rhs, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n    return addExprNames(names, this.rhs)\n  }\n}\n\nclass AssignOp extends Assign {\n  constructor(lhs: Code, private readonly op: Code, rhs: SafeExpr, sideEffects?: boolean) {\n    super(lhs, rhs, sideEffects)\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n  }\n}\n\nclass Label extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label: Name) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.label}:` + _n\n  }\n}\n\nclass Break extends Node {\n  readonly names: UsedNames = {}\n  constructor(readonly label?: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    const label = this.label ? ` ${this.label}` : \"\"\n    return `break${label};` + _n\n  }\n}\n\nclass Throw extends Node {\n  constructor(readonly error: Code) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `throw ${this.error};` + _n\n  }\n\n  get names(): UsedNames {\n    return this.error.names\n  }\n}\n\nclass AnyCode extends Node {\n  constructor(private code: SafeExpr) {\n    super()\n  }\n\n  render({_n}: CGOptions): string {\n    return `${this.code};` + _n\n  }\n\n  optimizeNodes(): this | undefined {\n    return `${this.code}` ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    this.code = optimizeExpr(this.code, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return this.code instanceof _CodeOrName ? this.code.names : {}\n  }\n}\n\nabstract class ParentNode extends Node {\n  constructor(readonly nodes: ChildNode[] = []) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n  }\n\n  optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      const n = nodes[i].optimizeNodes()\n      if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n      else if (n) nodes[i] = n\n      else nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    const {nodes} = this\n    let i = nodes.length\n    while (i--) {\n      // iterating backwards improves 1-pass optimization\n      const n = nodes[i]\n      if (n.optimizeNames(names, constants)) continue\n      subtractNames(names, n.names)\n      nodes.splice(i, 1)\n    }\n    return nodes.length > 0 ? this : undefined\n  }\n\n  get names(): UsedNames {\n    return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n  }\n\n  // get count(): number {\n  //   return this.nodes.reduce((c, n) => c + n.count, 1)\n  // }\n}\n\nabstract class BlockNode extends ParentNode {\n  render(opts: CGOptions): string {\n    return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n  }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n  static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n  static readonly kind = \"if\"\n  else?: If | Else\n  constructor(private condition: Code | boolean, nodes?: ChildNode[]) {\n    super(nodes)\n  }\n\n  render(opts: CGOptions): string {\n    let code = `if(${this.condition})` + super.render(opts)\n    if (this.else) code += \"else \" + this.else.render(opts)\n    return code\n  }\n\n  optimizeNodes(): If | ChildNode[] | undefined {\n    super.optimizeNodes()\n    const cond = this.condition\n    if (cond === true) return this.nodes // else is ignored here\n    let e = this.else\n    if (e) {\n      const ns = e.optimizeNodes()\n      e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n    }\n    if (e) {\n      if (cond === false) return e instanceof If ? e : e.nodes\n      if (this.nodes.length) return this\n      return new If(not(cond), e instanceof If ? [e] : e.nodes)\n    }\n    if (cond === false || !this.nodes.length) return undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    this.else = this.else?.optimizeNames(names, constants)\n    if (!(super.optimizeNames(names, constants) || this.else)) return\n    this.condition = optimizeExpr(this.condition, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    addExprNames(names, this.condition)\n    if (this.else) addNames(names, this.else.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.else?.count || 0)\n  // }\n}\n\nabstract class For extends BlockNode {\n  static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n  constructor(private iteration: Code) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.iteration})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iteration = optimizeExpr(this.iteration, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iteration.names)\n  }\n}\n\nclass ForRange extends For {\n  constructor(\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private readonly from: SafeExpr,\n    private readonly to: SafeExpr\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const varKind = opts.es5 ? varKinds.var : this.varKind\n    const {name, from, to} = this\n    return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n  }\n\n  get names(): UsedNames {\n    const names = addExprNames(super.names, this.from)\n    return addExprNames(names, this.to)\n  }\n}\n\nclass ForIter extends For {\n  constructor(\n    private readonly loop: \"of\" | \"in\",\n    private readonly varKind: Name,\n    private readonly name: Name,\n    private iterable: Code\n  ) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n    if (!super.optimizeNames(names, constants)) return\n    this.iterable = optimizeExpr(this.iterable, names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    return addNames(super.names, this.iterable.names)\n  }\n}\n\nclass Func extends BlockNode {\n  static readonly kind = \"func\"\n  constructor(public name: Name, public args: Code, public async?: boolean) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    const _async = this.async ? \"async \" : \"\"\n    return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n  }\n}\n\nclass Return extends ParentNode {\n  static readonly kind = \"return\"\n\n  render(opts: CGOptions): string {\n    return \"return \" + super.render(opts)\n  }\n}\n\nclass Try extends BlockNode {\n  catch?: Catch\n  finally?: Finally\n\n  render(opts: CGOptions): string {\n    let code = \"try\" + super.render(opts)\n    if (this.catch) code += this.catch.render(opts)\n    if (this.finally) code += this.finally.render(opts)\n    return code\n  }\n\n  optimizeNodes(): this {\n    super.optimizeNodes()\n    this.catch?.optimizeNodes() as Catch | undefined\n    this.finally?.optimizeNodes() as Finally | undefined\n    return this\n  }\n\n  optimizeNames(names: UsedNames, constants: Constants): this {\n    super.optimizeNames(names, constants)\n    this.catch?.optimizeNames(names, constants)\n    this.finally?.optimizeNames(names, constants)\n    return this\n  }\n\n  get names(): UsedNames {\n    const names = super.names\n    if (this.catch) addNames(names, this.catch.names)\n    if (this.finally) addNames(names, this.finally.names)\n    return names\n  }\n\n  // get count(): number {\n  //   return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n  // }\n}\n\nclass Catch extends BlockNode {\n  static readonly kind = \"catch\"\n  constructor(readonly error: Name) {\n    super()\n  }\n\n  render(opts: CGOptions): string {\n    return `catch(${this.error})` + super.render(opts)\n  }\n}\n\nclass Finally extends BlockNode {\n  static readonly kind = \"finally\"\n  render(opts: CGOptions): string {\n    return \"finally\" + super.render(opts)\n  }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n  | typeof If\n  | typeof Else\n  | typeof For\n  | typeof Func\n  | typeof Return\n  | typeof Catch\n  | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n  es5?: boolean\n  lines?: boolean\n  ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n  _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n  readonly _scope: Scope\n  readonly _extScope: ValueScope\n  readonly _values: ScopeValueSets = {}\n  private readonly _nodes: ParentNode[]\n  private readonly _blockStarts: number[] = []\n  private readonly _constants: Constants = {}\n  private readonly opts: CGOptions\n\n  constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n    this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n    this._extScope = extScope\n    this._scope = new Scope({parent: extScope})\n    this._nodes = [new Root()]\n  }\n\n  toString(): string {\n    return this._root.render(this.opts)\n  }\n\n  // returns unique name in the internal scope\n  name(prefix: string): Name {\n    return this._scope.name(prefix)\n  }\n\n  // reserves unique name in the external scope\n  scopeName(prefix: string): ValueScopeName {\n    return this._extScope.name(prefix)\n  }\n\n  // reserves unique name in the external scope and assigns value to it\n  scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n    const name = this._extScope.value(prefixOrName, value)\n    const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n    vs.add(name)\n    return name\n  }\n\n  getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n    return this._extScope.getValue(prefix, keyOrRef)\n  }\n\n  // return code that assigns values in the external scope to the names that are used internally\n  // (same names that were returned by gen.scopeName or gen.scopeValue)\n  scopeRefs(scopeName: Name): Code {\n    return this._extScope.scopeRefs(scopeName, this._values)\n  }\n\n  scopeCode(): Code {\n    return this._extScope.scopeCode(this._values)\n  }\n\n  private _def(\n    varKind: Name,\n    nameOrPrefix: Name | string,\n    rhs?: SafeExpr,\n    constant?: boolean\n  ): Name {\n    const name = this._scope.toName(nameOrPrefix)\n    if (rhs !== undefined && constant) this._constants[name.str] = rhs\n    this._leafNode(new Def(varKind, name, rhs))\n    return name\n  }\n\n  // `const` declaration (`var` in es5 mode)\n  const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n  }\n\n  // `let` declaration with optional assignment (`var` in es5 mode)\n  let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n  }\n\n  // `var` declaration with optional assignment\n  var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n    return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n  }\n\n  // assignment code\n  assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n    return this._leafNode(new Assign(lhs, rhs, sideEffects))\n  }\n\n  // `+=` code\n  add(lhs: Code, rhs: SafeExpr): CodeGen {\n    return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n  }\n\n  // appends passed SafeExpr to code or executes Block\n  code(c: Block | SafeExpr): CodeGen {\n    if (typeof c == \"function\") c()\n    else if (c !== nil) this._leafNode(new AnyCode(c))\n    return this\n  }\n\n  // returns code for object literal for the passed argument list of key-value pairs\n  object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n    const code: CodeItem[] = [\"{\"]\n    for (const [key, value] of keyValues) {\n      if (code.length > 1) code.push(\",\")\n      code.push(key)\n      if (key !== value || this.opts.es5) {\n        code.push(\":\")\n        addCodeArg(code, value)\n      }\n    }\n    code.push(\"}\")\n    return new _Code(code)\n  }\n\n  // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n  if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n    this._blockNode(new If(condition))\n\n    if (thenBody && elseBody) {\n      this.code(thenBody).else().code(elseBody).endIf()\n    } else if (thenBody) {\n      this.code(thenBody).endIf()\n    } else if (elseBody) {\n      throw new Error('CodeGen: \"else\" body without \"then\" body')\n    }\n    return this\n  }\n\n  // `else if` clause - invalid without `if` or after `else` clauses\n  elseIf(condition: Code | boolean): CodeGen {\n    return this._elseNode(new If(condition))\n  }\n\n  // `else` clause - only valid after `if` or `else if` clauses\n  else(): CodeGen {\n    return this._elseNode(new Else())\n  }\n\n  // end `if` statement (needed if gen.if was used only with condition)\n  endIf(): CodeGen {\n    return this._endBlockNode(If, Else)\n  }\n\n  private _for(node: For, forBody?: Block): CodeGen {\n    this._blockNode(node)\n    if (forBody) this.code(forBody).endFor()\n    return this\n  }\n\n  // a generic `for` clause (or statement if `forBody` is passed)\n  for(iteration: Code, forBody?: Block): CodeGen {\n    return this._for(new ForLoop(iteration), forBody)\n  }\n\n  // `for` statement for a range of values\n  forRange(\n    nameOrPrefix: Name | string,\n    from: SafeExpr,\n    to: SafeExpr,\n    forBody: (index: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n  }\n\n  // `for-of` statement (in es5 mode replace with a normal for loop)\n  forOf(\n    nameOrPrefix: Name | string,\n    iterable: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = varKinds.const\n  ): CodeGen {\n    const name = this._scope.toName(nameOrPrefix)\n    if (this.opts.es5) {\n      const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n      return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n        this.var(name, _`${arr}[${i}]`)\n        forBody(name)\n      })\n    }\n    return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n  }\n\n  // `for-in` statement.\n  // With option `ownProperties` replaced with a `for-of` loop for object keys\n  forIn(\n    nameOrPrefix: Name | string,\n    obj: Code,\n    forBody: (item: Name) => void,\n    varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n  ): CodeGen {\n    if (this.opts.ownProperties) {\n      return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n    }\n    const name = this._scope.toName(nameOrPrefix)\n    return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n  }\n\n  // end `for` loop\n  endFor(): CodeGen {\n    return this._endBlockNode(For)\n  }\n\n  // `label` statement\n  label(label: Name): CodeGen {\n    return this._leafNode(new Label(label))\n  }\n\n  // `break` statement\n  break(label?: Code): CodeGen {\n    return this._leafNode(new Break(label))\n  }\n\n  // `return` statement\n  return(value: Block | SafeExpr): CodeGen {\n    const node = new Return()\n    this._blockNode(node)\n    this.code(value)\n    if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n    return this._endBlockNode(Return)\n  }\n\n  // `try` statement\n  try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n    if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n    const node = new Try()\n    this._blockNode(node)\n    this.code(tryBody)\n    if (catchCode) {\n      const error = this.name(\"e\")\n      this._currNode = node.catch = new Catch(error)\n      catchCode(error)\n    }\n    if (finallyCode) {\n      this._currNode = node.finally = new Finally()\n      this.code(finallyCode)\n    }\n    return this._endBlockNode(Catch, Finally)\n  }\n\n  // `throw` statement\n  throw(error: Code): CodeGen {\n    return this._leafNode(new Throw(error))\n  }\n\n  // start self-balancing block\n  block(body?: Block, nodeCount?: number): CodeGen {\n    this._blockStarts.push(this._nodes.length)\n    if (body) this.code(body).endBlock(nodeCount)\n    return this\n  }\n\n  // end the current self-balancing block\n  endBlock(nodeCount?: number): CodeGen {\n    const len = this._blockStarts.pop()\n    if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n    const toClose = this._nodes.length - len\n    if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n      throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n    }\n    this._nodes.length = len\n    return this\n  }\n\n  // `function` heading (or definition if funcBody is passed)\n  func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n    this._blockNode(new Func(name, args, async))\n    if (funcBody) this.code(funcBody).endFunc()\n    return this\n  }\n\n  // end function definition\n  endFunc(): CodeGen {\n    return this._endBlockNode(Func)\n  }\n\n  optimize(n = 1): void {\n    while (n-- > 0) {\n      this._root.optimizeNodes()\n      this._root.optimizeNames(this._root.names, this._constants)\n    }\n  }\n\n  private _leafNode(node: LeafNode): CodeGen {\n    this._currNode.nodes.push(node)\n    return this\n  }\n\n  private _blockNode(node: StartBlockNode): void {\n    this._currNode.nodes.push(node)\n    this._nodes.push(node)\n  }\n\n  private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n    const n = this._currNode\n    if (n instanceof N1 || (N2 && n instanceof N2)) {\n      this._nodes.pop()\n      return this\n    }\n    throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n  }\n\n  private _elseNode(node: If | Else): CodeGen {\n    const n = this._currNode\n    if (!(n instanceof If)) {\n      throw new Error('CodeGen: \"else\" without \"if\"')\n    }\n    this._currNode = n.else = node\n    return this\n  }\n\n  private get _root(): Root {\n    return this._nodes[0] as Root\n  }\n\n  private get _currNode(): ParentNode {\n    const ns = this._nodes\n    return ns[ns.length - 1]\n  }\n\n  private set _currNode(node: ParentNode) {\n    const ns = this._nodes\n    ns[ns.length - 1] = node\n  }\n\n  // get nodeCount(): number {\n  //   return this._root.count\n  // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n  for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n  return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n  return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n  if (expr instanceof Name) return replaceName(expr)\n  if (!canOptimize(expr)) return expr\n  return new _Code(\n    expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n      if (c instanceof Name) c = replaceName(c)\n      if (c instanceof _Code) items.push(...c._items)\n      else items.push(c)\n      return items\n    }, [])\n  )\n\n  function replaceName(n: Name): SafeExpr {\n    const c = constants[n.str]\n    if (c === undefined || names[n.str] !== 1) return n\n    delete names[n.str]\n    return c\n  }\n\n  function canOptimize(e: SafeExpr): e is _Code {\n    return (\n      e instanceof _Code &&\n      e._items.some(\n        (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n      )\n    )\n  }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n  for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n  return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n  return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n  return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n  return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n  return x instanceof Name ? x : _`(${x})`\n}\n", "import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n  const hash: {[K in T]?: true} = {}\n  for (const item of arr) hash[item] = true\n  return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n  if (typeof schema == \"boolean\") return schema\n  if (Object.keys(schema).length === 0) return true\n  checkUnknownRules(it, schema)\n  return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n  const {opts, self} = it\n  if (!opts.strictSchema) return\n  if (typeof schema === \"boolean\") return\n  const rules = self.RULES.keywords\n  for (const key in schema) {\n    if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n  }\n}\n\nexport function schemaHasRules(\n  schema: AnySchema,\n  rules: {[Key in string]?: boolean | Rule}\n): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (rules[key]) return true\n  return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n  return false\n}\n\nexport function schemaRefOrVal(\n  {topSchemaRef, schemaPath}: SchemaObjCxt,\n  schema: unknown,\n  keyword: string,\n  $data?: string | false\n): Code | number | boolean {\n  if (!$data) {\n    if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n    if (typeof schema == \"string\") return _`${schema}`\n  }\n  return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n  return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n  return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n  if (typeof str == \"number\") return `${str}`\n  return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n  return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n  if (Array.isArray(xs)) {\n    for (const x of xs) f(x)\n  } else {\n    f(xs)\n  }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n  gen: CodeGen,\n  from: Name | T,\n  to: Name | Exclude<T, true> | undefined,\n  toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n  mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n  mergeToName: (gen: CodeGen, from: T, to: Name) => void\n  mergeValues: (from: T, to: Exclude<T, true>) => T\n  resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n  mergeNames,\n  mergeToName,\n  mergeValues,\n  resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n  return (gen, from, to, toName) => {\n    const res =\n      to === undefined\n        ? from\n        : to instanceof Name\n        ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n        : from instanceof Name\n        ? (mergeToName(gen, to, from), from)\n        : mergeValues(from, to)\n    return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n  }\n}\n\ninterface MergeEvaluated {\n  props: MergeEvaluatedFunc<EvaluatedProperties>\n  items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n  props: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n        gen.if(\n          _`${from} === true`,\n          () => gen.assign(to, true),\n          () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n        )\n      }),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () => {\n        if (from === true) {\n          gen.assign(to, true)\n        } else {\n          gen.assign(to, _`${to} || {}`)\n          setEvaluated(gen, to, from)\n        }\n      }),\n    mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n    resultToName: evaluatedPropsToName,\n  }),\n  items: makeMergeEvaluated({\n    mergeNames: (gen, from, to) =>\n      gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n        gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeToName: (gen, from, to) =>\n      gen.if(_`${to} !== true`, () =>\n        gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n      ),\n    mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n    resultToName: (gen, items) => gen.var(\"items\", items),\n  }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n  if (ps === true) return gen.var(\"props\", true)\n  const props = gen.var(\"props\", _`{}`)\n  if (ps !== undefined) setEvaluated(gen, props, ps)\n  return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n  Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n  return gen.scopeValue(\"func\", {\n    ref: f,\n    code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n  })\n}\n\nexport enum Type {\n  Num,\n  Str,\n}\n\nexport function getErrorPath(\n  dataProp: Name | string | number,\n  dataPropType?: Type,\n  jsPropertySyntax?: boolean\n): Code | string {\n  // let path\n  if (dataProp instanceof Name) {\n    const isNumber = dataPropType === Type.Num\n    return jsPropertySyntax\n      ? isNumber\n        ? _`\"[\" + ${dataProp} + \"]\"`\n        : _`\"['\" + ${dataProp} + \"']\"`\n      : isNumber\n      ? _`\"/\" + ${dataProp}`\n      : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n  }\n  return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n  it: SchemaCxt,\n  msg: string,\n  mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n  if (!mode) return\n  msg = `strict mode: ${msg}`\n  if (mode === true) throw new Error(msg)\n  it.self.logger.warn(msg)\n}\n", "import {Name} from \"./codegen\"\n\nconst names = {\n  // validation function arguments\n  data: new Name(\"data\"), // data passed to validation function\n  // args passed from referencing schema\n  valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n  instancePath: new Name(\"instancePath\"),\n  parentData: new Name(\"parentData\"),\n  parentDataProperty: new Name(\"parentDataProperty\"),\n  rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n  dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n  // function scoped variables\n  vErrors: new Name(\"vErrors\"), // null or array of validation errors\n  errors: new Name(\"errors\"), // counter of validation errors\n  this: new Name(\"this\"),\n  // \"globals\"\n  self: new Name(\"self\"),\n  scope: new Name(\"scope\"),\n  // JTD serialize/parse name for JSON string and position\n  json: new Name(\"json\"),\n  jsonPos: new Name(\"jsonPos\"),\n  jsonLen: new Name(\"jsonLen\"),\n  jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n", "import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n  message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n  message: ({keyword, schemaType}) =>\n    schemaType\n      ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n      : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n  instancePath?: Code\n  schemaPath?: string\n  parentSchema?: boolean\n}\n\nexport function reportError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths,\n  overrideAllErrors?: boolean\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  if (overrideAllErrors ?? (compositeRule || allErrors)) {\n    addError(gen, errObj)\n  } else {\n    returnErrors(it, _`[${errObj}]`)\n  }\n}\n\nexport function reportExtraError(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition = keywordError,\n  errorPaths?: ErrorPaths\n): void {\n  const {it} = cxt\n  const {gen, compositeRule, allErrors} = it\n  const errObj = errorObjectCode(cxt, error, errorPaths)\n  addError(gen, errObj)\n  if (!(compositeRule || allErrors)) {\n    returnErrors(it, N.vErrors)\n  }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n  gen.assign(N.errors, errsCount)\n  gen.if(_`${N.vErrors} !== null`, () =>\n    gen.if(\n      errsCount,\n      () => gen.assign(_`${N.vErrors}.length`, errsCount),\n      () => gen.assign(N.vErrors, null)\n    )\n  )\n}\n\nexport function extendErrors({\n  gen,\n  keyword,\n  schemaValue,\n  data,\n  errsCount,\n  it,\n}: KeywordErrorCxt): void {\n  /* istanbul ignore if */\n  if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n  const err = gen.name(\"err\")\n  gen.forRange(\"i\", errsCount, N.errors, (i) => {\n    gen.const(err, _`${N.vErrors}[${i}]`)\n    gen.if(_`${err}.instancePath === undefined`, () =>\n      gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n    )\n    gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n    if (it.opts.verbose) {\n      gen.assign(_`${err}.schema`, schemaValue)\n      gen.assign(_`${err}.data`, data)\n    }\n  })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n  const err = gen.const(\"err\", errObj)\n  gen.if(\n    _`${N.vErrors} === null`,\n    () => gen.assign(N.vErrors, _`[${err}]`),\n    _`${N.vErrors}.push(${err})`\n  )\n  gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n  const {gen, validateName, schemaEnv} = it\n  if (schemaEnv.$async) {\n    gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n  } else {\n    gen.assign(_`${validateName}.errors`, errs)\n    gen.return(false)\n  }\n}\n\nconst E = {\n  keyword: new Name(\"keyword\"),\n  schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n  params: new Name(\"params\"),\n  propertyName: new Name(\"propertyName\"),\n  message: new Name(\"message\"),\n  schema: new Name(\"schema\"),\n  parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths?: ErrorPaths\n): Code {\n  const {createErrors} = cxt.it\n  if (createErrors === false) return _`{}`\n  return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n  cxt: KeywordErrorCxt,\n  error: KeywordErrorDefinition,\n  errorPaths: ErrorPaths = {}\n): Code {\n  const {gen, it} = cxt\n  const keyValues: [Name, SafeExpr | string][] = [\n    errorInstancePath(it, errorPaths),\n    errorSchemaPath(cxt, errorPaths),\n  ]\n  extraErrorProps(cxt, error, keyValues)\n  return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n  const instPath = instancePath\n    ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n    : errorPath\n  return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n  {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n  {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n  let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n  if (schemaPath) {\n    schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n  }\n  return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n  cxt: KeywordErrorCxt,\n  {params, message}: KeywordErrorDefinition,\n  keyValues: [Name, SafeExpr | string][]\n): void {\n  const {keyword, data, schemaValue, it} = cxt\n  const {opts, propertyName, topSchemaRef, schemaPath} = it\n  keyValues.push(\n    [E.keyword, keyword],\n    [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n  )\n  if (opts.messages) {\n    keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n  }\n  if (opts.verbose) {\n    keyValues.push(\n      [E.schema, schemaValue],\n      [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n      [N.data, data]\n    )\n  }\n  if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n", "import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n  message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n  const {gen, schema, validateName} = it\n  if (schema === false) {\n    falseSchemaError(it, false)\n  } else if (typeof schema == \"object\" && schema.$async === true) {\n    gen.return(N.data)\n  } else {\n    gen.assign(_`${validateName}.errors`, null)\n    gen.return(true)\n  }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n  const {gen, schema} = it\n  if (schema === false) {\n    gen.var(valid, false) // TODO var\n    falseSchemaError(it)\n  } else {\n    gen.var(valid, true) // TODO var\n  }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n  const {gen, data} = it\n  // TODO maybe some other interface should be used for non-keyword validation errors...\n  const cxt: KeywordErrorCxt = {\n    gen,\n    keyword: \"false schema\",\n    data,\n    schema: false,\n    schemaCode: false,\n    schemaValue: false,\n    params: {},\n    it,\n  }\n  reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n", "import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = typeof _jsonTypes[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n  return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n  [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n  rules: RuleGroup[]\n  post: RuleGroup\n  all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n  keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n  types: ValidationTypes\n}\n\nexport interface RuleGroup {\n  type?: JSONType\n  rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n  keyword: string\n  definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n  const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n    number: {type: \"number\", rules: []},\n    string: {type: \"string\", rules: []},\n    array: {type: \"array\", rules: []},\n    object: {type: \"object\", rules: []},\n  }\n  return {\n    types: {...groups, integer: true, boolean: true, null: true},\n    rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n    post: {rules: []},\n    all: {},\n    keywords: {},\n  }\n}\n", "import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n  {schema, self}: SchemaObjCxt,\n  type: JSONType\n): boolean | undefined {\n  const group = self.RULES.types[type]\n  return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n  return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n  return (\n    schema[rule.keyword] !== undefined ||\n    rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n  )\n}\n", "import type {\n  KeywordErrorDefinition,\n  KeywordErrorCxt,\n  ErrorObject,\n  AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n  Correct,\n  Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n  const types = getJSONTypes(schema.type)\n  const hasNull = types.includes(\"null\")\n  if (hasNull) {\n    if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n  } else {\n    if (!types.length && schema.nullable !== undefined) {\n      throw new Error('\"nullable\" cannot be used without \"type\"')\n    }\n    if (schema.nullable === true) types.push(\"null\")\n  }\n  return types\n}\n\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n  const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n  if (types.every(isJSONType)) return types\n  throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n  const {gen, data, opts} = it\n  const coerceTo = coerceToTypes(types, opts.coerceTypes)\n  const checkTypes =\n    types.length > 0 &&\n    !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n  if (checkTypes) {\n    const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n    gen.if(wrongType, () => {\n      if (coerceTo.length) coerceData(it, types, coerceTo)\n      else reportTypeError(it)\n    })\n  }\n  return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n  return coerceTypes\n    ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n    : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n  const {gen, data, opts} = it\n  const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n  const coerced = gen.let(\"coerced\", _`undefined`)\n  if (opts.coerceTypes === \"array\") {\n    gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n      gen\n        .assign(data, _`${data}[0]`)\n        .assign(dataType, _`typeof ${data}`)\n        .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n    )\n  }\n  gen.if(_`${coerced} !== undefined`)\n  for (const t of coerceTo) {\n    if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n      coerceSpecificType(t)\n    }\n  }\n  gen.else()\n  reportTypeError(it)\n  gen.endIf()\n\n  gen.if(_`${coerced} !== undefined`, () => {\n    gen.assign(data, coerced)\n    assignParentData(it, coerced)\n  })\n\n  function coerceSpecificType(t: string): void {\n    switch (t) {\n      case \"string\":\n        gen\n          .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n          .assign(coerced, _`\"\" + ${data}`)\n          .elseIf(_`${data} === null`)\n          .assign(coerced, _`\"\"`)\n        return\n      case \"number\":\n        gen\n          .elseIf(\n            _`${dataType} == \"boolean\" || ${data} === null\n              || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"integer\":\n        gen\n          .elseIf(\n            _`${dataType} === \"boolean\" || ${data} === null\n              || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n          )\n          .assign(coerced, _`+${data}`)\n        return\n      case \"boolean\":\n        gen\n          .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n          .assign(coerced, false)\n          .elseIf(_`${data} === \"true\" || ${data} === 1`)\n          .assign(coerced, true)\n        return\n      case \"null\":\n        gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n        gen.assign(coerced, null)\n        return\n\n      case \"array\":\n        gen\n          .elseIf(\n            _`${dataType} === \"string\" || ${dataType} === \"number\"\n              || ${dataType} === \"boolean\" || ${data} === null`\n          )\n          .assign(coerced, _`[${data}]`)\n    }\n  }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n  // TODO use gen.property\n  gen.if(_`${parentData} !== undefined`, () =>\n    gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n  )\n}\n\nexport function checkDataType(\n  dataType: JSONType,\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct = DataType.Correct\n): Code {\n  const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n  let cond: Code\n  switch (dataType) {\n    case \"null\":\n      return _`${data} ${EQ} null`\n    case \"array\":\n      cond = _`Array.isArray(${data})`\n      break\n    case \"object\":\n      cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n      break\n    case \"integer\":\n      cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n      break\n    case \"number\":\n      cond = numCond()\n      break\n    default:\n      return _`typeof ${data} ${EQ} ${dataType}`\n  }\n  return correct === DataType.Correct ? cond : not(cond)\n\n  function numCond(_cond: Code = nil): Code {\n    return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n  }\n}\n\nexport function checkDataTypes(\n  dataTypes: JSONType[],\n  data: Name,\n  strictNums?: boolean | \"log\",\n  correct?: DataType\n): Code {\n  if (dataTypes.length === 1) {\n    return checkDataType(dataTypes[0], data, strictNums, correct)\n  }\n  let cond: Code\n  const types = toHash(dataTypes)\n  if (types.array && types.object) {\n    const notObj = _`typeof ${data} != \"object\"`\n    cond = types.null ? notObj : _`!${data} || ${notObj}`\n    delete types.null\n    delete types.array\n    delete types.object\n  } else {\n    cond = nil\n  }\n  if (types.number) delete types.integer\n  for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n  return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n  message: ({schema}) => `must be ${schema}`,\n  params: ({schema, schemaValue}) =>\n    typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n  const cxt = getTypeErrorContext(it)\n  reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n  const {gen, data, schema} = it\n  const schemaCode = schemaRefOrVal(it, schema, \"type\")\n  return {\n    gen,\n    keyword: \"type\",\n    data,\n    schema: schema.type,\n    schemaCode,\n    schemaValue: schemaCode,\n    parentSchema: schema,\n    params: {},\n    it,\n  }\n}\n", "import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n  const {properties, items} = it.schema\n  if (ty === \"object\" && properties) {\n    for (const key in properties) {\n      assignDefault(it, key, properties[key].default)\n    }\n  } else if (ty === \"array\" && Array.isArray(items)) {\n    items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n  }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n  const {gen, compositeRule, data, opts} = it\n  if (defaultValue === undefined) return\n  const childData = _`${data}${getProperty(prop)}`\n  if (compositeRule) {\n    checkStrictMode(it, `default is ignored for: ${childData}`)\n    return\n  }\n\n  let condition = _`${childData} === undefined`\n  if (opts.useDefaults === \"empty\") {\n    condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n  }\n  // `${childData} === undefined` +\n  // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n  gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n", "import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n  const {gen, data, it} = cxt\n  gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n    cxt.setParams({missingProperty: _`${prop}`}, true)\n    cxt.error()\n  })\n}\n\nexport function checkMissingProp(\n  {gen, data, it: {opts}}: KeywordCxt,\n  properties: string[],\n  missing: Name\n): Code {\n  return or(\n    ...properties.map((prop) =>\n      and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n    )\n  )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n  cxt.setParams({missingProperty: missing}, true)\n  cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n  return gen.scopeValue(\"func\", {\n    // eslint-disable-next-line @typescript-eslint/unbound-method\n    ref: Object.prototype.hasOwnProperty,\n    code: _`Object.prototype.hasOwnProperty`,\n  })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n  return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} !== undefined`\n  return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n  gen: CodeGen,\n  data: Name,\n  property: Name | string,\n  ownProperties?: boolean\n): Code {\n  const cond = _`${data}${getProperty(property)} === undefined`\n  return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n  return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n  return allSchemaProperties(schemaMap).filter(\n    (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n  )\n}\n\nexport function callValidateCode(\n  {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n  func: Code,\n  context: Code,\n  passSchema?: boolean\n): Code {\n  const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n  const valCxt: [Name, Code | number][] = [\n    [N.instancePath, strConcat(N.instancePath, errorPath)],\n    [N.parentData, it.parentData],\n    [N.parentDataProperty, it.parentDataProperty],\n    [N.rootData, N.rootData],\n  ]\n  if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n  const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n  return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n  const u = opts.unicodeRegExp ? \"u\" : \"\"\n  const {regExp} = opts.code\n  const rx = regExp(pattern, u)\n\n  return gen.scopeValue(\"pattern\", {\n    key: rx.toString(),\n    ref: rx,\n    code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n  })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  if (it.allErrors) {\n    const validArr = gen.let(\"valid\", true)\n    validateItems(() => gen.assign(validArr, false))\n    return validArr\n  }\n  gen.var(valid, true)\n  validateItems(() => gen.break())\n  return valid\n\n  function validateItems(notValid: () => void): void {\n    const len = gen.const(\"len\", _`${data}.length`)\n    gen.forRange(\"i\", 0, len, (i) => {\n      cxt.subschema(\n        {\n          keyword,\n          dataProp: i,\n          dataPropType: Type.Num,\n        },\n        valid\n      )\n      gen.if(not(valid), notValid)\n    })\n  }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n  const {gen, schema, keyword, it} = cxt\n  /* istanbul ignore if */\n  if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n  const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n  if (alwaysValid && !it.opts.unevaluated) return\n\n  const valid = gen.let(\"valid\", false)\n  const schValid = gen.name(\"_valid\")\n\n  gen.block(() =>\n    schema.forEach((_sch: AnySchema, i: number) => {\n      const schCxt = cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          compositeRule: true,\n        },\n        schValid\n      )\n      gen.assign(valid, _`${valid} || ${schValid}`)\n      const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n      // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n      // or if all properties and items were evaluated (it.props === true && it.items === true)\n      if (!merged) gen.if(not(valid))\n    })\n  )\n\n  cxt.result(\n    valid,\n    () => cxt.reset(),\n    () => cxt.error(true)\n  )\n}\n", "import type {KeywordCxt} from \".\"\nimport type {\n  AnySchema,\n  SchemaValidateFunction,\n  AnyValidateFunction,\n  AddedKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, it} = cxt\n  const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n  const schemaRef = useKeyword(gen, keyword, macroSchema)\n  if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n  const valid = gen.name(\"valid\")\n  cxt.subschema(\n    {\n      schema: macroSchema,\n      schemaPath: nil,\n      errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n      topSchemaRef: schemaRef,\n      compositeRule: true,\n    },\n    valid\n  )\n  cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n  const {gen, keyword, schema, parentSchema, $data, it} = cxt\n  checkAsyncKeyword(it, def)\n  const validate =\n    !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n  const validateRef = useKeyword(gen, keyword, validate)\n  const valid = gen.let(\"valid\")\n  cxt.block$data(valid, validateKeyword)\n  cxt.ok(def.valid ?? valid)\n\n  function validateKeyword(): void {\n    if (def.errors === false) {\n      assignValid()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => cxt.error())\n    } else {\n      const ruleErrs = def.async ? validateAsync() : validateSync()\n      if (def.modifying) modifyData(cxt)\n      reportErrs(() => addErrs(cxt, ruleErrs))\n    }\n  }\n\n  function validateAsync(): Name {\n    const ruleErrs = gen.let(\"ruleErrs\", null)\n    gen.try(\n      () => assignValid(_`await `),\n      (e) =>\n        gen.assign(valid, false).if(\n          _`${e} instanceof ${it.ValidationError as Name}`,\n          () => gen.assign(ruleErrs, _`${e}.errors`),\n          () => gen.throw(e)\n        )\n    )\n    return ruleErrs\n  }\n\n  function validateSync(): Code {\n    const validateErrs = _`${validateRef}.errors`\n    gen.assign(validateErrs, null)\n    assignValid(nil)\n    return validateErrs\n  }\n\n  function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n    const passCxt = it.opts.passContext ? N.this : N.self\n    const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n    gen.assign(\n      valid,\n      _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n      def.modifying\n    )\n  }\n\n  function reportErrs(errors: () => void): void {\n    gen.if(not(def.valid ?? valid), errors)\n  }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n  const {gen, data, it} = cxt\n  gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n  const {gen} = cxt\n  gen.if(\n    _`Array.isArray(${errs})`,\n    () => {\n      gen\n        .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n        .assign(N.errors, _`${N.vErrors}.length`)\n      extendErrors(cxt)\n    },\n    () => cxt.error()\n  )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n  if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n  if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n  return gen.scopeValue(\n    \"keyword\",\n    typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n  )\n}\n\nexport function validSchemaType(\n  schema: unknown,\n  schemaType: JSONType[],\n  allowUndefined = false\n): boolean {\n  // TODO add tests\n  return (\n    !schemaType.length ||\n    schemaType.some((st) =>\n      st === \"array\"\n        ? Array.isArray(schema)\n        : st === \"object\"\n        ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n        : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n    )\n  )\n}\n\nexport function validateKeywordUsage(\n  {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n  def: AddedKeywordDefinition,\n  keyword: string\n): void {\n  /* istanbul ignore if */\n  if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n    throw new Error(\"ajv implementation error\")\n  }\n\n  const deps = def.dependencies\n  if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n    throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n  }\n\n  if (def.validateSchema) {\n    const valid = def.validateSchema(schema[keyword])\n    if (!valid) {\n      const msg =\n        `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n        self.errorsText(def.validateSchema.errors)\n      if (opts.validateSchema === \"log\") self.logger.error(msg)\n      else throw new Error(msg)\n    }\n  }\n}\n", "import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n  // TODO use Optional? align with SchemCxt property types\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef?: Code\n  errorPath?: Code\n  dataLevel?: number\n  dataTypes?: JSONType[]\n  data?: Name\n  parentData?: Name\n  parentDataProperty?: Code | number\n  dataNames?: Name[]\n  dataPathArr?: (Code | number)[]\n  propertyName?: Name\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  compositeRule?: true\n  createErrors?: boolean\n  allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n  keyword: string\n  schemaProp: string | number\n  schema: AnySchema\n  schemaPath: Code\n  errSchemaPath: string\n  topSchemaRef: Code\n  data: Name | Code\n  dataProp: Code | string | number\n  dataTypes: JSONType[]\n  definedProperties: Set<string>\n  propertyName: Name\n  dataPropType: Type\n  jtdDiscriminator: string\n  jtdMetadata: boolean\n  compositeRule: true\n  createErrors: boolean\n  allErrors: boolean\n}>\n\nexport function getSubschema(\n  it: SchemaObjCxt,\n  {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n  if (keyword !== undefined && schema !== undefined) {\n    throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n  }\n\n  if (keyword !== undefined) {\n    const sch = it.schema[keyword]\n    return schemaProp === undefined\n      ? {\n          schema: sch,\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n        }\n      : {\n          schema: sch[schemaProp],\n          schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n          errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n        }\n  }\n\n  if (schema !== undefined) {\n    if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n      throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n    }\n    return {\n      schema,\n      schemaPath,\n      topSchemaRef,\n      errSchemaPath,\n    }\n  }\n\n  throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n  subschema: SubschemaContext,\n  it: SchemaObjCxt,\n  {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n  if (data !== undefined && dataProp !== undefined) {\n    throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n  }\n\n  const {gen} = it\n\n  if (dataProp !== undefined) {\n    const {errorPath, dataPathArr, opts} = it\n    const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n    dataContextProps(nextData)\n    subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n    subschema.parentDataProperty = _`${dataProp}`\n    subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n  }\n\n  if (data !== undefined) {\n    const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n    dataContextProps(nextData)\n    if (propertyName !== undefined) subschema.propertyName = propertyName\n    // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n  }\n\n  if (dataTypes) subschema.dataTypes = dataTypes\n\n  function dataContextProps(_nextData: Name): void {\n    subschema.data = _nextData\n    subschema.dataLevel = it.dataLevel + 1\n    subschema.dataTypes = []\n    it.definedProperties = new Set<string>()\n    subschema.parentData = it.data\n    subschema.dataNames = [...it.dataNames, _nextData]\n  }\n}\n\nexport function extendSubschemaMode(\n  subschema: SubschemaContext,\n  {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n  if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n  if (createErrors !== undefined) subschema.createErrors = createErrors\n  if (allErrors !== undefined) subschema.allErrors = allErrors\n  subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n  subschema.jtdMetadata = jtdMetadata // not inherited\n}\n", "'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n", "'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n  // Legacy support for v0.3.1 and earlier.\n  if (typeof opts == 'function') {\n    cb = opts;\n    opts = {};\n  }\n\n  cb = opts.cb || cb;\n  var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n  var post = cb.post || function() {};\n\n  _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n  additionalItems: true,\n  items: true,\n  contains: true,\n  additionalProperties: true,\n  propertyNames: true,\n  not: true,\n  if: true,\n  then: true,\n  else: true\n};\n\ntraverse.arrayKeywords = {\n  items: true,\n  allOf: true,\n  anyOf: true,\n  oneOf: true\n};\n\ntraverse.propsKeywords = {\n  $defs: true,\n  definitions: true,\n  properties: true,\n  patternProperties: true,\n  dependencies: true\n};\n\ntraverse.skipKeywords = {\n  default: true,\n  enum: true,\n  const: true,\n  required: true,\n  maximum: true,\n  minimum: true,\n  exclusiveMaximum: true,\n  exclusiveMinimum: true,\n  multipleOf: true,\n  maxLength: true,\n  minLength: true,\n  pattern: true,\n  format: true,\n  maxItems: true,\n  minItems: true,\n  uniqueItems: true,\n  maxProperties: true,\n  minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n  if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n    pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n    for (var key in schema) {\n      var sch = schema[key];\n      if (Array.isArray(sch)) {\n        if (key in traverse.arrayKeywords) {\n          for (var i=0; i<sch.length; i++)\n            _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n        }\n      } else if (key in traverse.propsKeywords) {\n        if (sch && typeof sch == 'object') {\n          for (var prop in sch)\n            _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n        }\n      } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n        _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n      }\n    }\n    post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n  }\n}\n\n\nfunction escapeJsonPtr(str) {\n  return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n", "import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponents} from \"uri-js\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n  \"type\",\n  \"format\",\n  \"pattern\",\n  \"maxLength\",\n  \"minLength\",\n  \"maxProperties\",\n  \"minProperties\",\n  \"maxItems\",\n  \"minItems\",\n  \"maximum\",\n  \"minimum\",\n  \"uniqueItems\",\n  \"multipleOf\",\n  \"required\",\n  \"enum\",\n  \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n  if (typeof schema == \"boolean\") return true\n  if (limit === true) return !hasRef(schema)\n  if (!limit) return false\n  return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n  \"$ref\",\n  \"$recursiveRef\",\n  \"$recursiveAnchor\",\n  \"$dynamicRef\",\n  \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n  for (const key in schema) {\n    if (REF_KEYWORDS.has(key)) return true\n    const sch = schema[key]\n    if (Array.isArray(sch) && sch.some(hasRef)) return true\n    if (typeof sch == \"object\" && hasRef(sch)) return true\n  }\n  return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n  let count = 0\n  for (const key in schema) {\n    if (key === \"$ref\") return Infinity\n    count++\n    if (SIMPLE_INLINED.has(key)) continue\n    if (typeof schema[key] == \"object\") {\n      eachItem(schema[key], (sch) => (count += countKeys(sch)))\n    }\n    if (count === Infinity) return Infinity\n  }\n  return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n  if (normalize !== false) id = normalizeId(id)\n  const p = resolver.parse(id)\n  return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponents): string {\n  const serialized = resolver.serialize(p)\n  return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n  return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n  id = normalizeId(id)\n  return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n  if (typeof schema == \"boolean\") return {}\n  const {schemaId, uriResolver} = this.opts\n  const schId = normalizeId(schema[schemaId] || baseId)\n  const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n  const pathPrefix = getFullPath(uriResolver, schId, false)\n  const localRefs: LocalRefs = {}\n  const schemaRefs: Set<string> = new Set()\n\n  traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n    if (parentJsonPtr === undefined) return\n    const fullPath = pathPrefix + jsonPtr\n    let baseId = baseIds[parentJsonPtr]\n    if (typeof sch[schemaId] == \"string\") baseId = addRef.call(this, sch[schemaId])\n    addAnchor.call(this, sch.$anchor)\n    addAnchor.call(this, sch.$dynamicAnchor)\n    baseIds[jsonPtr] = baseId\n\n    function addRef(this: Ajv, ref: string): string {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      const _resolve = this.opts.uriResolver.resolve\n      ref = normalizeId(baseId ? _resolve(baseId, ref) : ref)\n      if (schemaRefs.has(ref)) throw ambiguos(ref)\n      schemaRefs.add(ref)\n      let schOrRef = this.refs[ref]\n      if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n      if (typeof schOrRef == \"object\") {\n        checkAmbiguosRef(sch, schOrRef.schema, ref)\n      } else if (ref !== normalizeId(fullPath)) {\n        if (ref[0] === \"#\") {\n          checkAmbiguosRef(sch, localRefs[ref], ref)\n          localRefs[ref] = sch\n        } else {\n          this.refs[ref] = fullPath\n        }\n      }\n      return ref\n    }\n\n    function addAnchor(this: Ajv, anchor: unknown): void {\n      if (typeof anchor == \"string\") {\n        if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n        addRef.call(this, `#${anchor}`)\n      }\n    }\n  })\n\n  return localRefs\n\n  function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n    if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n  }\n\n  function ambiguos(ref: string): Error {\n    return new Error(`reference \"${ref}\" resolves to more than one schema`)\n  }\n}\n", "import type {\n  AddedKeywordDefinition,\n  AnySchema,\n  AnySchemaObject,\n  KeywordErrorCxt,\n  KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n  schemaRefOrVal,\n  schemaHasRulesButRef,\n  checkUnknownRules,\n  checkStrictMode,\n  unescapeJsonPointer,\n  mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n  ErrorPaths,\n  reportError,\n  reportExtraError,\n  resetErrorsCount,\n  keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      topSchemaObjCode(it)\n      return\n    }\n  }\n  validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n  {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n  body: Block\n): void {\n  if (opts.code.es5) {\n    gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n      gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n      destructureValCxtES5(gen, opts)\n      gen.code(body)\n    })\n  } else {\n    gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n      gen.code(funcSourceUrl(schema, opts)).code(body)\n    )\n  }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n  return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n    N.data\n  }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n  gen.if(\n    N.valCxt,\n    () => {\n      gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n      gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n      gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n      gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n    },\n    () => {\n      gen.var(N.instancePath, _`\"\"`)\n      gen.var(N.parentData, _`undefined`)\n      gen.var(N.parentDataProperty, _`undefined`)\n      gen.var(N.rootData, N.data)\n      if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n    }\n  )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n  const {schema, opts, gen} = it\n  validateFunction(it, () => {\n    if (opts.$comment && schema.$comment) commentKeyword(it)\n    checkNoDefault(it)\n    gen.let(N.vErrors, null)\n    gen.let(N.errors, 0)\n    if (opts.unevaluated) resetEvaluated(it)\n    typeAndKeywords(it)\n    returnResults(it)\n  })\n  return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n  // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n  const {gen, validateName} = it\n  it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n  gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n  gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n  const schId = typeof schema == \"object\" && schema[opts.schemaId]\n  return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n  if (isSchemaObj(it)) {\n    checkKeywords(it)\n    if (schemaCxtHasRules(it)) {\n      subSchemaObjCode(it, valid)\n      return\n    }\n  }\n  boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n  if (typeof schema == \"boolean\") return !schema\n  for (const key in schema) if (self.RULES.all[key]) return true\n  return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n  return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n  const {schema, gen, opts} = it\n  if (opts.$comment && schema.$comment) commentKeyword(it)\n  updateContext(it)\n  checkAsyncSchema(it)\n  const errsCount = gen.const(\"_errs\", N.errors)\n  typeAndKeywords(it, errsCount)\n  // TODO var\n  gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n  checkUnknownRules(it)\n  checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n  if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n  const types = getSchemaTypes(it.schema)\n  const checkedTypes = coerceAndCheckDataType(it, types)\n  schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n  const {schema, errSchemaPath, opts, self} = it\n  if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n    self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n  }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n  const {schema, opts} = it\n  if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n    checkStrictMode(it, \"default is ignored in the schema root\")\n  }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n  const schId = it.schema[it.opts.schemaId]\n  if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n  if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n  const msg = schema.$comment\n  if (opts.$comment === true) {\n    gen.code(_`${N.self}.logger.log(${msg})`)\n  } else if (typeof opts.$comment == \"function\") {\n    const schemaPath = str`${errSchemaPath}/$comment`\n    const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n    gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n  }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n  const {gen, schemaEnv, validateName, ValidationError, opts} = it\n  if (schemaEnv.$async) {\n    // TODO assign unevaluated\n    gen.if(\n      _`${N.errors} === 0`,\n      () => gen.return(N.data),\n      () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n    )\n  } else {\n    gen.assign(_`${validateName}.errors`, N.vErrors)\n    if (opts.unevaluated) assignEvaluated(it)\n    gen.return(_`${N.errors} === 0`)\n  }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n  if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n  if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n  it: SchemaObjCxt,\n  types: JSONType[],\n  typeErrors: boolean,\n  errsCount?: Name\n): void {\n  const {gen, schema, data, allErrors, opts, self} = it\n  const {RULES} = self\n  if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n    gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n    return\n  }\n  if (!opts.jtd) checkStrictTypes(it, types)\n  gen.block(() => {\n    for (const group of RULES.rules) groupKeywords(group)\n    groupKeywords(RULES.post)\n  })\n\n  function groupKeywords(group: RuleGroup): void {\n    if (!shouldUseGroup(schema, group)) return\n    if (group.type) {\n      gen.if(checkDataType(group.type, data, opts.strictNumbers))\n      iterateKeywords(it, group)\n      if (types.length === 1 && types[0] === group.type && typeErrors) {\n        gen.else()\n        reportTypeError(it)\n      }\n      gen.endIf()\n    } else {\n      iterateKeywords(it, group)\n    }\n    // TODO make it \"ok\" call?\n    if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n  }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n  const {\n    gen,\n    schema,\n    opts: {useDefaults},\n  } = it\n  if (useDefaults) assignDefaults(it, group.type)\n  gen.block(() => {\n    for (const rule of group.rules) {\n      if (shouldUseRule(schema, rule)) {\n        keywordCode(it, rule.keyword, rule.definition, group.type)\n      }\n    }\n  })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (it.schemaEnv.meta || !it.opts.strictTypes) return\n  checkContextTypes(it, types)\n  if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n  checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n  if (!types.length) return\n  if (!it.dataTypes.length) {\n    it.dataTypes = types\n    return\n  }\n  types.forEach((t) => {\n    if (!includesType(it.dataTypes, t)) {\n      strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n    }\n  })\n  narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n    strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n  }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n  const rules = it.self.RULES.all\n  for (const keyword in rules) {\n    const rule = rules[keyword]\n    if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n      const {type} = rule.definition\n      if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n        strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n      }\n    }\n  }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n  return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n  return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n  const ts: JSONType[] = []\n  for (const t of it.dataTypes) {\n    if (includesType(withTypes, t)) ts.push(t)\n    else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n  }\n  it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n  const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n  msg += ` at \"${schemaPath}\" (strictTypes)`\n  checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean\n  readonly keyword: string\n  readonly data: Name // Name referencing the current level of the data instance\n  readonly $data?: string | false\n  schema: any // keyword value in the schema\n  readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n  readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n  readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n  readonly parentSchema: AnySchemaObject\n  readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n  // requires option trackErrors in keyword definition\n  params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n  readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n  readonly def: AddedKeywordDefinition\n\n  constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n    validateKeywordUsage(it, def, keyword)\n    this.gen = it.gen\n    this.allErrors = it.allErrors\n    this.keyword = keyword\n    this.data = it.data\n    this.schema = it.schema[keyword]\n    this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n    this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n    this.schemaType = def.schemaType\n    this.parentSchema = it.schema\n    this.params = {}\n    this.it = it\n    this.def = def\n\n    if (this.$data) {\n      this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n    } else {\n      this.schemaCode = this.schemaValue\n      if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n        throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n      }\n    }\n\n    if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n      this.errsCount = it.gen.const(\"_errs\", N.errors)\n    }\n  }\n\n  result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.failResult(not(condition), successAction, failAction)\n  }\n\n  failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n    this.gen.if(condition)\n    if (failAction) failAction()\n    else this.error()\n    if (successAction) {\n      this.gen.else()\n      successAction()\n      if (this.allErrors) this.gen.endIf()\n    } else {\n      if (this.allErrors) this.gen.endIf()\n      else this.gen.else()\n    }\n  }\n\n  pass(condition: Code, failAction?: () => void): void {\n    this.failResult(not(condition), undefined, failAction)\n  }\n\n  fail(condition?: Code): void {\n    if (condition === undefined) {\n      this.error()\n      if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n      return\n    }\n    this.gen.if(condition)\n    this.error()\n    if (this.allErrors) this.gen.endIf()\n    else this.gen.else()\n  }\n\n  fail$data(condition: Code): void {\n    if (!this.$data) return this.fail(condition)\n    const {schemaCode} = this\n    this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n  }\n\n  error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n    if (errorParams) {\n      this.setParams(errorParams)\n      this._error(append, errorPaths)\n      this.setParams({})\n      return\n    }\n    this._error(append, errorPaths)\n  }\n\n  private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n    ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n  }\n\n  $dataError(): void {\n    reportError(this, this.def.$dataError || keyword$DataError)\n  }\n\n  reset(): void {\n    if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n    resetErrorsCount(this.gen, this.errsCount)\n  }\n\n  ok(cond: Code | boolean): void {\n    if (!this.allErrors) this.gen.if(cond)\n  }\n\n  setParams(obj: KeywordCxtParams, assign?: true): void {\n    if (assign) Object.assign(this.params, obj)\n    else this.params = obj\n  }\n\n  block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n    this.gen.block(() => {\n      this.check$data(valid, $dataValid)\n      codeBlock()\n    })\n  }\n\n  check$data(valid: Name = nil, $dataValid: Code = nil): void {\n    if (!this.$data) return\n    const {gen, schemaCode, schemaType, def} = this\n    gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n    if (valid !== nil) gen.assign(valid, true)\n    if (schemaType.length || def.validateSchema) {\n      gen.elseIf(this.invalid$data())\n      this.$dataError()\n      if (valid !== nil) gen.assign(valid, false)\n    }\n    gen.else()\n  }\n\n  invalid$data(): Code {\n    const {gen, schemaCode, schemaType, def, it} = this\n    return or(wrong$DataType(), invalid$DataSchema())\n\n    function wrong$DataType(): Code {\n      if (schemaType.length) {\n        /* istanbul ignore if */\n        if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n        const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n        return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n      }\n      return nil\n    }\n\n    function invalid$DataSchema(): Code {\n      if (def.validateSchema) {\n        const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n        return _`!${validateSchemaRef}(${schemaCode})`\n      }\n      return nil\n    }\n  }\n\n  subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n    const subschema = getSubschema(this.it, appl)\n    extendSubschemaData(subschema, this.it, appl)\n    extendSubschemaMode(subschema, appl)\n    const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n    subschemaCode(nextContext, valid)\n    return nextContext\n  }\n\n  mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n    const {it, gen} = this\n    if (!it.opts.unevaluated) return\n    if (it.props !== true && schemaCxt.props !== undefined) {\n      it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n    }\n    if (it.items !== true && schemaCxt.items !== undefined) {\n      it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n    }\n  }\n\n  mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n    const {it, gen} = this\n    if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n      gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n      return true\n    }\n  }\n}\n\nfunction keywordCode(\n  it: SchemaObjCxt,\n  keyword: string,\n  def: AddedKeywordDefinition,\n  ruleType?: JSONType\n): void {\n  const cxt = new KeywordCxt(it, def, keyword)\n  if (\"code\" in def) {\n    def.code(cxt, ruleType)\n  } else if (cxt.$data && def.validate) {\n    funcKeywordCode(cxt, def)\n  } else if (\"macro\" in def) {\n    macroKeywordCode(cxt, def)\n  } else if (def.compile || def.validate) {\n    funcKeywordCode(cxt, def)\n  }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n  $data: string,\n  {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n  let jsonPointer\n  let data: Code\n  if ($data === \"\") return N.rootData\n  if ($data[0] === \"/\") {\n    if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    jsonPointer = $data\n    data = N.rootData\n  } else {\n    const matches = RELATIVE_JSON_POINTER.exec($data)\n    if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n    const up: number = +matches[1]\n    jsonPointer = matches[2]\n    if (jsonPointer === \"#\") {\n      if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n      return dataPathArr[dataLevel - up]\n    }\n    if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n    data = dataNames[dataLevel - up]\n    if (!jsonPointer) return data\n  }\n\n  let expr = data\n  const segments = jsonPointer.split(\"/\")\n  for (const segment of segments) {\n    if (segment) {\n      data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n      expr = _`${expr} && ${data}`\n    }\n  }\n  return expr\n\n  function errorMsg(pointerType: string, up: number): string {\n    return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n  }\n}\n", "import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n  readonly errors: Partial<ErrorObject>[]\n  readonly ajv: true\n  readonly validation: true\n\n  constructor(errors: Partial<ErrorObject>[]) {\n    super(\"validation failed\")\n    this.errors = errors\n    this.ajv = this.validation = true\n  }\n}\n", "import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n  readonly missingRef: string\n  readonly missingSchema: string\n\n  constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n    super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n    this.missingRef = resolveUrl(resolver, baseId, ref)\n    this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n  }\n}\n", "import type {\n  AnySchema,\n  AnySchemaObject,\n  AnyValidateFunction,\n  AsyncValidateFunction,\n  EvaluatedProperties,\n  EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport * as URI from \"uri-js\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n  [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n  readonly gen: CodeGen\n  readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n  readonly data: Name // Name with reference to the current part of data instance\n  readonly parentData: Name // should be used in keywords modifying data\n  readonly parentDataProperty: Code | number // should be used in keywords modifying data\n  readonly dataNames: Name[]\n  readonly dataPathArr: (Code | number)[]\n  readonly dataLevel: number // the level of the currently validated data,\n  // it can be used to access both the property names and the data on all levels from the top.\n  dataTypes: JSONType[] // data types applied to the current part of data instance\n  definedProperties: Set<string> // set of properties to keep track of for required checks\n  readonly topSchemaRef: Code\n  readonly validateName: Name\n  evaluated?: Name\n  readonly ValidationError?: Name\n  readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n  readonly schemaEnv: SchemaEnv\n  readonly rootId: string\n  baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n  readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n  readonly errSchemaPath: string // this is actual string, should not be changed to Code\n  readonly errorPath: Code\n  readonly propertyName?: Name\n  readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n  // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n  // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n  // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n  props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n  items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n  jtdDiscriminator?: string\n  jtdMetadata?: boolean\n  readonly createErrors?: boolean\n  readonly opts: InstanceOptions // Ajv instance option.\n  readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n  readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root?: SchemaEnv\n  readonly baseId?: string\n  readonly schemaPath?: string\n  readonly localRefs?: LocalRefs\n  readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n  readonly schema: AnySchema\n  readonly schemaId?: \"$id\" | \"id\"\n  readonly root: SchemaEnv\n  baseId: string // TODO possibly, it should be readonly\n  schemaPath?: string\n  localRefs?: LocalRefs\n  readonly meta?: boolean\n  readonly $async?: boolean // true if the current schema is asynchronous.\n  readonly refs: SchemaRefs = {}\n  readonly dynamicAnchors: {[Ref in string]?: true} = {}\n  validate?: AnyValidateFunction\n  validateName?: ValueScopeName\n  serialize?: (data: unknown) => string\n  serializeName?: ValueScopeName\n  parse?: (data: string) => unknown\n  parseName?: ValueScopeName\n\n  constructor(env: SchemaEnvArgs) {\n    let schema: AnySchemaObject | undefined\n    if (typeof env.schema == \"object\") schema = env.schema\n    this.schema = env.schema\n    this.schemaId = env.schemaId\n    this.root = env.root || this\n    this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n    this.schemaPath = env.schemaPath\n    this.localRefs = env.localRefs\n    this.meta = env.meta\n    this.$async = schema?.$async\n    this.refs = {}\n  }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n  // TODO refactor - remove compilations\n  const _sch = getCompilingSchema.call(this, sch)\n  if (_sch) return _sch\n  const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n  const {es5, lines} = this.opts.code\n  const {ownProperties} = this.opts\n  const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n  let _ValidationError\n  if (sch.$async) {\n    _ValidationError = gen.scopeValue(\"Error\", {\n      ref: ValidationError,\n      code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n    })\n  }\n\n  const validateName = gen.scopeName(\"validate\")\n  sch.validateName = validateName\n\n  const schemaCxt: SchemaCxt = {\n    gen,\n    allErrors: this.opts.allErrors,\n    data: N.data,\n    parentData: N.parentData,\n    parentDataProperty: N.parentDataProperty,\n    dataNames: [N.data],\n    dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n    dataLevel: 0,\n    dataTypes: [],\n    definedProperties: new Set<string>(),\n    topSchemaRef: gen.scopeValue(\n      \"schema\",\n      this.opts.code.source === true\n        ? {ref: sch.schema, code: stringify(sch.schema)}\n        : {ref: sch.schema}\n    ),\n    validateName,\n    ValidationError: _ValidationError,\n    schema: sch.schema,\n    schemaEnv: sch,\n    rootId,\n    baseId: sch.baseId || rootId,\n    schemaPath: nil,\n    errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n    errorPath: _`\"\"`,\n    opts: this.opts,\n    self: this,\n  }\n\n  let sourceCode: string | undefined\n  try {\n    this._compilations.add(sch)\n    validateFunctionCode(schemaCxt)\n    gen.optimize(this.opts.code.optimize)\n    // gen.optimize(1)\n    const validateCode = gen.toString()\n    sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n    // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n    if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n    const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n    const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n    this.scope.value(validateName, {ref: validate})\n\n    validate.errors = null\n    validate.schema = sch.schema\n    validate.schemaEnv = sch\n    if (sch.$async) (validate as AsyncValidateFunction).$async = true\n    if (this.opts.code.source === true) {\n      validate.source = {validateName, validateCode, scopeValues: gen._values}\n    }\n    if (this.opts.unevaluated) {\n      const {props, items} = schemaCxt\n      validate.evaluated = {\n        props: props instanceof Name ? undefined : props,\n        items: items instanceof Name ? undefined : items,\n        dynamicProps: props instanceof Name,\n        dynamicItems: items instanceof Name,\n      }\n      if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n    }\n    sch.validate = validate\n    return sch\n  } catch (e) {\n    delete sch.validate\n    delete sch.validateName\n    if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n    // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n    throw e\n  } finally {\n    this._compilations.delete(sch)\n  }\n}\n\nexport function resolveRef(\n  this: Ajv,\n  root: SchemaEnv,\n  baseId: string,\n  ref: string\n): AnySchema | SchemaEnv | undefined {\n  ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n  const schOrFunc = root.refs[ref]\n  if (schOrFunc) return schOrFunc\n\n  let _sch = resolve.call(this, root, ref)\n  if (_sch === undefined) {\n    const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n    const {schemaId} = this.opts\n    if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n  }\n\n  if (_sch === undefined) return\n  return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n  if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n  return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n  for (const sch of this._compilations) {\n    if (sameSchemaEnv(sch, schEnv)) return sch\n  }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n  return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n  this: Ajv,\n  root: SchemaEnv, // information about the root schema for the current schema\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  let sch\n  while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n  return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n  this: Ajv,\n  root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n  ref: string // reference to resolve\n): SchemaEnv | undefined {\n  const p = this.opts.uriResolver.parse(ref)\n  const refPath = _getFullPath(this.opts.uriResolver, p)\n  let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n  // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n  if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n    return getJsonPointer.call(this, p, root)\n  }\n\n  const id = normalizeId(refPath)\n  const schOrRef = this.refs[id] || this.schemas[id]\n  if (typeof schOrRef == \"string\") {\n    const sch = resolveSchema.call(this, root, schOrRef)\n    if (typeof sch?.schema !== \"object\") return\n    return getJsonPointer.call(this, p, sch)\n  }\n\n  if (typeof schOrRef?.schema !== \"object\") return\n  if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n  if (id === normalizeId(ref)) {\n    const {schema} = schOrRef\n    const {schemaId} = this.opts\n    const schId = schema[schemaId]\n    if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    return new SchemaEnv({schema, schemaId, root, baseId})\n  }\n  return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n  \"properties\",\n  \"patternProperties\",\n  \"enum\",\n  \"dependencies\",\n  \"definitions\",\n])\n\nfunction getJsonPointer(\n  this: Ajv,\n  parsedRef: URI.URIComponents,\n  {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n  if (parsedRef.fragment?.[0] !== \"/\") return\n  for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n    if (typeof schema === \"boolean\") return\n    const partSchema = schema[unescapeFragment(part)]\n    if (partSchema === undefined) return\n    schema = partSchema\n    // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n    const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n    if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n      baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n    }\n  }\n  let env: SchemaEnv | undefined\n  if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n    const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n    env = resolveSchema.call(this, root, $ref)\n  }\n  // even though resolution failed we need to return SchemaEnv to throw exception\n  // so that compileAsync loads missing schema.\n  const {schemaId} = this.opts\n  env = env || new SchemaEnv({schema, schemaId, root, baseId})\n  if (env.schema !== env.root.schema) return env\n  return undefined\n}\n", "{\n  \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n  \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n  \"type\": \"object\",\n  \"required\": [\"$data\"],\n  \"properties\": {\n    \"$data\": {\n      \"type\": \"string\",\n      \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n    }\n  },\n  \"additionalProperties\": false\n}\n", "import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler<UUIDComponents, URIOptions, URNComponents> = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler<URNComponents,URNOptions> = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array<string>,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\";  //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$));  //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\";  //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$);  //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$));  //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\";  //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler<MailtoComponents> =  {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;", "import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;", "/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n *    1. Redistributions of source code must retain the above copyright notice, this list of\n *       conditions and the following disclaimer.\n *\n *    2. Redistributions in binary form must reproduce the above copyright notice, this list\n *       of conditions and the following disclaimer in the documentation and/or other materials\n *       provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler<Components extends URIComponents = URIComponents, Options extends URIOptions = URIOptions, ParentComponents extends URIComponents = URIComponents> {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array<string>(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce<Array<{index:number,length:number}>>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = (<RegExpMatchArray>(\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else {  //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array<string> = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array<string> = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\");  //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\");  //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options);  //normalize base components\n\t\trelative = parse(serialize(relative, options), options);  //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(<URIComponents>uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(<URIComponents>uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(<URIComponents>uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n", "'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n", "import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n", "import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"),  //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)),  //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\",  //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\",  //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$),  //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp(                                                            subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), //                           6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp(                                                 \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), //                      \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp(                                 H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[               h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" +        H16$ + \"\\\\:\"          + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\"    h16 \":\"   ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\"                                + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\"              ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\"                                + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\"              h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\"                                       ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"),  //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$),  //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$),  //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"),  //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"),  //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$),  //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\")  //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n", "export function merge(...sets:Array<string>):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array<any> {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}", "import * as uri from \"uri-js\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n", "export {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  AnyValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n  (ajv: Ajv, options?: Opts): Ajv\n  [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n  Schema,\n  AnySchema,\n  AnySchemaObject,\n  SchemaObject,\n  AsyncSchema,\n  Vocabulary,\n  KeywordDefinition,\n  AddedKeywordDefinition,\n  AnyValidateFunction,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  Format,\n  AddedFormat,\n  RegExpEngine,\n  UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n  \"validate\",\n  \"serialize\",\n  \"parse\",\n  \"wrapper\",\n  \"root\",\n  \"schema\",\n  \"keyword\",\n  \"pattern\",\n  \"formats\",\n  \"validate$data\",\n  \"func\",\n  \"obj\",\n  \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n  // strict mode options (NEW)\n  strict?: boolean | \"log\"\n  strictSchema?: boolean | \"log\"\n  strictNumbers?: boolean | \"log\"\n  strictTypes?: boolean | \"log\"\n  strictTuples?: boolean | \"log\"\n  strictRequired?: boolean | \"log\"\n  allowMatchingProperties?: boolean // disables a strict mode restriction\n  allowUnionTypes?: boolean\n  validateFormats?: boolean\n  // validation and reporting options:\n  $data?: boolean\n  allErrors?: boolean\n  verbose?: boolean\n  discriminator?: boolean\n  unicodeRegExp?: boolean\n  timestamp?: \"string\" | \"date\" // JTD only\n  parseDate?: boolean // JTD only\n  allowDate?: boolean // JTD only\n  $comment?:\n    | true\n    | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n  formats?: {[Name in string]?: Format}\n  keywords?: Vocabulary\n  schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n  logger?: Logger | false\n  loadSchema?: (uri: string) => Promise<AnySchemaObject>\n  // options to modify validated data:\n  removeAdditional?: boolean | \"all\" | \"failing\"\n  useDefaults?: boolean | \"empty\"\n  coerceTypes?: boolean | \"array\"\n  // advanced options:\n  next?: boolean // NEW\n  unevaluated?: boolean // NEW\n  dynamicRef?: boolean // NEW\n  schemaId?: \"id\" | \"$id\"\n  jtd?: boolean // NEW\n  meta?: SchemaObject | boolean\n  defaultMeta?: string | AnySchemaObject\n  validateSchema?: boolean | \"log\"\n  addUsedSchema?: boolean\n  inlineRefs?: boolean | number\n  passContext?: boolean\n  loopRequired?: number\n  loopEnum?: number // NEW\n  ownProperties?: boolean\n  multipleOfPrecision?: number\n  int32range?: boolean // JTD only\n  messages?: boolean\n  code?: CodeOptions // NEW\n  uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n  es5?: boolean\n  esm?: boolean\n  lines?: boolean\n  optimize?: boolean | number\n  formats?: Code // code to require (or construct) map of available formats - for standalone code\n  source?: boolean\n  process?: (code: string, schema?: SchemaEnv) => string\n  regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n  regExp: RegExpEngine\n  optimize: number\n}\n\ninterface DeprecatedOptions {\n  /** @deprecated */\n  ignoreKeywordsWithRef?: boolean\n  /** @deprecated */\n  jsPropertySyntax?: boolean // added instead of jsonPointers\n  /** @deprecated */\n  unicode?: boolean\n}\n\ninterface RemovedOptions {\n  format?: boolean\n  errorDataPath?: \"object\" | \"property\"\n  nullable?: boolean // \"nullable\" keyword is supported by default\n  jsonPointers?: boolean\n  extendRefs?: true | \"ignore\" | \"fail\"\n  missingRefs?: true | \"ignore\" | \"fail\"\n  processCode?: (code: string, schema?: SchemaEnv) => string\n  sourceCode?: boolean\n  strictDefaults?: boolean\n  strictKeywords?: boolean\n  uniqueItems?: boolean\n  unknownFormats?: true | string[] | \"ignore\"\n  cache?: any\n  serialize?: (schema: AnySchema) => unknown\n  ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n  [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n  errorDataPath: \"\",\n  format: \"`validateFormats: false` can be used instead.\",\n  nullable: '\"nullable\" keyword is supported by default.',\n  jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n  extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n  missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n  processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n  sourceCode: \"Use option `code: {source: true}`\",\n  strictDefaults: \"It is default now, see option `strict`.\",\n  strictKeywords: \"It is default now, see option `strict`.\",\n  uniqueItems: '\"uniqueItems\" keyword is always validated.',\n  unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n  cache: \"Map is used as cache, schema object as key.\",\n  serialize: \"Map is used as cache, schema object as key.\",\n  ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n  ignoreKeywordsWithRef: \"\",\n  jsPropertySyntax: \"\",\n  unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n  [K in\n    | \"strictSchema\"\n    | \"strictNumbers\"\n    | \"strictTypes\"\n    | \"strictTuples\"\n    | \"strictRequired\"\n    | \"inlineRefs\"\n    | \"loopRequired\"\n    | \"loopEnum\"\n    | \"meta\"\n    | \"messages\"\n    | \"schemaId\"\n    | \"addUsedSchema\"\n    | \"validateSchema\"\n    | \"validateFormats\"\n    | \"int32range\"\n    | \"unicodeRegExp\"\n    | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n  const s = o.strict\n  const _optz = o.code?.optimize\n  const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n  const regExp = o.code?.regExp ?? defaultRegExp\n  const uriResolver = o.uriResolver ?? DefaultUriResolver\n  return {\n    strictSchema: o.strictSchema ?? s ?? true,\n    strictNumbers: o.strictNumbers ?? s ?? true,\n    strictTypes: o.strictTypes ?? s ?? \"log\",\n    strictTuples: o.strictTuples ?? s ?? \"log\",\n    strictRequired: o.strictRequired ?? s ?? false,\n    code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n    loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n    loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n    meta: o.meta ?? true,\n    messages: o.messages ?? true,\n    inlineRefs: o.inlineRefs ?? true,\n    schemaId: o.schemaId ?? \"$id\",\n    addUsedSchema: o.addUsedSchema ?? true,\n    validateSchema: o.validateSchema ?? true,\n    validateFormats: o.validateFormats ?? true,\n    unicodeRegExp: o.unicodeRegExp ?? true,\n    int32range: o.int32range ?? true,\n    uriResolver: uriResolver,\n  }\n}\n\nexport interface Logger {\n  log(...args: unknown[]): unknown\n  warn(...args: unknown[]): unknown\n  error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n  opts: InstanceOptions\n  errors?: ErrorObject[] | null // errors from the last validation\n  logger: Logger\n  // shared external scope values for compiled functions\n  readonly scope: ValueScope\n  readonly schemas: {[Key in string]?: SchemaEnv} = {}\n  readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n  readonly formats: {[Name in string]?: AddedFormat} = {}\n  readonly RULES: ValidationRules\n  readonly _compilations: Set<SchemaEnv> = new Set()\n  private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n  private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n  private readonly _metaOpts: InstanceOptions\n\n  static ValidationError = ValidationError\n  static MissingRefError = MissingRefError\n\n  constructor(opts: Options = {}) {\n    opts = this.opts = {...opts, ...requiredOptions(opts)}\n    const {es5, lines} = this.opts.code\n\n    this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n    this.logger = getLogger(opts.logger)\n    const formatOpt = opts.validateFormats\n    opts.validateFormats = false\n\n    this.RULES = getRules()\n    checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n    checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n    this._metaOpts = getMetaSchemaOptions.call(this)\n\n    if (opts.formats) addInitialFormats.call(this)\n    this._addVocabularies()\n    this._addDefaultMetaSchema()\n    if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n    if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n    addInitialSchemas.call(this)\n    opts.validateFormats = formatOpt\n  }\n\n  _addVocabularies(): void {\n    this.addKeyword(\"$async\")\n  }\n\n  _addDefaultMetaSchema(): void {\n    const {$data, meta, schemaId} = this.opts\n    let _dataRefSchema: SchemaObject = $dataRefSchema\n    if (schemaId === \"id\") {\n      _dataRefSchema = {...$dataRefSchema}\n      _dataRefSchema.id = _dataRefSchema.$id\n      delete _dataRefSchema.$id\n    }\n    if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    const {meta, schemaId} = this.opts\n    return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n  }\n\n  // Validate data using schema\n  // AnySchema will be compiled and cached using schema itself as a key for Map\n  validate(schema: Schema | string, data: unknown): boolean\n  validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n  validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  validate<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    data: unknown\n  ): data is JTDDataType<T>\n  validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n  validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n  validate<T>(\n    schemaKeyRef: AnySchema | string, // key, ref or schema object\n    data: unknown | T // to be validated\n  ): boolean | Promise<T> {\n    let v: AnyValidateFunction | undefined\n    if (typeof schemaKeyRef == \"string\") {\n      v = this.getSchema<T>(schemaKeyRef)\n      if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n    } else {\n      v = this.compile<T>(schemaKeyRef)\n    }\n\n    const valid = v(data)\n    if (!(\"$async\" in v)) this.errors = v.errors\n    return valid\n  }\n\n  // Create validation function for passed schema\n  // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n  compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n  // This overload is only intended for typescript inference, the first\n  // argument prevents manual type annotation from matching this overload\n  compile<N extends never, T extends SomeJTDSchemaType>(\n    schema: T,\n    _meta?: boolean\n  ): ValidateFunction<JTDDataType<T>>\n  compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n  compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n    const sch = this._addSchema(schema, _meta)\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n  }\n\n  // Creates validating function for passed schema with asynchronous loading of missing schemas.\n  // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n  // TODO allow passing schema URI\n  // meta - optional true to compile meta-schema\n  compileAsync<T = unknown>(\n    schema: SchemaObject | JSONSchemaType<T>,\n    _meta?: boolean\n  ): Promise<ValidateFunction<T>>\n  // Separated for type inference to work\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n  compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n  // eslint-disable-next-line @typescript-eslint/unified-signatures\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>>\n  compileAsync<T = unknown>(\n    schema: AnySchemaObject,\n    meta?: boolean\n  ): Promise<AnyValidateFunction<T>> {\n    if (typeof this.opts.loadSchema != \"function\") {\n      throw new Error(\"options.loadSchema should be a function\")\n    }\n    const {loadSchema} = this.opts\n    return runCompileAsync.call(this, schema, meta)\n\n    async function runCompileAsync(\n      this: Ajv,\n      _schema: AnySchemaObject,\n      _meta?: boolean\n    ): Promise<AnyValidateFunction> {\n      await loadMetaSchema.call(this, _schema.$schema)\n      const sch = this._addSchema(_schema, _meta)\n      return sch.validate || _compileAsync.call(this, sch)\n    }\n\n    async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n      if ($ref && !this.getSchema($ref)) {\n        await runCompileAsync.call(this, {$ref}, true)\n      }\n    }\n\n    async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n      try {\n        return this._compileSchemaEnv(sch)\n      } catch (e) {\n        if (!(e instanceof MissingRefError)) throw e\n        checkLoaded.call(this, e)\n        await loadMissingSchema.call(this, e.missingSchema)\n        return _compileAsync.call(this, sch)\n      }\n    }\n\n    function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n      if (this.refs[ref]) {\n        throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n      }\n    }\n\n    async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n      const _schema = await _loadSchema.call(this, ref)\n      if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n      if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n    }\n\n    async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n      const p = this._loading[ref]\n      if (p) return p\n      try {\n        return await (this._loading[ref] = loadSchema(ref))\n      } finally {\n        delete this._loading[ref]\n      }\n    }\n  }\n\n  // Adds schema to the instance\n  addSchema(\n    schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n    key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n    _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n    _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n  ): Ajv {\n    if (Array.isArray(schema)) {\n      for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n      return this\n    }\n    let id: string | undefined\n    if (typeof schema === \"object\") {\n      const {schemaId} = this.opts\n      id = schema[schemaId]\n      if (id !== undefined && typeof id != \"string\") {\n        throw new Error(`schema ${schemaId} must be string`)\n      }\n    }\n    key = normalizeId(key || id)\n    this._checkUnique(key)\n    this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n    return this\n  }\n\n  // Add schema that will be used to validate other schemas\n  // options in META_IGNORE_OPTIONS are alway set to false\n  addMetaSchema(\n    schema: AnySchemaObject,\n    key?: string, // schema key\n    _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n  ): Ajv {\n    this.addSchema(schema, key, true, _validateSchema)\n    return this\n  }\n\n  //  Validate schema against its meta-schema\n  validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n    if (typeof schema == \"boolean\") return true\n    let $schema: string | AnySchemaObject | undefined\n    $schema = schema.$schema\n    if ($schema !== undefined && typeof $schema != \"string\") {\n      throw new Error(\"$schema must be a string\")\n    }\n    $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n    if (!$schema) {\n      this.logger.warn(\"meta-schema not available\")\n      this.errors = null\n      return true\n    }\n    const valid = this.validate($schema, schema)\n    if (!valid && throwOrLogError) {\n      const message = \"schema is invalid: \" + this.errorsText()\n      if (this.opts.validateSchema === \"log\") this.logger.error(message)\n      else throw new Error(message)\n    }\n    return valid\n  }\n\n  // Get compiled schema by `key` or `ref`.\n  // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n  getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n    let sch\n    while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n    if (sch === undefined) {\n      const {schemaId} = this.opts\n      const root = new SchemaEnv({schema: {}, schemaId})\n      sch = resolveSchema.call(this, root, keyRef)\n      if (!sch) return\n      this.refs[keyRef] = sch\n    }\n    return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n  }\n\n  // Remove cached schema(s).\n  // If no parameter is passed all schemas but meta-schemas are removed.\n  // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n  // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n  removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n    if (schemaKeyRef instanceof RegExp) {\n      this._removeAllSchemas(this.schemas, schemaKeyRef)\n      this._removeAllSchemas(this.refs, schemaKeyRef)\n      return this\n    }\n    switch (typeof schemaKeyRef) {\n      case \"undefined\":\n        this._removeAllSchemas(this.schemas)\n        this._removeAllSchemas(this.refs)\n        this._cache.clear()\n        return this\n      case \"string\": {\n        const sch = getSchEnv.call(this, schemaKeyRef)\n        if (typeof sch == \"object\") this._cache.delete(sch.schema)\n        delete this.schemas[schemaKeyRef]\n        delete this.refs[schemaKeyRef]\n        return this\n      }\n      case \"object\": {\n        const cacheKey = schemaKeyRef\n        this._cache.delete(cacheKey)\n        let id = schemaKeyRef[this.opts.schemaId]\n        if (id) {\n          id = normalizeId(id)\n          delete this.schemas[id]\n          delete this.refs[id]\n        }\n        return this\n      }\n      default:\n        throw new Error(\"ajv.removeSchema: invalid parameter\")\n    }\n  }\n\n  // add \"vocabulary\" - a collection of keywords\n  addVocabulary(definitions: Vocabulary): Ajv {\n    for (const def of definitions) this.addKeyword(def)\n    return this\n  }\n\n  addKeyword(\n    kwdOrDef: string | KeywordDefinition,\n    def?: KeywordDefinition // deprecated\n  ): Ajv {\n    let keyword: string | string[]\n    if (typeof kwdOrDef == \"string\") {\n      keyword = kwdOrDef\n      if (typeof def == \"object\") {\n        this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n        def.keyword = keyword\n      }\n    } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n      def = kwdOrDef\n      keyword = def.keyword\n      if (Array.isArray(keyword) && !keyword.length) {\n        throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n      }\n    } else {\n      throw new Error(\"invalid addKeywords parameters\")\n    }\n\n    checkKeyword.call(this, keyword, def)\n    if (!def) {\n      eachItem(keyword, (kwd) => addRule.call(this, kwd))\n      return this\n    }\n    keywordMetaschema.call(this, def)\n    const definition: AddedKeywordDefinition = {\n      ...def,\n      type: getJSONTypes(def.type),\n      schemaType: getJSONTypes(def.schemaType),\n    }\n    eachItem(\n      keyword,\n      definition.type.length === 0\n        ? (k) => addRule.call(this, k, definition)\n        : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n    )\n    return this\n  }\n\n  getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n    const rule = this.RULES.all[keyword]\n    return typeof rule == \"object\" ? rule.definition : !!rule\n  }\n\n  // Remove keyword\n  removeKeyword(keyword: string): Ajv {\n    // TODO return type should be Ajv\n    const {RULES} = this\n    delete RULES.keywords[keyword]\n    delete RULES.all[keyword]\n    for (const group of RULES.rules) {\n      const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n      if (i >= 0) group.rules.splice(i, 1)\n    }\n    return this\n  }\n\n  // Add format\n  addFormat(name: string, format: Format): Ajv {\n    if (typeof format == \"string\") format = new RegExp(format)\n    this.formats[name] = format\n    return this\n  }\n\n  errorsText(\n    errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n    {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n  ): string {\n    if (!errors || errors.length === 0) return \"No errors\"\n    return errors\n      .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n      .reduce((text, msg) => text + separator + msg)\n  }\n\n  $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n    const rules = this.RULES.all\n    metaSchema = JSON.parse(JSON.stringify(metaSchema))\n    for (const jsonPointer of keywordsJsonPointers) {\n      const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n      let keywords = metaSchema\n      for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n      for (const key in rules) {\n        const rule = rules[key]\n        if (typeof rule != \"object\") continue\n        const {$data} = rule.definition\n        const schema = keywords[key] as AnySchemaObject | undefined\n        if ($data && schema) keywords[key] = schemaOrData(schema)\n      }\n    }\n\n    return metaSchema\n  }\n\n  private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n    for (const keyRef in schemas) {\n      const sch = schemas[keyRef]\n      if (!regex || regex.test(keyRef)) {\n        if (typeof sch == \"string\") {\n          delete schemas[keyRef]\n        } else if (sch && !sch.meta) {\n          this._cache.delete(sch.schema)\n          delete schemas[keyRef]\n        }\n      }\n    }\n  }\n\n  _addSchema(\n    schema: AnySchema,\n    meta?: boolean,\n    baseId?: string,\n    validateSchema = this.opts.validateSchema,\n    addSchema = this.opts.addUsedSchema\n  ): SchemaEnv {\n    let id: string | undefined\n    const {schemaId} = this.opts\n    if (typeof schema == \"object\") {\n      id = schema[schemaId]\n    } else {\n      if (this.opts.jtd) throw new Error(\"schema must be object\")\n      else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n    }\n    let sch = this._cache.get(schema)\n    if (sch !== undefined) return sch\n\n    baseId = normalizeId(id || baseId)\n    const localRefs = getSchemaRefs.call(this, schema, baseId)\n    sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n    this._cache.set(sch.schema, sch)\n    if (addSchema && !baseId.startsWith(\"#\")) {\n      // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n      if (baseId) this._checkUnique(baseId)\n      this.refs[baseId] = sch\n    }\n    if (validateSchema) this.validateSchema(schema, true)\n    return sch\n  }\n\n  private _checkUnique(id: string): void {\n    if (this.schemas[id] || this.refs[id]) {\n      throw new Error(`schema with key or id \"${id}\" already exists`)\n    }\n  }\n\n  private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n    if (sch.meta) this._compileMetaSchema(sch)\n    else compileSchema.call(this, sch)\n\n    /* istanbul ignore if */\n    if (!sch.validate) throw new Error(\"ajv implementation error\")\n    return sch.validate\n  }\n\n  private _compileMetaSchema(sch: SchemaEnv): void {\n    const currentOpts = this.opts\n    this.opts = this._metaOpts\n    try {\n      compileSchema.call(this, sch)\n    } finally {\n      this.opts = currentOpts\n    }\n  }\n}\n\nexport interface ErrorsTextOptions {\n  separator?: string\n  dataVar?: string\n}\n\nfunction checkOptions(\n  this: Ajv,\n  checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n  options: Options & RemovedOptions,\n  msg: string,\n  log: \"warn\" | \"error\" = \"error\"\n): void {\n  for (const key in checkOpts) {\n    const opt = key as keyof typeof checkOpts\n    if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n  }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n  keyRef = normalizeId(keyRef) // TODO tests fail without this line\n  return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n  const optsSchemas = this.opts.schemas\n  if (!optsSchemas) return\n  if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n  else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n  for (const name in this.opts.formats) {\n    const format = this.opts.formats[name]\n    if (format) this.addFormat(name, format)\n  }\n}\n\nfunction addInitialKeywords(\n  this: Ajv,\n  defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n  if (Array.isArray(defs)) {\n    this.addVocabulary(defs)\n    return\n  }\n  this.logger.warn(\"keywords option as map is deprecated, pass array\")\n  for (const keyword in defs) {\n    const def = defs[keyword] as KeywordDefinition\n    if (!def.keyword) def.keyword = keyword\n    this.addKeyword(def)\n  }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n  const metaOpts = {...this.opts}\n  for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n  return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n  if (logger === false) return noLogs\n  if (logger === undefined) return console\n  if (logger.log && logger.warn && logger.error) return logger as Logger\n  throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n  const {RULES} = this\n  eachItem(keyword, (kwd) => {\n    if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n    if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n  })\n  if (!def) return\n  if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n    throw new Error('$data keyword must have \"code\" or \"validate\" function')\n  }\n}\n\nfunction addRule(\n  this: Ajv,\n  keyword: string,\n  definition?: AddedKeywordDefinition,\n  dataType?: JSONType\n): void {\n  const post = definition?.post\n  if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n  const {RULES} = this\n  let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n  if (!ruleGroup) {\n    ruleGroup = {type: dataType, rules: []}\n    RULES.rules.push(ruleGroup)\n  }\n  RULES.keywords[keyword] = true\n  if (!definition) return\n\n  const rule: Rule = {\n    keyword,\n    definition: {\n      ...definition,\n      type: getJSONTypes(definition.type),\n      schemaType: getJSONTypes(definition.schemaType),\n    },\n  }\n  if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n  else ruleGroup.rules.push(rule)\n  RULES.all[keyword] = rule\n  definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n  const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n  if (i >= 0) {\n    ruleGroup.rules.splice(i, 0, rule)\n  } else {\n    ruleGroup.rules.push(rule)\n    this.logger.warn(`rule ${before} is not defined`)\n  }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n  let {metaSchema} = def\n  if (metaSchema === undefined) return\n  if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n  def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n  $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n  return {anyOf: [schema, $dataRef]}\n}\n", "import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"id\",\n  code() {\n    throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$ref\",\n  schemaType: \"string\",\n  code(cxt: KeywordCxt): void {\n    const {gen, schema: $ref, it} = cxt\n    const {baseId, schemaEnv: env, validateName, opts, self} = it\n    const {root} = env\n    if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n    const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n    if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n    if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n    return inlineRefSchema(schOrEnv)\n\n    function callRootRef(): void {\n      if (env === root) return callRef(cxt, validateName, env, env.$async)\n      const rootName = gen.scopeValue(\"root\", {ref: root})\n      return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n    }\n\n    function callValidate(sch: SchemaEnv): void {\n      const v = getValidate(cxt, sch)\n      callRef(cxt, v, sch, sch.$async)\n    }\n\n    function inlineRefSchema(sch: AnySchema): void {\n      const schName = gen.scopeValue(\n        \"schema\",\n        opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n      )\n      const valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema(\n        {\n          schema: sch,\n          dataTypes: [],\n          schemaPath: nil,\n          topSchemaRef: schName,\n          errSchemaPath: $ref,\n        },\n        valid\n      )\n      cxt.mergeEvaluated(schCxt)\n      cxt.ok(valid)\n    }\n  },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n  const {gen} = cxt\n  return sch.validate\n    ? gen.scopeValue(\"validate\", {ref: sch.validate})\n    : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n  const {gen, it} = cxt\n  const {allErrors, schemaEnv: env, opts} = it\n  const passCxt = opts.passContext ? N.this : nil\n  if ($async) callAsyncRef()\n  else callSyncRef()\n\n  function callAsyncRef(): void {\n    if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n    const valid = gen.let(\"valid\")\n    gen.try(\n      () => {\n        gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n        addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n        if (!allErrors) gen.assign(valid, true)\n      },\n      (e) => {\n        gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n        addErrorsFrom(e)\n        if (!allErrors) gen.assign(valid, false)\n      }\n    )\n    cxt.ok(valid)\n  }\n\n  function callSyncRef(): void {\n    cxt.result(\n      callValidateCode(cxt, v, passCxt),\n      () => addEvaluatedFrom(v),\n      () => addErrorsFrom(v)\n    )\n  }\n\n  function addErrorsFrom(source: Code): void {\n    const errs = _`${source}.errors`\n    gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n    gen.assign(N.errors, _`${N.vErrors}.length`)\n  }\n\n  function addEvaluatedFrom(source: Code): void {\n    if (!it.opts.unevaluated) return\n    const schEvaluated = sch?.validate?.evaluated\n    // TODO refactor\n    if (it.props !== true) {\n      if (schEvaluated && !schEvaluated.dynamicProps) {\n        if (schEvaluated.props !== undefined) {\n          it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n        }\n      } else {\n        const props = gen.var(\"props\", _`${source}.evaluated.props`)\n        it.props = mergeEvaluated.props(gen, props, it.props, Name)\n      }\n    }\n    if (it.items !== true) {\n      if (schEvaluated && !schEvaluated.dynamicItems) {\n        if (schEvaluated.items !== undefined) {\n          it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n        }\n      } else {\n        const items = gen.var(\"items\", _`${source}.evaluated.items`)\n        it.items = mergeEvaluated.items(gen, items, it.items, Name)\n      }\n    }\n  }\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n  \"$schema\",\n  \"$id\",\n  \"$defs\",\n  \"$vocabulary\",\n  {keyword: \"$comment\"},\n  \"definitions\",\n  idKeyword,\n  refKeyword,\n]\n\nexport default core\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n  maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n  minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n  exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n  exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n  Kwd,\n  {limit: number; comparison: Comparison},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n  params: ({keyword, schemaCode}) =>\n    _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: Object.keys(KWDs),\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n  \"multipleOf\",\n  {multipleOf: number},\n  number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n  params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"multipleOf\",\n  type: \"number\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schemaCode, it} = cxt\n    // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n    const prec = it.opts.multipleOfPrecision\n    const res = gen.let(\"res\")\n    const invalid = prec\n      ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n      : _`${res} !== parseInt(${res})`\n    cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n  },\n}\n\nexport default def\n", "// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n  const len = str.length\n  let length = 0\n  let pos = 0\n  let value: number\n  while (pos < len) {\n    length++\n    value = str.charCodeAt(pos++)\n    if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n      // high surrogate, and there is a next character\n      value = str.charCodeAt(pos)\n      if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n    }\n  }\n  return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} characters`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxLength\", \"minLength\"],\n  type: \"string\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode, it} = cxt\n    const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n    const len =\n      it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n    cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"pattern\",\n  type: \"string\",\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {data, $data, schema, schemaCode, it} = cxt\n    // TODO regexp should be wrapped in try/catchs\n    const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n    const regExp = $data ? _`(new RegExp(${schemaCode}, ${u}))` : usePattern(cxt, schema)\n    cxt.fail$data(_`!${regExp}.test(${data})`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} properties`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxProperties\", \"minProperties\"],\n  type: \"object\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n    cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n  checkReportMissingProp,\n  checkMissingProp,\n  reportMissingProp,\n  propertyInData,\n  noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n  \"required\",\n  {missingProperty: string},\n  string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n  params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"required\",\n  type: \"object\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, schemaCode, data, $data, it} = cxt\n    const {opts} = it\n    if (!$data && schema.length === 0) return\n    const useLoop = schema.length >= opts.loopRequired\n    if (it.allErrors) allErrorsMode()\n    else exitOnErrorMode()\n\n    if (opts.strictRequired) {\n      const props = cxt.parentSchema.properties\n      const {definedProperties} = cxt.it\n      for (const requiredKey of schema) {\n        if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n          const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n          const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n          checkStrictMode(it, msg, it.opts.strictRequired)\n        }\n      }\n    }\n\n    function allErrorsMode(): void {\n      if (useLoop || $data) {\n        cxt.block$data(nil, loopAllRequired)\n      } else {\n        for (const prop of schema) {\n          checkReportMissingProp(cxt, prop)\n        }\n      }\n    }\n\n    function exitOnErrorMode(): void {\n      const missing = gen.let(\"missing\")\n      if (useLoop || $data) {\n        const valid = gen.let(\"valid\", true)\n        cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n        cxt.ok(valid)\n      } else {\n        gen.if(checkMissingProp(cxt, schema, missing))\n        reportMissingProp(cxt, missing)\n        gen.else()\n      }\n    }\n\n    function loopAllRequired(): void {\n      gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n        cxt.setParams({missingProperty: prop})\n        gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n      })\n    }\n\n    function loopUntilMissing(missing: Name, valid: Name): void {\n      cxt.setParams({missingProperty: missing})\n      gen.forOf(\n        missing,\n        schemaCode as Code,\n        () => {\n          gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n          gen.if(not(valid), () => {\n            cxt.error()\n            gen.break()\n          })\n        },\n        nil\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n  message({keyword, schemaCode}) {\n    const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n    return str`must NOT have ${comp} than ${schemaCode} items`\n  },\n  params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxItems\", \"minItems\"],\n  type: \"array\",\n  schemaType: \"number\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {keyword, data, schemaCode} = cxt\n    const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n    cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n  },\n}\n\nexport default def\n", "// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n  \"uniqueItems\",\n  {i: number; j: number},\n  boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {i, j}}) =>\n    str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n  params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"uniqueItems\",\n  type: \"array\",\n  schemaType: \"boolean\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n    if (!$data && !schema) return\n    const valid = gen.let(\"valid\")\n    const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n    cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n    cxt.ok(valid)\n\n    function validateUniqueItems(): void {\n      const i = gen.let(\"i\", _`${data}.length`)\n      const j = gen.let(\"j\")\n      cxt.setParams({i, j})\n      gen.assign(valid, true)\n      gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n    }\n\n    function canOptimize(): boolean {\n      return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n    }\n\n    function loopN(i: Name, j: Name): void {\n      const item = gen.name(\"item\")\n      const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n      const indices = gen.const(\"indices\", _`{}`)\n      gen.for(_`;${i}--;`, () => {\n        gen.let(item, _`${data}[${i}]`)\n        gen.if(wrongType, _`continue`)\n        if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n        gen\n          .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n            gen.assign(j, _`${indices}[${item}]`)\n            cxt.error()\n            gen.assign(valid, false).break()\n          })\n          .code(_`${indices}[${item}] = ${i}`)\n      })\n    }\n\n    function loopN2(i: Name, j: Name): void {\n      const eql = useFunc(gen, equal)\n      const outer = gen.name(\"outer\")\n      gen.label(outer).for(_`;${i}--;`, () =>\n        gen.for(_`${j} = ${i}; ${j}--;`, () =>\n          gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n            cxt.error()\n            gen.assign(valid, false).break(outer)\n          })\n        )\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to constant\",\n  params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"const\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schemaCode, schema} = cxt\n    if ($data || (schema && typeof schema == \"object\")) {\n      cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n    } else {\n      cxt.fail(_`${schema} !== ${data}`)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must be equal to one of the allowed values\",\n  params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"enum\",\n  schemaType: \"array\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n    const useLoop = schema.length >= it.opts.loopEnum\n    let eql: Name | undefined\n    const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n    let valid: Code\n    if (useLoop || $data) {\n      valid = gen.let(\"valid\")\n      cxt.block$data(valid, loopEnum)\n    } else {\n      /* istanbul ignore if */\n      if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n      const vSchema = gen.const(\"vSchema\", schemaCode)\n      valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n    }\n    cxt.pass(valid)\n\n    function loopEnum(): void {\n      gen.assign(valid, false)\n      gen.forOf(\"v\", schemaCode as Code, (v) =>\n        gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n      )\n    }\n\n    function equalCode(vSchema: Name, i: number): Code {\n      const sch = schema[i]\n      return typeof sch === \"object\" && sch !== null\n        ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n        : _`${data} === ${sch}`\n    }\n  },\n}\n\nexport default def\n", "import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n  // number\n  limitNumber,\n  multipleOf,\n  // string\n  limitLength,\n  pattern,\n  // object\n  limitProperties,\n  required,\n  // array\n  limitItems,\n  uniqueItems,\n  // any\n  {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n  {keyword: \"nullable\", schemaType: \"boolean\"},\n  constKeyword,\n  enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n  \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n  {limit: number},\n  number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n  | LimitError\n  | LimitNumberError\n  | MultipleOfError\n  | PatternError\n  | RequiredError\n  | UniqueItemsError\n  | ConstError\n  | EnumError\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"additionalItems\" as const,\n  type: \"array\",\n  schemaType: [\"boolean\", \"object\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {parentSchema, it} = cxt\n    const {items} = parentSchema\n    if (!Array.isArray(items)) {\n      checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n      return\n    }\n    validateAdditionalItems(cxt, items)\n  },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n  const {gen, schema, data, keyword, it} = cxt\n  it.items = true\n  const len = gen.const(\"len\", _`${data}.length`)\n  if (schema === false) {\n    cxt.setParams({len: items.length})\n    cxt.pass(_`${len} <= ${items.length}`)\n  } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n    const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n    gen.if(not(valid), () => validateItems(valid))\n    cxt.ok(valid)\n  }\n\n  function validateItems(valid: Name): void {\n    gen.forRange(\"i\", items.length, len, (i) => {\n      cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n      if (!it.allErrors) gen.if(not(valid), () => gen.break())\n    })\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"array\", \"boolean\"],\n  before: \"uniqueItems\",\n  code(cxt: KeywordCxt) {\n    const {schema, it} = cxt\n    if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    cxt.ok(validateArray(cxt))\n  },\n}\n\nexport function validateTuple(\n  cxt: KeywordCxt,\n  extraItems: string,\n  schArr: AnySchema[] = cxt.schema\n): void {\n  const {gen, parentSchema, data, keyword, it} = cxt\n  checkStrictTuple(parentSchema)\n  if (it.opts.unevaluated && schArr.length && it.items !== true) {\n    it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n  }\n  const valid = gen.name(\"valid\")\n  const len = gen.const(\"len\", _`${data}.length`)\n  schArr.forEach((sch: AnySchema, i: number) => {\n    if (alwaysValidSchema(it, sch)) return\n    gen.if(_`${len} > ${i}`, () =>\n      cxt.subschema(\n        {\n          keyword,\n          schemaProp: i,\n          dataProp: i,\n        },\n        valid\n      )\n    )\n    cxt.ok(valid)\n  })\n\n  function checkStrictTuple(sch: AnySchemaObject): void {\n    const {opts, errSchemaPath} = it\n    const l = schArr.length\n    const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n    if (opts.strictTuples && !fullTuple) {\n      const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n      checkStrictMode(it, msg, opts.strictTuples)\n    }\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"prefixItems\",\n  type: \"array\",\n  schemaType: [\"array\"],\n  before: \"uniqueItems\",\n  code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"items\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {schema, parentSchema, it} = cxt\n    const {prefixItems} = parentSchema\n    it.items = true\n    if (alwaysValidSchema(it, schema)) return\n    if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n    else cxt.ok(validateArray(cxt))\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n  \"contains\",\n  {minContains: number; maxContains?: number},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {min, max}}) =>\n    max === undefined\n      ? str`must contain at least ${min} valid item(s)`\n      : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n  params: ({params: {min, max}}) =>\n    max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"contains\",\n  type: \"array\",\n  schemaType: [\"object\", \"boolean\"],\n  before: \"uniqueItems\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    let min: number\n    let max: number | undefined\n    const {minContains, maxContains} = parentSchema\n    if (it.opts.next) {\n      min = minContains === undefined ? 1 : minContains\n      max = maxContains\n    } else {\n      min = 1\n    }\n    const len = gen.const(\"len\", _`${data}.length`)\n    cxt.setParams({min, max})\n    if (max === undefined && min === 0) {\n      checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n      return\n    }\n    if (max !== undefined && min > max) {\n      checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n      cxt.fail()\n      return\n    }\n    if (alwaysValidSchema(it, schema)) {\n      let cond = _`${len} >= ${min}`\n      if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n      cxt.pass(cond)\n      return\n    }\n\n    it.items = true\n    const valid = gen.name(\"valid\")\n    if (max === undefined && min === 1) {\n      validateItems(valid, () => gen.if(valid, () => gen.break()))\n    } else if (min === 0) {\n      gen.let(valid, true)\n      if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n    } else {\n      gen.let(valid, false)\n      validateItemsWithCount()\n    }\n    cxt.result(valid, () => cxt.reset())\n\n    function validateItemsWithCount(): void {\n      const schValid = gen.name(\"_valid\")\n      const count = gen.let(\"count\", 0)\n      validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n    }\n\n    function validateItems(_valid: Name, block: () => void): void {\n      gen.forRange(\"i\", 0, len, (i) => {\n        cxt.subschema(\n          {\n            keyword: \"contains\",\n            dataProp: i,\n            dataPropType: Type.Num,\n            compositeRule: true,\n          },\n          _valid\n        )\n        block()\n      })\n    }\n\n    function checkLimits(count: Name): void {\n      gen.code(_`${count}++`)\n      if (max === undefined) {\n        gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n      } else {\n        gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n        if (min === 1) gen.assign(valid, true)\n        else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  SchemaMap,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n  property: string\n  missingProperty: string\n  depsCount: number\n  deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n  \"dependencies\",\n  DependenciesErrorParams,\n  {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n  message: ({params: {property, depsCount, deps}}) => {\n    const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n    return str`must have ${property_ies} ${deps} when property ${property} is present`\n  },\n  params: ({params: {property, depsCount, deps, missingProperty}}) =>\n    _`{property: ${property},\n    missingProperty: ${missingProperty},\n    depsCount: ${depsCount},\n    deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependencies\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const [propDeps, schDeps] = splitDependencies(cxt)\n    validatePropertyDeps(cxt, propDeps)\n    validateSchemaDeps(cxt, schDeps)\n  },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n  const propertyDeps: PropertyDependencies = {}\n  const schemaDeps: SchemaDependencies = {}\n  for (const key in schema) {\n    if (key === \"__proto__\") continue\n    const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n    deps[key] = schema[key]\n  }\n  return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n  cxt: KeywordCxt,\n  propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n  const {gen, data, it} = cxt\n  if (Object.keys(propertyDeps).length === 0) return\n  const missing = gen.let(\"missing\")\n  for (const prop in propertyDeps) {\n    const deps = propertyDeps[prop] as string[]\n    if (deps.length === 0) continue\n    const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n    cxt.setParams({\n      property: prop,\n      depsCount: deps.length,\n      deps: deps.join(\", \"),\n    })\n    if (it.allErrors) {\n      gen.if(hasProperty, () => {\n        for (const depProp of deps) {\n          checkReportMissingProp(cxt, depProp)\n        }\n      })\n    } else {\n      gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n      reportMissingProp(cxt, missing)\n      gen.else()\n    }\n  }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n  const {gen, data, keyword, it} = cxt\n  const valid = gen.name(\"valid\")\n  for (const prop in schemaDeps) {\n    if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n    gen.if(\n      propertyInData(gen, data, prop, it.opts.ownProperties),\n      () => {\n        const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n      },\n      () => gen.var(valid, true) // TODO var\n    )\n    cxt.ok(valid)\n  }\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: \"property name must be valid\",\n  params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"propertyNames\",\n  type: \"object\",\n  schemaType: [\"object\", \"boolean\"],\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, it} = cxt\n    if (alwaysValidSchema(it, schema)) return\n    const valid = gen.name(\"valid\")\n\n    gen.forIn(\"key\", data, (key) => {\n      cxt.setParams({propertyName: key})\n      cxt.subschema(\n        {\n          keyword: \"propertyNames\",\n          data: key,\n          dataTypes: [\"string\"],\n          propertyName: key,\n          compositeRule: true,\n        },\n        valid\n      )\n      gen.if(not(valid), () => {\n        cxt.error(true)\n        if (!it.allErrors) gen.break()\n      })\n    })\n\n    cxt.ok(valid)\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  AddedKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n  \"additionalProperties\",\n  {additionalProperty: string},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must NOT have additional properties\",\n  params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n  keyword: \"additionalProperties\",\n  type: [\"object\"],\n  schemaType: [\"boolean\", \"object\"],\n  allowUndefined: true,\n  trackErrors: true,\n  error,\n  code(cxt) {\n    const {gen, schema, parentSchema, data, errsCount, it} = cxt\n    /* istanbul ignore if */\n    if (!errsCount) throw new Error(\"ajv implementation error\")\n    const {allErrors, opts} = it\n    it.props = true\n    if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n    const props = allSchemaProperties(parentSchema.properties)\n    const patProps = allSchemaProperties(parentSchema.patternProperties)\n    checkAdditionalProperties()\n    cxt.ok(_`${errsCount} === ${N.errors}`)\n\n    function checkAdditionalProperties(): void {\n      gen.forIn(\"key\", data, (key: Name) => {\n        if (!props.length && !patProps.length) additionalPropertyCode(key)\n        else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n      })\n    }\n\n    function isAdditional(key: Name): Code {\n      let definedProp: Code\n      if (props.length > 8) {\n        // TODO maybe an option instead of hard-coded 8?\n        const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n        definedProp = isOwnProperty(gen, propsSchema as Code, key)\n      } else if (props.length) {\n        definedProp = or(...props.map((p) => _`${key} === ${p}`))\n      } else {\n        definedProp = nil\n      }\n      if (patProps.length) {\n        definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n      }\n      return not(definedProp)\n    }\n\n    function deleteAdditional(key: Name): void {\n      gen.code(_`delete ${data}[${key}]`)\n    }\n\n    function additionalPropertyCode(key: Name): void {\n      if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n        deleteAdditional(key)\n        return\n      }\n\n      if (schema === false) {\n        cxt.setParams({additionalProperty: key})\n        cxt.error()\n        if (!allErrors) gen.break()\n        return\n      }\n\n      if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n        const valid = gen.name(\"valid\")\n        if (opts.removeAdditional === \"failing\") {\n          applyAdditionalSchema(key, valid, false)\n          gen.if(not(valid), () => {\n            cxt.reset()\n            deleteAdditional(key)\n          })\n        } else {\n          applyAdditionalSchema(key, valid)\n          if (!allErrors) gen.if(not(valid), () => gen.break())\n        }\n      }\n    }\n\n    function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n      const subschema: SubschemaArgs = {\n        keyword: \"additionalProperties\",\n        dataProp: key,\n        dataPropType: Type.Str,\n      }\n      if (errors === false) {\n        Object.assign(subschema, {\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        })\n      }\n      cxt.subschema(subschema, valid)\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"properties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, data, it} = cxt\n    if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n      apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n    }\n    const allProps = allSchemaProperties(schema)\n    for (const prop of allProps) {\n      it.definedProperties.add(prop)\n    }\n    if (it.opts.unevaluated && allProps.length && it.props !== true) {\n      it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n    }\n    const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n    if (properties.length === 0) return\n    const valid = gen.name(\"valid\")\n\n    for (const prop of properties) {\n      if (hasDefault(prop)) {\n        applyPropertySchema(prop)\n      } else {\n        gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n        applyPropertySchema(prop)\n        if (!it.allErrors) gen.else().var(valid, true)\n        gen.endIf()\n      }\n      cxt.it.definedProperties.add(prop)\n      cxt.ok(valid)\n    }\n\n    function hasDefault(prop: string): boolean | undefined {\n      return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n    }\n\n    function applyPropertySchema(prop: string): void {\n      cxt.subschema(\n        {\n          keyword: \"properties\",\n          schemaProp: prop,\n          dataProp: prop,\n        },\n        valid\n      )\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"patternProperties\",\n  type: \"object\",\n  schemaType: \"object\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, parentSchema, it} = cxt\n    const {opts} = it\n    const patterns = allSchemaProperties(schema)\n    const alwaysValidPatterns = patterns.filter((p) =>\n      alwaysValidSchema(it, schema[p] as AnySchema)\n    )\n\n    if (\n      patterns.length === 0 ||\n      (alwaysValidPatterns.length === patterns.length &&\n        (!it.opts.unevaluated || it.props === true))\n    ) {\n      return\n    }\n\n    const checkProperties =\n      opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n    const valid = gen.name(\"valid\")\n    if (it.props !== true && !(it.props instanceof Name)) {\n      it.props = evaluatedPropsToName(gen, it.props)\n    }\n    const {props} = it\n    validatePatternProperties()\n\n    function validatePatternProperties(): void {\n      for (const pat of patterns) {\n        if (checkProperties) checkMatchingProperties(pat)\n        if (it.allErrors) {\n          validateProperties(pat)\n        } else {\n          gen.var(valid, true) // TODO var\n          validateProperties(pat)\n          gen.if(valid)\n        }\n      }\n    }\n\n    function checkMatchingProperties(pat: string): void {\n      for (const prop in checkProperties) {\n        if (new RegExp(pat).test(prop)) {\n          checkStrictMode(\n            it,\n            `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n          )\n        }\n      }\n    }\n\n    function validateProperties(pat: string): void {\n      gen.forIn(\"key\", data, (key) => {\n        gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n          const alwaysValid = alwaysValidPatterns.includes(pat)\n          if (!alwaysValid) {\n            cxt.subschema(\n              {\n                keyword: \"patternProperties\",\n                schemaProp: pat,\n                dataProp: key,\n                dataPropType: Type.Str,\n              },\n              valid\n            )\n          }\n\n          if (it.opts.unevaluated && props !== true) {\n            gen.assign(_`${props}[${key}]`, true)\n          } else if (!alwaysValid && !it.allErrors) {\n            // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n            // or if all properties were evaluated (props === true)\n            gen.if(not(valid), () => gen.break())\n          }\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"not\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    if (alwaysValidSchema(it, schema)) {\n      cxt.fail()\n      return\n    }\n\n    const valid = gen.name(\"valid\")\n    cxt.subschema(\n      {\n        keyword: \"not\",\n        compositeRule: true,\n        createErrors: false,\n        allErrors: false,\n      },\n      valid\n    )\n\n    cxt.failResult(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error()\n    )\n  },\n  error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"anyOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  code: validateUnion,\n  error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n  \"oneOf\",\n  {passingSchemas: [number, number] | null},\n  AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must match exactly one schema in oneOf\",\n  params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"oneOf\",\n  schemaType: \"array\",\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, parentSchema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    if (it.opts.discriminator && parentSchema.discriminator) return\n    const schArr: AnySchema[] = schema\n    const valid = gen.let(\"valid\", false)\n    const passing = gen.let(\"passing\", null)\n    const schValid = gen.name(\"_valid\")\n    cxt.setParams({passing})\n    // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n    gen.block(validateOneOf)\n\n    cxt.result(\n      valid,\n      () => cxt.reset(),\n      () => cxt.error(true)\n    )\n\n    function validateOneOf(): void {\n      schArr.forEach((sch: AnySchema, i: number) => {\n        let schCxt: SchemaCxt | undefined\n        if (alwaysValidSchema(it, sch)) {\n          gen.var(schValid, true)\n        } else {\n          schCxt = cxt.subschema(\n            {\n              keyword: \"oneOf\",\n              schemaProp: i,\n              compositeRule: true,\n            },\n            schValid\n          )\n        }\n\n        if (i > 0) {\n          gen\n            .if(_`${schValid} && ${valid}`)\n            .assign(valid, false)\n            .assign(passing, _`[${passing}, ${i}]`)\n            .else()\n        }\n\n        gen.if(schValid, () => {\n          gen.assign(valid, true)\n          gen.assign(passing, i)\n          if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n        })\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"allOf\",\n  schemaType: \"array\",\n  code(cxt: KeywordCxt) {\n    const {gen, schema, it} = cxt\n    /* istanbul ignore if */\n    if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n    const valid = gen.name(\"valid\")\n    schema.forEach((sch: AnySchema, i: number) => {\n      if (alwaysValidSchema(it, sch)) return\n      const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n      cxt.ok(valid)\n      cxt.mergeEvaluated(schCxt)\n    })\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n  params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"if\",\n  schemaType: [\"object\", \"boolean\"],\n  trackErrors: true,\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, parentSchema, it} = cxt\n    if (parentSchema.then === undefined && parentSchema.else === undefined) {\n      checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n    }\n    const hasThen = hasSchema(it, \"then\")\n    const hasElse = hasSchema(it, \"else\")\n    if (!hasThen && !hasElse) return\n\n    const valid = gen.let(\"valid\", true)\n    const schValid = gen.name(\"_valid\")\n    validateIf()\n    cxt.reset()\n\n    if (hasThen && hasElse) {\n      const ifClause = gen.let(\"ifClause\")\n      cxt.setParams({ifClause})\n      gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n    } else if (hasThen) {\n      gen.if(schValid, validateClause(\"then\"))\n    } else {\n      gen.if(not(schValid), validateClause(\"else\"))\n    }\n\n    cxt.pass(valid, () => cxt.error(true))\n\n    function validateIf(): void {\n      const schCxt = cxt.subschema(\n        {\n          keyword: \"if\",\n          compositeRule: true,\n          createErrors: false,\n          allErrors: false,\n        },\n        schValid\n      )\n      cxt.mergeEvaluated(schCxt)\n    }\n\n    function validateClause(keyword: string, ifClause?: Name): () => void {\n      return () => {\n        const schCxt = cxt.subschema({keyword}, schValid)\n        gen.assign(valid, schValid)\n        cxt.mergeValidEvaluated(schCxt, valid)\n        if (ifClause) gen.assign(ifClause, _`${keyword}`)\n        else cxt.setParams({ifClause: keyword})\n      }\n    }\n  },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n  const schema = it.schema[keyword]\n  return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"then\", \"else\"],\n  schemaType: [\"object\", \"boolean\"],\n  code({keyword, parentSchema, it}: KeywordCxt) {\n    if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n  },\n}\n\nexport default def\n", "import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n  const applicator = [\n    // any\n    notKeyword,\n    anyOf,\n    oneOf,\n    allOf,\n    ifKeyword,\n    thenElse,\n    // object\n    propertyNames,\n    additionalProperties,\n    dependencies,\n    properties,\n    patternProperties,\n  ]\n  // array\n  if (draft2020) applicator.push(prefixItems, items2020)\n  else applicator.push(additionalItems, items)\n  applicator.push(contains)\n  return applicator\n}\n\nexport type ApplicatorKeywordError =\n  | ErrorNoParams<\"false schema\">\n  | AdditionalItemsError\n  | ItemsError\n  | ContainsError\n  | AdditionalPropertiesError\n  | DependenciesError\n  | IfKeywordError\n  | AnyOfError\n  | OneOfError\n  | NotKeywordError\n  | PropertyNamesError\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Code} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, compileSchema} from \"../../compile\"\nimport {getValidate} from \"../core/ref\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$dynamicAnchor\",\n  schemaType: \"string\",\n  code: (cxt) => dynamicAnchor(cxt, cxt.schema),\n}\n\nexport function dynamicAnchor(cxt: KeywordCxt, anchor: string): void {\n  const {gen, it} = cxt\n  it.schemaEnv.root.dynamicAnchors[anchor] = true\n  const v = _`${N.dynamicAnchors}${getProperty(anchor)}`\n  const validate = it.errSchemaPath === \"#\" ? it.validateName : _getValidate(cxt)\n  gen.if(_`!${v}`, () => gen.assign(v, validate))\n}\n\nfunction _getValidate(cxt: KeywordCxt): Code {\n  const {schemaEnv, schema, self} = cxt.it\n  const {root, baseId, localRefs, meta} = schemaEnv.root\n  const {schemaId} = self.opts\n  const sch = new SchemaEnv({schema, schemaId, root, baseId, localRefs, meta})\n  compileSchema.call(self, sch)\n  return getValidate(cxt, sch)\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {callRef} from \"../core/ref\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$dynamicRef\",\n  schemaType: \"string\",\n  code: (cxt) => dynamicRef(cxt, cxt.schema),\n}\n\nexport function dynamicRef(cxt: KeywordCxt, ref: string): void {\n  const {gen, keyword, it} = cxt\n  if (ref[0] !== \"#\") throw new Error(`\"${keyword}\" only supports hash fragment reference`)\n  const anchor = ref.slice(1)\n  if (it.allErrors) {\n    _dynamicRef()\n  } else {\n    const valid = gen.let(\"valid\", false)\n    _dynamicRef(valid)\n    cxt.ok(valid)\n  }\n\n  function _dynamicRef(valid?: Name): void {\n    // TODO the assumption here is that `recursiveRef: #` always points to the root\n    // of the schema object, which is not correct, because there may be $id that\n    // makes # point to it, and the target schema may not contain dynamic/recursiveAnchor.\n    // Because of that 2 tests in recursiveRef.json fail.\n    // This is a similar problem to #815 (`$id` doesn't alter resolution scope for `{ \"$ref\": \"#\" }`).\n    // (This problem is not tested in JSON-Schema-Test-Suite)\n    if (it.schemaEnv.root.dynamicAnchors[anchor]) {\n      const v = gen.let(\"_v\", _`${N.dynamicAnchors}${getProperty(anchor)}`)\n      gen.if(v, _callRef(v, valid), _callRef(it.validateName, valid))\n    } else {\n      _callRef(it.validateName, valid)()\n    }\n  }\n\n  function _callRef(validate: Code, valid?: Name): () => void {\n    return valid\n      ? () =>\n          gen.block(() => {\n            callRef(cxt, validate)\n            gen.let(valid, true)\n          })\n      : () => callRef(cxt, validate)\n  }\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {dynamicAnchor} from \"./dynamicAnchor\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$recursiveAnchor\",\n  schemaType: \"boolean\",\n  code(cxt) {\n    if (cxt.schema) dynamicAnchor(cxt, \"\")\n    else checkStrictMode(cxt.it, \"$recursiveAnchor: false is ignored\")\n  },\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {dynamicRef} from \"./dynamicRef\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"$recursiveRef\",\n  schemaType: \"string\",\n  code: (cxt) => dynamicRef(cxt, cxt.schema),\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport dynamicAnchor from \"./dynamicAnchor\"\nimport dynamicRef from \"./dynamicRef\"\nimport recursiveAnchor from \"./recursiveAnchor\"\nimport recursiveRef from \"./recursiveRef\"\n\nconst dynamic: Vocabulary = [dynamicAnchor, dynamicRef, recursiveAnchor, recursiveRef]\n\nexport default dynamic\n", "import type {CodeKeywordDefinition, ErrorObject} from \"../../types\"\nimport {\n  validatePropertyDeps,\n  error,\n  DependenciesErrorParams,\n  PropertyDependencies,\n} from \"../applicator/dependencies\"\n\nexport type DependentRequiredError = ErrorObject<\n  \"dependentRequired\",\n  DependenciesErrorParams,\n  PropertyDependencies\n>\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependentRequired\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code: (cxt) => validatePropertyDeps(cxt),\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateSchemaDeps} from \"./dependencies\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"dependentSchemas\",\n  type: \"object\",\n  schemaType: \"object\",\n  code: (cxt) => validateSchemaDeps(cxt),\n}\n\nexport default def\n", "import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n  keyword: [\"maxContains\", \"minContains\"],\n  type: \"array\",\n  schemaType: \"number\",\n  code({keyword, parentSchema, it}: KeywordCxt) {\n    if (parentSchema.contains === undefined) {\n      checkStrictMode(it, `\"${keyword}\" without \"contains\" is ignored`)\n    }\n  },\n}\n\nexport default def\n", "import type {Vocabulary} from \"../types\"\nimport dependentRequired from \"./validation/dependentRequired\"\nimport dependentSchemas from \"./applicator/dependentSchemas\"\nimport limitContains from \"./validation/limitContains\"\n\nconst next: Vocabulary = [dependentRequired, dependentSchemas, limitContains]\n\nexport default next\n", "import type {\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n  AnySchema,\n} from \"../../types\"\nimport {_, not, and, Name, Code} from \"../../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../../compile/util\"\nimport N from \"../../compile/names\"\n\nexport type UnevaluatedPropertiesError = ErrorObject<\n  \"unevaluatedProperties\",\n  {unevaluatedProperty: string},\n  AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n  message: \"must NOT have unevaluated properties\",\n  params: ({params}) => _`{unevaluatedProperty: ${params.unevaluatedProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"unevaluatedProperties\",\n  type: \"object\",\n  schemaType: [\"boolean\", \"object\"],\n  trackErrors: true,\n  error,\n  code(cxt) {\n    const {gen, schema, data, errsCount, it} = cxt\n    /* istanbul ignore if */\n    if (!errsCount) throw new Error(\"ajv implementation error\")\n    const {allErrors, props} = it\n    if (props instanceof Name) {\n      gen.if(_`${props} !== true`, () =>\n        gen.forIn(\"key\", data, (key: Name) =>\n          gen.if(unevaluatedDynamic(props, key), () => unevaluatedPropCode(key))\n        )\n      )\n    } else if (props !== true) {\n      gen.forIn(\"key\", data, (key: Name) =>\n        props === undefined\n          ? unevaluatedPropCode(key)\n          : gen.if(unevaluatedStatic(props, key), () => unevaluatedPropCode(key))\n      )\n    }\n    it.props = true\n    cxt.ok(_`${errsCount} === ${N.errors}`)\n\n    function unevaluatedPropCode(key: Name): void {\n      if (schema === false) {\n        cxt.setParams({unevaluatedProperty: key})\n        cxt.error()\n        if (!allErrors) gen.break()\n        return\n      }\n\n      if (!alwaysValidSchema(it, schema)) {\n        const valid = gen.name(\"valid\")\n        cxt.subschema(\n          {\n            keyword: \"unevaluatedProperties\",\n            dataProp: key,\n            dataPropType: Type.Str,\n          },\n          valid\n        )\n        if (!allErrors) gen.if(not(valid), () => gen.break())\n      }\n    }\n\n    function unevaluatedDynamic(evaluatedProps: Name, key: Name): Code {\n      return _`!${evaluatedProps} || !${evaluatedProps}[${key}]`\n    }\n\n    function unevaluatedStatic(evaluatedProps: {[K in string]?: true}, key: Name): Code {\n      const ps: Code[] = []\n      for (const p in evaluatedProps) {\n        if (evaluatedProps[p] === true) ps.push(_`${key} !== ${p}`)\n      }\n      return and(...ps)\n    }\n  },\n}\n\nexport default def\n", "import type {\n  CodeKeywordDefinition,\n  ErrorObject,\n  KeywordErrorDefinition,\n  AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../../compile/util\"\n\nexport type UnevaluatedItemsError = ErrorObject<\"unevaluatedItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n  params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"unevaluatedItems\",\n  type: \"array\",\n  schemaType: [\"boolean\", \"object\"],\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, schema, data, it} = cxt\n    const items = it.items || 0\n    if (items === true) return\n    const len = gen.const(\"len\", _`${data}.length`)\n    if (schema === false) {\n      cxt.setParams({len: items})\n      cxt.fail(_`${len} > ${items}`)\n    } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n      const valid = gen.var(\"valid\", _`${len} <= ${items}`)\n      gen.if(not(valid), () => validateItems(valid, items))\n      cxt.ok(valid)\n    }\n    it.items = true\n\n    function validateItems(valid: Name, from: Name | number): void {\n      gen.forRange(\"i\", from, len, (i) => {\n        cxt.subschema({keyword: \"unevaluatedItems\", dataProp: i, dataPropType: Type.Num}, valid)\n        if (!it.allErrors) gen.if(not(valid), () => gen.break())\n      })\n    }\n  },\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport unevaluatedProperties from \"./unevaluatedProperties\"\nimport unevaluatedItems from \"./unevaluatedItems\"\n\nconst unevaluated: Vocabulary = [unevaluatedProperties, unevaluatedItems]\n\nexport default unevaluated\n", "import type {\n  AddedFormat,\n  FormatValidator,\n  AsyncFormatValidator,\n  CodeKeywordDefinition,\n  KeywordErrorDefinition,\n  ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n  | FormatValidator<string>\n  | FormatValidator<number>\n  | AsyncFormatValidator<string>\n  | AsyncFormatValidator<number>\n  | RegExp\n  | string\n  | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n  message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n  params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"format\",\n  type: [\"number\", \"string\"],\n  schemaType: \"string\",\n  $data: true,\n  error,\n  code(cxt: KeywordCxt, ruleType?: string) {\n    const {gen, data, $data, schema, schemaCode, it} = cxt\n    const {opts, errSchemaPath, schemaEnv, self} = it\n    if (!opts.validateFormats) return\n\n    if ($data) validate$DataFormat()\n    else validateFormat()\n\n    function validate$DataFormat(): void {\n      const fmts = gen.scopeValue(\"formats\", {\n        ref: self.formats,\n        code: opts.code.formats,\n      })\n      const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n      const fType = gen.let(\"fType\")\n      const format = gen.let(\"format\")\n      // TODO simplify\n      gen.if(\n        _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n        () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n        () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n      )\n      cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n      function unknownFmt(): Code {\n        if (opts.strictSchema === false) return nil\n        return _`${schemaCode} && !${format}`\n      }\n\n      function invalidFmt(): Code {\n        const callFormat = schemaEnv.$async\n          ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n          : _`${format}(${data})`\n        const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n        return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n      }\n    }\n\n    function validateFormat(): void {\n      const formatDef: AddedFormat | undefined = self.formats[schema]\n      if (!formatDef) {\n        unknownFormat()\n        return\n      }\n      if (formatDef === true) return\n      const [fmtType, format, fmtRef] = getFormat(formatDef)\n      if (fmtType === ruleType) cxt.pass(validCondition())\n\n      function unknownFormat(): void {\n        if (opts.strictSchema === false) {\n          self.logger.warn(unknownMsg())\n          return\n        }\n        throw new Error(unknownMsg())\n\n        function unknownMsg(): string {\n          return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n        }\n      }\n\n      function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n        const code =\n          fmtDef instanceof RegExp\n            ? regexpCode(fmtDef)\n            : opts.code.formats\n            ? _`${opts.code.formats}${getProperty(schema)}`\n            : undefined\n        const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n        if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n          return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n        }\n\n        return [\"string\", fmtDef, fmt]\n      }\n\n      function validCondition(): Code {\n        if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n          if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n          return _`await ${fmtRef}(${data})`\n        }\n        return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n      }\n    }\n  },\n}\n\nexport default def\n", "import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n", "import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n  \"title\",\n  \"description\",\n  \"default\",\n  \"deprecated\",\n  \"readOnly\",\n  \"writeOnly\",\n  \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n  \"contentMediaType\",\n  \"contentEncoding\",\n  \"contentSchema\",\n]\n", "import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport dynamicVocabulary from \"./dynamic\"\nimport nextVocabulary from \"./next\"\nimport unevaluatedVocabulary from \"./unevaluated\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft2020Vocabularies: Vocabulary[] = [\n  dynamicVocabulary,\n  coreVocabulary,\n  validationVocabulary,\n  getApplicatorVocabulary(true),\n  formatVocabulary,\n  metadataVocabulary,\n  contentVocabulary,\n  nextVocabulary,\n  unevaluatedVocabulary,\n]\n\nexport default draft2020Vocabularies\n", "import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n  Tag = \"tag\",\n  Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n  \"discriminator\",\n  {error: E; tag: string; tagValue: unknown},\n  string\n>\n", "import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n  message: ({params: {discrError, tagName}}) =>\n    discrError === DiscrError.Tag\n      ? `tag \"${tagName}\" must be string`\n      : `value of tag \"${tagName}\" must be in oneOf`,\n  params: ({params: {discrError, tag, tagName}}) =>\n    _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n  keyword: \"discriminator\",\n  type: \"object\",\n  schemaType: \"object\",\n  error,\n  code(cxt: KeywordCxt) {\n    const {gen, data, schema, parentSchema, it} = cxt\n    const {oneOf} = parentSchema\n    if (!it.opts.discriminator) {\n      throw new Error(\"discriminator: requires discriminator option\")\n    }\n    const tagName = schema.propertyName\n    if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n    if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n    if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n    const valid = gen.let(\"valid\", false)\n    const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n    gen.if(\n      _`typeof ${tag} == \"string\"`,\n      () => validateMapping(),\n      () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n    )\n    cxt.ok(valid)\n\n    function validateMapping(): void {\n      const mapping = getMapping()\n      gen.if(false)\n      for (const tagValue in mapping) {\n        gen.elseIf(_`${tag} === ${tagValue}`)\n        gen.assign(valid, applyTagSchema(mapping[tagValue]))\n      }\n      gen.else()\n      cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n      gen.endIf()\n    }\n\n    function applyTagSchema(schemaProp?: number): Name {\n      const _valid = gen.name(\"valid\")\n      const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n      cxt.mergeEvaluated(schCxt, Name)\n      return _valid\n    }\n\n    function getMapping(): {[T in string]?: number} {\n      const oneOfMapping: {[T in string]?: number} = {}\n      const topRequired = hasRequired(parentSchema)\n      let tagRequired = true\n      for (let i = 0; i < oneOf.length; i++) {\n        let sch = oneOf[i]\n        if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n          sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, sch?.$ref)\n          if (sch instanceof SchemaEnv) sch = sch.schema\n        }\n        const propSch = sch?.properties?.[tagName]\n        if (typeof propSch != \"object\") {\n          throw new Error(\n            `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n          )\n        }\n        tagRequired = tagRequired && (topRequired || hasRequired(sch))\n        addMappings(propSch, i)\n      }\n      if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n      return oneOfMapping\n\n      function hasRequired({required}: AnySchemaObject): boolean {\n        return Array.isArray(required) && required.includes(tagName)\n      }\n\n      function addMappings(sch: AnySchemaObject, i: number): void {\n        if (sch.const) {\n          addMapping(sch.const, i)\n        } else if (sch.enum) {\n          for (const tagValue of sch.enum) {\n            addMapping(tagValue, i)\n          }\n        } else {\n          throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n        }\n      }\n\n      function addMapping(tagValue: unknown, i: number): void {\n        if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n          throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n        }\n        oneOfMapping[tagValue] = i\n      }\n    }\n  },\n}\n\nexport default def\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/core\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/applicator\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/unevaluated\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/validation\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/meta-data\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/format-annotation\": true,\n    \"https://json-schema.org/draft/2020-12/vocab/content\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Core and Validation specifications meta-schema\",\n  \"allOf\": [\n    {\"$ref\": \"meta/core\"},\n    {\"$ref\": \"meta/applicator\"},\n    {\"$ref\": \"meta/unevaluated\"},\n    {\"$ref\": \"meta/validation\"},\n    {\"$ref\": \"meta/meta-data\"},\n    {\"$ref\": \"meta/format-annotation\"},\n    {\"$ref\": \"meta/content\"}\n  ],\n  \"type\": [\"object\", \"boolean\"],\n  \"$comment\": \"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.\",\n  \"properties\": {\n    \"definitions\": {\n      \"$comment\": \"\\\"definitions\\\" has been replaced by \\\"$defs\\\".\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"deprecated\": true,\n      \"default\": {}\n    },\n    \"dependencies\": {\n      \"$comment\": \"\\\"dependencies\\\" has been split and replaced by \\\"dependentSchemas\\\" and \\\"dependentRequired\\\" in order to serve their differing semantics.\",\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [{\"$dynamicRef\": \"#meta\"}, {\"$ref\": \"meta/validation#/$defs/stringArray\"}]\n      },\n      \"deprecated\": true,\n      \"default\": {}\n    },\n    \"$recursiveAnchor\": {\n      \"$comment\": \"\\\"$recursiveAnchor\\\" has been replaced by \\\"$dynamicAnchor\\\".\",\n      \"$ref\": \"meta/core#/$defs/anchorString\",\n      \"deprecated\": true\n    },\n    \"$recursiveRef\": {\n      \"$comment\": \"\\\"$recursiveRef\\\" has been replaced by \\\"$dynamicRef\\\".\",\n      \"$ref\": \"meta/core#/$defs/uriReferenceString\",\n      \"deprecated\": true\n    }\n  }\n}\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/applicator\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/applicator\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"prefixItems\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"items\": {\"$dynamicRef\": \"#meta\"},\n    \"contains\": {\"$dynamicRef\": \"#meta\"},\n    \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n    \"properties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"default\": {}\n    },\n    \"patternProperties\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"propertyNames\": {\"format\": \"regex\"},\n      \"default\": {}\n    },\n    \"dependentSchemas\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"},\n      \"default\": {}\n    },\n    \"propertyNames\": {\"$dynamicRef\": \"#meta\"},\n    \"if\": {\"$dynamicRef\": \"#meta\"},\n    \"then\": {\"$dynamicRef\": \"#meta\"},\n    \"else\": {\"$dynamicRef\": \"#meta\"},\n    \"allOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"anyOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"oneOf\": {\"$ref\": \"#/$defs/schemaArray\"},\n    \"not\": {\"$dynamicRef\": \"#meta\"}\n  },\n  \"$defs\": {\n    \"schemaArray\": {\n      \"type\": \"array\",\n      \"minItems\": 1,\n      \"items\": {\"$dynamicRef\": \"#meta\"}\n    }\n  }\n}\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/unevaluated\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/unevaluated\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Unevaluated applicator vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"unevaluatedItems\": {\"$dynamicRef\": \"#meta\"},\n    \"unevaluatedProperties\": {\"$dynamicRef\": \"#meta\"}\n  }\n}\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/content\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/content\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Content vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"contentEncoding\": {\"type\": \"string\"},\n    \"contentMediaType\": {\"type\": \"string\"},\n    \"contentSchema\": {\"$dynamicRef\": \"#meta\"}\n  }\n}\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/core\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/core\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Core vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"$id\": {\n      \"$ref\": \"#/$defs/uriReferenceString\",\n      \"$comment\": \"Non-empty fragments not allowed.\",\n      \"pattern\": \"^[^#]*#?$\"\n    },\n    \"$schema\": {\"$ref\": \"#/$defs/uriString\"},\n    \"$ref\": {\"$ref\": \"#/$defs/uriReferenceString\"},\n    \"$anchor\": {\"$ref\": \"#/$defs/anchorString\"},\n    \"$dynamicRef\": {\"$ref\": \"#/$defs/uriReferenceString\"},\n    \"$dynamicAnchor\": {\"$ref\": \"#/$defs/anchorString\"},\n    \"$vocabulary\": {\n      \"type\": \"object\",\n      \"propertyNames\": {\"$ref\": \"#/$defs/uriString\"},\n      \"additionalProperties\": {\n        \"type\": \"boolean\"\n      }\n    },\n    \"$comment\": {\n      \"type\": \"string\"\n    },\n    \"$defs\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\"$dynamicRef\": \"#meta\"}\n    }\n  },\n  \"$defs\": {\n    \"anchorString\": {\n      \"type\": \"string\",\n      \"pattern\": \"^[A-Za-z_][-A-Za-z0-9._]*$\"\n    },\n    \"uriString\": {\n      \"type\": \"string\",\n      \"format\": \"uri\"\n    },\n    \"uriReferenceString\": {\n      \"type\": \"string\",\n      \"format\": \"uri-reference\"\n    }\n  }\n}\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/format-annotation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/format-annotation\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Format vocabulary meta-schema for annotation results\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"format\": {\"type\": \"string\"}\n  }\n}\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/meta-data\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/meta-data\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Meta-data vocabulary meta-schema\",\n\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"title\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"default\": true,\n    \"deprecated\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"readOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"writeOnly\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": true\n    }\n  }\n}\n", "{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"$id\": \"https://json-schema.org/draft/2020-12/meta/validation\",\n  \"$vocabulary\": {\n    \"https://json-schema.org/draft/2020-12/vocab/validation\": true\n  },\n  \"$dynamicAnchor\": \"meta\",\n\n  \"title\": \"Validation vocabulary meta-schema\",\n  \"type\": [\"object\", \"boolean\"],\n  \"properties\": {\n    \"type\": {\n      \"anyOf\": [\n        {\"$ref\": \"#/$defs/simpleTypes\"},\n        {\n          \"type\": \"array\",\n          \"items\": {\"$ref\": \"#/$defs/simpleTypes\"},\n          \"minItems\": 1,\n          \"uniqueItems\": true\n        }\n      ]\n    },\n    \"const\": true,\n    \"enum\": {\n      \"type\": \"array\",\n      \"items\": true\n    },\n    \"multipleOf\": {\n      \"type\": \"number\",\n      \"exclusiveMinimum\": 0\n    },\n    \"maximum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMaximum\": {\n      \"type\": \"number\"\n    },\n    \"minimum\": {\n      \"type\": \"number\"\n    },\n    \"exclusiveMinimum\": {\n      \"type\": \"number\"\n    },\n    \"maxLength\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minLength\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"pattern\": {\n      \"type\": \"string\",\n      \"format\": \"regex\"\n    },\n    \"maxItems\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minItems\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"uniqueItems\": {\n      \"type\": \"boolean\",\n      \"default\": false\n    },\n    \"maxContains\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minContains\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 1\n    },\n    \"maxProperties\": {\"$ref\": \"#/$defs/nonNegativeInteger\"},\n    \"minProperties\": {\"$ref\": \"#/$defs/nonNegativeIntegerDefault0\"},\n    \"required\": {\"$ref\": \"#/$defs/stringArray\"},\n    \"dependentRequired\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/stringArray\"\n      }\n    }\n  },\n  \"$defs\": {\n    \"nonNegativeInteger\": {\n      \"type\": \"integer\",\n      \"minimum\": 0\n    },\n    \"nonNegativeIntegerDefault0\": {\n      \"$ref\": \"#/$defs/nonNegativeInteger\",\n      \"default\": 0\n    },\n    \"simpleTypes\": {\n      \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n    },\n    \"stringArray\": {\n      \"type\": \"array\",\n      \"items\": {\"type\": \"string\"},\n      \"uniqueItems\": true,\n      \"default\": []\n    }\n  }\n}\n", "import type Ajv from \"../../core\"\nimport type {AnySchemaObject} from \"../../types\"\nimport * as metaSchema from \"./schema.json\"\nimport * as applicator from \"./meta/applicator.json\"\nimport * as unevaluated from \"./meta/unevaluated.json\"\nimport * as content from \"./meta/content.json\"\nimport * as core from \"./meta/core.json\"\nimport * as format from \"./meta/format-annotation.json\"\nimport * as metadata from \"./meta/meta-data.json\"\nimport * as validation from \"./meta/validation.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nexport default function addMetaSchema2020(this: Ajv, $data?: boolean): Ajv {\n  ;[\n    metaSchema,\n    applicator,\n    unevaluated,\n    content,\n    core,\n    with$data(this, format),\n    metadata,\n    with$data(this, validation),\n  ].forEach((sch) => this.addMetaSchema(sch, undefined, false))\n  return this\n\n  function with$data(ajv: Ajv, sch: AnySchemaObject): AnySchemaObject {\n    return $data ? ajv.$dataMetaSchema(sch, META_SUPPORT_DATA) : sch\n  }\n}\n", "import type {AnySchemaObject} from \"./types\"\nimport AjvCore, {Options} from \"./core\"\n\nimport draft2020Vocabularies from \"./vocabularies/draft2020\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport addMetaSchema2020 from \"./refs/json-schema-2020-12\"\n\nconst META_SCHEMA_ID = \"https://json-schema.org/draft/2020-12/schema\"\n\nclass Ajv2020 extends AjvCore {\n  constructor(opts: Options = {}) {\n    super({\n      ...opts,\n      dynamicRef: true,\n      next: true,\n      unevaluated: true,\n    })\n  }\n\n  _addVocabularies(): void {\n    super._addVocabularies()\n    draft2020Vocabularies.forEach((v) => this.addVocabulary(v))\n    if (this.opts.discriminator) this.addKeyword(discriminator)\n  }\n\n  _addDefaultMetaSchema(): void {\n    super._addDefaultMetaSchema()\n    const {$data, meta} = this.opts\n    if (!meta) return\n    addMetaSchema2020.call(this, $data)\n    this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n  }\n\n  defaultMeta(): string | AnySchemaObject | undefined {\n    return (this.opts.defaultMeta =\n      super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n  }\n}\n\nmodule.exports = exports = Ajv2020\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv2020\n\nexport {\n  Format,\n  FormatDefinition,\n  AsyncFormatDefinition,\n  KeywordDefinition,\n  KeywordErrorDefinition,\n  CodeKeywordDefinition,\n  MacroKeywordDefinition,\n  FuncKeywordDefinition,\n  Vocabulary,\n  Schema,\n  SchemaObject,\n  AnySchemaObject,\n  AsyncSchema,\n  AnySchema,\n  ValidateFunction,\n  AsyncValidateFunction,\n  ErrorObject,\n  ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n", "// A simple TTL cache with max capacity option, ms resolution,\n// autopurge, and reasonably optimized performance\n// Relies on the fact that integer Object keys are kept sorted,\n// and managed very efficiently by V8.\n\n/* istanbul ignore next */\nconst perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst now = () => perf.now()\nconst isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n)\nconst isPosIntOrInf = n => n === Infinity || isPosInt(n)\n\nclass TTLCache {\n  constructor({\n    max = Infinity,\n    ttl,\n    updateAgeOnGet = false,\n    checkAgeOnGet = false,\n    noUpdateTTL = false,\n    dispose,\n    noDisposeOnSet = false,\n  } = {}) {\n    // {[expirationTime]: [keys]}\n    this.expirations = Object.create(null)\n    // {key=>val}\n    this.data = new Map()\n    // {key=>expiration}\n    this.expirationMap = new Map()\n    if (ttl !== undefined && !isPosIntOrInf(ttl)) {\n      throw new TypeError(\n        'ttl must be positive integer or Infinity if set'\n      )\n    }\n    if (!isPosIntOrInf(max)) {\n      throw new TypeError('max must be positive integer or Infinity')\n    }\n    this.ttl = ttl\n    this.max = max\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.checkAgeOnGet = !!checkAgeOnGet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDisposeOnSet = !!noDisposeOnSet\n    if (dispose !== undefined) {\n      if (typeof dispose !== 'function') {\n        throw new TypeError('dispose must be function if set')\n      }\n      this.dispose = dispose\n    }\n\n    this.timer = undefined\n    this.timerExpiration = undefined\n  }\n\n  setTimer(expiration, ttl) {\n    if (this.timerExpiration < expiration) {\n      return\n    }\n\n    if (this.timer) {\n      clearTimeout(this.timer)\n    }\n\n    const t = setTimeout(() => {\n      this.timer = undefined\n      this.timerExpiration = undefined\n      this.purgeStale()\n      for (const exp in this.expirations) {\n        this.setTimer(exp, exp - now())\n        break\n      }\n    }, ttl)\n\n    /* istanbul ignore else - affordance for non-node envs */\n    if (t.unref) t.unref()\n\n    this.timerExpiration = expiration\n    this.timer = t\n  }\n\n  // hang onto the timer so we can clearTimeout if all items\n  // are deleted.  Deno doesn't have Timer.unref(), so it\n  // hangs otherwise.\n  cancelTimer() {\n    if (this.timer) {\n      clearTimeout(this.timer)\n      this.timerExpiration = undefined\n      this.timer = undefined\n    }\n  }\n\n  /* istanbul ignore next */\n  cancelTimers() {\n    process.emitWarning(\n      'TTLCache.cancelTimers has been renamed to ' +\n        'TTLCache.cancelTimer (no \"s\"), and will be removed in the next ' +\n        'major version update'\n    )\n    return this.cancelTimer()\n  }\n\n  clear() {\n    const entries =\n      this.dispose !== TTLCache.prototype.dispose ? [...this] : []\n    this.data.clear()\n    this.expirationMap.clear()\n    // no need for any purging now\n    this.cancelTimer()\n    this.expirations = Object.create(null)\n    for (const [key, val] of entries) {\n      this.dispose(val, key, 'delete')\n    }\n  }\n\n  setTTL(key, ttl = this.ttl) {\n    const current = this.expirationMap.get(key)\n    if (current !== undefined) {\n      // remove from the expirations list, so it isn't purged\n      const exp = this.expirations[current]\n      if (!exp || exp.length <= 1) {\n        delete this.expirations[current]\n      } else {\n        this.expirations[current] = exp.filter(k => k !== key)\n      }\n    }\n\n    if (ttl !== Infinity) {\n      const expiration = Math.floor(now() + ttl)\n      this.expirationMap.set(key, expiration)\n      if (!this.expirations[expiration]) {\n        this.expirations[expiration] = []\n        this.setTimer(expiration, ttl)\n      }\n      this.expirations[expiration].push(key)\n    } else {\n      this.expirationMap.set(key, Infinity)\n    }\n  }\n\n  set(\n    key,\n    val,\n    {\n      ttl = this.ttl,\n      noUpdateTTL = this.noUpdateTTL,\n      noDisposeOnSet = this.noDisposeOnSet,\n    } = {}\n  ) {\n    if (!isPosIntOrInf(ttl)) {\n      throw new TypeError('ttl must be positive integer or Infinity')\n    }\n    if (this.expirationMap.has(key)) {\n      if (!noUpdateTTL) {\n        this.setTTL(key, ttl)\n      }\n      // has old value\n      const oldValue = this.data.get(key)\n      if (oldValue !== val) {\n        this.data.set(key, val)\n        if (!noDisposeOnSet) {\n          this.dispose(oldValue, key, 'set')\n        }\n      }\n    } else {\n      this.setTTL(key, ttl)\n      this.data.set(key, val)\n    }\n\n    while (this.size > this.max) {\n      this.purgeToCapacity()\n    }\n\n    return this\n  }\n\n  has(key) {\n    return this.data.has(key)\n  }\n\n  getRemainingTTL(key) {\n    const expiration = this.expirationMap.get(key)\n    return expiration === Infinity\n      ? expiration\n      : expiration !== undefined\n      ? Math.max(0, Math.ceil(expiration - now()))\n      : 0\n  }\n\n  get(\n    key,\n    {\n      updateAgeOnGet = this.updateAgeOnGet,\n      ttl = this.ttl,\n      checkAgeOnGet = this.checkAgeOnGet,\n    } = {}\n  ) {\n    const val = this.data.get(key)\n    if (checkAgeOnGet && this.getRemainingTTL(key) === 0) {\n      this.delete(key)\n      return undefined\n    }\n    if (updateAgeOnGet) {\n      this.setTTL(key, ttl)\n    }\n    return val\n  }\n\n  dispose(_, __) {}\n\n  delete(key) {\n    const current = this.expirationMap.get(key)\n    if (current !== undefined) {\n      const value = this.data.get(key)\n      this.data.delete(key)\n      this.expirationMap.delete(key)\n      const exp = this.expirations[current]\n      if (exp) {\n        if (exp.length <= 1) {\n          delete this.expirations[current]\n        } else {\n          this.expirations[current] = exp.filter(k => k !== key)\n        }\n      }\n      this.dispose(value, key, 'delete')\n      if (this.size === 0) {\n        this.cancelTimer()\n      }\n      return true\n    }\n    return false\n  }\n\n  purgeToCapacity() {\n    for (const exp in this.expirations) {\n      const keys = this.expirations[exp]\n      if (this.size - keys.length >= this.max) {\n        delete this.expirations[exp]\n        const entries = []\n        for (const key of keys) {\n          entries.push([key, this.data.get(key)])\n          this.data.delete(key)\n          this.expirationMap.delete(key)\n        }\n        for (const [key, val] of entries) {\n          this.dispose(val, key, 'evict')\n        }\n      } else {\n        const s = this.size - this.max\n        const entries = []\n        for (const key of keys.splice(0, s)) {\n          entries.push([key, this.data.get(key)])\n          this.data.delete(key)\n          this.expirationMap.delete(key)\n        }\n        for (const [key, val] of entries) {\n          this.dispose(val, key, 'evict')\n        }\n        return\n      }\n    }\n  }\n\n  get size() {\n    return this.data.size\n  }\n\n  purgeStale() {\n    const n = Math.ceil(now())\n    for (const exp in this.expirations) {\n      if (exp === 'Infinity' || exp > n) {\n        return\n      }\n\n      /* istanbul ignore next\n       * mysterious need for a guard here?\n       * https://github.com/isaacs/ttlcache/issues/26 */\n      const keys = [...(this.expirations[exp] || [])]\n      const entries = []\n      delete this.expirations[exp]\n      for (const key of keys) {\n        entries.push([key, this.data.get(key)])\n        this.data.delete(key)\n        this.expirationMap.delete(key)\n      }\n      for (const [key, val] of entries) {\n        this.dispose(val, key, 'stale')\n      }\n    }\n    if (this.size === 0) {\n      this.cancelTimer()\n    }\n  }\n\n  *entries() {\n    for (const exp in this.expirations) {\n      for (const key of this.expirations[exp]) {\n        yield [key, this.data.get(key)]\n      }\n    }\n  }\n  *keys() {\n    for (const exp in this.expirations) {\n      for (const key of this.expirations[exp]) {\n        yield key\n      }\n    }\n  }\n  *values() {\n    for (const exp in this.expirations) {\n      for (const key of this.expirations[exp]) {\n        yield this.data.get(key)\n      }\n    }\n  }\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n}\n\nmodule.exports = TTLCache\n", "'use strict'\n\nexports.supports = function supports (...manifests) {\n  const manifest = manifests.reduce((acc, m) => Object.assign(acc, m), {})\n\n  return Object.assign(manifest, {\n    snapshots: manifest.snapshots || false,\n    permanence: manifest.permanence || false,\n    seek: manifest.seek || false,\n    clear: manifest.clear || false,\n    getMany: manifest.getMany || false,\n    keyIterator: manifest.keyIterator || false,\n    valueIterator: manifest.valueIterator || false,\n    iteratorNextv: manifest.iteratorNextv || false,\n    iteratorAll: manifest.iteratorAll || false,\n    status: manifest.status || false,\n    createIfMissing: manifest.createIfMissing || false,\n    errorIfExists: manifest.errorIfExists || false,\n    deferredOpen: manifest.deferredOpen || false,\n    promises: manifest.promises || false,\n    streams: manifest.streams || false,\n    encodings: Object.assign({}, manifest.encodings),\n    events: Object.assign({}, manifest.events),\n    additionalMethods: Object.assign({}, manifest.additionalMethods)\n  })\n}\n", "'use strict'\n\nmodule.exports = class ModuleError extends Error {\n  /**\n   * @param {string} message Error message\n   * @param {{ code?: string, cause?: Error, expected?: boolean, transient?: boolean }} [options]\n   */\n  constructor (message, options) {\n    super(message || '')\n\n    if (typeof options === 'object' && options !== null) {\n      if (options.code) this.code = String(options.code)\n      if (options.expected) this.expected = true\n      if (options.transient) this.transient = true\n      if (options.cause) this.cause = options.cause\n    }\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, this.constructor)\n    }\n  }\n}\n", "'use strict'\n\n/** @type {{ textEncoder: TextEncoder, textDecoder: TextDecoder }|null} */\nlet lazy = null\n\n/**\n * Get semi-global instances of TextEncoder and TextDecoder.\n * @returns {{ textEncoder: TextEncoder, textDecoder: TextDecoder }}\n */\nmodule.exports = function () {\n  if (lazy === null) {\n    lazy = {\n      textEncoder: new TextEncoder(),\n      textDecoder: new TextDecoder()\n    }\n  }\n\n  return lazy\n}\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst formats = new Set(['buffer', 'view', 'utf8'])\n\n/**\n * @template TIn, TFormat, TOut\n * @abstract\n */\nclass Encoding {\n  /**\n   * @param {IEncoding<TIn,TFormat,TOut>} options\n   */\n  constructor (options) {\n    /** @type {(data: TIn) => TFormat} */\n    this.encode = options.encode || this.encode\n\n    /** @type {(data: TFormat) => TOut} */\n    this.decode = options.decode || this.decode\n\n    /** @type {string} */\n    this.name = options.name || this.name\n\n    /** @type {string} */\n    this.format = options.format || this.format\n\n    if (typeof this.encode !== 'function') {\n      throw new TypeError(\"The 'encode' property must be a function\")\n    }\n\n    if (typeof this.decode !== 'function') {\n      throw new TypeError(\"The 'decode' property must be a function\")\n    }\n\n    this.encode = this.encode.bind(this)\n    this.decode = this.decode.bind(this)\n\n    if (typeof this.name !== 'string' || this.name === '') {\n      throw new TypeError(\"The 'name' property must be a string\")\n    }\n\n    if (typeof this.format !== 'string' || !formats.has(this.format)) {\n      throw new TypeError(\"The 'format' property must be one of 'buffer', 'view', 'utf8'\")\n    }\n\n    if (options.createViewTranscoder) {\n      this.createViewTranscoder = options.createViewTranscoder\n    }\n\n    if (options.createBufferTranscoder) {\n      this.createBufferTranscoder = options.createBufferTranscoder\n    }\n\n    if (options.createUTF8Transcoder) {\n      this.createUTF8Transcoder = options.createUTF8Transcoder\n    }\n  }\n\n  get commonName () {\n    return /** @type {string} */ (this.name.split('+')[0])\n  }\n\n  /** @return {BufferFormat<TIn,TOut>} */\n  createBufferTranscoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'buffer'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n\n  /** @return {ViewFormat<TIn,TOut>} */\n  createViewTranscoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'view'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n\n  /** @return {UTF8Format<TIn,TOut>} */\n  createUTF8Transcoder () {\n    throw new ModuleError(`Encoding '${this.name}' cannot be transcoded to 'utf8'`, {\n      code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n    })\n  }\n}\n\nexports.Encoding = Encoding\n\n/**\n * @typedef {import('./encoding').IEncoding<TIn,TFormat,TOut>} IEncoding\n * @template TIn, TFormat, TOut\n */\n\n/**\n * @typedef {import('./formats').BufferFormat<TIn,TOut>} BufferFormat\n * @template TIn, TOut\n */\n\n/**\n * @typedef {import('./formats').ViewFormat<TIn,TOut>} ViewFormat\n * @template TIn, TOut\n */\n\n/**\n * @typedef {import('./formats').UTF8Format<TIn,TOut>} UTF8Format\n * @template TIn, TOut\n */\n", "'use strict'\n\nconst { Buffer } = require('buffer') || {}\nconst { Encoding } = require('./encoding')\nconst textEndec = require('./text-endec')\n\n/**\n * @template TIn, TOut\n * @extends {Encoding<TIn,Buffer,TOut>}\n */\nclass BufferFormat extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, Buffer, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'buffer' })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: this.encode, // Buffer is a view (UInt8Array)\n      decode: (data) => this.decode(\n        Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n      ),\n      name: `${this.name}+view`\n    })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return this\n  }\n}\n\n/**\n * @extends {Encoding<TIn,Uint8Array,TOut>}\n * @template TIn, TOut\n */\nclass ViewFormat extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, Uint8Array, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'view' })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: (data) => {\n        const view = this.encode(data)\n        return Buffer.from(view.buffer, view.byteOffset, view.byteLength)\n      },\n      decode: this.decode, // Buffer is a view (UInt8Array)\n      name: `${this.name}+buffer`\n    })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    return this\n  }\n}\n\n/**\n * @extends {Encoding<TIn,string,TOut>}\n * @template TIn, TOut\n */\nclass UTF8Format extends Encoding {\n  /**\n   * @param {Omit<IEncoding<TIn, string, TOut>, 'format'>} options\n   */\n  constructor (options) {\n    super({ ...options, format: 'utf8' })\n  }\n\n  /** @override */\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: (data) => Buffer.from(this.encode(data), 'utf8'),\n      decode: (data) => this.decode(data.toString('utf8')),\n      name: `${this.name}+buffer`\n    })\n  }\n\n  /** @override */\n  createViewTranscoder () {\n    const { textEncoder, textDecoder } = textEndec()\n\n    return new ViewFormat({\n      encode: (data) => textEncoder.encode(this.encode(data)),\n      decode: (data) => this.decode(textDecoder.decode(data)),\n      name: `${this.name}+view`\n    })\n  }\n\n  /** @override */\n  createUTF8Transcoder () {\n    return this\n  }\n}\n\nexports.BufferFormat = BufferFormat\nexports.ViewFormat = ViewFormat\nexports.UTF8Format = UTF8Format\n\n/**\n * @typedef {import('./encoding').IEncoding<TIn,TFormat,TOut>} IEncoding\n * @template TIn, TFormat, TOut\n */\n", "'use strict'\n\nconst { Buffer } = require('buffer') || { Buffer: { isBuffer: () => false } }\nconst { textEncoder, textDecoder } = require('./text-endec')()\nconst { BufferFormat, ViewFormat, UTF8Format } = require('./formats')\n\n/** @type {<T>(v: T) => v} */\nconst identity = (v) => v\n\n/**\n * @type {typeof import('./encodings').utf8}\n */\nexports.utf8 = new UTF8Format({\n  encode: function (data) {\n    // On node 16.9.1 buffer.toString() is 5x faster than TextDecoder\n    return Buffer.isBuffer(data)\n      ? data.toString('utf8')\n      : ArrayBuffer.isView(data)\n        ? textDecoder.decode(data)\n        : String(data)\n  },\n  decode: identity,\n  name: 'utf8',\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: function (data) {\n        return ArrayBuffer.isView(data) ? data : textEncoder.encode(data)\n      },\n      decode: function (data) {\n        return textDecoder.decode(data)\n      },\n      name: `${this.name}+view`\n    })\n  },\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: function (data) {\n        return Buffer.isBuffer(data)\n          ? data\n          : ArrayBuffer.isView(data)\n            ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n            : Buffer.from(String(data), 'utf8')\n      },\n      decode: function (data) {\n        return data.toString('utf8')\n      },\n      name: `${this.name}+buffer`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').json}\n */\nexports.json = new UTF8Format({\n  encode: JSON.stringify,\n  decode: JSON.parse,\n  name: 'json'\n})\n\n/**\n * @type {typeof import('./encodings').buffer}\n */\nexports.buffer = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data)\n      ? data\n      : ArrayBuffer.isView(data)\n        ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n        : Buffer.from(String(data), 'utf8')\n  },\n  decode: identity,\n  name: 'buffer',\n  createViewTranscoder () {\n    return new ViewFormat({\n      encode: function (data) {\n        return ArrayBuffer.isView(data) ? data : Buffer.from(String(data), 'utf8')\n      },\n      decode: function (data) {\n        return Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n      },\n      name: `${this.name}+view`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').view}\n */\nexports.view = new ViewFormat({\n  encode: function (data) {\n    return ArrayBuffer.isView(data) ? data : textEncoder.encode(data)\n  },\n  decode: identity,\n  name: 'view',\n  createBufferTranscoder () {\n    return new BufferFormat({\n      encode: function (data) {\n        return Buffer.isBuffer(data)\n          ? data\n          : ArrayBuffer.isView(data)\n            ? Buffer.from(data.buffer, data.byteOffset, data.byteLength)\n            : Buffer.from(String(data), 'utf8')\n      },\n      decode: identity,\n      name: `${this.name}+buffer`\n    })\n  }\n})\n\n/**\n * @type {typeof import('./encodings').hex}\n */\nexports.hex = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data) ? data : Buffer.from(String(data), 'hex')\n  },\n  decode: function (buffer) {\n    return buffer.toString('hex')\n  },\n  name: 'hex'\n})\n\n/**\n * @type {typeof import('./encodings').base64}\n */\nexports.base64 = new BufferFormat({\n  encode: function (data) {\n    return Buffer.isBuffer(data) ? data : Buffer.from(String(data), 'base64')\n  },\n  decode: function (buffer) {\n    return buffer.toString('base64')\n  },\n  name: 'base64'\n})\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst encodings = require('./lib/encodings')\nconst { Encoding } = require('./lib/encoding')\nconst { BufferFormat, ViewFormat, UTF8Format } = require('./lib/formats')\n\nconst kFormats = Symbol('formats')\nconst kEncodings = Symbol('encodings')\nconst validFormats = new Set(['buffer', 'view', 'utf8'])\n\n/** @template T */\nclass Transcoder {\n  /**\n   * @param {Array<'buffer'|'view'|'utf8'>} formats\n   */\n  constructor (formats) {\n    if (!Array.isArray(formats)) {\n      throw new TypeError(\"The first argument 'formats' must be an array\")\n    } else if (!formats.every(f => validFormats.has(f))) {\n      // Note: we only only support aliases in key- and valueEncoding options (where we already did)\n      throw new TypeError(\"Format must be one of 'buffer', 'view', 'utf8'\")\n    }\n\n    /** @type {Map<string|MixedEncoding<any, any, any>, Encoding<any, any, any>>} */\n    this[kEncodings] = new Map()\n    this[kFormats] = new Set(formats)\n\n    // Register encodings (done early in order to populate encodings())\n    for (const k in encodings) {\n      try {\n        this.encoding(k)\n      } catch (err) {\n        /* istanbul ignore if: assertion */\n        if (err.code !== 'LEVEL_ENCODING_NOT_SUPPORTED') throw err\n      }\n    }\n  }\n\n  /**\n   * @returns {Array<Encoding<any,T,any>>}\n   */\n  encodings () {\n    return Array.from(new Set(this[kEncodings].values()))\n  }\n\n  /**\n   * @param {string|MixedEncoding<any, any, any>} encoding\n   * @returns {Encoding<any, T, any>}\n   */\n  encoding (encoding) {\n    let resolved = this[kEncodings].get(encoding)\n\n    if (resolved === undefined) {\n      if (typeof encoding === 'string' && encoding !== '') {\n        resolved = lookup[encoding]\n\n        if (!resolved) {\n          throw new ModuleError(`Encoding '${encoding}' is not found`, {\n            code: 'LEVEL_ENCODING_NOT_FOUND'\n          })\n        }\n      } else if (typeof encoding !== 'object' || encoding === null) {\n        throw new TypeError(\"First argument 'encoding' must be a string or object\")\n      } else {\n        resolved = from(encoding)\n      }\n\n      const { name, format } = resolved\n\n      if (!this[kFormats].has(format)) {\n        if (this[kFormats].has('view')) {\n          resolved = resolved.createViewTranscoder()\n        } else if (this[kFormats].has('buffer')) {\n          resolved = resolved.createBufferTranscoder()\n        } else if (this[kFormats].has('utf8')) {\n          resolved = resolved.createUTF8Transcoder()\n        } else {\n          throw new ModuleError(`Encoding '${name}' cannot be transcoded`, {\n            code: 'LEVEL_ENCODING_NOT_SUPPORTED'\n          })\n        }\n      }\n\n      for (const k of [encoding, name, resolved.name, resolved.commonName]) {\n        this[kEncodings].set(k, resolved)\n      }\n    }\n\n    return resolved\n  }\n}\n\nexports.Transcoder = Transcoder\n\n/**\n * @param {MixedEncoding<any, any, any>} options\n * @returns {Encoding<any, any, any>}\n */\nfunction from (options) {\n  if (options instanceof Encoding) {\n    return options\n  }\n\n  // Loosely typed for ecosystem compatibility\n  const maybeType = 'type' in options && typeof options.type === 'string' ? options.type : undefined\n  const name = options.name || maybeType || `anonymous-${anonymousCount++}`\n\n  switch (detectFormat(options)) {\n    case 'view': return new ViewFormat({ ...options, name })\n    case 'utf8': return new UTF8Format({ ...options, name })\n    case 'buffer': return new BufferFormat({ ...options, name })\n    default: {\n      throw new TypeError(\"Format must be one of 'buffer', 'view', 'utf8'\")\n    }\n  }\n}\n\n/**\n * If format is not provided, fallback to detecting `level-codec`\n * or `multiformats` encodings, else assume a format of buffer.\n * @param {MixedEncoding<any, any, any>} options\n * @returns {string}\n */\nfunction detectFormat (options) {\n  if ('format' in options && options.format !== undefined) {\n    return options.format\n  } else if ('buffer' in options && typeof options.buffer === 'boolean') {\n    return options.buffer ? 'buffer' : 'utf8' // level-codec\n  } else if ('code' in options && Number.isInteger(options.code)) {\n    return 'view' // multiformats\n  } else {\n    return 'buffer'\n  }\n}\n\n/**\n * @typedef {import('./lib/encoding').MixedEncoding<TIn,TFormat,TOut>} MixedEncoding\n * @template TIn, TFormat, TOut\n */\n\n/**\n * @type {Object.<string, Encoding<any, any, any>>}\n */\nconst aliases = {\n  binary: encodings.buffer,\n  'utf-8': encodings.utf8\n}\n\n/**\n * @type {Object.<string, Encoding<any, any, any>>}\n */\nconst lookup = {\n  ...encodings,\n  ...aliases\n}\n\nlet anonymousCount = 0\n", "module.exports = typeof queueMicrotask === 'function' ? queueMicrotask : (fn) => Promise.resolve().then(fn)\n", "'use strict'\n\nvar nextTick = require('./next-tick')\n\nexports.fromCallback = function (callback, symbol) {\n  if (callback === undefined) {\n    var promise = new Promise(function (resolve, reject) {\n      callback = function (err, res) {\n        if (err) reject(err)\n        else resolve(res)\n      }\n    })\n\n    callback[symbol !== undefined ? symbol : 'promise'] = promise\n  } else if (typeof callback !== 'function') {\n    throw new TypeError('Callback must be a function')\n  }\n\n  return callback\n}\n\nexports.fromPromise = function (promise, callback) {\n  if (callback === undefined) return promise\n\n  promise\n    .then(function (res) { nextTick(() => callback(null, res)) })\n    .catch(function (err) { nextTick(() => callback(err)) })\n}\n", "'use strict'\n\nexports.getCallback = function (options, callback) {\n  return typeof options === 'function' ? options : callback\n}\n\nexports.getOptions = function (options, def) {\n  if (typeof options === 'object' && options !== null) {\n    return options\n  }\n\n  if (def !== undefined) {\n    return def\n  }\n\n  return {}\n}\n", "'use strict'\n\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { getOptions, getCallback } = require('./lib/common')\n\nconst kPromise = Symbol('promise')\nconst kCallback = Symbol('callback')\nconst kWorking = Symbol('working')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\nconst kAutoClose = Symbol('autoClose')\nconst kFinishWork = Symbol('finishWork')\nconst kReturnMany = Symbol('returnMany')\nconst kClosing = Symbol('closing')\nconst kHandleClose = Symbol('handleClose')\nconst kClosed = Symbol('closed')\nconst kCloseCallbacks = Symbol('closeCallbacks')\nconst kKeyEncoding = Symbol('keyEncoding')\nconst kValueEncoding = Symbol('valueEncoding')\nconst kAbortOnClose = Symbol('abortOnClose')\nconst kLegacy = Symbol('legacy')\nconst kKeys = Symbol('keys')\nconst kValues = Symbol('values')\nconst kLimit = Symbol('limit')\nconst kCount = Symbol('count')\n\nconst emptyOptions = Object.freeze({})\nconst noop = () => {}\nlet warnedEnd = false\n\n// This class is an internal utility for common functionality between AbstractIterator,\n// AbstractKeyIterator and AbstractValueIterator. It's not exported.\nclass CommonIterator {\n  constructor (db, options, legacy) {\n    if (typeof db !== 'object' || db === null) {\n      const hint = db === null ? 'null' : typeof db\n      throw new TypeError(`The first argument must be an abstract-level database, received ${hint}`)\n    }\n\n    if (typeof options !== 'object' || options === null) {\n      throw new TypeError('The second argument must be an options object')\n    }\n\n    this[kClosed] = false\n    this[kCloseCallbacks] = []\n    this[kWorking] = false\n    this[kClosing] = false\n    this[kAutoClose] = false\n    this[kCallback] = null\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kHandleClose] = this[kHandleClose].bind(this)\n    this[kKeyEncoding] = options[kKeyEncoding]\n    this[kValueEncoding] = options[kValueEncoding]\n    this[kLegacy] = legacy\n    this[kLimit] = Number.isInteger(options.limit) && options.limit >= 0 ? options.limit : Infinity\n    this[kCount] = 0\n\n    // Undocumented option to abort pending work on close(). Used by the\n    // many-level module as a temporary solution to a blocked close().\n    // TODO (next major): consider making this the default behavior. Native\n    // implementations should have their own logic to safely close iterators.\n    this[kAbortOnClose] = !!options.abortOnClose\n\n    this.db = db\n    this.db.attachResource(this)\n    this.nextTick = db.nextTick\n  }\n\n  get count () {\n    return this[kCount]\n  }\n\n  get limit () {\n    return this[kLimit]\n  }\n\n  next (callback) {\n    let promise\n\n    if (callback === undefined) {\n      promise = new Promise((resolve, reject) => {\n        callback = (err, key, value) => {\n          if (err) reject(err)\n          else if (!this[kLegacy]) resolve(key)\n          else if (key === undefined && value === undefined) resolve()\n          else resolve([key, value])\n        }\n      })\n    } else if (typeof callback !== 'function') {\n      throw new TypeError('Callback must be a function')\n    }\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call next() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call next() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      this[kWorking] = true\n      this[kCallback] = callback\n\n      if (this[kCount] >= this[kLimit]) this.nextTick(this[kHandleOne], null)\n      else this._next(this[kHandleOne])\n    }\n\n    return promise\n  }\n\n  _next (callback) {\n    this.nextTick(callback)\n  }\n\n  nextv (size, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, emptyOptions)\n\n    if (!Number.isInteger(size)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'size' must be an integer\"))\n      return callback[kPromise]\n    }\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call nextv() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call nextv() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      if (size < 1) size = 1\n      if (this[kLimit] < Infinity) size = Math.min(size, this[kLimit] - this[kCount])\n\n      this[kWorking] = true\n      this[kCallback] = callback\n\n      if (size <= 0) this.nextTick(this[kHandleMany], null, [])\n      else this._nextv(size, options, this[kHandleMany])\n    }\n\n    return callback[kPromise]\n  }\n\n  _nextv (size, options, callback) {\n    const acc = []\n    const onnext = (err, key, value) => {\n      if (err) {\n        return callback(err)\n      } else if (this[kLegacy] ? key === undefined && value === undefined : key === undefined) {\n        return callback(null, acc)\n      }\n\n      acc.push(this[kLegacy] ? [key, value] : key)\n\n      if (acc.length === size) {\n        callback(null, acc)\n      } else {\n        this._next(onnext)\n      }\n    }\n\n    this._next(onnext)\n  }\n\n  all (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, emptyOptions)\n\n    if (this[kClosing]) {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call all() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    } else if (this[kWorking]) {\n      this.nextTick(callback, new ModuleError('Iterator is busy: cannot call all() until previous call has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      }))\n    } else {\n      this[kWorking] = true\n      this[kCallback] = callback\n      this[kAutoClose] = true\n\n      if (this[kCount] >= this[kLimit]) this.nextTick(this[kHandleMany], null, [])\n      else this._all(options, this[kHandleMany])\n    }\n\n    return callback[kPromise]\n  }\n\n  _all (options, callback) {\n    // Must count here because we're directly calling _nextv()\n    let count = this[kCount]\n    const acc = []\n\n    const nextv = () => {\n      // Not configurable, because implementations should optimize _all().\n      const size = this[kLimit] < Infinity ? Math.min(1e3, this[kLimit] - count) : 1e3\n\n      if (size <= 0) {\n        this.nextTick(callback, null, acc)\n      } else {\n        this._nextv(size, emptyOptions, onnextv)\n      }\n    }\n\n    const onnextv = (err, items) => {\n      if (err) {\n        callback(err)\n      } else if (items.length === 0) {\n        callback(null, acc)\n      } else {\n        acc.push.apply(acc, items)\n        count += items.length\n        nextv()\n      }\n    }\n\n    nextv()\n  }\n\n  [kFinishWork] () {\n    const cb = this[kCallback]\n\n    // Callback will be null if work was aborted on close\n    if (this[kAbortOnClose] && cb === null) return noop\n\n    this[kWorking] = false\n    this[kCallback] = null\n\n    if (this[kClosing]) this._close(this[kHandleClose])\n\n    return cb\n  }\n\n  [kReturnMany] (cb, err, items) {\n    if (this[kAutoClose]) {\n      this.close(cb.bind(null, err, items))\n    } else {\n      cb(err, items)\n    }\n  }\n\n  seek (target, options) {\n    options = getOptions(options, emptyOptions)\n\n    if (this[kClosing]) {\n      // Don't throw here, to be kind to implementations that wrap\n      // another db and don't necessarily control when the db is closed\n    } else if (this[kWorking]) {\n      throw new ModuleError('Iterator is busy: cannot call seek() until next() has completed', {\n        code: 'LEVEL_ITERATOR_BUSY'\n      })\n    } else {\n      const keyEncoding = this.db.keyEncoding(options.keyEncoding || this[kKeyEncoding])\n      const keyFormat = keyEncoding.format\n\n      if (options.keyEncoding !== keyFormat) {\n        options = { ...options, keyEncoding: keyFormat }\n      }\n\n      const mapped = this.db.prefixKey(keyEncoding.encode(target), keyFormat)\n      this._seek(mapped, options)\n    }\n  }\n\n  _seek (target, options) {\n    throw new ModuleError('Iterator does not support seek()', {\n      code: 'LEVEL_NOT_SUPPORTED'\n    })\n  }\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    if (this[kClosed]) {\n      this.nextTick(callback)\n    } else if (this[kClosing]) {\n      this[kCloseCallbacks].push(callback)\n    } else {\n      this[kClosing] = true\n      this[kCloseCallbacks].push(callback)\n\n      if (!this[kWorking]) {\n        this._close(this[kHandleClose])\n      } else if (this[kAbortOnClose]) {\n        // Don't wait for work to finish. Subsequently ignore the result.\n        const cb = this[kFinishWork]()\n\n        cb(new ModuleError('Aborted on iterator close()', {\n          code: 'LEVEL_ITERATOR_NOT_OPEN'\n        }))\n      }\n    }\n\n    return callback[kPromise]\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  [kHandleClose] () {\n    this[kClosed] = true\n    this.db.detachResource(this)\n\n    const callbacks = this[kCloseCallbacks]\n    this[kCloseCallbacks] = []\n\n    for (const cb of callbacks) {\n      cb()\n    }\n  }\n\n  async * [Symbol.asyncIterator] () {\n    try {\n      let item\n\n      while ((item = (await this.next())) !== undefined) {\n        yield item\n      }\n    } finally {\n      if (!this[kClosed]) await this.close()\n    }\n  }\n}\n\n// For backwards compatibility this class is not (yet) called AbstractEntryIterator.\nclass AbstractIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, true)\n    this[kKeys] = options.keys !== false\n    this[kValues] = options.values !== false\n  }\n\n  [kHandleOne] (err, key, value) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      key = this[kKeys] && key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n      value = this[kValues] && value !== undefined ? this[kValueEncoding].decode(value) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('entry', err))\n    }\n\n    if (!(key === undefined && value === undefined)) {\n      this[kCount]++\n    }\n\n    cb(null, key, value)\n  }\n\n  [kHandleMany] (err, entries) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (const entry of entries) {\n        const key = entry[0]\n        const value = entry[1]\n\n        entry[0] = this[kKeys] && key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n        entry[1] = this[kValues] && value !== undefined ? this[kValueEncoding].decode(value) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('entries', err))\n    }\n\n    this[kCount] += entries.length\n    this[kReturnMany](cb, null, entries)\n  }\n\n  end (callback) {\n    if (!warnedEnd && typeof console !== 'undefined') {\n      warnedEnd = true\n      console.warn(new ModuleError(\n        'The iterator.end() method was renamed to close() and end() is an alias that will be removed in a future version',\n        { code: 'LEVEL_LEGACY' }\n      ))\n    }\n\n    return this.close(callback)\n  }\n}\n\nclass AbstractKeyIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, false)\n  }\n\n  [kHandleOne] (err, key) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      key = key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('key', err))\n    }\n\n    if (key !== undefined) this[kCount]++\n    cb(null, key)\n  }\n\n  [kHandleMany] (err, keys) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (let i = 0; i < keys.length; i++) {\n        const key = keys[i]\n        keys[i] = key !== undefined ? this[kKeyEncoding].decode(key) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('keys', err))\n    }\n\n    this[kCount] += keys.length\n    this[kReturnMany](cb, null, keys)\n  }\n}\n\nclass AbstractValueIterator extends CommonIterator {\n  constructor (db, options) {\n    super(db, options, false)\n  }\n\n  [kHandleOne] (err, value) {\n    const cb = this[kFinishWork]()\n    if (err) return cb(err)\n\n    try {\n      value = value !== undefined ? this[kValueEncoding].decode(value) : undefined\n    } catch (err) {\n      return cb(new IteratorDecodeError('value', err))\n    }\n\n    if (value !== undefined) this[kCount]++\n    cb(null, value)\n  }\n\n  [kHandleMany] (err, values) {\n    const cb = this[kFinishWork]()\n    if (err) return this[kReturnMany](cb, err)\n\n    try {\n      for (let i = 0; i < values.length; i++) {\n        const value = values[i]\n        values[i] = value !== undefined ? this[kValueEncoding].decode(value) : undefined\n      }\n    } catch (err) {\n      return this[kReturnMany](cb, new IteratorDecodeError('values', err))\n    }\n\n    this[kCount] += values.length\n    this[kReturnMany](cb, null, values)\n  }\n}\n\n// Internal utility, not typed or exported\nclass IteratorDecodeError extends ModuleError {\n  constructor (subject, cause) {\n    super(`Iterator could not decode ${subject}`, {\n      code: 'LEVEL_DECODE_ERROR',\n      cause\n    })\n  }\n}\n\n// To help migrating to abstract-level\nfor (const k of ['_ended property', '_nexting property', '_end method']) {\n  Object.defineProperty(AbstractIterator.prototype, k.split(' ')[0], {\n    get () { throw new ModuleError(`The ${k} has been removed`, { code: 'LEVEL_LEGACY' }) },\n    set () { throw new ModuleError(`The ${k} has been removed`, { code: 'LEVEL_LEGACY' }) }\n  })\n}\n\n// Exposed so that AbstractLevel can set these options\nAbstractIterator.keyEncoding = kKeyEncoding\nAbstractIterator.valueEncoding = kValueEncoding\n\nexports.AbstractIterator = AbstractIterator\nexports.AbstractKeyIterator = AbstractKeyIterator\nexports.AbstractValueIterator = AbstractValueIterator\n", "'use strict'\n\nconst { AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\n\nconst kIterator = Symbol('iterator')\nconst kCallback = Symbol('callback')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\n\nclass DefaultKeyIterator extends AbstractKeyIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kIterator] = db.iterator({ ...options, keys: true, values: false })\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n  }\n}\n\nclass DefaultValueIterator extends AbstractValueIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kIterator] = db.iterator({ ...options, keys: false, values: true })\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n  }\n}\n\nfor (const Iterator of [DefaultKeyIterator, DefaultValueIterator]) {\n  const keys = Iterator === DefaultKeyIterator\n  const mapEntry = keys ? (entry) => entry[0] : (entry) => entry[1]\n\n  Iterator.prototype._next = function (callback) {\n    this[kCallback] = callback\n    this[kIterator].next(this[kHandleOne])\n  }\n\n  Iterator.prototype[kHandleOne] = function (err, key, value) {\n    const callback = this[kCallback]\n    if (err) callback(err)\n    else callback(null, keys ? key : value)\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kCallback] = callback\n    this[kIterator].nextv(size, options, this[kHandleMany])\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kCallback] = callback\n    this[kIterator].all(options, this[kHandleMany])\n  }\n\n  Iterator.prototype[kHandleMany] = function (err, entries) {\n    const callback = this[kCallback]\n    if (err) callback(err)\n    else callback(null, entries.map(mapEntry))\n  }\n\n  Iterator.prototype._seek = function (target, options) {\n    this[kIterator].seek(target, options)\n  }\n\n  Iterator.prototype._close = function (callback) {\n    this[kIterator].close(callback)\n  }\n}\n\n// Internal utilities, should be typed as AbstractKeyIterator and AbstractValueIterator\nexports.DefaultKeyIterator = DefaultKeyIterator\nexports.DefaultValueIterator = DefaultValueIterator\n", "'use strict'\n\nconst { AbstractIterator, AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\nconst ModuleError = require('module-error')\n\nconst kNut = Symbol('nut')\nconst kUndefer = Symbol('undefer')\nconst kFactory = Symbol('factory')\n\nclass DeferredIterator extends AbstractIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.iterator(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nclass DeferredKeyIterator extends AbstractKeyIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.keys(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nclass DeferredValueIterator extends AbstractValueIterator {\n  constructor (db, options) {\n    super(db, options)\n\n    this[kNut] = null\n    this[kFactory] = () => db.values(options)\n\n    this.db.defer(() => this[kUndefer]())\n  }\n}\n\nfor (const Iterator of [DeferredIterator, DeferredKeyIterator, DeferredValueIterator]) {\n  Iterator.prototype[kUndefer] = function () {\n    if (this.db.status === 'open') {\n      this[kNut] = this[kFactory]()\n    }\n  }\n\n  Iterator.prototype._next = function (callback) {\n    if (this[kNut] !== null) {\n      this[kNut].next(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._next(callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call next() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    if (this[kNut] !== null) {\n      this[kNut].nextv(size, options, callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._nextv(size, options, callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call nextv() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    if (this[kNut] !== null) {\n      this[kNut].all(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._all(options, callback))\n    } else {\n      this.nextTick(callback, new ModuleError('Iterator is not open: cannot call all() after close()', {\n        code: 'LEVEL_ITERATOR_NOT_OPEN'\n      }))\n    }\n  }\n\n  Iterator.prototype._seek = function (target, options) {\n    if (this[kNut] !== null) {\n      // TODO: explain why we need _seek() rather than seek() here\n      this[kNut]._seek(target, options)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._seek(target, options))\n    }\n  }\n\n  Iterator.prototype._close = function (callback) {\n    if (this[kNut] !== null) {\n      this[kNut].close(callback)\n    } else if (this.db.status === 'opening') {\n      this.db.defer(() => this._close(callback))\n    } else {\n      this.nextTick(callback)\n    }\n  }\n}\n\nexports.DeferredIterator = DeferredIterator\nexports.DeferredKeyIterator = DeferredKeyIterator\nexports.DeferredValueIterator = DeferredValueIterator\n", "'use strict'\n\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { getCallback, getOptions } = require('./lib/common')\n\nconst kPromise = Symbol('promise')\nconst kStatus = Symbol('status')\nconst kOperations = Symbol('operations')\nconst kFinishClose = Symbol('finishClose')\nconst kCloseCallbacks = Symbol('closeCallbacks')\n\nclass AbstractChainedBatch {\n  constructor (db) {\n    if (typeof db !== 'object' || db === null) {\n      const hint = db === null ? 'null' : typeof db\n      throw new TypeError(`The first argument must be an abstract-level database, received ${hint}`)\n    }\n\n    this[kOperations] = []\n    this[kCloseCallbacks] = []\n    this[kStatus] = 'open'\n    this[kFinishClose] = this[kFinishClose].bind(this)\n\n    this.db = db\n    this.db.attachResource(this)\n    this.nextTick = db.nextTick\n  }\n\n  get length () {\n    return this[kOperations].length\n  }\n\n  put (key, value, options) {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call put() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    const err = this.db._checkKey(key) || this.db._checkValue(value)\n    if (err) throw err\n\n    const db = options && options.sublevel != null ? options.sublevel : this.db\n    const original = options\n    const keyEncoding = db.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = db.valueEncoding(options && options.valueEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    options = { ...options, keyEncoding: keyFormat, valueEncoding: valueEncoding.format }\n\n    // Prevent double prefixing\n    if (db !== this.db) {\n      options.sublevel = null\n    }\n\n    const mappedKey = db.prefixKey(keyEncoding.encode(key), keyFormat)\n    const mappedValue = valueEncoding.encode(value)\n\n    this._put(mappedKey, mappedValue, options)\n    this[kOperations].push({ ...original, type: 'put', key, value })\n\n    return this\n  }\n\n  _put (key, value, options) {}\n\n  del (key, options) {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call del() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    const err = this.db._checkKey(key)\n    if (err) throw err\n\n    const db = options && options.sublevel != null ? options.sublevel : this.db\n    const original = options\n    const keyEncoding = db.keyEncoding(options && options.keyEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    options = { ...options, keyEncoding: keyFormat }\n\n    // Prevent double prefixing\n    if (db !== this.db) {\n      options.sublevel = null\n    }\n\n    this._del(db.prefixKey(keyEncoding.encode(key), keyFormat), options)\n    this[kOperations].push({ ...original, type: 'del', key })\n\n    return this\n  }\n\n  _del (key, options) {}\n\n  clear () {\n    if (this[kStatus] !== 'open') {\n      throw new ModuleError('Batch is not open: cannot call clear() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      })\n    }\n\n    this._clear()\n    this[kOperations] = []\n\n    return this\n  }\n\n  _clear () {}\n\n  write (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options)\n\n    if (this[kStatus] !== 'open') {\n      this.nextTick(callback, new ModuleError('Batch is not open: cannot call write() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      }))\n    } else if (this.length === 0) {\n      this.close(callback)\n    } else {\n      this[kStatus] = 'writing'\n      this._write(options, (err) => {\n        this[kStatus] = 'closing'\n        this[kCloseCallbacks].push(() => callback(err))\n\n        // Emit after setting 'closing' status, because event may trigger a\n        // db close which in turn triggers (idempotently) closing this batch.\n        if (!err) this.db.emit('batch', this[kOperations])\n\n        this._close(this[kFinishClose])\n      })\n    }\n\n    return callback[kPromise]\n  }\n\n  _write (options, callback) {}\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    if (this[kStatus] === 'closing') {\n      this[kCloseCallbacks].push(callback)\n    } else if (this[kStatus] === 'closed') {\n      this.nextTick(callback)\n    } else {\n      this[kCloseCallbacks].push(callback)\n\n      if (this[kStatus] !== 'writing') {\n        this[kStatus] = 'closing'\n        this._close(this[kFinishClose])\n      }\n    }\n\n    return callback[kPromise]\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  [kFinishClose] () {\n    this[kStatus] = 'closed'\n    this.db.detachResource(this)\n\n    const callbacks = this[kCloseCallbacks]\n    this[kCloseCallbacks] = []\n\n    for (const cb of callbacks) {\n      cb()\n    }\n  }\n}\n\nexports.AbstractChainedBatch = AbstractChainedBatch\n", "'use strict'\n\nconst { AbstractChainedBatch } = require('../abstract-chained-batch')\nconst ModuleError = require('module-error')\nconst kEncoded = Symbol('encoded')\n\n// Functional default for chained batch, with support of deferred open\nclass DefaultChainedBatch extends AbstractChainedBatch {\n  constructor (db) {\n    super(db)\n    this[kEncoded] = []\n  }\n\n  _put (key, value, options) {\n    this[kEncoded].push({ ...options, type: 'put', key, value })\n  }\n\n  _del (key, options) {\n    this[kEncoded].push({ ...options, type: 'del', key })\n  }\n\n  _clear () {\n    this[kEncoded] = []\n  }\n\n  // Assumes this[kEncoded] cannot change after write()\n  _write (options, callback) {\n    if (this.db.status === 'opening') {\n      this.db.defer(() => this._write(options, callback))\n    } else if (this.db.status === 'open') {\n      if (this[kEncoded].length === 0) this.nextTick(callback)\n      else this.db._batch(this[kEncoded], options, callback)\n    } else {\n      this.nextTick(callback, new ModuleError('Batch is not open: cannot call write() after write() or close()', {\n        code: 'LEVEL_BATCH_NOT_OPEN'\n      }))\n    }\n  }\n}\n\nexports.DefaultChainedBatch = DefaultChainedBatch\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst hasOwnProperty = Object.prototype.hasOwnProperty\nconst rangeOptions = new Set(['lt', 'lte', 'gt', 'gte'])\n\nmodule.exports = function (options, keyEncoding) {\n  const result = {}\n\n  for (const k in options) {\n    if (!hasOwnProperty.call(options, k)) continue\n    if (k === 'keyEncoding' || k === 'valueEncoding') continue\n\n    if (k === 'start' || k === 'end') {\n      throw new ModuleError(`The legacy range option '${k}' has been removed`, {\n        code: 'LEVEL_LEGACY'\n      })\n    } else if (k === 'encoding') {\n      // To help migrating to abstract-level\n      throw new ModuleError(\"The levelup-style 'encoding' alias has been removed, use 'valueEncoding' instead\", {\n        code: 'LEVEL_LEGACY'\n      })\n    }\n\n    if (rangeOptions.has(k)) {\n      // Note that we don't reject nullish and empty options here. While\n      // those types are invalid as keys, they are valid as range options.\n      result[k] = keyEncoding.encode(options[k])\n    } else {\n      result[k] = options[k]\n    }\n  }\n\n  result.reverse = !!result.reverse\n  result.limit = Number.isInteger(result.limit) && result.limit >= 0 ? result.limit : -1\n\n  return result\n}\n", "/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n", "'use strict'\n\nconst queueMicrotask = require('queue-microtask')\n\nmodule.exports = function (fn, ...args) {\n  if (args.length === 0) {\n    queueMicrotask(fn)\n  } else {\n    queueMicrotask(() => fn(...args))\n  }\n}\n", "'use strict'\n\nconst { AbstractIterator, AbstractKeyIterator, AbstractValueIterator } = require('../abstract-iterator')\n\nconst kUnfix = Symbol('unfix')\nconst kIterator = Symbol('iterator')\nconst kHandleOne = Symbol('handleOne')\nconst kHandleMany = Symbol('handleMany')\nconst kCallback = Symbol('callback')\n\n// TODO: unfix natively if db supports it\nclass AbstractSublevelIterator extends AbstractIterator {\n  constructor (db, options, iterator, unfix) {\n    super(db, options)\n\n    this[kIterator] = iterator\n    this[kUnfix] = unfix\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kCallback] = null\n  }\n\n  [kHandleOne] (err, key, value) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n    if (key !== undefined) key = this[kUnfix](key)\n    callback(err, key, value)\n  }\n\n  [kHandleMany] (err, entries) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n\n    for (const entry of entries) {\n      const key = entry[0]\n      if (key !== undefined) entry[0] = this[kUnfix](key)\n    }\n\n    callback(err, entries)\n  }\n}\n\nclass AbstractSublevelKeyIterator extends AbstractKeyIterator {\n  constructor (db, options, iterator, unfix) {\n    super(db, options)\n\n    this[kIterator] = iterator\n    this[kUnfix] = unfix\n    this[kHandleOne] = this[kHandleOne].bind(this)\n    this[kHandleMany] = this[kHandleMany].bind(this)\n    this[kCallback] = null\n  }\n\n  [kHandleOne] (err, key) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n    if (key !== undefined) key = this[kUnfix](key)\n    callback(err, key)\n  }\n\n  [kHandleMany] (err, keys) {\n    const callback = this[kCallback]\n    if (err) return callback(err)\n\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i]\n      if (key !== undefined) keys[i] = this[kUnfix](key)\n    }\n\n    callback(err, keys)\n  }\n}\n\nclass AbstractSublevelValueIterator extends AbstractValueIterator {\n  constructor (db, options, iterator) {\n    super(db, options)\n    this[kIterator] = iterator\n  }\n}\n\nfor (const Iterator of [AbstractSublevelIterator, AbstractSublevelKeyIterator]) {\n  Iterator.prototype._next = function (callback) {\n    this[kCallback] = callback\n    this[kIterator].next(this[kHandleOne])\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kCallback] = callback\n    this[kIterator].nextv(size, options, this[kHandleMany])\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kCallback] = callback\n    this[kIterator].all(options, this[kHandleMany])\n  }\n}\n\nfor (const Iterator of [AbstractSublevelValueIterator]) {\n  Iterator.prototype._next = function (callback) {\n    this[kIterator].next(callback)\n  }\n\n  Iterator.prototype._nextv = function (size, options, callback) {\n    this[kIterator].nextv(size, options, callback)\n  }\n\n  Iterator.prototype._all = function (options, callback) {\n    this[kIterator].all(options, callback)\n  }\n}\n\nfor (const Iterator of [AbstractSublevelIterator, AbstractSublevelKeyIterator, AbstractSublevelValueIterator]) {\n  Iterator.prototype._seek = function (target, options) {\n    this[kIterator].seek(target, options)\n  }\n\n  Iterator.prototype._close = function (callback) {\n    this[kIterator].close(callback)\n  }\n}\n\nexports.AbstractSublevelIterator = AbstractSublevelIterator\nexports.AbstractSublevelKeyIterator = AbstractSublevelKeyIterator\nexports.AbstractSublevelValueIterator = AbstractSublevelValueIterator\n", "'use strict'\n\nconst ModuleError = require('module-error')\nconst { Buffer } = require('buffer') || {}\nconst {\n  AbstractSublevelIterator,\n  AbstractSublevelKeyIterator,\n  AbstractSublevelValueIterator\n} = require('./abstract-sublevel-iterator')\n\nconst kPrefix = Symbol('prefix')\nconst kUpperBound = Symbol('upperBound')\nconst kPrefixRange = Symbol('prefixRange')\nconst kParent = Symbol('parent')\nconst kUnfix = Symbol('unfix')\n\nconst textEncoder = new TextEncoder()\nconst defaults = { separator: '!' }\n\n// Wrapped to avoid circular dependency\nmodule.exports = function ({ AbstractLevel }) {\n  class AbstractSublevel extends AbstractLevel {\n    static defaults (options) {\n      // To help migrating from subleveldown to abstract-level\n      if (typeof options === 'string') {\n        throw new ModuleError('The subleveldown string shorthand for { separator } has been removed', {\n          code: 'LEVEL_LEGACY'\n        })\n      } else if (options && options.open) {\n        throw new ModuleError('The subleveldown open option has been removed', {\n          code: 'LEVEL_LEGACY'\n        })\n      }\n\n      if (options == null) {\n        return defaults\n      } else if (!options.separator) {\n        return { ...options, separator: '!' }\n      } else {\n        return options\n      }\n    }\n\n    // TODO: add autoClose option, which if true, does parent.attachResource(this)\n    constructor (db, name, options) {\n      // Don't forward AbstractSublevel options to AbstractLevel\n      const { separator, manifest, ...forward } = AbstractSublevel.defaults(options)\n      name = trim(name, separator)\n\n      // Reserve one character between separator and name to give us an upper bound\n      const reserved = separator.charCodeAt(0) + 1\n      const parent = db[kParent] || db\n\n      // Keys should sort like ['!a!', '!a!!a!', '!a\"', '!aa!', '!b!'].\n      // Use ASCII for consistent length between string, Buffer and Uint8Array\n      if (!textEncoder.encode(name).every(x => x > reserved && x < 127)) {\n        throw new ModuleError(`Prefix must use bytes > ${reserved} < ${127}`, {\n          code: 'LEVEL_INVALID_PREFIX'\n        })\n      }\n\n      super(mergeManifests(parent, manifest), forward)\n\n      const prefix = (db.prefix || '') + separator + name + separator\n      const upperBound = prefix.slice(0, -1) + String.fromCharCode(reserved)\n\n      this[kParent] = parent\n      this[kPrefix] = new MultiFormat(prefix)\n      this[kUpperBound] = new MultiFormat(upperBound)\n      this[kUnfix] = new Unfixer()\n\n      this.nextTick = parent.nextTick\n    }\n\n    prefixKey (key, keyFormat) {\n      if (keyFormat === 'utf8') {\n        return this[kPrefix].utf8 + key\n      } else if (key.byteLength === 0) {\n        // Fast path for empty key (no copy)\n        return this[kPrefix][keyFormat]\n      } else if (keyFormat === 'view') {\n        const view = this[kPrefix].view\n        const result = new Uint8Array(view.byteLength + key.byteLength)\n\n        result.set(view, 0)\n        result.set(key, view.byteLength)\n\n        return result\n      } else {\n        const buffer = this[kPrefix].buffer\n        return Buffer.concat([buffer, key], buffer.byteLength + key.byteLength)\n      }\n    }\n\n    // Not exposed for now.\n    [kPrefixRange] (range, keyFormat) {\n      if (range.gte !== undefined) {\n        range.gte = this.prefixKey(range.gte, keyFormat)\n      } else if (range.gt !== undefined) {\n        range.gt = this.prefixKey(range.gt, keyFormat)\n      } else {\n        range.gte = this[kPrefix][keyFormat]\n      }\n\n      if (range.lte !== undefined) {\n        range.lte = this.prefixKey(range.lte, keyFormat)\n      } else if (range.lt !== undefined) {\n        range.lt = this.prefixKey(range.lt, keyFormat)\n      } else {\n        range.lte = this[kUpperBound][keyFormat]\n      }\n    }\n\n    get prefix () {\n      return this[kPrefix].utf8\n    }\n\n    get db () {\n      return this[kParent]\n    }\n\n    _open (options, callback) {\n      // The parent db must open itself or be (re)opened by the user because\n      // a sublevel should not initiate state changes on the rest of the db.\n      this[kParent].open({ passive: true }, callback)\n    }\n\n    _put (key, value, options, callback) {\n      this[kParent].put(key, value, options, callback)\n    }\n\n    _get (key, options, callback) {\n      this[kParent].get(key, options, callback)\n    }\n\n    _getMany (keys, options, callback) {\n      this[kParent].getMany(keys, options, callback)\n    }\n\n    _del (key, options, callback) {\n      this[kParent].del(key, options, callback)\n    }\n\n    _batch (operations, options, callback) {\n      this[kParent].batch(operations, options, callback)\n    }\n\n    _clear (options, callback) {\n      // TODO (refactor): move to AbstractLevel\n      this[kPrefixRange](options, options.keyEncoding)\n      this[kParent].clear(options, callback)\n    }\n\n    _iterator (options) {\n      // TODO (refactor): move to AbstractLevel\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].iterator(options)\n      const unfix = this[kUnfix].get(this[kPrefix].utf8.length, options.keyEncoding)\n      return new AbstractSublevelIterator(this, options, iterator, unfix)\n    }\n\n    _keys (options) {\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].keys(options)\n      const unfix = this[kUnfix].get(this[kPrefix].utf8.length, options.keyEncoding)\n      return new AbstractSublevelKeyIterator(this, options, iterator, unfix)\n    }\n\n    _values (options) {\n      this[kPrefixRange](options, options.keyEncoding)\n      const iterator = this[kParent].values(options)\n      return new AbstractSublevelValueIterator(this, options, iterator)\n    }\n  }\n\n  return { AbstractSublevel }\n}\n\nconst mergeManifests = function (parent, manifest) {\n  return {\n    // Inherit manifest of parent db\n    ...parent.supports,\n\n    // Disable unsupported features\n    createIfMissing: false,\n    errorIfExists: false,\n\n    // Unset additional events because we're not forwarding them\n    events: {},\n\n    // Unset additional methods (like approximateSize) which we can't support here unless\n    // the AbstractSublevel class is overridden by an implementation of `abstract-level`.\n    additionalMethods: {},\n\n    // Inherit manifest of custom AbstractSublevel subclass. Such a class is not\n    // allowed to override encodings.\n    ...manifest,\n\n    encodings: {\n      utf8: supportsEncoding(parent, 'utf8'),\n      buffer: supportsEncoding(parent, 'buffer'),\n      view: supportsEncoding(parent, 'view')\n    }\n  }\n}\n\nconst supportsEncoding = function (parent, encoding) {\n  // Prefer a non-transcoded encoding for optimal performance\n  return parent.supports.encodings[encoding]\n    ? parent.keyEncoding(encoding).name === encoding\n    : false\n}\n\nclass MultiFormat {\n  constructor (key) {\n    this.utf8 = key\n    this.view = textEncoder.encode(key)\n    this.buffer = Buffer ? Buffer.from(this.view.buffer, 0, this.view.byteLength) : {}\n  }\n}\n\nclass Unfixer {\n  constructor () {\n    this.cache = new Map()\n  }\n\n  get (prefixLength, keyFormat) {\n    let unfix = this.cache.get(keyFormat)\n\n    if (unfix === undefined) {\n      if (keyFormat === 'view') {\n        unfix = function (prefixLength, key) {\n          // Avoid Uint8Array#slice() because it copies\n          return key.subarray(prefixLength)\n        }.bind(null, prefixLength)\n      } else {\n        unfix = function (prefixLength, key) {\n          // Avoid Buffer#subarray() because it's slow\n          return key.slice(prefixLength)\n        }.bind(null, prefixLength)\n      }\n\n      this.cache.set(keyFormat, unfix)\n    }\n\n    return unfix\n  }\n}\n\nconst trim = function (str, char) {\n  let start = 0\n  let end = str.length\n\n  while (start < end && str[start] === char) start++\n  while (end > start && str[end - 1] === char) end--\n\n  return str.slice(start, end)\n}\n", "'use strict'\n\nconst { supports } = require('level-supports')\nconst { Transcoder } = require('level-transcoder')\nconst { EventEmitter } = require('events')\nconst { fromCallback } = require('catering')\nconst ModuleError = require('module-error')\nconst { AbstractIterator } = require('./abstract-iterator')\nconst { DefaultKeyIterator, DefaultValueIterator } = require('./lib/default-kv-iterator')\nconst { DeferredIterator, DeferredKeyIterator, DeferredValueIterator } = require('./lib/deferred-iterator')\nconst { DefaultChainedBatch } = require('./lib/default-chained-batch')\nconst { getCallback, getOptions } = require('./lib/common')\nconst rangeOptions = require('./lib/range-options')\n\nconst kPromise = Symbol('promise')\nconst kLanded = Symbol('landed')\nconst kResources = Symbol('resources')\nconst kCloseResources = Symbol('closeResources')\nconst kOperations = Symbol('operations')\nconst kUndefer = Symbol('undefer')\nconst kDeferOpen = Symbol('deferOpen')\nconst kOptions = Symbol('options')\nconst kStatus = Symbol('status')\nconst kDefaultOptions = Symbol('defaultOptions')\nconst kTranscoder = Symbol('transcoder')\nconst kKeyEncoding = Symbol('keyEncoding')\nconst kValueEncoding = Symbol('valueEncoding')\nconst noop = () => {}\n\nclass AbstractLevel extends EventEmitter {\n  constructor (manifest, options) {\n    super()\n\n    if (typeof manifest !== 'object' || manifest === null) {\n      throw new TypeError(\"The first argument 'manifest' must be an object\")\n    }\n\n    options = getOptions(options)\n    const { keyEncoding, valueEncoding, passive, ...forward } = options\n\n    this[kResources] = new Set()\n    this[kOperations] = []\n    this[kDeferOpen] = true\n    this[kOptions] = forward\n    this[kStatus] = 'opening'\n\n    this.supports = supports(manifest, {\n      status: true,\n      promises: true,\n      clear: true,\n      getMany: true,\n      deferredOpen: true,\n\n      // TODO (next major): add seek\n      snapshots: manifest.snapshots !== false,\n      permanence: manifest.permanence !== false,\n\n      // TODO: remove from level-supports because it's always supported\n      keyIterator: true,\n      valueIterator: true,\n      iteratorNextv: true,\n      iteratorAll: true,\n\n      encodings: manifest.encodings || {},\n      events: Object.assign({}, manifest.events, {\n        opening: true,\n        open: true,\n        closing: true,\n        closed: true,\n        put: true,\n        del: true,\n        batch: true,\n        clear: true\n      })\n    })\n\n    this[kTranscoder] = new Transcoder(formats(this))\n    this[kKeyEncoding] = this[kTranscoder].encoding(keyEncoding || 'utf8')\n    this[kValueEncoding] = this[kTranscoder].encoding(valueEncoding || 'utf8')\n\n    // Add custom and transcoder encodings to manifest\n    for (const encoding of this[kTranscoder].encodings()) {\n      if (!this.supports.encodings[encoding.commonName]) {\n        this.supports.encodings[encoding.commonName] = true\n      }\n    }\n\n    this[kDefaultOptions] = {\n      empty: Object.freeze({}),\n      entry: Object.freeze({\n        keyEncoding: this[kKeyEncoding].commonName,\n        valueEncoding: this[kValueEncoding].commonName\n      }),\n      key: Object.freeze({\n        keyEncoding: this[kKeyEncoding].commonName\n      })\n    }\n\n    // Let subclass finish its constructor\n    this.nextTick(() => {\n      if (this[kDeferOpen]) {\n        this.open({ passive: false }, noop)\n      }\n    })\n  }\n\n  get status () {\n    return this[kStatus]\n  }\n\n  keyEncoding (encoding) {\n    return this[kTranscoder].encoding(encoding != null ? encoding : this[kKeyEncoding])\n  }\n\n  valueEncoding (encoding) {\n    return this[kTranscoder].encoding(encoding != null ? encoding : this[kValueEncoding])\n  }\n\n  open (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n\n    options = { ...this[kOptions], ...getOptions(options) }\n\n    options.createIfMissing = options.createIfMissing !== false\n    options.errorIfExists = !!options.errorIfExists\n\n    const maybeOpened = (err) => {\n      if (this[kStatus] === 'closing' || this[kStatus] === 'opening') {\n        // Wait until pending state changes are done\n        this.once(kLanded, err ? () => maybeOpened(err) : maybeOpened)\n      } else if (this[kStatus] !== 'open') {\n        callback(new ModuleError('Database is not open', {\n          code: 'LEVEL_DATABASE_NOT_OPEN',\n          cause: err\n        }))\n      } else {\n        callback()\n      }\n    }\n\n    if (options.passive) {\n      if (this[kStatus] === 'opening') {\n        this.once(kLanded, maybeOpened)\n      } else {\n        this.nextTick(maybeOpened)\n      }\n    } else if (this[kStatus] === 'closed' || this[kDeferOpen]) {\n      this[kDeferOpen] = false\n      this[kStatus] = 'opening'\n      this.emit('opening')\n\n      this._open(options, (err) => {\n        if (err) {\n          this[kStatus] = 'closed'\n\n          // Resources must be safe to close in any db state\n          this[kCloseResources](() => {\n            this.emit(kLanded)\n            maybeOpened(err)\n          })\n\n          this[kUndefer]()\n          return\n        }\n\n        this[kStatus] = 'open'\n        this[kUndefer]()\n        this.emit(kLanded)\n\n        // Only emit public event if pending state changes are done\n        if (this[kStatus] === 'open') this.emit('open')\n\n        // TODO (next major): remove this alias\n        if (this[kStatus] === 'open') this.emit('ready')\n\n        maybeOpened()\n      })\n    } else if (this[kStatus] === 'open') {\n      this.nextTick(maybeOpened)\n    } else {\n      this.once(kLanded, () => this.open(options, callback))\n    }\n\n    return callback[kPromise]\n  }\n\n  _open (options, callback) {\n    this.nextTick(callback)\n  }\n\n  close (callback) {\n    callback = fromCallback(callback, kPromise)\n\n    const maybeClosed = (err) => {\n      if (this[kStatus] === 'opening' || this[kStatus] === 'closing') {\n        // Wait until pending state changes are done\n        this.once(kLanded, err ? maybeClosed(err) : maybeClosed)\n      } else if (this[kStatus] !== 'closed') {\n        callback(new ModuleError('Database is not closed', {\n          code: 'LEVEL_DATABASE_NOT_CLOSED',\n          cause: err\n        }))\n      } else {\n        callback()\n      }\n    }\n\n    if (this[kStatus] === 'open') {\n      this[kStatus] = 'closing'\n      this.emit('closing')\n\n      const cancel = (err) => {\n        this[kStatus] = 'open'\n        this[kUndefer]()\n        this.emit(kLanded)\n        maybeClosed(err)\n      }\n\n      this[kCloseResources](() => {\n        this._close((err) => {\n          if (err) return cancel(err)\n\n          this[kStatus] = 'closed'\n          this[kUndefer]()\n          this.emit(kLanded)\n\n          // Only emit public event if pending state changes are done\n          if (this[kStatus] === 'closed') this.emit('closed')\n\n          maybeClosed()\n        })\n      })\n    } else if (this[kStatus] === 'closed') {\n      this.nextTick(maybeClosed)\n    } else {\n      this.once(kLanded, () => this.close(callback))\n    }\n\n    return callback[kPromise]\n  }\n\n  [kCloseResources] (callback) {\n    if (this[kResources].size === 0) {\n      return this.nextTick(callback)\n    }\n\n    let pending = this[kResources].size\n    let sync = true\n\n    const next = () => {\n      if (--pending === 0) {\n        // We don't have tests for generic resources, so dezalgo\n        if (sync) this.nextTick(callback)\n        else callback()\n      }\n    }\n\n    // In parallel so that all resources know they are closed\n    for (const resource of this[kResources]) {\n      resource.close(next)\n    }\n\n    sync = false\n    this[kResources].clear()\n  }\n\n  _close (callback) {\n    this.nextTick(callback)\n  }\n\n  get (key, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.get(key, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options to the underlying store\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      // Avoid spread operator because of https://bugs.chromium.org/p/chromium/issues/detail?id=1204540\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    this._get(this.prefixKey(keyEncoding.encode(key), keyFormat), options, (err, value) => {\n      if (err) {\n        // Normalize not found error for backwards compatibility with abstract-leveldown and level(up)\n        if (err.code === 'LEVEL_NOT_FOUND' || err.notFound || /NotFound/i.test(err)) {\n          if (!err.code) err.code = 'LEVEL_NOT_FOUND' // Preferred way going forward\n          if (!err.notFound) err.notFound = true // Same as level-errors\n          if (!err.status) err.status = 404 // Same as level-errors\n        }\n\n        return callback(err)\n      }\n\n      try {\n        value = valueEncoding.decode(value)\n      } catch (err) {\n        return callback(new ModuleError('Could not decode value', {\n          code: 'LEVEL_DECODE_ERROR',\n          cause: err\n        }))\n      }\n\n      callback(null, value)\n    })\n\n    return callback[kPromise]\n  }\n\n  _get (key, options, callback) {\n    this.nextTick(callback, new Error('NotFound'))\n  }\n\n  getMany (keys, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.getMany(keys, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    if (!Array.isArray(keys)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'keys' must be an array\"))\n      return callback[kPromise]\n    }\n\n    if (keys.length === 0) {\n      this.nextTick(callback, null, [])\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    const mappedKeys = new Array(keys.length)\n\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i]\n      const err = this._checkKey(key)\n\n      if (err) {\n        this.nextTick(callback, err)\n        return callback[kPromise]\n      }\n\n      mappedKeys[i] = this.prefixKey(keyEncoding.encode(key), keyFormat)\n    }\n\n    this._getMany(mappedKeys, options, (err, values) => {\n      if (err) return callback(err)\n\n      try {\n        for (let i = 0; i < values.length; i++) {\n          if (values[i] !== undefined) {\n            values[i] = valueEncoding.decode(values[i])\n          }\n        }\n      } catch (err) {\n        return callback(new ModuleError(`Could not decode one or more of ${values.length} value(s)`, {\n          code: 'LEVEL_DECODE_ERROR',\n          cause: err\n        }))\n      }\n\n      callback(null, values)\n    })\n\n    return callback[kPromise]\n  }\n\n  _getMany (keys, options, callback) {\n    this.nextTick(callback, null, new Array(keys.length).fill(undefined))\n  }\n\n  put (key, value, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].entry)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.put(key, value, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key) || this._checkValue(value)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options.valueEncoding)\n    const keyFormat = keyEncoding.format\n    const valueFormat = valueEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat || options.valueEncoding !== valueFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat, valueEncoding: valueFormat })\n    }\n\n    const mappedKey = this.prefixKey(keyEncoding.encode(key), keyFormat)\n    const mappedValue = valueEncoding.encode(value)\n\n    this._put(mappedKey, mappedValue, options, (err) => {\n      if (err) return callback(err)\n      this.emit('put', key, value)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _put (key, value, options, callback) {\n    this.nextTick(callback)\n  }\n\n  del (key, options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].key)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.del(key, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const err = this._checkKey(key)\n\n    if (err) {\n      this.nextTick(callback, err)\n      return callback[kPromise]\n    }\n\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n    const keyFormat = keyEncoding.format\n\n    // Forward encoding options\n    if (options.keyEncoding !== keyFormat) {\n      options = Object.assign({}, options, { keyEncoding: keyFormat })\n    }\n\n    this._del(this.prefixKey(keyEncoding.encode(key), keyFormat), options, (err) => {\n      if (err) return callback(err)\n      this.emit('del', key)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _del (key, options, callback) {\n    this.nextTick(callback)\n  }\n\n  batch (operations, options, callback) {\n    if (!arguments.length) {\n      if (this[kStatus] === 'opening') return new DefaultChainedBatch(this)\n      if (this[kStatus] !== 'open') {\n        throw new ModuleError('Database is not open', {\n          code: 'LEVEL_DATABASE_NOT_OPEN'\n        })\n      }\n      return this._chainedBatch()\n    }\n\n    if (typeof operations === 'function') callback = operations\n    else callback = getCallback(options, callback)\n\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].empty)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.batch(operations, options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    if (!Array.isArray(operations)) {\n      this.nextTick(callback, new TypeError(\"The first argument 'operations' must be an array\"))\n      return callback[kPromise]\n    }\n\n    if (operations.length === 0) {\n      this.nextTick(callback)\n      return callback[kPromise]\n    }\n\n    const mapped = new Array(operations.length)\n    const { keyEncoding: ke, valueEncoding: ve, ...forward } = options\n\n    for (let i = 0; i < operations.length; i++) {\n      if (typeof operations[i] !== 'object' || operations[i] === null) {\n        this.nextTick(callback, new TypeError('A batch operation must be an object'))\n        return callback[kPromise]\n      }\n\n      const op = Object.assign({}, operations[i])\n\n      if (op.type !== 'put' && op.type !== 'del') {\n        this.nextTick(callback, new TypeError(\"A batch operation must have a type property that is 'put' or 'del'\"))\n        return callback[kPromise]\n      }\n\n      const err = this._checkKey(op.key)\n\n      if (err) {\n        this.nextTick(callback, err)\n        return callback[kPromise]\n      }\n\n      const db = op.sublevel != null ? op.sublevel : this\n      const keyEncoding = db.keyEncoding(op.keyEncoding || ke)\n      const keyFormat = keyEncoding.format\n\n      op.key = db.prefixKey(keyEncoding.encode(op.key), keyFormat)\n      op.keyEncoding = keyFormat\n\n      if (op.type === 'put') {\n        const valueErr = this._checkValue(op.value)\n\n        if (valueErr) {\n          this.nextTick(callback, valueErr)\n          return callback[kPromise]\n        }\n\n        const valueEncoding = db.valueEncoding(op.valueEncoding || ve)\n\n        op.value = valueEncoding.encode(op.value)\n        op.valueEncoding = valueEncoding.format\n      }\n\n      // Prevent double prefixing\n      if (db !== this) {\n        op.sublevel = null\n      }\n\n      mapped[i] = op\n    }\n\n    this._batch(mapped, forward, (err) => {\n      if (err) return callback(err)\n      this.emit('batch', operations)\n      callback()\n    })\n\n    return callback[kPromise]\n  }\n\n  _batch (operations, options, callback) {\n    this.nextTick(callback)\n  }\n\n  sublevel (name, options) {\n    return this._sublevel(name, AbstractSublevel.defaults(options))\n  }\n\n  _sublevel (name, options) {\n    return new AbstractSublevel(this, name, options)\n  }\n\n  prefixKey (key, keyFormat) {\n    return key\n  }\n\n  clear (options, callback) {\n    callback = getCallback(options, callback)\n    callback = fromCallback(callback, kPromise)\n    options = getOptions(options, this[kDefaultOptions].empty)\n\n    if (this[kStatus] === 'opening') {\n      this.defer(() => this.clear(options, callback))\n      return callback[kPromise]\n    }\n\n    if (maybeError(this, callback)) {\n      return callback[kPromise]\n    }\n\n    const original = options\n    const keyEncoding = this.keyEncoding(options.keyEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n    options.keyEncoding = keyEncoding.format\n\n    if (options.limit === 0) {\n      this.nextTick(callback)\n    } else {\n      this._clear(options, (err) => {\n        if (err) return callback(err)\n        this.emit('clear', original)\n        callback()\n      })\n    }\n\n    return callback[kPromise]\n  }\n\n  _clear (options, callback) {\n    this.nextTick(callback)\n  }\n\n  iterator (options) {\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n    options.keys = options.keys !== false\n    options.values = options.values !== false\n\n    // We need the original encoding options in AbstractIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._iterator(options)\n  }\n\n  _iterator (options) {\n    return new AbstractIterator(this, options)\n  }\n\n  keys (options) {\n    // Also include valueEncoding (though unused) because we may fallback to _iterator()\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n\n    // We need the original encoding options in AbstractKeyIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredKeyIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._keys(options)\n  }\n\n  _keys (options) {\n    return new DefaultKeyIterator(this, options)\n  }\n\n  values (options) {\n    const keyEncoding = this.keyEncoding(options && options.keyEncoding)\n    const valueEncoding = this.valueEncoding(options && options.valueEncoding)\n\n    options = rangeOptions(options, keyEncoding)\n\n    // We need the original encoding options in AbstractValueIterator in order to decode data\n    options[AbstractIterator.keyEncoding] = keyEncoding\n    options[AbstractIterator.valueEncoding] = valueEncoding\n\n    // Forward encoding options to private API\n    options.keyEncoding = keyEncoding.format\n    options.valueEncoding = valueEncoding.format\n\n    if (this[kStatus] === 'opening') {\n      return new DeferredValueIterator(this, options)\n    } else if (this[kStatus] !== 'open') {\n      throw new ModuleError('Database is not open', {\n        code: 'LEVEL_DATABASE_NOT_OPEN'\n      })\n    }\n\n    return this._values(options)\n  }\n\n  _values (options) {\n    return new DefaultValueIterator(this, options)\n  }\n\n  defer (fn) {\n    if (typeof fn !== 'function') {\n      throw new TypeError('The first argument must be a function')\n    }\n\n    this[kOperations].push(fn)\n  }\n\n  [kUndefer] () {\n    if (this[kOperations].length === 0) {\n      return\n    }\n\n    const operations = this[kOperations]\n    this[kOperations] = []\n\n    for (const op of operations) {\n      op()\n    }\n  }\n\n  // TODO: docs and types\n  attachResource (resource) {\n    if (typeof resource !== 'object' || resource === null ||\n      typeof resource.close !== 'function') {\n      throw new TypeError('The first argument must be a resource object')\n    }\n\n    this[kResources].add(resource)\n  }\n\n  // TODO: docs and types\n  detachResource (resource) {\n    this[kResources].delete(resource)\n  }\n\n  _chainedBatch () {\n    return new DefaultChainedBatch(this)\n  }\n\n  _checkKey (key) {\n    if (key === null || key === undefined) {\n      return new ModuleError('Key cannot be null or undefined', {\n        code: 'LEVEL_INVALID_KEY'\n      })\n    }\n  }\n\n  _checkValue (value) {\n    if (value === null || value === undefined) {\n      return new ModuleError('Value cannot be null or undefined', {\n        code: 'LEVEL_INVALID_VALUE'\n      })\n    }\n  }\n}\n\n// Expose browser-compatible nextTick for dependents\n// TODO: after we drop node 10, also use queueMicrotask in node\nAbstractLevel.prototype.nextTick = require('./lib/next-tick')\n\nconst { AbstractSublevel } = require('./lib/abstract-sublevel')({ AbstractLevel })\n\nexports.AbstractLevel = AbstractLevel\nexports.AbstractSublevel = AbstractSublevel\n\nconst maybeError = function (db, callback) {\n  if (db[kStatus] !== 'open') {\n    db.nextTick(callback, new ModuleError('Database is not open', {\n      code: 'LEVEL_DATABASE_NOT_OPEN'\n    }))\n    return true\n  }\n\n  return false\n}\n\nconst formats = function (db) {\n  return Object.keys(db.supports.encodings)\n    .filter(k => !!db.supports.encodings[k])\n}\n", "'use strict'\n\nexports.AbstractLevel = require('./abstract-level').AbstractLevel\nexports.AbstractSublevel = require('./abstract-level').AbstractSublevel\nexports.AbstractIterator = require('./abstract-iterator').AbstractIterator\nexports.AbstractKeyIterator = require('./abstract-iterator').AbstractKeyIterator\nexports.AbstractValueIterator = require('./abstract-iterator').AbstractValueIterator\nexports.AbstractChainedBatch = require('./abstract-chained-batch').AbstractChainedBatch\n", "/*! run-parallel-limit. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallelLimit\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallelLimit (tasks, limit, cb) {\n  if (typeof limit !== 'number') throw new Error('second argument must be a Number')\n  let results, len, pending, keys, isErrored\n  let isSync = true\n  let next\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = len = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = len = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (err) isErrored = true\n    if (--pending === 0 || err) {\n      done(err)\n    } else if (!isErrored && next < len) {\n      let key\n      if (keys) {\n        key = keys[next]\n        next += 1\n        tasks[key](function (err, result) { each(key, err, result) })\n      } else {\n        key = next\n        next += 1\n        tasks[key](function (err, result) { each(key, err, result) })\n      }\n    }\n  }\n\n  next = limit\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.some(function (key, i) {\n      tasks[key](function (err, result) { each(key, err, result) })\n      if (i === limit - 1) return true // early return\n      return false\n    })\n  } else {\n    // array\n    tasks.some(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n      if (i === limit - 1) return true // early return\n      return false\n    })\n  }\n\n  isSync = false\n}\n", "/* global IDBKeyRange */\n\n'use strict'\n\nmodule.exports = function createKeyRange (options) {\n  const lower = options.gte !== undefined ? options.gte : options.gt !== undefined ? options.gt : undefined\n  const upper = options.lte !== undefined ? options.lte : options.lt !== undefined ? options.lt : undefined\n  const lowerExclusive = options.gte === undefined\n  const upperExclusive = options.lte === undefined\n\n  if (lower !== undefined && upper !== undefined) {\n    return IDBKeyRange.bound(lower, upper, lowerExclusive, upperExclusive)\n  } else if (lower !== undefined) {\n    return IDBKeyRange.lowerBound(lower, lowerExclusive)\n  } else if (upper !== undefined) {\n    return IDBKeyRange.upperBound(upper, upperExclusive)\n  } else {\n    return null\n  }\n}\n", "'use strict'\n\nconst textEncoder = new TextEncoder()\n\nmodule.exports = function (data) {\n  if (data instanceof Uint8Array) {\n    return data\n  } else if (data instanceof ArrayBuffer) {\n    return new Uint8Array(data)\n  } else {\n    // Non-binary data stored with an old version (level-js < 5.0.0)\n    return textEncoder.encode(data)\n  }\n}\n", "'use strict'\n\nconst { AbstractIterator } = require('abstract-level')\nconst createKeyRange = require('./util/key-range')\nconst deserialize = require('./util/deserialize')\n\nconst kCache = Symbol('cache')\nconst kFinished = Symbol('finished')\nconst kOptions = Symbol('options')\nconst kCurrentOptions = Symbol('currentOptions')\nconst kPosition = Symbol('position')\nconst kLocation = Symbol('location')\nconst kFirst = Symbol('first')\nconst emptyOptions = {}\n\nclass Iterator extends AbstractIterator {\n  constructor (db, location, options) {\n    super(db, options)\n\n    this[kCache] = []\n    this[kFinished] = this.limit === 0\n    this[kOptions] = options\n    this[kCurrentOptions] = { ...options }\n    this[kPosition] = undefined\n    this[kLocation] = location\n    this[kFirst] = true\n  }\n\n  // Note: if called by _all() then size can be Infinity. This is an internal\n  // detail; by design AbstractIterator.nextv() does not support Infinity.\n  _nextv (size, options, callback) {\n    this[kFirst] = false\n\n    if (this[kFinished]) {\n      return this.nextTick(callback, null, [])\n    } else if (this[kCache].length > 0) {\n      // TODO: mixing next and nextv is not covered by test suite\n      size = Math.min(size, this[kCache].length)\n      return this.nextTick(callback, null, this[kCache].splice(0, size))\n    }\n\n    // Adjust range by what we already visited\n    if (this[kPosition] !== undefined) {\n      if (this[kOptions].reverse) {\n        this[kCurrentOptions].lt = this[kPosition]\n        this[kCurrentOptions].lte = undefined\n      } else {\n        this[kCurrentOptions].gt = this[kPosition]\n        this[kCurrentOptions].gte = undefined\n      }\n    }\n\n    let keyRange\n\n    try {\n      keyRange = createKeyRange(this[kCurrentOptions])\n    } catch (_) {\n      // The lower key is greater than the upper key.\n      // IndexedDB throws an error, but we'll just return 0 results.\n      this[kFinished] = true\n      return this.nextTick(callback, null, [])\n    }\n\n    const transaction = this.db.db.transaction([this[kLocation]], 'readonly')\n    const store = transaction.objectStore(this[kLocation])\n    const entries = []\n\n    if (!this[kOptions].reverse) {\n      let keys\n      let values\n\n      const complete = () => {\n        // Wait for both requests to complete\n        if (keys === undefined || values === undefined) return\n\n        const length = Math.max(keys.length, values.length)\n\n        if (length === 0 || size === Infinity) {\n          this[kFinished] = true\n        } else {\n          this[kPosition] = keys[length - 1]\n        }\n\n        // Resize\n        entries.length = length\n\n        // Merge keys and values\n        for (let i = 0; i < length; i++) {\n          const key = keys[i]\n          const value = values[i]\n\n          entries[i] = [\n            this[kOptions].keys && key !== undefined ? deserialize(key) : undefined,\n            this[kOptions].values && value !== undefined ? deserialize(value) : undefined\n          ]\n        }\n\n        maybeCommit(transaction)\n      }\n\n      // If keys were not requested and size is Infinity, we don't have to keep\n      // track of position and can thus skip getting keys.\n      if (this[kOptions].keys || size < Infinity) {\n        store.getAllKeys(keyRange, size < Infinity ? size : undefined).onsuccess = (ev) => {\n          keys = ev.target.result\n          complete()\n        }\n      } else {\n        keys = []\n        this.nextTick(complete)\n      }\n\n      if (this[kOptions].values) {\n        store.getAll(keyRange, size < Infinity ? size : undefined).onsuccess = (ev) => {\n          values = ev.target.result\n          complete()\n        }\n      } else {\n        values = []\n        this.nextTick(complete)\n      }\n    } else {\n      // Can't use getAll() in reverse, so use a slower cursor that yields one item at a time\n      // TODO: test if all target browsers support openKeyCursor\n      const method = !this[kOptions].values && store.openKeyCursor ? 'openKeyCursor' : 'openCursor'\n\n      store[method](keyRange, 'prev').onsuccess = (ev) => {\n        const cursor = ev.target.result\n\n        if (cursor) {\n          const { key, value } = cursor\n          this[kPosition] = key\n\n          entries.push([\n            this[kOptions].keys && key !== undefined ? deserialize(key) : undefined,\n            this[kOptions].values && value !== undefined ? deserialize(value) : undefined\n          ])\n\n          if (entries.length < size) {\n            cursor.continue()\n          } else {\n            maybeCommit(transaction)\n          }\n        } else {\n          this[kFinished] = true\n        }\n      }\n    }\n\n    // If an error occurs (on the request), the transaction will abort.\n    transaction.onabort = () => {\n      callback(transaction.error || new Error('aborted by user'))\n      callback = null\n    }\n\n    transaction.oncomplete = () => {\n      callback(null, entries)\n      callback = null\n    }\n  }\n\n  _next (callback) {\n    if (this[kCache].length > 0) {\n      const [key, value] = this[kCache].shift()\n      this.nextTick(callback, null, key, value)\n    } else if (this[kFinished]) {\n      this.nextTick(callback)\n    } else {\n      let size = Math.min(100, this.limit - this.count)\n\n      if (this[kFirst]) {\n        // It's common to only want one entry initially or after a seek()\n        this[kFirst] = false\n        size = 1\n      }\n\n      this._nextv(size, emptyOptions, (err, entries) => {\n        if (err) return callback(err)\n        this[kCache] = entries\n        this._next(callback)\n      })\n    }\n  }\n\n  _all (options, callback) {\n    this[kFirst] = false\n\n    // TODO: mixing next and all is not covered by test suite\n    const cache = this[kCache].splice(0, this[kCache].length)\n    const size = this.limit - this.count - cache.length\n\n    if (size <= 0) {\n      return this.nextTick(callback, null, cache)\n    }\n\n    this._nextv(size, emptyOptions, (err, entries) => {\n      if (err) return callback(err)\n      if (cache.length > 0) entries = cache.concat(entries)\n      callback(null, entries)\n    })\n  }\n\n  _seek (target, options) {\n    this[kFirst] = true\n    this[kCache] = []\n    this[kFinished] = false\n    this[kPosition] = undefined\n\n    // TODO: not covered by test suite\n    this[kCurrentOptions] = { ...this[kOptions] }\n\n    let keyRange\n\n    try {\n      keyRange = createKeyRange(this[kOptions])\n    } catch (_) {\n      this[kFinished] = true\n      return\n    }\n\n    if (keyRange !== null && !keyRange.includes(target)) {\n      this[kFinished] = true\n    } else if (this[kOptions].reverse) {\n      this[kCurrentOptions].lte = target\n    } else {\n      this[kCurrentOptions].gte = target\n    }\n  }\n}\n\nexports.Iterator = Iterator\n\nfunction maybeCommit (transaction) {\n  // Commit (meaning close) now instead of waiting for auto-commit\n  if (typeof transaction.commit === 'function') {\n    transaction.commit()\n  }\n}\n", "'use strict'\n\nmodule.exports = function clear (db, location, keyRange, options, callback) {\n  if (options.limit === 0) return db.nextTick(callback)\n\n  const transaction = db.db.transaction([location], 'readwrite')\n  const store = transaction.objectStore(location)\n  let count = 0\n\n  transaction.oncomplete = function () {\n    callback()\n  }\n\n  transaction.onabort = function () {\n    callback(transaction.error || new Error('aborted by user'))\n  }\n\n  // A key cursor is faster (skips reading values) but not supported by IE\n  // TODO: we no longer support IE. Test others\n  const method = store.openKeyCursor ? 'openKeyCursor' : 'openCursor'\n  const direction = options.reverse ? 'prev' : 'next'\n\n  store[method](keyRange, direction).onsuccess = function (ev) {\n    const cursor = ev.target.result\n\n    if (cursor) {\n      // Wait for a request to complete before continuing, saving CPU.\n      store.delete(cursor.key).onsuccess = function () {\n        if (options.limit <= 0 || ++count < options.limit) {\n          cursor.continue()\n        }\n      }\n    }\n  }\n}\n", "/* global indexedDB */\n\n'use strict'\n\nconst { AbstractLevel } = require('abstract-level')\nconst ModuleError = require('module-error')\nconst parallel = require('run-parallel-limit')\nconst { fromCallback } = require('catering')\nconst { Iterator } = require('./iterator')\nconst deserialize = require('./util/deserialize')\nconst clear = require('./util/clear')\nconst createKeyRange = require('./util/key-range')\n\n// Keep as-is for compatibility with existing level-js databases\nconst DEFAULT_PREFIX = 'level-js-'\n\nconst kIDB = Symbol('idb')\nconst kNamePrefix = Symbol('namePrefix')\nconst kLocation = Symbol('location')\nconst kVersion = Symbol('version')\nconst kStore = Symbol('store')\nconst kOnComplete = Symbol('onComplete')\nconst kPromise = Symbol('promise')\n\nclass BrowserLevel extends AbstractLevel {\n  constructor (location, options, _) {\n    // To help migrating to abstract-level\n    if (typeof options === 'function' || typeof _ === 'function') {\n      throw new ModuleError('The levelup-style callback argument has been removed', {\n        code: 'LEVEL_LEGACY'\n      })\n    }\n\n    const { prefix, version, ...forward } = options || {}\n\n    super({\n      encodings: { view: true },\n      snapshots: false,\n      createIfMissing: false,\n      errorIfExists: false,\n      seek: true\n    }, forward)\n\n    if (typeof location !== 'string') {\n      throw new Error('constructor requires a location string argument')\n    }\n\n    // TODO (next major): remove default prefix\n    this[kLocation] = location\n    this[kNamePrefix] = prefix == null ? DEFAULT_PREFIX : prefix\n    this[kVersion] = parseInt(version || 1, 10)\n    this[kIDB] = null\n  }\n\n  get location () {\n    return this[kLocation]\n  }\n\n  get namePrefix () {\n    return this[kNamePrefix]\n  }\n\n  get version () {\n    return this[kVersion]\n  }\n\n  // Exposed for backwards compat and unit tests\n  get db () {\n    return this[kIDB]\n  }\n\n  get type () {\n    return 'browser-level'\n  }\n\n  _open (options, callback) {\n    const req = indexedDB.open(this[kNamePrefix] + this[kLocation], this[kVersion])\n\n    req.onerror = function () {\n      callback(req.error || new Error('unknown error'))\n    }\n\n    req.onsuccess = () => {\n      this[kIDB] = req.result\n      callback()\n    }\n\n    req.onupgradeneeded = (ev) => {\n      const db = ev.target.result\n\n      if (!db.objectStoreNames.contains(this[kLocation])) {\n        db.createObjectStore(this[kLocation])\n      }\n    }\n  }\n\n  [kStore] (mode) {\n    const transaction = this[kIDB].transaction([this[kLocation]], mode)\n    return transaction.objectStore(this[kLocation])\n  }\n\n  [kOnComplete] (request, callback) {\n    const transaction = request.transaction\n\n    // Take advantage of the fact that a non-canceled request error aborts\n    // the transaction. I.e. no need to listen for \"request.onerror\".\n    transaction.onabort = function () {\n      callback(transaction.error || new Error('aborted by user'))\n    }\n\n    transaction.oncomplete = function () {\n      callback(null, request.result)\n    }\n  }\n\n  _get (key, options, callback) {\n    const store = this[kStore]('readonly')\n    let req\n\n    try {\n      req = store.get(key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, function (err, value) {\n      if (err) return callback(err)\n\n      if (value === undefined) {\n        return callback(new ModuleError('Entry not found', {\n          code: 'LEVEL_NOT_FOUND'\n        }))\n      }\n\n      callback(null, deserialize(value))\n    })\n  }\n\n  _getMany (keys, options, callback) {\n    const store = this[kStore]('readonly')\n    const tasks = keys.map((key) => (next) => {\n      let request\n\n      try {\n        request = store.get(key)\n      } catch (err) {\n        return next(err)\n      }\n\n      request.onsuccess = () => {\n        const value = request.result\n        next(null, value === undefined ? value : deserialize(value))\n      }\n\n      request.onerror = (ev) => {\n        ev.stopPropagation()\n        next(request.error)\n      }\n    })\n\n    parallel(tasks, 16, callback)\n  }\n\n  _del (key, options, callback) {\n    const store = this[kStore]('readwrite')\n    let req\n\n    try {\n      req = store.delete(key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  _put (key, value, options, callback) {\n    const store = this[kStore]('readwrite')\n    let req\n\n    try {\n      // Will throw a DataError or DataCloneError if the environment\n      // does not support serializing the key or value respectively.\n      req = store.put(value, key)\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  // TODO: implement key and value iterators\n  _iterator (options) {\n    return new Iterator(this, this[kLocation], options)\n  }\n\n  _batch (operations, options, callback) {\n    const store = this[kStore]('readwrite')\n    const transaction = store.transaction\n    let index = 0\n    let error\n\n    transaction.onabort = function () {\n      callback(error || transaction.error || new Error('aborted by user'))\n    }\n\n    transaction.oncomplete = function () {\n      callback()\n    }\n\n    // Wait for a request to complete before making the next, saving CPU.\n    function loop () {\n      const op = operations[index++]\n      const key = op.key\n\n      let req\n\n      try {\n        req = op.type === 'del' ? store.delete(key) : store.put(op.value, key)\n      } catch (err) {\n        error = err\n        transaction.abort()\n        return\n      }\n\n      if (index < operations.length) {\n        req.onsuccess = loop\n      } else if (typeof transaction.commit === 'function') {\n        // Commit now instead of waiting for auto-commit\n        transaction.commit()\n      }\n    }\n\n    loop()\n  }\n\n  _clear (options, callback) {\n    let keyRange\n    let req\n\n    try {\n      keyRange = createKeyRange(options)\n    } catch (e) {\n      // The lower key is greater than the upper key.\n      // IndexedDB throws an error, but we'll just do nothing.\n      return this.nextTick(callback)\n    }\n\n    if (options.limit >= 0) {\n      // IDBObjectStore#delete(range) doesn't have such an option.\n      // Fall back to cursor-based implementation.\n      return clear(this, this[kLocation], keyRange, options, callback)\n    }\n\n    try {\n      const store = this[kStore]('readwrite')\n      req = keyRange ? store.delete(keyRange) : store.clear()\n    } catch (err) {\n      return this.nextTick(callback, err)\n    }\n\n    this[kOnComplete](req, callback)\n  }\n\n  _close (callback) {\n    this[kIDB].close()\n    this.nextTick(callback)\n  }\n}\n\nBrowserLevel.destroy = function (location, prefix, callback) {\n  if (typeof prefix === 'function') {\n    callback = prefix\n    prefix = DEFAULT_PREFIX\n  }\n\n  callback = fromCallback(callback, kPromise)\n  const request = indexedDB.deleteDatabase(prefix + location)\n\n  request.onsuccess = function () {\n    callback()\n  }\n\n  request.onerror = function (err) {\n    callback(err)\n  }\n\n  return callback[kPromise]\n}\n\nexports.BrowserLevel = BrowserLevel\n", "exports.Level = require('browser-level').BrowserLevel\n", "'use strict'\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/per_context/primordials.js\n\n  Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n  ArrayIsArray(self) {\n    return Array.isArray(self)\n  },\n  ArrayPrototypeIncludes(self, el) {\n    return self.includes(el)\n  },\n  ArrayPrototypeIndexOf(self, el) {\n    return self.indexOf(el)\n  },\n  ArrayPrototypeJoin(self, sep) {\n    return self.join(sep)\n  },\n  ArrayPrototypeMap(self, fn) {\n    return self.map(fn)\n  },\n  ArrayPrototypePop(self, el) {\n    return self.pop(el)\n  },\n  ArrayPrototypePush(self, el) {\n    return self.push(el)\n  },\n  ArrayPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  Error,\n  FunctionPrototypeCall(fn, thisArgs, ...args) {\n    return fn.call(thisArgs, ...args)\n  },\n  FunctionPrototypeSymbolHasInstance(self, instance) {\n    return Function.prototype[Symbol.hasInstance].call(self, instance)\n  },\n  MathFloor: Math.floor,\n  Number,\n  NumberIsInteger: Number.isInteger,\n  NumberIsNaN: Number.isNaN,\n  NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n  NumberParseInt: Number.parseInt,\n  ObjectDefineProperties(self, props) {\n    return Object.defineProperties(self, props)\n  },\n  ObjectDefineProperty(self, name, prop) {\n    return Object.defineProperty(self, name, prop)\n  },\n  ObjectGetOwnPropertyDescriptor(self, name) {\n    return Object.getOwnPropertyDescriptor(self, name)\n  },\n  ObjectKeys(obj) {\n    return Object.keys(obj)\n  },\n  ObjectSetPrototypeOf(target, proto) {\n    return Object.setPrototypeOf(target, proto)\n  },\n  Promise,\n  PromisePrototypeCatch(self, fn) {\n    return self.catch(fn)\n  },\n  PromisePrototypeThen(self, thenFn, catchFn) {\n    return self.then(thenFn, catchFn)\n  },\n  PromiseReject(err) {\n    return Promise.reject(err)\n  },\n  ReflectApply: Reflect.apply,\n  RegExpPrototypeTest(self, value) {\n    return self.test(value)\n  },\n  SafeSet: Set,\n  String,\n  StringPrototypeSlice(self, start, end) {\n    return self.slice(start, end)\n  },\n  StringPrototypeToLowerCase(self) {\n    return self.toLowerCase()\n  },\n  StringPrototypeToUpperCase(self) {\n    return self.toUpperCase()\n  },\n  StringPrototypeTrim(self) {\n    return self.trim()\n  },\n  Symbol,\n  SymbolFor: Symbol.for,\n  SymbolAsyncIterator: Symbol.asyncIterator,\n  SymbolHasInstance: Symbol.hasInstance,\n  SymbolIterator: Symbol.iterator,\n  TypedArrayPrototypeSet(self, buf, len) {\n    return self.set(buf, len)\n  },\n  Uint8Array\n}\n", "'use strict'\n\nconst bufferModule = require('buffer')\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        // eslint-disable-next-line indent\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\n/* eslint-enable indent */\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n  constructor(errors) {\n    if (!Array.isArray(errors)) {\n      throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n    }\n    let message = ''\n    for (let i = 0; i < errors.length; i++) {\n      message += `    ${errors[i].stack}\\n`\n    }\n    super(message)\n    this.name = 'AggregateError'\n    this.errors = errors\n  }\n}\nmodule.exports = {\n  AggregateError,\n  kEmptyObject: Object.freeze({}),\n  once(callback) {\n    let called = false\n    return function (...args) {\n      if (called) {\n        return\n      }\n      called = true\n      callback.apply(this, args)\n    }\n  },\n  createDeferredPromise: function () {\n    let resolve\n    let reject\n\n    // eslint-disable-next-line promise/param-names\n    const promise = new Promise((res, rej) => {\n      resolve = res\n      reject = rej\n    })\n    return {\n      promise,\n      resolve,\n      reject\n    }\n  },\n  promisify(fn) {\n    return new Promise((resolve, reject) => {\n      fn((err, ...args) => {\n        if (err) {\n          return reject(err)\n        }\n        return resolve(...args)\n      })\n    })\n  },\n  debuglog() {\n    return function () {}\n  },\n  format(format, ...args) {\n    // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n    return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n      const replacement = args.shift()\n      if (type === 'f') {\n        return replacement.toFixed(6)\n      } else if (type === 'j') {\n        return JSON.stringify(replacement)\n      } else if (type === 's' && typeof replacement === 'object') {\n        const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n        return `${ctor} {}`.trim()\n      } else {\n        return replacement.toString()\n      }\n    })\n  },\n  inspect(value) {\n    // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n    switch (typeof value) {\n      case 'string':\n        if (value.includes(\"'\")) {\n          if (!value.includes('\"')) {\n            return `\"${value}\"`\n          } else if (!value.includes('`') && !value.includes('${')) {\n            return `\\`${value}\\``\n          }\n        }\n        return `'${value}'`\n      case 'number':\n        if (isNaN(value)) {\n          return 'NaN'\n        } else if (Object.is(value, -0)) {\n          return String(value)\n        }\n        return value\n      case 'bigint':\n        return `${String(value)}n`\n      case 'boolean':\n      case 'undefined':\n        return String(value)\n      case 'object':\n        return '{}'\n    }\n  },\n  types: {\n    isAsyncFunction(fn) {\n      return fn instanceof AsyncFunction\n    },\n    isArrayBufferView(arr) {\n      return ArrayBuffer.isView(arr)\n    }\n  },\n  isBlob\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n", "'use strict'\n\nconst { format, inspect, AggregateError: CustomAggregateError } = require('./util')\n\n/*\n  This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n  https://github.com/nodejs/node/blob/master/lib/internal/errors.js\n\n  Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n  with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n  'string',\n  'function',\n  'number',\n  'object',\n  // Accept 'Function' and 'Object' as alternative to the lower cased version.\n  'Function',\n  'Object',\n  'boolean',\n  'bigint',\n  'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n  if (!value) {\n    throw new codes.ERR_INTERNAL_ASSERTION(message)\n  }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n  if (typeof msg === 'function') {\n    assert(\n      msg.length <= args.length,\n      // Default options do not count.\n      `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n    )\n    return msg(...args)\n  }\n  const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n  assert(\n    expectedLength === args.length,\n    `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n  )\n  if (args.length === 0) {\n    return msg\n  }\n  return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n  if (!Base) {\n    Base = Error\n  }\n  class NodeError extends Base {\n    constructor(...args) {\n      super(getMessage(code, message, args))\n    }\n    toString() {\n      return `${this.name} [${code}]: ${this.message}`\n    }\n  }\n  Object.defineProperties(NodeError.prototype, {\n    name: {\n      value: Base.name,\n      writable: true,\n      enumerable: false,\n      configurable: true\n    },\n    toString: {\n      value() {\n        return `${this.name} [${code}]: ${this.message}`\n      },\n      writable: true,\n      enumerable: false,\n      configurable: true\n    }\n  })\n  NodeError.prototype.code = code\n  NodeError.prototype[kIsNodeError] = true\n  codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n  // We rename the functions that will be hidden to cut off the stacktrace\n  // at the outermost one\n  const hidden = nodeInternalPrefix + fn.name\n  Object.defineProperty(fn, 'name', {\n    value: hidden\n  })\n  return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n  if (innerError && outerError && innerError !== outerError) {\n    if (Array.isArray(outerError.errors)) {\n      // If `outerError` is already an `AggregateError`.\n      outerError.errors.push(innerError)\n      return outerError\n    }\n    const err = new AggregateError([outerError, innerError], outerError.message)\n    err.code = outerError.code\n    return err\n  }\n  return innerError || outerError\n}\nclass AbortError extends Error {\n  constructor(message = 'The operation was aborted', options = undefined) {\n    if (options !== undefined && typeof options !== 'object') {\n      throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n    }\n    super(message, options)\n    this.code = 'ABORT_ERR'\n    this.name = 'AbortError'\n  }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n  'ERR_INVALID_ARG_TYPE',\n  (name, expected, actual) => {\n    assert(typeof name === 'string', \"'name' must be a string\")\n    if (!Array.isArray(expected)) {\n      expected = [expected]\n    }\n    let msg = 'The '\n    if (name.endsWith(' argument')) {\n      // For cases like 'first argument'\n      msg += `${name} `\n    } else {\n      msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n    }\n    msg += 'must be '\n    const types = []\n    const instances = []\n    const other = []\n    for (const value of expected) {\n      assert(typeof value === 'string', 'All expected entries have to be of type string')\n      if (kTypes.includes(value)) {\n        types.push(value.toLowerCase())\n      } else if (classRegExp.test(value)) {\n        instances.push(value)\n      } else {\n        assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n        other.push(value)\n      }\n    }\n\n    // Special handle `object` in case other instances are allowed to outline\n    // the differences between each other.\n    if (instances.length > 0) {\n      const pos = types.indexOf('object')\n      if (pos !== -1) {\n        types.splice(types, pos, 1)\n        instances.push('Object')\n      }\n    }\n    if (types.length > 0) {\n      switch (types.length) {\n        case 1:\n          msg += `of type ${types[0]}`\n          break\n        case 2:\n          msg += `one of type ${types[0]} or ${types[1]}`\n          break\n        default: {\n          const last = types.pop()\n          msg += `one of type ${types.join(', ')}, or ${last}`\n        }\n      }\n      if (instances.length > 0 || other.length > 0) {\n        msg += ' or '\n      }\n    }\n    if (instances.length > 0) {\n      switch (instances.length) {\n        case 1:\n          msg += `an instance of ${instances[0]}`\n          break\n        case 2:\n          msg += `an instance of ${instances[0]} or ${instances[1]}`\n          break\n        default: {\n          const last = instances.pop()\n          msg += `an instance of ${instances.join(', ')}, or ${last}`\n        }\n      }\n      if (other.length > 0) {\n        msg += ' or '\n      }\n    }\n    switch (other.length) {\n      case 0:\n        break\n      case 1:\n        if (other[0].toLowerCase() !== other[0]) {\n          msg += 'an '\n        }\n        msg += `${other[0]}`\n        break\n      case 2:\n        msg += `one of ${other[0]} or ${other[1]}`\n        break\n      default: {\n        const last = other.pop()\n        msg += `one of ${other.join(', ')}, or ${last}`\n      }\n    }\n    if (actual == null) {\n      msg += `. Received ${actual}`\n    } else if (typeof actual === 'function' && actual.name) {\n      msg += `. Received function ${actual.name}`\n    } else if (typeof actual === 'object') {\n      var _actual$constructor\n      if (\n        (_actual$constructor = actual.constructor) !== null &&\n        _actual$constructor !== undefined &&\n        _actual$constructor.name\n      ) {\n        msg += `. Received an instance of ${actual.constructor.name}`\n      } else {\n        const inspected = inspect(actual, {\n          depth: -1\n        })\n        msg += `. Received ${inspected}`\n      }\n    } else {\n      let inspected = inspect(actual, {\n        colors: false\n      })\n      if (inspected.length > 25) {\n        inspected = `${inspected.slice(0, 25)}...`\n      }\n      msg += `. Received type ${typeof actual} (${inspected})`\n    }\n    return msg\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_ARG_VALUE',\n  (name, value, reason = 'is invalid') => {\n    let inspected = inspect(value)\n    if (inspected.length > 128) {\n      inspected = inspected.slice(0, 128) + '...'\n    }\n    const type = name.includes('.') ? 'property' : 'argument'\n    return `The ${type} '${name}' ${reason}. Received ${inspected}`\n  },\n  TypeError\n)\nE(\n  'ERR_INVALID_RETURN_VALUE',\n  (input, name, value) => {\n    var _value$constructor\n    const type =\n      value !== null &&\n      value !== undefined &&\n      (_value$constructor = value.constructor) !== null &&\n      _value$constructor !== undefined &&\n      _value$constructor.name\n        ? `instance of ${value.constructor.name}`\n        : `type ${typeof value}`\n    return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n  },\n  TypeError\n)\nE(\n  'ERR_MISSING_ARGS',\n  (...args) => {\n    assert(args.length > 0, 'At least one arg needs to be specified')\n    let msg\n    const len = args.length\n    args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n    switch (len) {\n      case 1:\n        msg += `The ${args[0]} argument`\n        break\n      case 2:\n        msg += `The ${args[0]} and ${args[1]} arguments`\n        break\n      default:\n        {\n          const last = args.pop()\n          msg += `The ${args.join(', ')}, and ${last} arguments`\n        }\n        break\n    }\n    return `${msg} must be specified`\n  },\n  TypeError\n)\nE(\n  'ERR_OUT_OF_RANGE',\n  (str, range, input) => {\n    assert(range, 'Missing \"range\" argument')\n    let received\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > 2n ** 32n || input < -(2n ** 32n)) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    } else {\n      received = inspect(input)\n    }\n    return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n  },\n  RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n  AbortError,\n  aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n  hideStackFrames,\n  codes\n}\n", "/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n  ArrayIsArray,\n  ArrayPrototypeIncludes,\n  ArrayPrototypeJoin,\n  ArrayPrototypeMap,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberMAX_SAFE_INTEGER,\n  NumberMIN_SAFE_INTEGER,\n  NumberParseInt,\n  ObjectPrototypeHasOwnProperty,\n  RegExpPrototypeExec,\n  String,\n  StringPrototypeToUpperCase,\n  StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n  hideStackFrames,\n  codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n  return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n  return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n *\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n  if (typeof value === 'undefined') {\n    value = def\n  }\n  if (typeof value === 'string') {\n    if (RegExpPrototypeExec(octalReg, value) === null) {\n      throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n    }\n    value = NumberParseInt(value, 8)\n  }\n  validateUint32(value, name)\n  return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n  // The defaults for min and max correspond to the limits of 32-bit integers.\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n  if (typeof value !== 'number') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n  if (!NumberIsInteger(value)) {\n    throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n  }\n  const min = positive ? 1 : 0\n  // 2 ** 32 === 4294967296\n  const max = 4294967295\n  if (value < min || value > max) {\n    throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n  }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n  if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n  if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n  if (\n    (min != null && value < min) ||\n    (max != null && value > max) ||\n    ((min != null || max != null) && NumberIsNaN(value))\n  ) {\n    throw new ERR_OUT_OF_RANGE(\n      name,\n      `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n      value\n    )\n  }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n  if (!ArrayPrototypeIncludes(oneOf, value)) {\n    const allowed = ArrayPrototypeJoin(\n      ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n      ', '\n    )\n    const reason = 'must be one of: ' + allowed\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n  if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n  return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n *   allowArray?: boolean,\n *   allowFunction?: boolean,\n *   nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n  const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n  const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n  const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n  if (\n    (!nullable && value === null) ||\n    (!allowArray && ArrayIsArray(value)) ||\n    (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n  ) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n  }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n *                                of \"dictionary\" here, which means any value\n *                                whose Type is either Undefined, Null, or\n *                                Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n  if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n  }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n  if (!ArrayIsArray(value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n  }\n  if (value.length < minLength) {\n    const reason = `must be longer than ${minLength}`\n    throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n  }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateString(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n  validateArray(value, name)\n  for (let i = 0; i < value.length; i++) {\n    validateBoolean(value[i], `${name}[${i}]`)\n  }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n  validateString(signal, name)\n  if (signals[signal] === undefined) {\n    if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n      throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n    }\n    throw new ERR_UNKNOWN_SIGNAL(signal)\n  }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n  if (!isArrayBufferView(buffer)) {\n    throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n  }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n  const normalizedEncoding = normalizeEncoding(encoding)\n  const length = data.length\n  if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n    throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n  }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n  if (\n    (typeof port !== 'number' && typeof port !== 'string') ||\n    (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n    +port !== +port >>> 0 ||\n    port > 0xffff ||\n    (port === 0 && !allowZero)\n  ) {\n    throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n  }\n  return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n  if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n  if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n  if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n  if (!ArrayPrototypeIncludes(union, value)) {\n    throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n  }\n}\n\n/*\n  The rules for the Link header field are described here:\n  https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n  This regex validates any string surrounded by angle brackets\n  (not necessarily a valid URI reference) followed by zero or more\n  link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n  if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n    throw new ERR_INVALID_ARG_VALUE(\n      name,\n      value,\n      'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n    )\n  }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n  if (typeof hints === 'string') {\n    validateLinkHeaderFormat(hints, 'hints')\n    return hints\n  } else if (ArrayIsArray(hints)) {\n    const hintsLength = hints.length\n    let result = ''\n    if (hintsLength === 0) {\n      return result\n    }\n    for (let i = 0; i < hintsLength; i++) {\n      const link = hints[i]\n      validateLinkHeaderFormat(link, 'hints')\n      result += link\n      if (i !== hintsLength - 1) {\n        result += ', '\n      }\n    }\n    return result\n  }\n  throw new ERR_INVALID_ARG_VALUE(\n    'hints',\n    hints,\n    'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n  )\n}\nmodule.exports = {\n  isInt32,\n  isUint32,\n  parseFileMode,\n  validateArray,\n  validateStringArray,\n  validateBooleanArray,\n  validateBoolean,\n  validateBuffer,\n  validateDictionary,\n  validateEncoding,\n  validateFunction,\n  validateInt32,\n  validateInteger,\n  validateNumber,\n  validateObject,\n  validateOneOf,\n  validatePlainFunction,\n  validatePort,\n  validateSignalName,\n  validateString,\n  validateUint32,\n  validateUndefined,\n  validateUnion,\n  validateAbortSignal,\n  validateLinkHeaderValue\n}\n", "'use strict'\n\nconst { Symbol, SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\nconst kDestroyed = Symbol('kDestroyed')\nconst kIsErrored = Symbol('kIsErrored')\nconst kIsReadable = Symbol('kIsReadable')\nconst kIsDisturbed = Symbol('kIsDisturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n  var _obj$_readableState\n  return !!(\n    (\n      obj &&\n      typeof obj.pipe === 'function' &&\n      typeof obj.on === 'function' &&\n      (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n      (!obj._writableState ||\n        ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n          ? undefined\n          : _obj$_readableState.readable) !== false) &&\n      // Duplex\n      (!obj._writableState || obj._readableState)\n    ) // Writable has .pipe.\n  )\n}\n\nfunction isWritableNodeStream(obj) {\n  var _obj$_writableState\n  return !!(\n    (\n      obj &&\n      typeof obj.write === 'function' &&\n      typeof obj.on === 'function' &&\n      (!obj._readableState ||\n        ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n          ? undefined\n          : _obj$_writableState.writable) !== false)\n    ) // Duplex\n  )\n}\n\nfunction isDuplexNodeStream(obj) {\n  return !!(\n    obj &&\n    typeof obj.pipe === 'function' &&\n    obj._readableState &&\n    typeof obj.on === 'function' &&\n    typeof obj.write === 'function'\n  )\n}\nfunction isNodeStream(obj) {\n  return (\n    obj &&\n    (obj._readableState ||\n      obj._writableState ||\n      (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n      (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n  )\n}\nfunction isReadableStream(obj) {\n  return !!(\n    obj &&\n    !isNodeStream(obj) &&\n    typeof obj.pipeThrough === 'function' &&\n    typeof obj.getReader === 'function' &&\n    typeof obj.cancel === 'function'\n  )\n}\nfunction isWritableStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n  return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n  return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n  if (obj == null) return false\n  if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n  if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n  return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return !!(stream.destroyed || stream[kDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableEnded === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n  return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n  if (!isWritableNodeStream(stream)) return null\n  if (stream.writableFinished === true) return true\n  const wState = stream._writableState\n  if (wState !== null && wState !== undefined && wState.errored) return false\n  if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n  return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n  if (!isReadableNodeStream(stream)) return null\n  if (stream.readableEnded === true) return true\n  const rState = stream._readableState\n  if (!rState || rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n  return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n  if (!isReadableNodeStream(stream)) return null\n  const rState = stream._readableState\n  if (rState !== null && rState !== undefined && rState.errored) return false\n  if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n  return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n  if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n  if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n  if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n  if (isDestroyed(stream)) return false\n  return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (isDestroyed(stream)) {\n    return true\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n    return false\n  }\n  if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n    return false\n  }\n  return true\n}\nfunction isWritableErrored(stream) {\n  var _stream$_writableStat, _stream$_writableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.writableErrored) {\n    return stream.writableErrored\n  }\n  return (_stream$_writableStat =\n    (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n      ? undefined\n      : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n    ? _stream$_writableStat\n    : null\n}\nfunction isReadableErrored(stream) {\n  var _stream$_readableStat, _stream$_readableStat2\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (stream.readableErrored) {\n    return stream.readableErrored\n  }\n  return (_stream$_readableStat =\n    (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n      ? undefined\n      : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n    ? _stream$_readableStat\n    : null\n}\nfunction isClosed(stream) {\n  if (!isNodeStream(stream)) {\n    return null\n  }\n  if (typeof stream.closed === 'boolean') {\n    return stream.closed\n  }\n  const wState = stream._writableState\n  const rState = stream._readableState\n  if (\n    typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n    typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n  ) {\n    return (\n      (wState === null || wState === undefined ? undefined : wState.closed) ||\n      (rState === null || rState === undefined ? undefined : rState.closed)\n    )\n  }\n  if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n    return stream._closed\n  }\n  return null\n}\nfunction isOutgoingMessage(stream) {\n  return (\n    typeof stream._closed === 'boolean' &&\n    typeof stream._defaultKeepAlive === 'boolean' &&\n    typeof stream._removedConnection === 'boolean' &&\n    typeof stream._removedContLen === 'boolean'\n  )\n}\nfunction isServerResponse(stream) {\n  return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n  var _stream$req\n  return (\n    typeof stream._consuming === 'boolean' &&\n    typeof stream._dumped === 'boolean' &&\n    ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n      undefined\n  )\n}\nfunction willEmitClose(stream) {\n  if (!isNodeStream(stream)) return null\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const state = wState || rState\n  return (\n    (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n  )\n}\nfunction isDisturbed(stream) {\n  var _stream$kIsDisturbed\n  return !!(\n    stream &&\n    ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n      ? _stream$kIsDisturbed\n      : stream.readableDidRead || stream.readableAborted)\n  )\n}\nfunction isErrored(stream) {\n  var _ref,\n    _ref2,\n    _ref3,\n    _ref4,\n    _ref5,\n    _stream$kIsErrored,\n    _stream$_readableStat3,\n    _stream$_writableStat3,\n    _stream$_readableStat4,\n    _stream$_writableStat4\n  return !!(\n    stream &&\n    ((_ref =\n      (_ref2 =\n        (_ref3 =\n          (_ref4 =\n            (_ref5 =\n              (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n                ? _stream$kIsErrored\n                : stream.readableErrored) !== null && _ref5 !== undefined\n              ? _ref5\n              : stream.writableErrored) !== null && _ref4 !== undefined\n            ? _ref4\n            : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n            ? undefined\n            : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n          ? _ref3\n          : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n          ? undefined\n          : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n        ? _ref2\n        : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n        ? undefined\n        : _stream$_readableStat4.errored) !== null && _ref !== undefined\n      ? _ref\n      : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n      ? undefined\n      : _stream$_writableStat4.errored)\n  )\n}\nmodule.exports = {\n  kDestroyed,\n  isDisturbed,\n  kIsDisturbed,\n  isErrored,\n  kIsErrored,\n  isReadable,\n  kIsReadable,\n  kIsClosedPromise,\n  kControllerErrorFunction,\n  isClosed,\n  isDestroyed,\n  isDuplexNodeStream,\n  isFinished,\n  isIterable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableEnded,\n  isReadableFinished,\n  isReadableErrored,\n  isNodeStream,\n  isWebStream,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableEnded,\n  isWritableFinished,\n  isWritableErrored,\n  isServerRequest,\n  isServerResponse,\n  willEmitClose,\n  isTransformStream\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen } = require('../../ours/primordials')\nconst {\n  isClosed,\n  isReadable,\n  isReadableNodeStream,\n  isReadableStream,\n  isReadableFinished,\n  isReadableErrored,\n  isWritable,\n  isWritableNodeStream,\n  isWritableStream,\n  isWritableFinished,\n  isWritableErrored,\n  isNodeStream,\n  willEmitClose: _willEmitClose,\n  kIsClosedPromise\n} = require('./utils')\nfunction isRequest(stream) {\n  return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n  var _options$readable, _options$writable\n  if (arguments.length === 2) {\n    callback = options\n    options = kEmptyObject\n  } else if (options == null) {\n    options = kEmptyObject\n  } else {\n    validateObject(options, 'options')\n  }\n  validateFunction(callback, 'callback')\n  validateAbortSignal(options.signal, 'options.signal')\n  callback = once(callback)\n  if (isReadableStream(stream) || isWritableStream(stream)) {\n    return eosWeb(stream, options, callback)\n  }\n  if (!isNodeStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  const readable =\n    (_options$readable = options.readable) !== null && _options$readable !== undefined\n      ? _options$readable\n      : isReadableNodeStream(stream)\n  const writable =\n    (_options$writable = options.writable) !== null && _options$writable !== undefined\n      ? _options$writable\n      : isWritableNodeStream(stream)\n  const wState = stream._writableState\n  const rState = stream._readableState\n  const onlegacyfinish = () => {\n    if (!stream.writable) {\n      onfinish()\n    }\n  }\n\n  // TODO (ronag): Improve soft detection to include core modules and\n  // common ecosystem modules that do properly emit 'close' but fail\n  // this generic check.\n  let willEmitClose =\n    _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n  let writableFinished = isWritableFinished(stream, false)\n  const onfinish = () => {\n    writableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.readable || readable)) {\n      return\n    }\n    if (!readable || readableFinished) {\n      callback.call(stream)\n    }\n  }\n  let readableFinished = isReadableFinished(stream, false)\n  const onend = () => {\n    readableFinished = true\n    // Stream should not be destroyed here. If it is that\n    // means that user space is doing something differently and\n    // we cannot trust willEmitClose.\n    if (stream.destroyed) {\n      willEmitClose = false\n    }\n    if (willEmitClose && (!stream.writable || writable)) {\n      return\n    }\n    if (!writable || writableFinished) {\n      callback.call(stream)\n    }\n  }\n  const onerror = (err) => {\n    callback.call(stream, err)\n  }\n  let closed = isClosed(stream)\n  const onclose = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n      if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    if (writable && !writableFinished) {\n      if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n    }\n    callback.call(stream)\n  }\n  const onclosed = () => {\n    closed = true\n    const errored = isWritableErrored(stream) || isReadableErrored(stream)\n    if (errored && typeof errored !== 'boolean') {\n      return callback.call(stream, errored)\n    }\n    callback.call(stream)\n  }\n  const onrequest = () => {\n    stream.req.on('finish', onfinish)\n  }\n  if (isRequest(stream)) {\n    stream.on('complete', onfinish)\n    if (!willEmitClose) {\n      stream.on('abort', onclose)\n    }\n    if (stream.req) {\n      onrequest()\n    } else {\n      stream.on('request', onrequest)\n    }\n  } else if (writable && !wState) {\n    // legacy streams\n    stream.on('end', onlegacyfinish)\n    stream.on('close', onlegacyfinish)\n  }\n\n  // Not all streams will emit 'close' after 'aborted'.\n  if (!willEmitClose && typeof stream.aborted === 'boolean') {\n    stream.on('aborted', onclose)\n  }\n  stream.on('end', onend)\n  stream.on('finish', onfinish)\n  if (options.error !== false) {\n    stream.on('error', onerror)\n  }\n  stream.on('close', onclose)\n  if (closed) {\n    process.nextTick(onclose)\n  } else if (\n    (wState !== null && wState !== undefined && wState.errorEmitted) ||\n    (rState !== null && rState !== undefined && rState.errorEmitted)\n  ) {\n    if (!willEmitClose) {\n      process.nextTick(onclosed)\n    }\n  } else if (\n    !readable &&\n    (!willEmitClose || isReadable(stream)) &&\n    (writableFinished || isWritable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (\n    !writable &&\n    (!willEmitClose || isWritable(stream)) &&\n    (readableFinished || isReadable(stream) === false)\n  ) {\n    process.nextTick(onclosed)\n  } else if (rState && stream.req && stream.aborted) {\n    process.nextTick(onclosed)\n  }\n  const cleanup = () => {\n    callback = nop\n    stream.removeListener('aborted', onclose)\n    stream.removeListener('complete', onfinish)\n    stream.removeListener('abort', onclose)\n    stream.removeListener('request', onrequest)\n    if (stream.req) stream.req.removeListener('finish', onfinish)\n    stream.removeListener('end', onlegacyfinish)\n    stream.removeListener('close', onlegacyfinish)\n    stream.removeListener('finish', onfinish)\n    stream.removeListener('end', onend)\n    stream.removeListener('error', onerror)\n    stream.removeListener('close', onclose)\n  }\n  if (options.signal && !closed) {\n    const abort = () => {\n      // Keep it because cleanup removes it.\n      const endCallback = callback\n      cleanup()\n      endCallback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      const originalCallback = callback\n      callback = once((...args) => {\n        options.signal.removeEventListener('abort', abort)\n        originalCallback.apply(stream, args)\n      })\n      options.signal.addEventListener('abort', abort)\n    }\n  }\n  return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n  let isAborted = false\n  let abort = nop\n  if (options.signal) {\n    abort = () => {\n      isAborted = true\n      callback.call(\n        stream,\n        new AbortError(undefined, {\n          cause: options.signal.reason\n        })\n      )\n    }\n    if (options.signal.aborted) {\n      process.nextTick(abort)\n    } else {\n      const originalCallback = callback\n      callback = once((...args) => {\n        options.signal.removeEventListener('abort', abort)\n        originalCallback.apply(stream, args)\n      })\n      options.signal.addEventListener('abort', abort)\n    }\n  }\n  const resolverFn = (...args) => {\n    if (!isAborted) {\n      process.nextTick(() => callback.apply(stream, args))\n    }\n  }\n  PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n  return nop\n}\nfunction finished(stream, opts) {\n  var _opts\n  let autoCleanup = false\n  if (opts === null) {\n    opts = kEmptyObject\n  }\n  if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n    validateBoolean(opts.cleanup, 'cleanup')\n    autoCleanup = opts.cleanup\n  }\n  return new Promise((resolve, reject) => {\n    const cleanup = eos(stream, opts, (err) => {\n      if (autoCleanup) {\n        cleanup()\n      }\n      if (err) {\n        reject(err)\n      } else {\n        resolve()\n      }\n    })\n  })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n  aggregateTwoErrors,\n  codes: { ERR_MULTIPLE_CALLBACK },\n  AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n  if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n  }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n  const r = this._readableState\n  const w = this._writableState\n  // With duplex streams we use the writable side for state.\n  const s = w || r\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    if (typeof cb === 'function') {\n      cb()\n    }\n    return this\n  }\n\n  // We set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n  checkError(err, w, r)\n  if (w) {\n    w.destroyed = true\n  }\n  if (r) {\n    r.destroyed = true\n  }\n\n  // If still constructing then defer calling _destroy.\n  if (!s.constructed) {\n    this.once(kDestroy, function (er) {\n      _destroy(this, aggregateTwoErrors(er, err), cb)\n    })\n  } else {\n    _destroy(this, err, cb)\n  }\n  return this\n}\nfunction _destroy(self, err, cb) {\n  let called = false\n  function onDestroy(err) {\n    if (called) {\n      return\n    }\n    called = true\n    const r = self._readableState\n    const w = self._writableState\n    checkError(err, w, r)\n    if (w) {\n      w.closed = true\n    }\n    if (r) {\n      r.closed = true\n    }\n    if (typeof cb === 'function') {\n      cb(err)\n    }\n    if (err) {\n      process.nextTick(emitErrorCloseNT, self, err)\n    } else {\n      process.nextTick(emitCloseNT, self)\n    }\n  }\n  try {\n    self._destroy(err || null, onDestroy)\n  } catch (err) {\n    onDestroy(err)\n  }\n}\nfunction emitErrorCloseNT(self, err) {\n  emitErrorNT(self, err)\n  emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n  const r = self._readableState\n  const w = self._writableState\n  if (w) {\n    w.closeEmitted = true\n  }\n  if (r) {\n    r.closeEmitted = true\n  }\n  if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n    self.emit('close')\n  }\n}\nfunction emitErrorNT(self, err) {\n  const r = self._readableState\n  const w = self._writableState\n  if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n    return\n  }\n  if (w) {\n    w.errorEmitted = true\n  }\n  if (r) {\n    r.errorEmitted = true\n  }\n  self.emit('error', err)\n}\nfunction undestroy() {\n  const r = this._readableState\n  const w = this._writableState\n  if (r) {\n    r.constructed = true\n    r.closed = false\n    r.closeEmitted = false\n    r.destroyed = false\n    r.errored = null\n    r.errorEmitted = false\n    r.reading = false\n    r.ended = r.readable === false\n    r.endEmitted = r.readable === false\n  }\n  if (w) {\n    w.constructed = true\n    w.destroyed = false\n    w.closed = false\n    w.closeEmitted = false\n    w.errored = null\n    w.errorEmitted = false\n    w.finalCalled = false\n    w.prefinished = false\n    w.ended = w.writable === false\n    w.ending = w.writable === false\n    w.finished = w.writable === false\n  }\n}\nfunction errorOrDestroy(stream, err, sync) {\n  // We have tests that rely on errors being emitted\n  // in the same tick, so changing this is semver major.\n  // For now when you opt-in to autoDestroy we allow\n  // the error to be emitted nextTick. In a future\n  // semver major update we should change the default to this.\n\n  const r = stream._readableState\n  const w = stream._writableState\n  if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n    return this\n  }\n  if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n    stream.destroy(err)\n  else if (err) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    err.stack // eslint-disable-line no-unused-expressions\n\n    if (w && !w.errored) {\n      w.errored = err\n    }\n    if (r && !r.errored) {\n      r.errored = err\n    }\n    if (sync) {\n      process.nextTick(emitErrorNT, stream, err)\n    } else {\n      emitErrorNT(stream, err)\n    }\n  }\n}\nfunction construct(stream, cb) {\n  if (typeof stream._construct !== 'function') {\n    return\n  }\n  const r = stream._readableState\n  const w = stream._writableState\n  if (r) {\n    r.constructed = false\n  }\n  if (w) {\n    w.constructed = false\n  }\n  stream.once(kConstruct, cb)\n  if (stream.listenerCount(kConstruct) > 1) {\n    // Duplex\n    return\n  }\n  process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n  let called = false\n  function onConstruct(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    const r = stream._readableState\n    const w = stream._writableState\n    const s = w || r\n    if (r) {\n      r.constructed = true\n    }\n    if (w) {\n      w.constructed = true\n    }\n    if (s.destroyed) {\n      stream.emit(kDestroy, err)\n    } else if (err) {\n      errorOrDestroy(stream, err, true)\n    } else {\n      process.nextTick(emitConstructNT, stream)\n    }\n  }\n  try {\n    stream._construct((err) => {\n      process.nextTick(onConstruct, err)\n    })\n  } catch (err) {\n    process.nextTick(onConstruct, err)\n  }\n}\nfunction emitConstructNT(stream) {\n  stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n  return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n  stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n  stream.emit('error', err)\n  process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n  if (!stream || isDestroyed(stream)) {\n    return\n  }\n  if (!err && !isFinished(stream)) {\n    err = new AbortError()\n  }\n\n  // TODO: Remove isRequest branches.\n  if (isServerRequest(stream)) {\n    stream.socket = null\n    stream.destroy(err)\n  } else if (isRequest(stream)) {\n    stream.abort()\n  } else if (isRequest(stream.req)) {\n    stream.req.abort()\n  } else if (typeof stream.destroy === 'function') {\n    stream.destroy(err)\n  } else if (typeof stream.close === 'function') {\n    // TODO: Don't lose err?\n    stream.close()\n  } else if (err) {\n    process.nextTick(emitErrorCloseLegacy, stream, err)\n  } else {\n    process.nextTick(emitCloseLegacy, stream)\n  }\n  if (!stream.destroyed) {\n    stream[kDestroyed] = true\n  }\n}\nmodule.exports = {\n  construct,\n  destroyer,\n  destroy,\n  undestroy,\n  errorOrDestroy\n}\n", "'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n  EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n  const source = this\n  function ondata(chunk) {\n    if (dest.writable && dest.write(chunk) === false && source.pause) {\n      source.pause()\n    }\n  }\n  source.on('data', ondata)\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume()\n    }\n  }\n  dest.on('drain', ondrain)\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend)\n    source.on('close', onclose)\n  }\n  let didOnEnd = false\n  function onend() {\n    if (didOnEnd) return\n    didOnEnd = true\n    dest.end()\n  }\n  function onclose() {\n    if (didOnEnd) return\n    didOnEnd = true\n    if (typeof dest.destroy === 'function') dest.destroy()\n  }\n\n  // Don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup()\n    if (EE.listenerCount(this, 'error') === 0) {\n      this.emit('error', er)\n    }\n  }\n  prependListener(source, 'error', onerror)\n  prependListener(dest, 'error', onerror)\n\n  // Remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata)\n    dest.removeListener('drain', ondrain)\n    source.removeListener('end', onend)\n    source.removeListener('close', onclose)\n    source.removeListener('error', onerror)\n    dest.removeListener('error', onerror)\n    source.removeListener('end', cleanup)\n    source.removeListener('close', cleanup)\n    dest.removeListener('close', cleanup)\n  }\n  source.on('end', cleanup)\n  source.on('close', cleanup)\n  dest.on('close', cleanup)\n  dest.emit('pipe', source)\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest\n}\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n  else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n  else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n  Stream,\n  prependListener\n}\n", "'use strict'\n\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n  }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n  validateAbortSignal(signal, 'signal')\n  if (!isNodeStream(stream) && !isWebStream(stream)) {\n    throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n  }\n  return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n  if (typeof signal !== 'object' || !('aborted' in signal)) {\n    return stream\n  }\n  const onAbort = isNodeStream(stream)\n    ? () => {\n        stream.destroy(\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n    : () => {\n        stream[kControllerErrorFunction](\n          new AbortError(undefined, {\n            cause: signal.reason\n          })\n        )\n      }\n  if (signal.aborted) {\n    onAbort()\n  } else {\n    signal.addEventListener('abort', onAbort)\n    eos(stream, () => signal.removeEventListener('abort', onAbort))\n  }\n  return stream\n}\n", "'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n  constructor() {\n    this.head = null\n    this.tail = null\n    this.length = 0\n  }\n  push(v) {\n    const entry = {\n      data: v,\n      next: null\n    }\n    if (this.length > 0) this.tail.next = entry\n    else this.head = entry\n    this.tail = entry\n    ++this.length\n  }\n  unshift(v) {\n    const entry = {\n      data: v,\n      next: this.head\n    }\n    if (this.length === 0) this.tail = entry\n    this.head = entry\n    ++this.length\n  }\n  shift() {\n    if (this.length === 0) return\n    const ret = this.head.data\n    if (this.length === 1) this.head = this.tail = null\n    else this.head = this.head.next\n    --this.length\n    return ret\n  }\n  clear() {\n    this.head = this.tail = null\n    this.length = 0\n  }\n  join(s) {\n    if (this.length === 0) return ''\n    let p = this.head\n    let ret = '' + p.data\n    while ((p = p.next) !== null) ret += s + p.data\n    return ret\n  }\n  concat(n) {\n    if (this.length === 0) return Buffer.alloc(0)\n    const ret = Buffer.allocUnsafe(n >>> 0)\n    let p = this.head\n    let i = 0\n    while (p) {\n      TypedArrayPrototypeSet(ret, p.data, i)\n      i += p.data.length\n      p = p.next\n    }\n    return ret\n  }\n\n  // Consumes a specified amount of bytes or characters from the buffered data.\n  consume(n, hasStrings) {\n    const data = this.head.data\n    if (n < data.length) {\n      // `slice` is the same for buffers and strings.\n      const slice = data.slice(0, n)\n      this.head.data = data.slice(n)\n      return slice\n    }\n    if (n === data.length) {\n      // First chunk is a perfect match.\n      return this.shift()\n    }\n    // Result spans more than one buffer.\n    return hasStrings ? this._getString(n) : this._getBuffer(n)\n  }\n  first() {\n    return this.head.data\n  }\n  *[SymbolIterator]() {\n    for (let p = this.head; p; p = p.next) {\n      yield p.data\n    }\n  }\n\n  // Consumes a specified amount of characters from the buffered data.\n  _getString(n) {\n    let ret = ''\n    let p = this.head\n    let c = 0\n    do {\n      const str = p.data\n      if (n > str.length) {\n        ret += str\n        n -= str.length\n      } else {\n        if (n === str.length) {\n          ret += str\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          ret += StringPrototypeSlice(str, 0, n)\n          this.head = p\n          p.data = StringPrototypeSlice(str, n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Consumes a specified amount of bytes from the buffered data.\n  _getBuffer(n) {\n    const ret = Buffer.allocUnsafe(n)\n    const retLen = n\n    let p = this.head\n    let c = 0\n    do {\n      const buf = p.data\n      if (n > buf.length) {\n        TypedArrayPrototypeSet(ret, buf, retLen - n)\n        n -= buf.length\n      } else {\n        if (n === buf.length) {\n          TypedArrayPrototypeSet(ret, buf, retLen - n)\n          ++c\n          if (p.next) this.head = p.next\n          else this.head = this.tail = null\n        } else {\n          TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n          this.head = p\n          p.data = buf.slice(n)\n        }\n        break\n      }\n      ++c\n    } while ((p = p.next) !== null)\n    this.length -= c\n    return ret\n  }\n\n  // Make sure the linked list only shows the minimal necessary information.\n  [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n    return inspect(this, {\n      ...options,\n      // Only inspect one level.\n      depth: 0,\n      // It should not recurse.\n      customInspect: false\n    })\n  }\n}\n", "'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n  return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n  return objectMode ? 16 : 16 * 1024\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n  const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n  if (hwm != null) {\n    if (!NumberIsInteger(hwm) || hwm < 0) {\n      const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n      throw new ERR_INVALID_ARG_VALUE(name, hwm)\n    }\n    return MathFloor(hwm)\n  }\n\n  // Default value\n  return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n  getHighWaterMark,\n  getDefaultHighWaterMark\n}\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n  let iterator\n  if (typeof iterable === 'string' || iterable instanceof Buffer) {\n    return new Readable({\n      objectMode: true,\n      ...opts,\n      read() {\n        this.push(iterable)\n        this.push(null)\n      }\n    })\n  }\n  let isAsync\n  if (iterable && iterable[SymbolAsyncIterator]) {\n    isAsync = true\n    iterator = iterable[SymbolAsyncIterator]()\n  } else if (iterable && iterable[SymbolIterator]) {\n    isAsync = false\n    iterator = iterable[SymbolIterator]()\n  } else {\n    throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n  }\n  const readable = new Readable({\n    objectMode: true,\n    highWaterMark: 1,\n    // TODO(ronag): What options should be allowed?\n    ...opts\n  })\n\n  // Flag to protect against _read\n  // being called before last iteration completion.\n  let reading = false\n  readable._read = function () {\n    if (!reading) {\n      reading = true\n      next()\n    }\n  }\n  readable._destroy = function (error, cb) {\n    PromisePrototypeThen(\n      close(error),\n      () => process.nextTick(cb, error),\n      // nextTick is here in case cb throws\n      (e) => process.nextTick(cb, e || error)\n    )\n  }\n  async function close(error) {\n    const hadError = error !== undefined && error !== null\n    const hasThrow = typeof iterator.throw === 'function'\n    if (hadError && hasThrow) {\n      const { value, done } = await iterator.throw(error)\n      await value\n      if (done) {\n        return\n      }\n    }\n    if (typeof iterator.return === 'function') {\n      const { value } = await iterator.return()\n      await value\n    }\n  }\n  async function next() {\n    for (;;) {\n      try {\n        const { value, done } = isAsync ? await iterator.next() : iterator.next()\n        if (done) {\n          readable.push(null)\n        } else {\n          const res = value && typeof value.then === 'function' ? await value : value\n          if (res === null) {\n            reading = false\n            throw new ERR_STREAM_NULL_VALUES()\n          } else if (readable.push(res)) {\n            continue\n          } else {\n            reading = false\n          }\n        }\n      } catch (err) {\n        readable.destroy(err)\n      }\n      break\n    }\n  }\n  return readable\n}\nmodule.exports = from\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst {\n  ArrayPrototypeIndexOf,\n  NumberIsInteger,\n  NumberIsNaN,\n  NumberParseInt,\n  ObjectDefineProperties,\n  ObjectKeys,\n  ObjectSetPrototypeOf,\n  Promise,\n  SafeSet,\n  SymbolAsyncIterator,\n  Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n  debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_METHOD_NOT_IMPLEMENTED,\n    ERR_OUT_OF_RANGE,\n    ERR_STREAM_PUSH_AFTER_EOF,\n    ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n  }\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nfunction ReadableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.readableObjectMode)\n\n  // The point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift().\n  this.buffer = new BufferList()\n  this.length = 0\n  this.pipes = []\n  this.flowing = null\n  this.ended = false\n  this.endEmitted = false\n  this.reading = false\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // A flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true\n\n  // Whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false\n  this.emittedReadable = false\n  this.readableListening = false\n  this.resumeScheduled = false\n  this[kPaused] = null\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'end' (and potentially 'finish').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Has it been destroyed.\n  this.destroyed = false\n\n  // Indicates whether the stream has errored. When true no further\n  // _read calls, 'data' or 'readable' events should occur. This is needed\n  // since when autoDestroy is disabled we need a way to tell whether the\n  // stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Ref the piped dest which we need a drain event on it\n  // type: null | Writable | Set<Writable>.\n  this.awaitDrainWriters = null\n  this.multiAwaitDrain = false\n\n  // If true, a maybeReadMore has been scheduled.\n  this.readingMore = false\n  this.dataEmitted = false\n  this.decoder = null\n  this.encoding = null\n  if (options && options.encoding) {\n    this.decoder = new StringDecoder(options.encoding)\n    this.encoding = options.encoding\n  }\n}\nfunction Readable(options) {\n  if (!(this instanceof Readable)) return new Readable(options)\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the ReadableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  this._readableState = new ReadableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    if (this._readableState.needReadable) {\n      maybeReadMore(this, this._readableState)\n    }\n  })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n  return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n  debug('readableAddChunk', chunk)\n  const state = stream._readableState\n  let err\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding\n      if (state.encoding !== encoding) {\n        if (addToFront && state.encoding) {\n          // When unshifting, if state.encoding is set, we have to save\n          // the string in the BufferList with the state encoding.\n          chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n        } else {\n          chunk = Buffer.from(chunk, encoding)\n          encoding = ''\n        }\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = ''\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = ''\n    } else if (chunk != null) {\n      err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  if (err) {\n    errorOrDestroy(stream, err)\n  } else if (chunk === null) {\n    state.reading = false\n    onEofChunk(stream, state)\n  } else if (state.objectMode || (chunk && chunk.length > 0)) {\n    if (addToFront) {\n      if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n      else if (state.destroyed || state.errored) return false\n      else addChunk(stream, state, chunk, true)\n    } else if (state.ended) {\n      errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n    } else if (state.destroyed || state.errored) {\n      return false\n    } else {\n      state.reading = false\n      if (state.decoder && !encoding) {\n        chunk = state.decoder.write(chunk)\n        if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n        else maybeReadMore(stream, state)\n      } else {\n        addChunk(stream, state, chunk, false)\n      }\n    }\n  } else if (!addToFront) {\n    state.reading = false\n    maybeReadMore(stream, state)\n  }\n\n  // We can push more data if we are below the highWaterMark.\n  // Also, if we have no data yet, we can stand some more bytes.\n  // This is to work around cases where hwm=0, such as the repl.\n  return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n    // Use the guard to avoid creating `Set()` repeatedly\n    // when we have multiple pipes.\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n    state.dataEmitted = true\n    stream.emit('data', chunk)\n  } else {\n    // Update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length\n    if (addToFront) state.buffer.unshift(chunk)\n    else state.buffer.push(chunk)\n    if (state.needReadable) emitReadable(stream)\n  }\n  maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n  const state = this._readableState\n  return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  const decoder = new StringDecoder(enc)\n  this._readableState.decoder = decoder\n  // If setEncoding(null), decoder.encoding equals utf8.\n  this._readableState.encoding = this._readableState.decoder.encoding\n  const buffer = this._readableState.buffer\n  // Iterate over current buffer to convert already stored Buffers:\n  let content = ''\n  for (const data of buffer) {\n    content += decoder.write(data)\n  }\n  buffer.clear()\n  if (content !== '') buffer.push(content)\n  this._readableState.length = content.length\n  return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n  if (n > MAX_HWM) {\n    throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts.\n    n--\n    n |= n >>> 1\n    n |= n >>> 2\n    n |= n >>> 4\n    n |= n >>> 8\n    n |= n >>> 16\n    n++\n  }\n  return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || (state.length === 0 && state.ended)) return 0\n  if (state.objectMode) return 1\n  if (NumberIsNaN(n)) {\n    // Only flow one buffer at a time.\n    if (state.flowing && state.length) return state.buffer.first().length\n    return state.length\n  }\n  if (n <= state.length) return n\n  return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n)\n  // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n  // in this scenario, so we are doing it manually.\n  if (n === undefined) {\n    n = NaN\n  } else if (!NumberIsInteger(n)) {\n    n = NumberParseInt(n, 10)\n  }\n  const state = this._readableState\n  const nOrig = n\n\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n  if (n !== 0) state.emittedReadable = false\n\n  // If we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (\n    n === 0 &&\n    state.needReadable &&\n    ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n  ) {\n    debug('read: emitReadable', state.length, state.ended)\n    if (state.length === 0 && state.ended) endReadable(this)\n    else emitReadable(this)\n    return null\n  }\n  n = howMuchToRead(n, state)\n\n  // If we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this)\n    return null\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  let doRead = state.needReadable\n  debug('need readable', doRead)\n\n  // If we currently have less than the highWaterMark, then also read some.\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true\n    debug('length less than watermark', doRead)\n  }\n\n  // However, if we've ended, then there's no point, if we're already\n  // reading, then it's unnecessary, if we're constructing we have to wait,\n  // and if we're destroyed or errored, then it's not allowed,\n  if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n    doRead = false\n    debug('reading, ended or constructing', doRead)\n  } else if (doRead) {\n    debug('do read')\n    state.reading = true\n    state.sync = true\n    // If the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true\n\n    // Call internal read method\n    try {\n      this._read(state.highWaterMark)\n    } catch (err) {\n      errorOrDestroy(this, err)\n    }\n    state.sync = false\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state)\n  }\n  let ret\n  if (n > 0) ret = fromList(n, state)\n  else ret = null\n  if (ret === null) {\n    state.needReadable = state.length <= state.highWaterMark\n    n = 0\n  } else {\n    state.length -= n\n    if (state.multiAwaitDrain) {\n      state.awaitDrainWriters.clear()\n    } else {\n      state.awaitDrainWriters = null\n    }\n  }\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this)\n  }\n  if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n    state.dataEmitted = true\n    this.emit('data', ret)\n  }\n  return ret\n}\nfunction onEofChunk(stream, state) {\n  debug('onEofChunk')\n  if (state.ended) return\n  if (state.decoder) {\n    const chunk = state.decoder.end()\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk)\n      state.length += state.objectMode ? 1 : chunk.length\n    }\n  }\n  state.ended = true\n  if (state.sync) {\n    // If we are sync, wait until next tick to emit the data.\n    // Otherwise we risk emitting data in the flow()\n    // the readable code triggers during a read() call.\n    emitReadable(stream)\n  } else {\n    // Emit 'readable' now to make sure it gets picked up.\n    state.needReadable = false\n    state.emittedReadable = true\n    // We have to emit readable now that we are EOF. Modules\n    // in the ecosystem (e.g. dicer) rely on this event being sync.\n    emitReadable_(stream)\n  }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  const state = stream._readableState\n  debug('emitReadable', state.needReadable, state.emittedReadable)\n  state.needReadable = false\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing)\n    state.emittedReadable = true\n    process.nextTick(emitReadable_, stream)\n  }\n}\nfunction emitReadable_(stream) {\n  const state = stream._readableState\n  debug('emitReadable_', state.destroyed, state.length, state.ended)\n  if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n    stream.emit('readable')\n    state.emittedReadable = false\n  }\n\n  // The stream needs another readable event if:\n  // 1. It is not flowing, as the flow mechanism will take\n  //    care of it.\n  // 2. It is not ended.\n  // 3. It is below the highWaterMark, so we can schedule\n  //    another readable later.\n  state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n  flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore && state.constructed) {\n    state.readingMore = true\n    process.nextTick(maybeReadMore_, stream, state)\n  }\n}\nfunction maybeReadMore_(stream, state) {\n  // Attempt to read more data if we should.\n  //\n  // The conditions for reading more data are (one of):\n  // - Not enough data buffered (state.length < state.highWaterMark). The loop\n  //   is responsible for filling the buffer with enough data if such data\n  //   is available. If highWaterMark is 0 and we are not in the flowing mode\n  //   we should _not_ attempt to buffer any extra data. We'll get more data\n  //   when the stream consumer calls read() instead.\n  // - No data in the buffer, and the stream is in flowing mode. In this mode\n  //   the loop below is responsible for ensuring read() is called. Failing to\n  //   call read here would abort the flow and there's no other mechanism for\n  //   continuing the flow if the stream consumer has just subscribed to the\n  //   'data' event.\n  //\n  // In addition to the above conditions to keep reading data, the following\n  // conditions prevent the data from being read:\n  // - The stream has ended (state.ended).\n  // - There is already a pending 'read' operation (state.reading). This is a\n  //   case where the stream has called the implementation defined _read()\n  //   method, but they are processing the call asynchronously and have _not_\n  //   called push() with new data. In this case we skip performing more\n  //   read()s. The execution ends in this method again after the _read() ends\n  //   up calling push() with more data.\n  while (\n    !state.reading &&\n    !state.ended &&\n    (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n  ) {\n    const len = state.length\n    debug('maybeReadMore read 0')\n    stream.read(0)\n    if (len === state.length)\n      // Didn't get any data, stop spinning.\n      break\n  }\n  state.readingMore = false\n}\n\n// Abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  const src = this\n  const state = this._readableState\n  if (state.pipes.length === 1) {\n    if (!state.multiAwaitDrain) {\n      state.multiAwaitDrain = true\n      state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n    }\n  }\n  state.pipes.push(dest)\n  debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n  const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n  const endFn = doEnd ? onend : unpipe\n  if (state.endEmitted) process.nextTick(endFn)\n  else src.once('end', endFn)\n  dest.on('unpipe', onunpipe)\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe')\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true\n        cleanup()\n      }\n    }\n  }\n  function onend() {\n    debug('onend')\n    dest.end()\n  }\n  let ondrain\n  let cleanedUp = false\n  function cleanup() {\n    debug('cleanup')\n    // Cleanup event handlers once the pipe is broken.\n    dest.removeListener('close', onclose)\n    dest.removeListener('finish', onfinish)\n    if (ondrain) {\n      dest.removeListener('drain', ondrain)\n    }\n    dest.removeListener('error', onerror)\n    dest.removeListener('unpipe', onunpipe)\n    src.removeListener('end', onend)\n    src.removeListener('end', unpipe)\n    src.removeListener('data', ondata)\n    cleanedUp = true\n\n    // If the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n  }\n  function pause() {\n    // If the user unpiped during `dest.write()`, it is possible\n    // to get stuck in a permanently paused state if that write\n    // also returned false.\n    // => Check whether `dest` is still a piping destination.\n    if (!cleanedUp) {\n      if (state.pipes.length === 1 && state.pipes[0] === dest) {\n        debug('false write response, pause', 0)\n        state.awaitDrainWriters = dest\n        state.multiAwaitDrain = false\n      } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n        debug('false write response, pause', state.awaitDrainWriters.size)\n        state.awaitDrainWriters.add(dest)\n      }\n      src.pause()\n    }\n    if (!ondrain) {\n      // When the dest drains, it reduces the awaitDrain counter\n      // on the source.  This would be more elegant with a .once()\n      // handler in flow(), but adding and removing repeatedly is\n      // too slow.\n      ondrain = pipeOnDrain(src, dest)\n      dest.on('drain', ondrain)\n    }\n  }\n  src.on('data', ondata)\n  function ondata(chunk) {\n    debug('ondata')\n    const ret = dest.write(chunk)\n    debug('dest.write', ret)\n    if (ret === false) {\n      pause()\n    }\n  }\n\n  // If the dest has an error, then stop piping into it.\n  // However, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er)\n    unpipe()\n    dest.removeListener('error', onerror)\n    if (dest.listenerCount('error') === 0) {\n      const s = dest._writableState || dest._readableState\n      if (s && !s.errorEmitted) {\n        // User incorrectly emitted 'error' directly on the stream.\n        errorOrDestroy(dest, er)\n      } else {\n        dest.emit('error', er)\n      }\n    }\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror)\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish)\n    unpipe()\n  }\n  dest.once('close', onclose)\n  function onfinish() {\n    debug('onfinish')\n    dest.removeListener('close', onclose)\n    unpipe()\n  }\n  dest.once('finish', onfinish)\n  function unpipe() {\n    debug('unpipe')\n    src.unpipe(dest)\n  }\n\n  // Tell the dest that it's being piped to.\n  dest.emit('pipe', src)\n\n  // Start the flow if it hasn't been started already.\n\n  if (dest.writableNeedDrain === true) {\n    if (state.flowing) {\n      pause()\n    }\n  } else if (!state.flowing) {\n    debug('pipe resume')\n    src.resume()\n  }\n  return dest\n}\nfunction pipeOnDrain(src, dest) {\n  return function pipeOnDrainFunctionResult() {\n    const state = src._readableState\n\n    // `ondrain` will call directly,\n    // `this` maybe not a reference to dest,\n    // so we use the real dest here.\n    if (state.awaitDrainWriters === dest) {\n      debug('pipeOnDrain', 1)\n      state.awaitDrainWriters = null\n    } else if (state.multiAwaitDrain) {\n      debug('pipeOnDrain', state.awaitDrainWriters.size)\n      state.awaitDrainWriters.delete(dest)\n    }\n    if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n      src.resume()\n    }\n  }\n}\nReadable.prototype.unpipe = function (dest) {\n  const state = this._readableState\n  const unpipeInfo = {\n    hasUnpiped: false\n  }\n\n  // If we're not piping anywhere, then do nothing.\n  if (state.pipes.length === 0) return this\n  if (!dest) {\n    // remove all.\n    const dests = state.pipes\n    state.pipes = []\n    this.pause()\n    for (let i = 0; i < dests.length; i++)\n      dests[i].emit('unpipe', this, {\n        hasUnpiped: false\n      })\n    return this\n  }\n\n  // Try to find the right one.\n  const index = ArrayPrototypeIndexOf(state.pipes, dest)\n  if (index === -1) return this\n  state.pipes.splice(index, 1)\n  if (state.pipes.length === 0) this.pause()\n  dest.emit('unpipe', this, unpipeInfo)\n  return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n  const res = Stream.prototype.on.call(this, ev, fn)\n  const state = this._readableState\n  if (ev === 'data') {\n    // Update readableListening so that resume() may be a no-op\n    // a few lines down. This is needed to support once('readable').\n    state.readableListening = this.listenerCount('readable') > 0\n\n    // Try start flowing on next tick if stream isn't explicitly paused.\n    if (state.flowing !== false) this.resume()\n  } else if (ev === 'readable') {\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true\n      state.flowing = false\n      state.emittedReadable = false\n      debug('on readable', state.length, state.reading)\n      if (state.length) {\n        emitReadable(this)\n      } else if (!state.reading) {\n        process.nextTick(nReadingNextTick, this)\n      }\n    }\n  }\n  return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n  const res = Stream.prototype.removeListener.call(this, ev, fn)\n  if (ev === 'readable') {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n  const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n  if (ev === 'readable' || ev === undefined) {\n    // We need to check if there is someone still listening to\n    // readable and reset the state. However this needs to happen\n    // after readable has been emitted but before I/O (nextTick) to\n    // support once('readable', fn) cycles. This means that calling\n    // resume within the same tick will have no\n    // effect.\n    process.nextTick(updateReadableListening, this)\n  }\n  return res\n}\nfunction updateReadableListening(self) {\n  const state = self._readableState\n  state.readableListening = self.listenerCount('readable') > 0\n  if (state.resumeScheduled && state[kPaused] === false) {\n    // Flowing needs to be set to true now, otherwise\n    // the upcoming resume will not flow.\n    state.flowing = true\n\n    // Crude way to check if we should resume.\n  } else if (self.listenerCount('data') > 0) {\n    self.resume()\n  } else if (!state.readableListening) {\n    state.flowing = null\n  }\n}\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0')\n  self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  const state = this._readableState\n  if (!state.flowing) {\n    debug('resume')\n    // We flow only if there is no one listening\n    // for readable, but we still have to call\n    // resume().\n    state.flowing = !state.readableListening\n    resume(this, state)\n  }\n  state[kPaused] = false\n  return this\n}\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true\n    process.nextTick(resume_, stream, state)\n  }\n}\nfunction resume_(stream, state) {\n  debug('resume', state.reading)\n  if (!state.reading) {\n    stream.read(0)\n  }\n  state.resumeScheduled = false\n  stream.emit('resume')\n  flow(stream)\n  if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing)\n  if (this._readableState.flowing !== false) {\n    debug('pause')\n    this._readableState.flowing = false\n    this.emit('pause')\n  }\n  this._readableState[kPaused] = true\n  return this\n}\nfunction flow(stream) {\n  const state = stream._readableState\n  debug('flow', state.flowing)\n  while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  let paused = false\n\n  // TODO (ronag): Should this.destroy(err) emit\n  // 'error' on the wrapped stream? Would require\n  // a static factory method, e.g. Readable.wrap(stream).\n\n  stream.on('data', (chunk) => {\n    if (!this.push(chunk) && stream.pause) {\n      paused = true\n      stream.pause()\n    }\n  })\n  stream.on('end', () => {\n    this.push(null)\n  })\n  stream.on('error', (err) => {\n    errorOrDestroy(this, err)\n  })\n  stream.on('close', () => {\n    this.destroy()\n  })\n  stream.on('destroy', () => {\n    this.destroy()\n  })\n  this._read = () => {\n    if (paused && stream.resume) {\n      paused = false\n      stream.resume()\n    }\n  }\n\n  // Proxy all the other methods. Important when wrapping filters and duplexes.\n  const streamKeys = ObjectKeys(stream)\n  for (let j = 1; j < streamKeys.length; j++) {\n    const i = streamKeys[j]\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = stream[i].bind(stream)\n    }\n  }\n  return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n  return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n  if (options !== undefined) {\n    validateObject(options, 'options')\n  }\n  return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n  if (typeof stream.read !== 'function') {\n    stream = Readable.wrap(stream, {\n      objectMode: true\n    })\n  }\n  const iter = createAsyncIterator(stream, options)\n  iter.stream = stream\n  return iter\n}\nasync function* createAsyncIterator(stream, options) {\n  let callback = nop\n  function next(resolve) {\n    if (this === stream) {\n      callback()\n      callback = nop\n    } else {\n      callback = resolve\n    }\n  }\n  stream.on('readable', next)\n  let error\n  const cleanup = eos(\n    stream,\n    {\n      writable: false\n    },\n    (err) => {\n      error = err ? aggregateTwoErrors(error, err) : null\n      callback()\n      callback = nop\n    }\n  )\n  try {\n    while (true) {\n      const chunk = stream.destroyed ? null : stream.read()\n      if (chunk !== null) {\n        yield chunk\n      } else if (error) {\n        throw error\n      } else if (error === null) {\n        return\n      } else {\n        await new Promise(next)\n      }\n    }\n  } catch (err) {\n    error = aggregateTwoErrors(error, err)\n    throw error\n  } finally {\n    if (\n      (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n      (error === undefined || stream._readableState.autoDestroy)\n    ) {\n      destroyImpl.destroyer(stream, null)\n    } else {\n      stream.off('readable', next)\n      cleanup()\n    }\n  }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n  readable: {\n    __proto__: null,\n    get() {\n      const r = this._readableState\n      // r.readable === false means that this is part of a Duplex stream\n      // where the readable side was disabled upon construction.\n      // Compat. The user might manually disable readable side through\n      // deprecated setter.\n      return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n    },\n    set(val) {\n      // Backwards compat.\n      if (this._readableState) {\n        this._readableState.readable = !!val\n      }\n    }\n  },\n  readableDidRead: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.dataEmitted\n    }\n  },\n  readableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._readableState.readable !== false &&\n        (this._readableState.destroyed || this._readableState.errored) &&\n        !this._readableState.endEmitted\n      )\n    }\n  },\n  readableHighWaterMark: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.highWaterMark\n    }\n  },\n  readableBuffer: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState && this._readableState.buffer\n    }\n  },\n  readableFlowing: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return this._readableState.flowing\n    },\n    set: function (state) {\n      if (this._readableState) {\n        this._readableState.flowing = state\n      }\n    }\n  },\n  readableLength: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState.length\n    }\n  },\n  readableObjectMode: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.objectMode : false\n    }\n  },\n  readableEncoding: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.encoding : null\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.errored : null\n    }\n  },\n  closed: {\n    __proto__: null,\n    get() {\n      return this._readableState ? this._readableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.destroyed : false\n    },\n    set(value) {\n      // We ignore the value if the stream\n      // has not been initialized yet.\n      if (!this._readableState) {\n        return\n      }\n\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      this._readableState.destroyed = value\n    }\n  },\n  readableEnded: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._readableState ? this._readableState.endEmitted : false\n    }\n  }\n})\nObjectDefineProperties(ReadableState.prototype, {\n  // Legacy getter for `pipesCount`.\n  pipesCount: {\n    __proto__: null,\n    get() {\n      return this.pipes.length\n    }\n  },\n  // Legacy property for `paused`.\n  paused: {\n    __proto__: null,\n    get() {\n      return this[kPaused] !== false\n    },\n    set(value) {\n      this[kPaused] = !!value\n    }\n  }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered.\n  if (state.length === 0) return null\n  let ret\n  if (state.objectMode) ret = state.buffer.shift()\n  else if (!n || n >= state.length) {\n    // Read it all, truncate the list.\n    if (state.decoder) ret = state.buffer.join('')\n    else if (state.buffer.length === 1) ret = state.buffer.first()\n    else ret = state.buffer.concat(state.length)\n    state.buffer.clear()\n  } else {\n    // read part of list.\n    ret = state.buffer.consume(n, state.decoder)\n  }\n  return ret\n}\nfunction endReadable(stream) {\n  const state = stream._readableState\n  debug('endReadable', state.endEmitted)\n  if (!state.endEmitted) {\n    state.ended = true\n    process.nextTick(endReadableNT, state, stream)\n  }\n}\nfunction endReadableNT(state, stream) {\n  debug('endReadableNT', state.endEmitted, state.length)\n\n  // Check that we didn't get one last unshift.\n  if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n    state.endEmitted = true\n    stream.emit('end')\n    if (stream.writable && stream.allowHalfOpen === false) {\n      process.nextTick(endWritableNT, stream)\n    } else if (state.autoDestroy) {\n      // In case of duplex streams we need a way to detect\n      // if the writable side is ready for autoDestroy as well.\n      const wState = stream._writableState\n      const autoDestroy =\n        !wState ||\n        (wState.autoDestroy &&\n          // We don't expect the writable to ever 'finish'\n          // if writable is explicitly set to false.\n          (wState.finished || wState.writable === false))\n      if (autoDestroy) {\n        stream.destroy()\n      }\n    }\n  }\n}\nfunction endWritableNT(stream) {\n  const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n  if (writable) {\n    stream.end()\n  }\n}\nReadable.from = function (iterable, opts) {\n  return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n  return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n  return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n  var _ref, _src$readableObjectMo\n  return new Readable({\n    objectMode:\n      (_ref =\n        (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n          ? _src$readableObjectMo\n          : src.objectMode) !== null && _ref !== undefined\n        ? _ref\n        : true,\n    ...options,\n    destroy(err, callback) {\n      destroyImpl.destroyer(src, err)\n      callback(err)\n    }\n  }).wrap(src)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n;('use strict')\nconst {\n  ArrayPrototypeSlice,\n  Error,\n  FunctionPrototypeSymbolHasInstance,\n  ObjectDefineProperty,\n  ObjectDefineProperties,\n  ObjectSetPrototypeOf,\n  StringPrototypeToLowerCase,\n  Symbol,\n  SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n  ERR_INVALID_ARG_TYPE,\n  ERR_METHOD_NOT_IMPLEMENTED,\n  ERR_MULTIPLE_CALLBACK,\n  ERR_STREAM_CANNOT_PIPE,\n  ERR_STREAM_DESTROYED,\n  ERR_STREAM_ALREADY_FINISHED,\n  ERR_STREAM_NULL_VALUES,\n  ERR_STREAM_WRITE_AFTER_END,\n  ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream,\n  // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n  if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n  // Object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!(options && options.objectMode)\n  if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n  // The point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write().\n  this.highWaterMark = options\n    ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n    : getDefaultHighWaterMark(false)\n\n  // if _final has been called.\n  this.finalCalled = false\n\n  // drain event flag.\n  this.needDrain = false\n  // At the start of calling end()\n  this.ending = false\n  // When end() has been called, and returned.\n  this.ended = false\n  // When 'finish' is emitted.\n  this.finished = false\n\n  // Has it been destroyed\n  this.destroyed = false\n\n  // Should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  const noDecode = !!(options && options.decodeStrings === false)\n  this.decodeStrings = !noDecode\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n  // Not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0\n\n  // A flag to see when we're in the middle of a write.\n  this.writing = false\n\n  // When true all writes will be buffered until .uncork() call.\n  this.corked = 0\n\n  // A flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true\n\n  // A flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false\n\n  // The callback that's passed to _write(chunk, cb).\n  this.onwrite = onwrite.bind(undefined, stream)\n\n  // The callback that the user supplies to write(chunk, encoding, cb).\n  this.writecb = null\n\n  // The amount that is being written when _write is called.\n  this.writelen = 0\n\n  // Storage for data passed to the afterWrite() callback in case of\n  // synchronous _write() completion.\n  this.afterWriteTickInfo = null\n  resetBuffer(this)\n\n  // Number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted.\n  this.pendingcb = 0\n\n  // Stream is still being constructed and cannot be\n  // destroyed until construction finished or failed.\n  // Async construction is opt in, therefore we start as\n  // constructed.\n  this.constructed = true\n\n  // Emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams.\n  this.prefinished = false\n\n  // True if the error was already emitted and should not be thrown again.\n  this.errorEmitted = false\n\n  // Should close be emitted on destroy. Defaults to true.\n  this.emitClose = !options || options.emitClose !== false\n\n  // Should .destroy() be called after 'finish' (and potentially 'end').\n  this.autoDestroy = !options || options.autoDestroy !== false\n\n  // Indicates whether the stream has errored. When true all write() calls\n  // should return false. This is needed since when autoDestroy\n  // is disabled we need a way to tell whether the stream has failed.\n  this.errored = null\n\n  // Indicates whether the stream has finished destroying.\n  this.closed = false\n\n  // True if close has been emitted or would have been emitted\n  // depending on emitClose.\n  this.closeEmitted = false\n  this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n  state.buffered = []\n  state.bufferedIndex = 0\n  state.allBuffers = true\n  state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n  return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n  __proto__: null,\n  get() {\n    return this.buffered.length - this.bufferedIndex\n  }\n})\nfunction Writable(options) {\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  // Checking for a Stream.Duplex instance is faster here instead of inside\n  // the WritableState constructor, at least with V8 6.5.\n  const isDuplex = this instanceof require('./duplex')\n  if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n  this._writableState = new WritableState(options, this, isDuplex)\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write\n    if (typeof options.writev === 'function') this._writev = options.writev\n    if (typeof options.destroy === 'function') this._destroy = options.destroy\n    if (typeof options.final === 'function') this._final = options.final\n    if (typeof options.construct === 'function') this._construct = options.construct\n    if (options.signal) addAbortSignal(options.signal, this)\n  }\n  Stream.call(this, options)\n  destroyImpl.construct(this, () => {\n    const state = this._writableState\n    if (!state.writing) {\n      clearBuffer(this, state)\n    }\n    finishMaybe(this, state)\n  })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n  __proto__: null,\n  value: function (object) {\n    if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n    if (this !== Writable) return false\n    return object && object._writableState instanceof WritableState\n  }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n  const state = stream._writableState\n  if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = state.defaultEncoding\n  } else {\n    if (!encoding) encoding = state.defaultEncoding\n    else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n    if (typeof cb !== 'function') cb = nop\n  }\n  if (chunk === null) {\n    throw new ERR_STREAM_NULL_VALUES()\n  } else if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      if (state.decodeStrings !== false) {\n        chunk = Buffer.from(chunk, encoding)\n        encoding = 'buffer'\n      }\n    } else if (chunk instanceof Buffer) {\n      encoding = 'buffer'\n    } else if (Stream._isUint8Array(chunk)) {\n      chunk = Stream._uint8ArrayToBuffer(chunk)\n      encoding = 'buffer'\n    } else {\n      throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n    }\n  }\n  let err\n  if (state.ending) {\n    err = new ERR_STREAM_WRITE_AFTER_END()\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('write')\n  }\n  if (err) {\n    process.nextTick(cb, err)\n    errorOrDestroy(stream, err, true)\n    return err\n  }\n  state.pendingcb++\n  return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n  return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n  this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n  const state = this._writableState\n  if (state.corked) {\n    state.corked--\n    if (!state.writing) clearBuffer(this, state)\n  }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n  if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n  this._writableState.defaultEncoding = encoding\n  return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n  const len = state.objectMode ? 1 : chunk.length\n  state.length += len\n\n  // stream._write resets state.length\n  const ret = state.length < state.highWaterMark\n  // We must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true\n  if (state.writing || state.corked || state.errored || !state.constructed) {\n    state.buffered.push({\n      chunk,\n      encoding,\n      callback\n    })\n    if (state.allBuffers && encoding !== 'buffer') {\n      state.allBuffers = false\n    }\n    if (state.allNoop && callback !== nop) {\n      state.allNoop = false\n    }\n  } else {\n    state.writelen = len\n    state.writecb = callback\n    state.writing = true\n    state.sync = true\n    stream._write(chunk, encoding, state.onwrite)\n    state.sync = false\n  }\n\n  // Return false if errored or destroyed in order to break\n  // any synchronous while(stream.write(data)) loops.\n  return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len\n  state.writecb = cb\n  state.writing = true\n  state.sync = true\n  if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n  else if (writev) stream._writev(chunk, state.onwrite)\n  else stream._write(chunk, encoding, state.onwrite)\n  state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n  --state.pendingcb\n  cb(er)\n  // Ensure callbacks are invoked even when autoDestroy is\n  // not enabled. Passing `er` here doesn't make sense since\n  // it's related to one specific write, not to the buffered\n  // writes.\n  errorBuffer(state)\n  // This can emit error, but error must always follow cb.\n  errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n  const state = stream._writableState\n  const sync = state.sync\n  const cb = state.writecb\n  if (typeof cb !== 'function') {\n    errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n    return\n  }\n  state.writing = false\n  state.writecb = null\n  state.length -= state.writelen\n  state.writelen = 0\n  if (er) {\n    // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n    er.stack // eslint-disable-line no-unused-expressions\n\n    if (!state.errored) {\n      state.errored = er\n    }\n\n    // In case of duplex streams we need to notify the readable side of the\n    // error.\n    if (stream._readableState && !stream._readableState.errored) {\n      stream._readableState.errored = er\n    }\n    if (sync) {\n      process.nextTick(onwriteError, stream, state, er, cb)\n    } else {\n      onwriteError(stream, state, er, cb)\n    }\n  } else {\n    if (state.buffered.length > state.bufferedIndex) {\n      clearBuffer(stream, state)\n    }\n    if (sync) {\n      // It is a common case that the callback passed to .write() is always\n      // the same. In that case, we do not schedule a new nextTick(), but\n      // rather just increase a counter, to improve performance and avoid\n      // memory allocations.\n      if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n        state.afterWriteTickInfo.count++\n      } else {\n        state.afterWriteTickInfo = {\n          count: 1,\n          cb,\n          stream,\n          state\n        }\n        process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n      }\n    } else {\n      afterWrite(stream, state, 1, cb)\n    }\n  }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n  state.afterWriteTickInfo = null\n  return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n  const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n  if (needDrain) {\n    state.needDrain = false\n    stream.emit('drain')\n  }\n  while (count-- > 0) {\n    state.pendingcb--\n    cb()\n  }\n  if (state.destroyed) {\n    errorBuffer(state)\n  }\n  finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n  if (state.writing) {\n    return\n  }\n  for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n    var _state$errored\n    const { chunk, callback } = state.buffered[n]\n    const len = state.objectMode ? 1 : chunk.length\n    state.length -= len\n    callback(\n      (_state$errored = state.errored) !== null && _state$errored !== undefined\n        ? _state$errored\n        : new ERR_STREAM_DESTROYED('write')\n    )\n  }\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    var _state$errored2\n    onfinishCallbacks[i](\n      (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n        ? _state$errored2\n        : new ERR_STREAM_DESTROYED('end')\n    )\n  }\n  resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n  if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n    return\n  }\n  const { buffered, bufferedIndex, objectMode } = state\n  const bufferedLength = buffered.length - bufferedIndex\n  if (!bufferedLength) {\n    return\n  }\n  let i = bufferedIndex\n  state.bufferProcessing = true\n  if (bufferedLength > 1 && stream._writev) {\n    state.pendingcb -= bufferedLength - 1\n    const callback = state.allNoop\n      ? nop\n      : (err) => {\n          for (let n = i; n < buffered.length; ++n) {\n            buffered[n].callback(err)\n          }\n        }\n    // Make a copy of `buffered` if it's going to be used by `callback` above,\n    // since `doWrite` will mutate the array.\n    const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n    chunks.allBuffers = state.allBuffers\n    doWrite(stream, state, true, state.length, chunks, '', callback)\n    resetBuffer(state)\n  } else {\n    do {\n      const { chunk, encoding, callback } = buffered[i]\n      buffered[i++] = null\n      const len = objectMode ? 1 : chunk.length\n      doWrite(stream, state, false, len, chunk, encoding, callback)\n    } while (i < buffered.length && !state.writing)\n    if (i === buffered.length) {\n      resetBuffer(state)\n    } else if (i > 256) {\n      buffered.splice(0, i)\n      state.bufferedIndex = 0\n    } else {\n      state.bufferedIndex = i\n    }\n  }\n  state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n  if (this._writev) {\n    this._writev(\n      [\n        {\n          chunk,\n          encoding\n        }\n      ],\n      cb\n    )\n  } else {\n    throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n  }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n  const state = this._writableState\n  if (typeof chunk === 'function') {\n    cb = chunk\n    chunk = null\n    encoding = null\n  } else if (typeof encoding === 'function') {\n    cb = encoding\n    encoding = null\n  }\n  let err\n  if (chunk !== null && chunk !== undefined) {\n    const ret = _write(this, chunk, encoding)\n    if (ret instanceof Error) {\n      err = ret\n    }\n  }\n\n  // .end() fully uncorks.\n  if (state.corked) {\n    state.corked = 1\n    this.uncork()\n  }\n  if (err) {\n    // Do nothing...\n  } else if (!state.errored && !state.ending) {\n    // This is forgiving in terms of unnecessary calls to end() and can hide\n    // logic errors. However, usually such errors are harmless and causing a\n    // hard error can be disproportionately destructive. It is not always\n    // trivial for the user to determine whether end() needs to be called\n    // or not.\n\n    state.ending = true\n    finishMaybe(this, state, true)\n    state.ended = true\n  } else if (state.finished) {\n    err = new ERR_STREAM_ALREADY_FINISHED('end')\n  } else if (state.destroyed) {\n    err = new ERR_STREAM_DESTROYED('end')\n  }\n  if (typeof cb === 'function') {\n    if (err || state.finished) {\n      process.nextTick(cb, err)\n    } else {\n      state[kOnFinished].push(cb)\n    }\n  }\n  return this\n}\nfunction needFinish(state) {\n  return (\n    state.ending &&\n    !state.destroyed &&\n    state.constructed &&\n    state.length === 0 &&\n    !state.errored &&\n    state.buffered.length === 0 &&\n    !state.finished &&\n    !state.writing &&\n    !state.errorEmitted &&\n    !state.closeEmitted\n  )\n}\nfunction callFinal(stream, state) {\n  let called = false\n  function onFinish(err) {\n    if (called) {\n      errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n      return\n    }\n    called = true\n    state.pendingcb--\n    if (err) {\n      const onfinishCallbacks = state[kOnFinished].splice(0)\n      for (let i = 0; i < onfinishCallbacks.length; i++) {\n        onfinishCallbacks[i](err)\n      }\n      errorOrDestroy(stream, err, state.sync)\n    } else if (needFinish(state)) {\n      state.prefinished = true\n      stream.emit('prefinish')\n      // Backwards compat. Don't check state.sync here.\n      // Some streams assume 'finish' will be emitted\n      // asynchronously relative to _final callback.\n      state.pendingcb++\n      process.nextTick(finish, stream, state)\n    }\n  }\n  state.sync = true\n  state.pendingcb++\n  try {\n    stream._final(onFinish)\n  } catch (err) {\n    onFinish(err)\n  }\n  state.sync = false\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function' && !state.destroyed) {\n      state.finalCalled = true\n      callFinal(stream, state)\n    } else {\n      state.prefinished = true\n      stream.emit('prefinish')\n    }\n  }\n}\nfunction finishMaybe(stream, state, sync) {\n  if (needFinish(state)) {\n    prefinish(stream, state)\n    if (state.pendingcb === 0) {\n      if (sync) {\n        state.pendingcb++\n        process.nextTick(\n          (stream, state) => {\n            if (needFinish(state)) {\n              finish(stream, state)\n            } else {\n              state.pendingcb--\n            }\n          },\n          stream,\n          state\n        )\n      } else if (needFinish(state)) {\n        state.pendingcb++\n        finish(stream, state)\n      }\n    }\n  }\n}\nfunction finish(stream, state) {\n  state.pendingcb--\n  state.finished = true\n  const onfinishCallbacks = state[kOnFinished].splice(0)\n  for (let i = 0; i < onfinishCallbacks.length; i++) {\n    onfinishCallbacks[i]()\n  }\n  stream.emit('finish')\n  if (state.autoDestroy) {\n    // In case of duplex streams we need a way to detect\n    // if the readable side is ready for autoDestroy as well.\n    const rState = stream._readableState\n    const autoDestroy =\n      !rState ||\n      (rState.autoDestroy &&\n        // We don't expect the readable to ever 'end'\n        // if readable is explicitly set to false.\n        (rState.endEmitted || rState.readable === false))\n    if (autoDestroy) {\n      stream.destroy()\n    }\n  }\n}\nObjectDefineProperties(Writable.prototype, {\n  closed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.closed : false\n    }\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.destroyed : false\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly managing destroyed.\n      if (this._writableState) {\n        this._writableState.destroyed = value\n      }\n    }\n  },\n  writable: {\n    __proto__: null,\n    get() {\n      const w = this._writableState\n      // w.writable === false means that this is part of a Duplex stream\n      // where the writable side was disabled upon construction.\n      // Compat. The user might manually disable writable side through\n      // deprecated setter.\n      return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n    },\n    set(val) {\n      // Backwards compatible.\n      if (this._writableState) {\n        this._writableState.writable = !!val\n      }\n    }\n  },\n  writableFinished: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.finished : false\n    }\n  },\n  writableObjectMode: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.objectMode : false\n    }\n  },\n  writableBuffer: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.getBuffer()\n    }\n  },\n  writableEnded: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.ending : false\n    }\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    get() {\n      const wState = this._writableState\n      if (!wState) return false\n      return !wState.destroyed && !wState.ending && wState.needDrain\n    }\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.highWaterMark\n    }\n  },\n  writableCorked: {\n    __proto__: null,\n    get() {\n      return this._writableState ? this._writableState.corked : 0\n    }\n  },\n  writableLength: {\n    __proto__: null,\n    get() {\n      return this._writableState && this._writableState.length\n    }\n  },\n  errored: {\n    __proto__: null,\n    enumerable: false,\n    get() {\n      return this._writableState ? this._writableState.errored : null\n    }\n  },\n  writableAborted: {\n    __proto__: null,\n    enumerable: false,\n    get: function () {\n      return !!(\n        this._writableState.writable !== false &&\n        (this._writableState.destroyed || this._writableState.errored) &&\n        !this._writableState.finished\n      )\n    }\n  }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n  const state = this._writableState\n\n  // Invoke pending callbacks.\n  if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n    process.nextTick(errorBuffer, state)\n  }\n  destroy.call(this, err, cb)\n  return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n  cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n  this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n  return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n  return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n  isReadable,\n  isWritable,\n  isIterable,\n  isNodeStream,\n  isReadableNodeStream,\n  isWritableNodeStream,\n  isDuplexNodeStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n  typeof Blob !== 'undefined'\n    ? function isBlob(b) {\n        return b instanceof Blob\n      }\n    : function isBlob(b) {\n        return false\n      }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n  constructor(options) {\n    super(options)\n\n    // https://github.com/nodejs/node/pull/34385\n\n    if ((options === null || options === undefined ? undefined : options.readable) === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if ((options === null || options === undefined ? undefined : options.writable) === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  }\n}\nmodule.exports = function duplexify(body, name) {\n  if (isDuplexNodeStream(body)) {\n    return body\n  }\n  if (isReadableNodeStream(body)) {\n    return _duplexify({\n      readable: body\n    })\n  }\n  if (isWritableNodeStream(body)) {\n    return _duplexify({\n      writable: body\n    })\n  }\n  if (isNodeStream(body)) {\n    return _duplexify({\n      writable: false,\n      readable: false\n    })\n  }\n\n  // TODO: Webstreams\n  // if (isReadableStream(body)) {\n  //   return _duplexify({ readable: Readable.fromWeb(body) });\n  // }\n\n  // TODO: Webstreams\n  // if (isWritableStream(body)) {\n  //   return _duplexify({ writable: Writable.fromWeb(body) });\n  // }\n\n  if (typeof body === 'function') {\n    const { value, write, final, destroy } = fromAsyncGen(body)\n    if (isIterable(value)) {\n      return from(Duplexify, value, {\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        write,\n        final,\n        destroy\n      })\n    }\n    const then = value === null || value === undefined ? undefined : value.then\n    if (typeof then === 'function') {\n      let d\n      const promise = FunctionPrototypeCall(\n        then,\n        value,\n        (val) => {\n          if (val != null) {\n            throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n          }\n        },\n        (err) => {\n          destroyer(d, err)\n        }\n      )\n      return (d = new Duplexify({\n        // TODO (ronag): highWaterMark?\n        objectMode: true,\n        readable: false,\n        write,\n        final(cb) {\n          final(async () => {\n            try {\n              await promise\n              process.nextTick(cb, null)\n            } catch (err) {\n              process.nextTick(cb, err)\n            }\n          })\n        },\n        destroy\n      }))\n    }\n    throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n  }\n  if (isBlob(body)) {\n    return duplexify(body.arrayBuffer())\n  }\n  if (isIterable(body)) {\n    return from(Duplexify, body, {\n      // TODO (ronag): highWaterMark?\n      objectMode: true,\n      writable: false\n    })\n  }\n\n  // TODO: Webstreams.\n  // if (\n  //   isReadableStream(body?.readable) &&\n  //   isWritableStream(body?.writable)\n  // ) {\n  //   return Duplexify.fromWeb(body);\n  // }\n\n  if (\n    typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n    typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n  ) {\n    const readable =\n      body !== null && body !== undefined && body.readable\n        ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.readable\n          : duplexify(body.readable)\n        : undefined\n    const writable =\n      body !== null && body !== undefined && body.writable\n        ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n          ? body === null || body === undefined\n            ? undefined\n            : body.writable\n          : duplexify(body.writable)\n        : undefined\n    return _duplexify({\n      readable,\n      writable\n    })\n  }\n  const then = body === null || body === undefined ? undefined : body.then\n  if (typeof then === 'function') {\n    let d\n    FunctionPrototypeCall(\n      then,\n      body,\n      (val) => {\n        if (val != null) {\n          d.push(val)\n        }\n        d.push(null)\n      },\n      (err) => {\n        destroyer(d, err)\n      }\n    )\n    return (d = new Duplexify({\n      objectMode: true,\n      writable: false,\n      read() {}\n    }))\n  }\n  throw new ERR_INVALID_ARG_TYPE(\n    name,\n    [\n      'Blob',\n      'ReadableStream',\n      'WritableStream',\n      'Stream',\n      'Iterable',\n      'AsyncIterable',\n      'Function',\n      '{ readable, writable } pair',\n      'Promise'\n    ],\n    body\n  )\n}\nfunction fromAsyncGen(fn) {\n  let { promise, resolve } = createDeferredPromise()\n  const ac = new AbortController()\n  const signal = ac.signal\n  const value = fn(\n    (async function* () {\n      while (true) {\n        const _promise = promise\n        promise = null\n        const { chunk, done, cb } = await _promise\n        process.nextTick(cb)\n        if (done) return\n        if (signal.aborted)\n          throw new AbortError(undefined, {\n            cause: signal.reason\n          })\n        ;({ promise, resolve } = createDeferredPromise())\n        yield chunk\n      }\n    })(),\n    {\n      signal\n    }\n  )\n  return {\n    value,\n    write(chunk, encoding, cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        chunk,\n        done: false,\n        cb\n      })\n    },\n    final(cb) {\n      const _resolve = resolve\n      resolve = null\n      _resolve({\n        done: true,\n        cb\n      })\n    },\n    destroy(err, cb) {\n      ac.abort()\n      cb(err)\n    }\n  }\n}\nfunction _duplexify(pair) {\n  const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n  const w = pair.writable\n  let readable = !!isReadable(r)\n  let writable = !!isWritable(w)\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    }\n  }\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplexify({\n    // TODO (ronag): highWaterMark?\n    readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n    writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n    readable,\n    writable\n  })\n  if (writable) {\n    eos(w, (err) => {\n      writable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    d._write = function (chunk, encoding, callback) {\n      if (w.write(chunk, encoding)) {\n        callback()\n      } else {\n        ondrain = callback\n      }\n    }\n    d._final = function (callback) {\n      w.end()\n      onfinish = callback\n    }\n    w.on('drain', function () {\n      if (ondrain) {\n        const cb = ondrain\n        ondrain = null\n        cb()\n      }\n    })\n    w.on('finish', function () {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    eos(r, (err) => {\n      readable = false\n      if (err) {\n        destroyer(r, err)\n      }\n      onfinished(err)\n    })\n    r.on('readable', function () {\n      if (onreadable) {\n        const cb = onreadable\n        onreadable = null\n        cb()\n      }\n    })\n    r.on('end', function () {\n      d.push(null)\n    })\n    d._read = function () {\n      while (true) {\n        const buf = r.read()\n        if (buf === null) {\n          onreadable = d._read\n          return\n        }\n        if (!d.push(buf)) {\n          return\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      destroyer(w, err)\n      destroyer(r, err)\n    }\n  }\n  return d\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n  ObjectDefineProperties,\n  ObjectGetOwnPropertyDescriptor,\n  ObjectKeys,\n  ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n  const keys = ObjectKeys(Writable.prototype)\n  // Allow the keys array to be GC'ed.\n  for (let i = 0; i < keys.length; i++) {\n    const method = keys[i]\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n  }\n}\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options)\n  Readable.call(this, options)\n  Writable.call(this, options)\n  if (options) {\n    this.allowHalfOpen = options.allowHalfOpen !== false\n    if (options.readable === false) {\n      this._readableState.readable = false\n      this._readableState.ended = true\n      this._readableState.endEmitted = true\n    }\n    if (options.writable === false) {\n      this._writableState.writable = false\n      this._writableState.ending = true\n      this._writableState.ended = true\n      this._writableState.finished = true\n    }\n  } else {\n    this.allowHalfOpen = true\n  }\n}\nObjectDefineProperties(Duplex.prototype, {\n  writable: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n  },\n  writableHighWaterMark: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n  },\n  writableObjectMode: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n  },\n  writableBuffer: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n  },\n  writableLength: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n  },\n  writableFinished: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n  },\n  writableCorked: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n  },\n  writableEnded: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n  },\n  writableNeedDrain: {\n    __proto__: null,\n    ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n  },\n  destroyed: {\n    __proto__: null,\n    get() {\n      if (this._readableState === undefined || this._writableState === undefined) {\n        return false\n      }\n      return this._readableState.destroyed && this._writableState.destroyed\n    },\n    set(value) {\n      // Backward compatibility, the user is explicitly\n      // managing destroyed.\n      if (this._readableState && this._writableState) {\n        this._readableState.destroyed = value\n        this._writableState.destroyed = value\n      }\n    }\n  }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n  if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n  return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n  return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n  return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n  if (!duplexify) {\n    duplexify = require('./duplexify')\n  }\n  return duplexify(body, 'body')\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options)\n\n  // TODO (ronag): This should preferably always be\n  // applied but would be semver-major. Or even better;\n  // make Transform a Readable with the Writable interface.\n  const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n  if (readableHighWaterMark === 0) {\n    // A Duplex will buffer both on the writable and readable side while\n    // a Transform just wants to buffer hwm number of elements. To avoid\n    // buffering twice we disable buffering on the writable side.\n    options = {\n      ...options,\n      highWaterMark: null,\n      readableHighWaterMark,\n      // TODO (ronag): 0 is not optimal since we have\n      // a \"bug\" where we check needDrain before calling _write and not after.\n      // Refs: https://github.com/nodejs/node/pull/32887\n      // Refs: https://github.com/nodejs/node/pull/35941\n      writableHighWaterMark: options.writableHighWaterMark || 0\n    }\n  }\n  Duplex.call(this, options)\n\n  // We have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false\n  this[kCallback] = null\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform\n    if (typeof options.flush === 'function') this._flush = options.flush\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  // Backwards compat. Some Transform streams incorrectly implement _final\n  // instead of or in addition to _flush. By using 'prefinish' instead of\n  // implementing _final we continue supporting this unfortunate use case.\n  this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n  if (typeof this._flush === 'function' && !this.destroyed) {\n    this._flush((er, data) => {\n      if (er) {\n        if (cb) {\n          cb(er)\n        } else {\n          this.destroy(er)\n        }\n        return\n      }\n      if (data != null) {\n        this.push(data)\n      }\n      this.push(null)\n      if (cb) {\n        cb()\n      }\n    })\n  } else {\n    this.push(null)\n    if (cb) {\n      cb()\n    }\n  }\n}\nfunction prefinish() {\n  if (this._final !== final) {\n    final.call(this)\n  }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n  throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n  const rState = this._readableState\n  const wState = this._writableState\n  const length = rState.length\n  this._transform(chunk, encoding, (err, val) => {\n    if (err) {\n      callback(err)\n      return\n    }\n    if (val != null) {\n      this.push(val)\n    }\n    if (\n      wState.ended ||\n      // Backwards compat.\n      length === rState.length ||\n      // Backwards compat.\n      rState.length < rState.highWaterMark\n    ) {\n      callback()\n    } else {\n      this[kCallback] = callback\n    }\n  })\n}\nTransform.prototype._read = function () {\n  if (this[kCallback]) {\n    const callback = this[kCallback]\n    this[kCallback] = null\n    callback()\n  }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options)\n  Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n  aggregateTwoErrors,\n  codes: {\n    ERR_INVALID_ARG_TYPE,\n    ERR_INVALID_RETURN_VALUE,\n    ERR_MISSING_ARGS,\n    ERR_STREAM_DESTROYED,\n    ERR_STREAM_PREMATURE_CLOSE\n  },\n  AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n  isIterable,\n  isReadable,\n  isReadableNodeStream,\n  isNodeStream,\n  isTransformStream,\n  isWebStream,\n  isReadableStream,\n  isReadableEnded\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nfunction destroyer(stream, reading, writing) {\n  let finished = false\n  stream.on('close', () => {\n    finished = true\n  })\n  const cleanup = eos(\n    stream,\n    {\n      readable: reading,\n      writable: writing\n    },\n    (err) => {\n      finished = !err\n    }\n  )\n  return {\n    destroy: (err) => {\n      if (finished) return\n      finished = true\n      destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n    },\n    cleanup\n  }\n}\nfunction popCallback(streams) {\n  // Streams should never be an empty array. It should always contain at least\n  // a single stream. Therefore optimize for the average case instead of\n  // checking for length === 0 as well.\n  validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n  return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n  if (isIterable(val)) {\n    return val\n  } else if (isReadableNodeStream(val)) {\n    // Legacy streams are not Iterable.\n    return fromReadable(val)\n  }\n  throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n  if (!Readable) {\n    Readable = require('./readable')\n  }\n  yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n  let error\n  let onresolve = null\n  const resume = (err) => {\n    if (err) {\n      error = err\n    }\n    if (onresolve) {\n      const callback = onresolve\n      onresolve = null\n      callback()\n    }\n  }\n  const wait = () =>\n    new Promise((resolve, reject) => {\n      if (error) {\n        reject(error)\n      } else {\n        onresolve = () => {\n          if (error) {\n            reject(error)\n          } else {\n            resolve()\n          }\n        }\n      }\n    })\n  writable.on('drain', resume)\n  const cleanup = eos(\n    writable,\n    {\n      readable: false\n    },\n    resume\n  )\n  try {\n    if (writable.writableNeedDrain) {\n      await wait()\n    }\n    for await (const chunk of iterable) {\n      if (!writable.write(chunk)) {\n        await wait()\n      }\n    }\n    if (end) {\n      writable.end()\n    }\n    await wait()\n    finish()\n  } catch (err) {\n    finish(error !== err ? aggregateTwoErrors(error, err) : err)\n  } finally {\n    cleanup()\n    writable.off('drain', resume)\n  }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n  if (isTransformStream(writable)) {\n    writable = writable.writable\n  }\n  // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n  const writer = writable.getWriter()\n  try {\n    for await (const chunk of readable) {\n      await writer.ready\n      writer.write(chunk).catch(() => {})\n    }\n    await writer.ready\n    if (end) {\n      await writer.close()\n    }\n    finish()\n  } catch (err) {\n    try {\n      await writer.abort(err)\n      finish(err)\n    } catch (err) {\n      finish(err)\n    }\n  }\n}\nfunction pipeline(...streams) {\n  return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n  if (streams.length === 1 && ArrayIsArray(streams[0])) {\n    streams = streams[0]\n  }\n  if (streams.length < 2) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n  // Need to cleanup event listeners if last stream is readable\n  // https://github.com/nodejs/node/issues/35452\n  const lastStreamCleanup = []\n  validateAbortSignal(outerSignal, 'options.signal')\n  function abort() {\n    finishImpl(new AbortError())\n  }\n  outerSignal === null || outerSignal === undefined ? undefined : outerSignal.addEventListener('abort', abort)\n  let error\n  let value\n  const destroys = []\n  let finishCount = 0\n  function finish(err) {\n    finishImpl(err, --finishCount === 0)\n  }\n  function finishImpl(err, final) {\n    if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n      error = err\n    }\n    if (!error && !final) {\n      return\n    }\n    while (destroys.length) {\n      destroys.shift()(error)\n    }\n    outerSignal === null || outerSignal === undefined ? undefined : outerSignal.removeEventListener('abort', abort)\n    ac.abort()\n    if (final) {\n      if (!error) {\n        lastStreamCleanup.forEach((fn) => fn())\n      }\n      process.nextTick(callback, error, value)\n    }\n  }\n  let ret\n  for (let i = 0; i < streams.length; i++) {\n    const stream = streams[i]\n    const reading = i < streams.length - 1\n    const writing = i > 0\n    const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n    const isLastStream = i === streams.length - 1\n    if (isNodeStream(stream)) {\n      if (end) {\n        const { destroy, cleanup } = destroyer(stream, reading, writing)\n        destroys.push(destroy)\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n\n      // Catch stream errors that occur after pipe/pump has completed.\n      function onError(err) {\n        if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n          finish(err)\n        }\n      }\n      stream.on('error', onError)\n      if (isReadable(stream) && isLastStream) {\n        lastStreamCleanup.push(() => {\n          stream.removeListener('error', onError)\n        })\n      }\n    }\n    if (i === 0) {\n      if (typeof stream === 'function') {\n        ret = stream({\n          signal\n        })\n        if (!isIterable(ret)) {\n          throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n        }\n      } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n        ret = stream\n      } else {\n        ret = Duplex.from(stream)\n      }\n    } else if (typeof stream === 'function') {\n      if (isTransformStream(ret)) {\n        var _ret\n        ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n      } else {\n        ret = makeAsyncIterable(ret)\n      }\n      ret = stream(ret, {\n        signal\n      })\n      if (reading) {\n        if (!isIterable(ret, true)) {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n        }\n      } else {\n        var _ret2\n        if (!PassThrough) {\n          PassThrough = require('./passthrough')\n        }\n\n        // If the last argument to pipeline is not a stream\n        // we must create a proxy stream so that pipeline(...)\n        // always returns a stream which can be further\n        // composed through `.pipe(stream)`.\n\n        const pt = new PassThrough({\n          objectMode: true\n        })\n\n        // Handle Promises/A+ spec, `then` could be a getter that throws on\n        // second use.\n        const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n        if (typeof then === 'function') {\n          finishCount++\n          then.call(\n            ret,\n            (val) => {\n              value = val\n              if (val != null) {\n                pt.write(val)\n              }\n              if (end) {\n                pt.end()\n              }\n              process.nextTick(finish)\n            },\n            (err) => {\n              pt.destroy(err)\n              process.nextTick(finish, err)\n            }\n          )\n        } else if (isIterable(ret, true)) {\n          finishCount++\n          pumpToNode(ret, pt, finish, {\n            end\n          })\n        } else if (isReadableStream(ret) || isTransformStream(ret)) {\n          const toRead = ret.readable || ret\n          finishCount++\n          pumpToNode(toRead, pt, finish, {\n            end\n          })\n        } else {\n          throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n        }\n        ret = pt\n        const { destroy, cleanup } = destroyer(ret, false, true)\n        destroys.push(destroy)\n        if (isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      }\n    } else if (isNodeStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount += 2\n        const cleanup = pipe(ret, stream, finish, {\n          end\n        })\n        if (isReadable(stream) && isLastStream) {\n          lastStreamCleanup.push(cleanup)\n        }\n      } else if (isTransformStream(ret) || isReadableStream(ret)) {\n        const toRead = ret.readable || ret\n        finishCount++\n        pumpToNode(toRead, stream, finish, {\n          end\n        })\n      } else if (isIterable(ret)) {\n        finishCount++\n        pumpToNode(ret, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else if (isWebStream(stream)) {\n      if (isReadableNodeStream(ret)) {\n        finishCount++\n        pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n          end\n        })\n      } else if (isReadableStream(ret) || isIterable(ret)) {\n        finishCount++\n        pumpToWeb(ret, stream, finish, {\n          end\n        })\n      } else if (isTransformStream(ret)) {\n        finishCount++\n        pumpToWeb(ret.readable, stream, finish, {\n          end\n        })\n      } else {\n        throw new ERR_INVALID_ARG_TYPE(\n          'val',\n          ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n          ret\n        )\n      }\n      ret = stream\n    } else {\n      ret = Duplex.from(stream)\n    }\n  }\n  if (\n    (signal !== null && signal !== undefined && signal.aborted) ||\n    (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n  ) {\n    process.nextTick(abort)\n  }\n  return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n  let ended = false\n  dst.on('close', () => {\n    if (!ended) {\n      // Finish if the destination closes before the source has completed.\n      finish(new ERR_STREAM_PREMATURE_CLOSE())\n    }\n  })\n  src.pipe(dst, {\n    end: false\n  }) // If end is true we already will have a listener to end dst.\n\n  if (end) {\n    // Compat. Before node v10.12.0 stdio used to throw an error so\n    // pipe() did/does not end() stdio destinations.\n    // Now they allow it but \"secretly\" don't close the underlying fd.\n\n    function endFn() {\n      ended = true\n      dst.end()\n    }\n    if (isReadableEnded(src)) {\n      // End the destination if the source has already ended.\n      process.nextTick(endFn)\n    } else {\n      src.once('end', endFn)\n    }\n  } else {\n    finish()\n  }\n  eos(\n    src,\n    {\n      readable: true,\n      writable: false\n    },\n    (err) => {\n      const rState = src._readableState\n      if (\n        err &&\n        err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n        rState &&\n        rState.ended &&\n        !rState.errored &&\n        !rState.errorEmitted\n      ) {\n        // Some readable streams will emit 'close' before 'end'. However, since\n        // this is on the readable side 'end' should still be emitted if the\n        // stream has been ended and no error emitted. This should be allowed in\n        // favor of backwards compatibility. Since the stream is piped to a\n        // destination this should not result in any observable difference.\n        // We don't need to check if this is a writable premature close since\n        // eos will only fail with premature close on the reading side for\n        // duplex streams.\n        src.once('end', finish).once('error', finish)\n      } else {\n        finish(err)\n      }\n    }\n  )\n  return eos(\n    dst,\n    {\n      readable: false,\n      writable: true\n    },\n    finish\n  )\n}\nmodule.exports = {\n  pipelineImpl,\n  pipeline\n}\n", "'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n  isNodeStream,\n  isReadable,\n  isWritable,\n  isWebStream,\n  isTransformStream,\n  isWritableStream,\n  isReadableStream\n} = require('./utils')\nconst {\n  AbortError,\n  codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n  if (streams.length === 0) {\n    throw new ERR_MISSING_ARGS('streams')\n  }\n  if (streams.length === 1) {\n    return Duplex.from(streams[0])\n  }\n  const orgStreams = [...streams]\n  if (typeof streams[0] === 'function') {\n    streams[0] = Duplex.from(streams[0])\n  }\n  if (typeof streams[streams.length - 1] === 'function') {\n    const idx = streams.length - 1\n    streams[idx] = Duplex.from(streams[idx])\n  }\n  for (let n = 0; n < streams.length; ++n) {\n    if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n      // TODO(ronag): Add checks for non streams.\n      continue\n    }\n    if (\n      n < streams.length - 1 &&\n      !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n    ) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n    }\n    if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n      throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n    }\n  }\n  let ondrain\n  let onfinish\n  let onreadable\n  let onclose\n  let d\n  function onfinished(err) {\n    const cb = onclose\n    onclose = null\n    if (cb) {\n      cb(err)\n    } else if (err) {\n      d.destroy(err)\n    } else if (!readable && !writable) {\n      d.destroy()\n    }\n  }\n  const head = streams[0]\n  const tail = pipeline(streams, onfinished)\n  const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n  const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n  // TODO(ronag): Avoid double buffering.\n  // Implement Writable/Readable/Duplex traits.\n  // See, https://github.com/nodejs/node/pull/33515.\n  d = new Duplex({\n    // TODO (ronag): highWaterMark?\n    writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n    readableObjectMode: !!(tail !== null && tail !== undefined && tail.writableObjectMode),\n    writable,\n    readable\n  })\n  if (writable) {\n    if (isNodeStream(head)) {\n      d._write = function (chunk, encoding, callback) {\n        if (head.write(chunk, encoding)) {\n          callback()\n        } else {\n          ondrain = callback\n        }\n      }\n      d._final = function (callback) {\n        head.end()\n        onfinish = callback\n      }\n      head.on('drain', function () {\n        if (ondrain) {\n          const cb = ondrain\n          ondrain = null\n          cb()\n        }\n      })\n    } else if (isWebStream(head)) {\n      const writable = isTransformStream(head) ? head.writable : head\n      const writer = writable.getWriter()\n      d._write = async function (chunk, encoding, callback) {\n        try {\n          await writer.ready\n          writer.write(chunk).catch(() => {})\n          callback()\n        } catch (err) {\n          callback(err)\n        }\n      }\n      d._final = async function (callback) {\n        try {\n          await writer.ready\n          writer.close().catch(() => {})\n          onfinish = callback\n        } catch (err) {\n          callback(err)\n        }\n      }\n    }\n    const toRead = isTransformStream(tail) ? tail.readable : tail\n    eos(toRead, () => {\n      if (onfinish) {\n        const cb = onfinish\n        onfinish = null\n        cb()\n      }\n    })\n  }\n  if (readable) {\n    if (isNodeStream(tail)) {\n      tail.on('readable', function () {\n        if (onreadable) {\n          const cb = onreadable\n          onreadable = null\n          cb()\n        }\n      })\n      tail.on('end', function () {\n        d.push(null)\n      })\n      d._read = function () {\n        while (true) {\n          const buf = tail.read()\n          if (buf === null) {\n            onreadable = d._read\n            return\n          }\n          if (!d.push(buf)) {\n            return\n          }\n        }\n      }\n    } else if (isWebStream(tail)) {\n      const readable = isTransformStream(tail) ? tail.readable : tail\n      const reader = readable.getReader()\n      d._read = async function () {\n        while (true) {\n          try {\n            const { value, done } = await reader.read()\n            if (!d.push(value)) {\n              return\n            }\n            if (done) {\n              d.push(null)\n              return\n            }\n          } catch {\n            return\n          }\n        }\n      }\n    }\n  }\n  d._destroy = function (err, callback) {\n    if (!err && onclose !== null) {\n      err = new AbortError()\n    }\n    onreadable = null\n    ondrain = null\n    onfinish = null\n    if (onclose === null) {\n      callback(err)\n    } else {\n      onclose = callback\n      if (isNodeStream(tail)) {\n        destroyer(tail, err)\n      }\n    }\n  }\n  return d\n}\n", "'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n  codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n  AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst {\n  ArrayPrototypePush,\n  MathFloor,\n  Number,\n  NumberIsNaN,\n  Promise,\n  PromiseReject,\n  PromisePrototypeThen,\n  Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  if (isNodeStream(stream) && !isWritable(stream)) {\n    throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n  }\n  const composedStream = staticCompose(this, stream)\n  if (options !== null && options !== undefined && options.signal) {\n    // Not validating as we already validated before\n    addAbortSignalNoValidate(options.signal, composedStream)\n  }\n  return composedStream\n}\nfunction map(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let concurrency = 1\n  if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n    concurrency = MathFloor(options.concurrency)\n  }\n  validateInteger(concurrency, 'concurrency', 1)\n  return async function* map() {\n    var _options$signal, _options$signal2\n    const ac = new AbortController()\n    const stream = this\n    const queue = []\n    const signal = ac.signal\n    const signalOpt = {\n      signal\n    }\n    const abort = () => ac.abort()\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal = options.signal) !== null &&\n      _options$signal !== undefined &&\n      _options$signal.aborted\n    ) {\n      abort()\n    }\n    options === null || options === undefined\n      ? undefined\n      : (_options$signal2 = options.signal) === null || _options$signal2 === undefined\n      ? undefined\n      : _options$signal2.addEventListener('abort', abort)\n    let next\n    let resume\n    let done = false\n    function onDone() {\n      done = true\n    }\n    async function pump() {\n      try {\n        for await (let val of stream) {\n          var _val\n          if (done) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          try {\n            val = fn(val, signalOpt)\n          } catch (err) {\n            val = PromiseReject(err)\n          }\n          if (val === kEmpty) {\n            continue\n          }\n          if (typeof ((_val = val) === null || _val === undefined ? undefined : _val.catch) === 'function') {\n            val.catch(onDone)\n          }\n          queue.push(val)\n          if (next) {\n            next()\n            next = null\n          }\n          if (!done && queue.length && queue.length >= concurrency) {\n            await new Promise((resolve) => {\n              resume = resolve\n            })\n          }\n        }\n        queue.push(kEof)\n      } catch (err) {\n        const val = PromiseReject(err)\n        PromisePrototypeThen(val, undefined, onDone)\n        queue.push(val)\n      } finally {\n        var _options$signal3\n        done = true\n        if (next) {\n          next()\n          next = null\n        }\n        options === null || options === undefined\n          ? undefined\n          : (_options$signal3 = options.signal) === null || _options$signal3 === undefined\n          ? undefined\n          : _options$signal3.removeEventListener('abort', abort)\n      }\n    }\n    pump()\n    try {\n      while (true) {\n        while (queue.length > 0) {\n          const val = await queue[0]\n          if (val === kEof) {\n            return\n          }\n          if (signal.aborted) {\n            throw new AbortError()\n          }\n          if (val !== kEmpty) {\n            yield val\n          }\n          queue.shift()\n          if (resume) {\n            resume()\n            resume = null\n          }\n        }\n        await new Promise((resolve) => {\n          next = resolve\n        })\n      }\n    } finally {\n      ac.abort()\n      done = true\n      if (resume) {\n        resume()\n        resume = null\n      }\n    }\n  }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  return async function* asIndexedPairs() {\n    let index = 0\n    for await (const val of this) {\n      var _options$signal4\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal4 = options.signal) !== null &&\n        _options$signal4 !== undefined &&\n        _options$signal4.aborted\n      ) {\n        throw new AbortError({\n          cause: options.signal.reason\n        })\n      }\n      yield [index++, val]\n    }\n  }.call(this)\n}\nasync function some(fn, options = undefined) {\n  for await (const unused of filter.call(this, fn, options)) {\n    return true\n  }\n  return false\n}\nasync function every(fn, options = undefined) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n  return !(await some.call(\n    this,\n    async (...args) => {\n      return !(await fn(...args))\n    },\n    options\n  ))\n}\nasync function find(fn, options) {\n  for await (const result of filter.call(this, fn, options)) {\n    return result\n  }\n  return undefined\n}\nasync function forEach(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function forEachFn(value, options) {\n    await fn(value, options)\n    return kEmpty\n  }\n  // eslint-disable-next-line no-unused-vars\n  for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n  if (typeof fn !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n  }\n  async function filterFn(value, options) {\n    if (await fn(value, options)) {\n      return value\n    }\n    return kEmpty\n  }\n  return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n  constructor() {\n    super('reduce')\n    this.message = 'Reduce of an empty stream requires an initial value'\n  }\n}\nasync function reduce(reducer, initialValue, options) {\n  var _options$signal5\n  if (typeof reducer !== 'function') {\n    throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n  }\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  let hasInitialValue = arguments.length > 1\n  if (\n    options !== null &&\n    options !== undefined &&\n    (_options$signal5 = options.signal) !== null &&\n    _options$signal5 !== undefined &&\n    _options$signal5.aborted\n  ) {\n    const err = new AbortError(undefined, {\n      cause: options.signal.reason\n    })\n    this.once('error', () => {}) // The error is already propagated\n    await finished(this.destroy(err))\n    throw err\n  }\n  const ac = new AbortController()\n  const signal = ac.signal\n  if (options !== null && options !== undefined && options.signal) {\n    const opts = {\n      once: true,\n      [kWeakHandler]: this\n    }\n    options.signal.addEventListener('abort', () => ac.abort(), opts)\n  }\n  let gotAnyItemFromStream = false\n  try {\n    for await (const value of this) {\n      var _options$signal6\n      gotAnyItemFromStream = true\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal6 = options.signal) !== null &&\n        _options$signal6 !== undefined &&\n        _options$signal6.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (!hasInitialValue) {\n        initialValue = value\n        hasInitialValue = true\n      } else {\n        initialValue = await reducer(initialValue, value, {\n          signal\n        })\n      }\n    }\n    if (!gotAnyItemFromStream && !hasInitialValue) {\n      throw new ReduceAwareErrMissingArgs()\n    }\n  } finally {\n    ac.abort()\n  }\n  return initialValue\n}\nasync function toArray(options) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  const result = []\n  for await (const val of this) {\n    var _options$signal7\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal7 = options.signal) !== null &&\n      _options$signal7 !== undefined &&\n      _options$signal7.aborted\n    ) {\n      throw new AbortError(undefined, {\n        cause: options.signal.reason\n      })\n    }\n    ArrayPrototypePush(result, val)\n  }\n  return result\n}\nfunction flatMap(fn, options) {\n  const values = map.call(this, fn, options)\n  return async function* flatMap() {\n    for await (const val of values) {\n      yield* val\n    }\n  }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n  // We coerce here to align with the spec\n  // https://github.com/tc39/proposal-iterator-helpers/issues/169\n  number = Number(number)\n  if (NumberIsNaN(number)) {\n    return 0\n  }\n  if (number < 0) {\n    throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n  }\n  return number\n}\nfunction drop(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* drop() {\n    var _options$signal8\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal8 = options.signal) !== null &&\n      _options$signal8 !== undefined &&\n      _options$signal8.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal9\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal9 = options.signal) !== null &&\n        _options$signal9 !== undefined &&\n        _options$signal9.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- <= 0) {\n        yield val\n      }\n    }\n  }.call(this)\n}\nfunction take(number, options = undefined) {\n  if (options != null) {\n    validateObject(options, 'options')\n  }\n  if ((options === null || options === undefined ? undefined : options.signal) != null) {\n    validateAbortSignal(options.signal, 'options.signal')\n  }\n  number = toIntegerOrInfinity(number)\n  return async function* take() {\n    var _options$signal10\n    if (\n      options !== null &&\n      options !== undefined &&\n      (_options$signal10 = options.signal) !== null &&\n      _options$signal10 !== undefined &&\n      _options$signal10.aborted\n    ) {\n      throw new AbortError()\n    }\n    for await (const val of this) {\n      var _options$signal11\n      if (\n        options !== null &&\n        options !== undefined &&\n        (_options$signal11 = options.signal) !== null &&\n        _options$signal11 !== undefined &&\n        _options$signal11.aborted\n      ) {\n        throw new AbortError()\n      }\n      if (number-- > 0) {\n        yield val\n      } else {\n        return\n      }\n    }\n  }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n  asIndexedPairs,\n  drop,\n  filter,\n  flatMap,\n  map,\n  take,\n  compose\n}\nmodule.exports.promiseReturningOperators = {\n  every,\n  forEach,\n  reduce,\n  toArray,\n  some,\n  find\n}\n", "'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n  return new Promise((resolve, reject) => {\n    let signal\n    let end\n    const lastArg = streams[streams.length - 1]\n    if (\n      lastArg &&\n      typeof lastArg === 'object' &&\n      !isNodeStream(lastArg) &&\n      !isIterable(lastArg) &&\n      !isWebStream(lastArg)\n    ) {\n      const options = ArrayPrototypePop(streams)\n      signal = options.signal\n      end = options.end\n    }\n    pl(\n      streams,\n      (err, value) => {\n        if (err) {\n          reject(err)\n        } else {\n          resolve(value)\n        }\n      },\n      {\n        signal,\n        end\n      }\n    )\n  })\n}\nmodule.exports = {\n  finished,\n  pipeline\n}\n", "/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n;('use strict')\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n  promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n  codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n  const op = streamReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return Stream.Readable.from(ReflectApply(op, this, args))\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n  const op = promiseReturningOperators[key]\n  function fn(...args) {\n    if (new.target) {\n      throw ERR_ILLEGAL_CONSTRUCTOR()\n    }\n    return ReflectApply(op, this, args)\n  }\n  ObjectDefineProperty(fn, 'name', {\n    __proto__: null,\n    value: op.name\n  })\n  ObjectDefineProperty(fn, 'length', {\n    __proto__: null,\n    value: op.length\n  })\n  ObjectDefineProperty(Stream.Readable.prototype, key, {\n    __proto__: null,\n    value: fn,\n    enumerable: false,\n    configurable: true,\n    writable: true\n  })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nObjectDefineProperty(Stream, 'promises', {\n  __proto__: null,\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.pipeline\n  }\n})\nObjectDefineProperty(eos, customPromisify, {\n  __proto__: null,\n  enumerable: true,\n  get() {\n    return promises.finished\n  }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n  return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n", "'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n  configurable: true,\n  enumerable: true,\n  get() {\n    return promises\n  }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n", "exports.Level = require('browser-level').BrowserLevel\n", "/* jshint esversion: 6 */\n/* jslint node: true */\n'use strict';\n\nmodule.exports = function serialize (object) {\n  if (typeof object === 'number' && isNaN(object)) {\n    throw new Error('NaN is not allowed');\n  }\n\n  if (typeof object === 'number' && !isFinite(object)) {\n    throw new Error('Infinity is not allowed');\n  }\n\n  if (object === null || typeof object !== 'object') {\n    return JSON.stringify(object);\n  }\n\n  if (object.toJSON instanceof Function) {\n    return serialize(object.toJSON());\n  }\n\n  if (Array.isArray(object)) {\n    const values = object.reduce((t, cv, ci) => {\n      const comma = ci === 0 ? '' : ',';\n      const value = cv === undefined || typeof cv === 'symbol' ? null : cv;\n      return `${t}${comma}${serialize(value)}`;\n    }, '');\n    return `[${values}]`;\n  }\n\n  const values = Object.keys(object).sort().reduce((t, cv) => {\n    if (object[cv] === undefined ||\n        typeof object[cv] === 'symbol') {\n      return t;\n    }\n    const comma = t.length === 0 ? '' : ',';\n    return `${t}${comma}${serialize(cv)}:${serialize(object[cv])}`;\n  }, '');\n  return `{${values}}`;\n};\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReadableWebToNodeStream = void 0;\nconst readable_stream_1 = require(\"readable-stream\");\n/**\n * Converts a Web-API stream into Node stream.Readable class\n * Node stream readable: https://nodejs.org/api/stream.html#stream_readable_streams\n * Web API readable-stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * Node readable stream: https://nodejs.org/api/stream.html#stream_readable_streams\n */\nclass ReadableWebToNodeStream extends readable_stream_1.Readable {\n    /**\n     *\n     * @param stream Readable\u200BStream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n     */\n    constructor(stream) {\n        super();\n        this.bytesRead = 0;\n        this.released = false;\n        this.reader = stream.getReader();\n    }\n    /**\n     * Implementation of readable._read(size).\n     * When readable._read() is called, if data is available from the resource,\n     * the implementation should begin pushing that data into the read queue\n     * https://nodejs.org/api/stream.html#stream_readable_read_size_1\n     */\n    async _read() {\n        // Should start pushing data into the queue\n        // Read data from the underlying Web-API-readable-stream\n        if (this.released) {\n            this.push(null); // Signal EOF\n            return;\n        }\n        this.pendingRead = this.reader.read();\n        const data = await this.pendingRead;\n        // clear the promise before pushing pushing new data to the queue and allow sequential calls to _read()\n        delete this.pendingRead;\n        if (data.done || this.released) {\n            this.push(null); // Signal EOF\n        }\n        else {\n            this.bytesRead += data.value.length;\n            this.push(data.value); // Push new data to the queue\n        }\n    }\n    /**\n     * If there is no unresolved read call to Web-API Readable\u200BStream immediately returns;\n     * otherwise will wait until the read is resolved.\n     */\n    async waitForReadToComplete() {\n        if (this.pendingRead) {\n            await this.pendingRead;\n        }\n    }\n    /**\n     * Close wrapper\n     */\n    async close() {\n        await this.syncAndRelease();\n    }\n    async syncAndRelease() {\n        this.released = true;\n        await this.waitForReadToComplete();\n        await this.reader.releaseLock();\n    }\n}\nexports.ReadableWebToNodeStream = ReadableWebToNodeStream;\n//# sourceMappingURL=index.js.map", "export * from './identity-agent.js';", "import {\n  Web5Rpc,\n  DidRequest,\n  VcResponse,\n  DidResponse,\n  DwnResponse,\n  DidInterface,\n  DwnInterface,\n  SendVcRequest,\n  SendDwnRequest,\n  ProcessVcRequest,\n  ProcessDwnRequest,\n  Web5PlatformAgent,\n  AgentPermissionsApi,\n} from '@web5/agent';\n\nimport { LevelStore } from '@web5/common';\nimport { BearerDid, DidDht, DidJwk, DidResolverCacheLevel } from '@web5/dids';\nimport {\n  AgentDidApi,\n  AgentDwnApi,\n  DwnDidStore,\n  DwnKeyStore,\n  AgentSyncApi,\n  Web5RpcClient,\n  AgentCryptoApi,\n  AgentKeyManager,\n  HdIdentityVault,\n  LocalKeyManager,\n  SyncEngineLevel,\n  AgentIdentityApi,\n  DwnIdentityStore,\n} from '@web5/agent';\n\n/**\n * Initialization parameters for {@link Web5IdentityAgent}, including an optional recovery phrase that\n * can be used to derive keys to encrypt the vault and generate a DID.\n */\nexport type AgentInitializeParams = {\n  /**\n    * The password used to secure the Agent vault.\n    *\n    * The password selected should be strong and securely managed to prevent unauthorized access.\n    */\n   password: string;\n\n  /**\n   * An optional recovery phrase used to deterministically generate the cryptographic keys for the\n   * Agent vault.\n   *\n   * Supplying this phrase enables the vault's contents to be restored or replicated across devices.\n   * If omitted, a new phrase is generated, which should be securely recorded for future recovery needs.\n   */\n   recoveryPhrase?: string;\n };\n\nexport type AgentStartParams = {\n  /**\n   * The password used to unlock the previously initialized Agent vault.\n   */\n  password: string;\n }\n\nexport type AgentParams<TKeyManager extends AgentKeyManager = LocalKeyManager> = {\n  /** Optional. The Decentralized Identifier (DID) representing this Web5 User Agent. */\n  agentDid?: BearerDid;\n  /** Encrypted vault used for managing the Agent's DID and associated keys. */\n  agentVault: HdIdentityVault;\n  /** Provides cryptographic capabilties like signing, encryption, hashing and key derivation. */\n  cryptoApi: AgentCryptoApi;\n  /** Specifies the local path to be used by the Agent's persistent data stores. */\n  dataPath?: string;\n  /** Facilitates DID operations including create, update, and resolve. */\n  didApi: AgentDidApi<TKeyManager>;\n  /** Facilitates DWN operations including processing and sending requests. */\n  dwnApi: AgentDwnApi;\n  /** Facilitates decentralized Identity operations including create, import, and export. */\n  identityApi: AgentIdentityApi<TKeyManager>;\n  /** Responsible for securely managing the cryptographic keys of the agent. */\n  keyManager: TKeyManager;\n  /** Facilitates fetching, requesting, creating, revoking and validating revocation status of permissions */\n  permissionsApi: AgentPermissionsApi;\n  /** Remote procedure call (RPC) client used to communicate with other Web5 services. */\n  rpcClient: Web5Rpc;\n  /** Facilitates data synchronization of DWN records between nodes. */\n  syncApi: AgentSyncApi;\n}\n\nexport class Web5IdentityAgent<TKeyManager extends AgentKeyManager = LocalKeyManager> implements Web5PlatformAgent<TKeyManager> {\n  public crypto: AgentCryptoApi;\n  public did: AgentDidApi<TKeyManager>;\n  public dwn: AgentDwnApi;\n  public identity: AgentIdentityApi<TKeyManager>;\n  public keyManager: TKeyManager;\n  public permissions: AgentPermissionsApi;\n  public rpc: Web5Rpc;\n  public sync: AgentSyncApi;\n  public vault: HdIdentityVault;\n\n  private _agentDid?: BearerDid;\n\n  constructor(params: AgentParams<TKeyManager>) {\n    this._agentDid = params.agentDid;\n    this.crypto = params.cryptoApi;\n    this.did = params.didApi;\n    this.dwn = params.dwnApi;\n    this.identity = params.identityApi;\n    this.keyManager = params.keyManager;\n    this.permissions = params.permissionsApi;\n    this.rpc = params.rpcClient;\n    this.sync = params.syncApi;\n    this.vault = params.agentVault;\n\n    // Set this agent to be the default agent.\n    this.did.agent = this;\n    this.dwn.agent = this;\n    this.identity.agent = this;\n    this.keyManager.agent = this;\n    this.permissions.agent = this;\n    this.sync.agent = this;\n  }\n\n  get agentDid(): BearerDid {\n    if (this._agentDid === undefined) {\n      throw new Error(\n        'Web5UserAgent: The \"agentDid\" property is not set. Ensure the agent is properly ' +\n        'initialized and a DID is assigned.'\n      );\n    }\n    return this._agentDid;\n  }\n\n  set agentDid(did: BearerDid) {\n    this._agentDid = did;\n  }\n\n  /**\n   * If any of the required agent components are not provided, instantiate default implementations.\n   */\n  public static async create({\n    dataPath = 'DATA/AGENT',\n    agentDid, agentVault, cryptoApi, didApi, dwnApi, identityApi, keyManager, permissionsApi, rpcClient, syncApi\n  }: Partial<AgentParams> = {}\n  ): Promise<Web5IdentityAgent> {\n\n    agentVault ??= new HdIdentityVault({\n      keyDerivationWorkFactor : 210_000,\n      store                   : new LevelStore<string, string>({ location: `${dataPath}/VAULT_STORE` })\n    });\n\n    cryptoApi ??= new AgentCryptoApi();\n\n    didApi ??= new AgentDidApi({\n      didMethods    : [DidDht, DidJwk],\n      resolverCache : new DidResolverCacheLevel({ location: `${dataPath}/DID_RESOLVERCACHE` }),\n      store         : new DwnDidStore()\n    });\n\n    dwnApi ??= new AgentDwnApi({\n      dwn: await AgentDwnApi.createDwn({ dataPath, didResolver: didApi })\n    });\n\n    identityApi ??= new AgentIdentityApi({ store: new DwnIdentityStore() });\n\n    keyManager ??= new LocalKeyManager({ keyStore: new DwnKeyStore() });\n\n    permissionsApi ??= new AgentPermissionsApi();\n\n    rpcClient ??= new Web5RpcClient();\n\n    syncApi ??= new AgentSyncApi({ syncEngine: new SyncEngineLevel({ dataPath }) });\n\n    // Instantiate the Agent using the provided or default components.\n    return new Web5IdentityAgent({\n      agentDid,\n      agentVault,\n      cryptoApi,\n      didApi,\n      dwnApi,\n      keyManager,\n      permissionsApi,\n      identityApi,\n      rpcClient,\n      syncApi\n    });\n  }\n\n  public async firstLaunch(): Promise<boolean> {\n    // Check whether data vault is already initialize\n    return await this.vault.isInitialized() === false;\n  }\n\n  /**\n   * Initializes the User Agent with a password, and optionally a recovery phrase.\n   *\n   * This method is typically called once, the first time the Agent is launched, and is responsible\n   * for setting up the agent's operational environment, cryptographic key material, and readiness\n   * for processing Web5 requests.\n   *\n   * The password is used to secure the Agent vault, and the recovery phrase is used to derive the\n   * cryptographic keys for the vault. If a recovery phrase is not provided, a new recovery phrase\n   * will be generated and returned. The password should be chosen and entered by the end-user.\n   */\n  public async initialize({ password, recoveryPhrase }: AgentInitializeParams): Promise<string> {\n    // Initialize the Agent vault.\n    recoveryPhrase = await this.vault.initialize({ password, recoveryPhrase });\n\n    return recoveryPhrase;\n  }\n\n  async processDidRequest<T extends DidInterface>(\n    request: DidRequest<T>\n  ): Promise<DidResponse<T>> {\n    return this.did.processRequest(request);\n  }\n\n  public async processDwnRequest<T extends DwnInterface>(\n    request: ProcessDwnRequest<T>\n  ): Promise<DwnResponse<T>> {\n    return this.dwn.processRequest(request);\n  }\n\n  public async processVcRequest(_request: ProcessVcRequest): Promise<VcResponse> {\n    throw new Error('Not implemented');\n  }\n\n  public async sendDidRequest<T extends DidInterface>(\n    _request: DidRequest<T>\n  ): Promise<DidResponse<T>> {\n    throw new Error('Not implemented');\n  }\n\n  public async sendDwnRequest<T extends DwnInterface>(\n    request: SendDwnRequest<T>\n  ): Promise<DwnResponse<T>> {\n    return this.dwn.sendRequest(request);\n  }\n\n  public async sendVcRequest(_request: SendVcRequest): Promise<VcResponse> {\n    throw new Error('Not implemented');\n  }\n\n  public async start({ password }: AgentInitializeParams): Promise<void> {\n    // If the Agent vault is locked, unlock it.\n    if (this.vault.isLocked()) {\n      await this.vault.unlock({ password });\n    }\n\n    // Set the Agent's DID.\n    this.agentDid = await this.vault.getDid();\n  }\n}", "export type * from './types/agent.js';\nexport * from './types/dwn.js';\nexport type * from './types/identity.js';\nexport type * from './types/identity-vault.js';\nexport type * from './types/key-manager.js';\nexport type * from './types/permissions.js';\nexport type * from './types/sync.js';\nexport type * from './types/vc.js';\n\nexport * from './agent-did-resolver-cache.js';\nexport * from './bearer-identity.js';\nexport * from './crypto-api.js';\nexport * from './did-api.js';\nexport * from './dwn-api.js';\nexport * from './dwn-registrar.js';\nexport * from './hd-identity-vault.js';\nexport * from './identity-api.js';\nexport * from './local-key-manager.js';\nexport * from './permissions-api.js';\nexport * from './rpc-client.js';\nexport * from './store-data.js';\nexport * from './store-did.js';\nexport * from './store-identity.js';\nexport * from './store-key.js';\nexport * from './sync-api.js';\nexport * from './sync-engine-level.js';\nexport * from  './test-harness.js';\nexport * from './utils.js';\nexport * from './connect.js';\nexport * from './oidc.js';", "import type { DidService } from '@web5/dids';\nimport type { Readable, RequireOnly } from '@web5/common';\nimport type {\n  RecordsReadReply,\n  RecordsQueryReply,\n  RecordsReadMessage,\n  RecordsReadOptions,\n  GenericMessageReply,\n  ProtocolsQueryReply,\n  RecordsQueryMessage,\n  RecordsQueryOptions,\n  RecordsWriteMessage,\n  RecordsWriteOptions,\n  RecordsDeleteMessage,\n  RecordsDeleteOptions,\n  ProtocolsQueryMessage,\n  ProtocolsQueryOptions,\n  ProtocolsConfigureMessage,\n  ProtocolsConfigureOptions,\n  RecordsSubscribeMessage,\n  RecordsSubscribeOptions,\n  RecordsSubscribeReply,\n  MessageSubscriptionHandler,\n  RecordSubscriptionHandler,\n  MessagesQueryMessage,\n  MessagesReadMessage,\n  MessagesSubscribeMessage,\n  MessagesQueryOptions,\n  MessagesReadOptions,\n  MessagesSubscribeOptions,\n  MessagesQueryReply,\n  MessagesReadReply,\n  MessagesSubscribeReply,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport {\n  RecordsRead,\n  RecordsQuery,\n  RecordsWrite,\n  DwnMethodName,\n  RecordsDelete,\n  ProtocolsQuery,\n  DwnInterfaceName,\n  ProtocolsConfigure,\n  RecordsSubscribe,\n  MessagesQuery,\n  MessagesRead,\n  MessagesSubscribe,\n} from '@tbd54566975/dwn-sdk-js';\n\n/**\n * Represents a Decentralized Web Node (DWN) service in a DID Document.\n *\n * A DWN DID service is a specialized type of DID service with the `type` set to\n * `DecentralizedWebNode`. It includes specific properties `enc` and `sig` that are used to identify\n * the public keys that can be used to interact with the DID Subject. The values of these properties\n * are strings or arrays of strings containing one or more verification method `id` values present in\n * the same DID document. If the `enc` and/or `sig` properties are an array of strings, an entity\n * interacting with the DID subject is expected to use the verification methods in the order they\n * are listed.\n *\n * @example\n * ```ts\n * const service: DwnDidService = {\n *   id: 'did:example:123#dwn',\n *   type: 'DecentralizedWebNode',\n *   serviceEndpoint: 'https://dwn.tbddev.org/dwn0',\n *   enc: 'did:example:123#key-1',\n *   sig: 'did:example:123#key-2'\n * }\n * ```\n *\n * @see {@link https://identity.foundation/decentralized-web-node/spec/ | DIF Decentralized Web Node (DWN) Specification}\n */\nexport interface DwnDidService extends DidService {\n  /**\n   * One or more verification method `id` values that can be used to encrypt information\n   * intended for the DID subject.\n   */\n  enc?: string | string[];\n\n  /**\n   * One or more verification method `id` values that will be used by the DID subject to sign data\n   * or by another entity to verify signatures created by the DID subject.\n   */\n  sig: string | string[];\n}\n\nexport enum DwnInterface {\n  MessagesQuery       = DwnInterfaceName.Messages + DwnMethodName.Query,\n  MessagesRead        = DwnInterfaceName.Messages + DwnMethodName.Read,\n  MessagesSubscribe   = DwnInterfaceName.Messages + DwnMethodName.Subscribe,\n  ProtocolsConfigure  = DwnInterfaceName.Protocols + DwnMethodName.Configure,\n  ProtocolsQuery      = DwnInterfaceName.Protocols + DwnMethodName.Query,\n  RecordsDelete       = DwnInterfaceName.Records + DwnMethodName.Delete,\n  RecordsQuery        = DwnInterfaceName.Records + DwnMethodName.Query,\n  RecordsRead         = DwnInterfaceName.Records + DwnMethodName.Read,\n  RecordsSubscribe    = DwnInterfaceName.Records + DwnMethodName.Subscribe,\n  RecordsWrite        = DwnInterfaceName.Records + DwnMethodName.Write\n}\n\nexport type DwnRecordsInterfaces = DwnInterface.RecordsDelete | DwnInterface.RecordsQuery | DwnInterface.RecordsRead | DwnInterface.RecordsSubscribe | DwnInterface.RecordsWrite;\nexport type DwnMessageInterfaces = DwnInterface.MessagesQuery | DwnInterface.MessagesRead | DwnInterface.MessagesSubscribe;\nexport type DwnProtocolInterfaces = DwnInterface.ProtocolsConfigure | DwnInterface.ProtocolsQuery;\n\nexport interface DwnMessage {\n  [DwnInterface.MessagesQuery]      : MessagesQueryMessage;\n  [DwnInterface.MessagesRead]       : MessagesReadMessage;\n  [DwnInterface.MessagesSubscribe]  : MessagesSubscribeMessage;\n  [DwnInterface.ProtocolsConfigure] : ProtocolsConfigureMessage;\n  [DwnInterface.ProtocolsQuery]     : ProtocolsQueryMessage;\n  [DwnInterface.RecordsDelete]      : RecordsDeleteMessage;\n  [DwnInterface.RecordsQuery]       : RecordsQueryMessage;\n  [DwnInterface.RecordsRead]        : RecordsReadMessage;\n  [DwnInterface.RecordsSubscribe]   : RecordsSubscribeMessage;\n  [DwnInterface.RecordsWrite]       : RecordsWriteMessage;\n}\n\nexport interface DwnMessageDescriptor {\n  [DwnInterface.MessagesQuery]      : MessagesQueryMessage['descriptor'];\n  [DwnInterface.MessagesRead]       : MessagesReadMessage['descriptor'];\n  [DwnInterface.MessagesSubscribe]  : MessagesSubscribeMessage['descriptor'];\n  [DwnInterface.ProtocolsConfigure] : ProtocolsConfigureMessage['descriptor'];\n  [DwnInterface.ProtocolsQuery]     : ProtocolsQueryMessage['descriptor'];\n  [DwnInterface.RecordsDelete]      : RecordsDeleteMessage['descriptor'];\n  [DwnInterface.RecordsQuery]       : RecordsQueryMessage['descriptor'];\n  [DwnInterface.RecordsRead]        : RecordsReadMessage['descriptor'];\n  [DwnInterface.RecordsSubscribe]   : RecordsSubscribeMessage['descriptor'];\n  [DwnInterface.RecordsWrite]       : RecordsWriteMessage['descriptor'];\n}\n\nexport interface DwnMessageParams {\n  [DwnInterface.MessagesQuery]      : RequireOnly<MessagesQueryOptions, 'filters'>;\n  [DwnInterface.MessagesRead]       : RequireOnly<MessagesReadOptions, 'messageCid'>;\n  [DwnInterface.MessagesSubscribe]  : Partial<MessagesSubscribeOptions>;\n  [DwnInterface.ProtocolsConfigure] : RequireOnly<ProtocolsConfigureOptions, 'definition'>;\n  [DwnInterface.ProtocolsQuery]     : ProtocolsQueryOptions;\n  [DwnInterface.RecordsDelete]      : RequireOnly<RecordsDeleteOptions, 'recordId'>;\n  [DwnInterface.RecordsQuery]       : RecordsQueryOptions;\n  [DwnInterface.RecordsRead]        : RecordsReadOptions;\n  [DwnInterface.RecordsSubscribe]   : RecordsSubscribeOptions;\n  [DwnInterface.RecordsWrite]       : RecordsWriteOptions;\n}\n\nexport interface DwnMessageReply {\n  [DwnInterface.MessagesQuery]      : MessagesQueryReply;\n  [DwnInterface.MessagesRead]       : MessagesReadReply;\n  [DwnInterface.MessagesSubscribe]  : MessagesSubscribeReply;\n  [DwnInterface.ProtocolsConfigure] : GenericMessageReply;\n  [DwnInterface.ProtocolsQuery]     : ProtocolsQueryReply;\n  [DwnInterface.RecordsDelete]      : GenericMessageReply;\n  [DwnInterface.RecordsQuery]       : RecordsQueryReply;\n  [DwnInterface.RecordsRead]        : RecordsReadReply;\n  [DwnInterface.RecordsSubscribe]   : RecordsSubscribeReply;\n  [DwnInterface.RecordsWrite]       : GenericMessageReply;\n}\n\nexport interface MessageHandler {\n  [DwnInterface.MessagesSubscribe]  : MessageSubscriptionHandler;\n  [DwnInterface.RecordsSubscribe]   : RecordSubscriptionHandler;\n\n  // define all of them individually as undefined\n  [DwnInterface.MessagesQuery]      : undefined;\n  [DwnInterface.MessagesRead]       : undefined;\n  [DwnInterface.ProtocolsConfigure] : undefined;\n  [DwnInterface.ProtocolsQuery]     : undefined;\n  [DwnInterface.RecordsDelete]      : undefined;\n  [DwnInterface.RecordsQuery]       : undefined;\n  [DwnInterface.RecordsRead]        : undefined;\n  [DwnInterface.RecordsWrite]       : undefined;\n}\n\nexport type DwnRequest<T extends DwnInterface> = {\n  author: string;\n  target: string;\n  messageType: T;\n}\n\n/**\n * Defines the structure for response status, including a status code and detail message.\n */\nexport type DwnResponseStatus = {\n  /** Encapsulates the outcome of an operation, providing both a numeric status code and a descriptive message. */\n  status: {\n    /** Numeric status code representing the outcome of the operation. */\n    code: number;\n\n    /** Descriptive detail about the status or error. */\n    detail: string;\n  };\n};\n\nexport type ProcessDwnRequest<T extends DwnInterface> = DwnRequest<T> & {\n  dataStream?: Blob | ReadableStream | Readable;\n  rawMessage?: DwnMessage[T];\n  messageParams?: DwnMessageParams[T];\n  store?: boolean;\n  signAsOwner?: boolean;\n  signAsOwnerDelegate?: boolean;\n  granteeDid?: string;\n  subscriptionHandler?: MessageHandler[T];\n}\n\nexport type SendDwnRequest<T extends DwnInterface> = DwnRequest<T> & (ProcessDwnRequest<T> | { messageCid: string })\n\nexport type DwnResponse<T extends DwnInterface> = {\n  message?: DwnMessage[T];\n  messageCid: string;\n  reply: DwnMessageReply[T];\n}\n\nexport interface DwnMessageConstructor<T extends DwnInterface> {\n  new (): DwnMessageInstance[T];\n  create(params: DwnMessageParams[T]): Promise<DwnMessageInstance[T]>;\n  parse(rawMessage: DwnMessage[T]): Promise<DwnMessageInstance[T]>;\n}\n\nexport const dwnMessageConstructors: { [T in DwnInterface]: DwnMessageConstructor<T> } = {\n  [DwnInterface.MessagesQuery]      : MessagesQuery as any,\n  [DwnInterface.MessagesRead]       : MessagesRead as any,\n  [DwnInterface.MessagesSubscribe]  : MessagesSubscribe as any,\n  [DwnInterface.ProtocolsConfigure] : ProtocolsConfigure as any,\n  [DwnInterface.ProtocolsQuery]     : ProtocolsQuery as any,\n  [DwnInterface.RecordsDelete]      : RecordsDelete as any,\n  [DwnInterface.RecordsQuery]       : RecordsQuery as any,\n  [DwnInterface.RecordsRead]        : RecordsRead as any,\n  [DwnInterface.RecordsSubscribe]   : RecordsSubscribe as any,\n  [DwnInterface.RecordsWrite]       : RecordsWrite as any,\n} as const;\n\nexport type DwnMessageConstructors = typeof dwnMessageConstructors;\n\nexport interface DwnMessageInstance {\n  [DwnInterface.MessagesQuery]      : MessagesQuery;\n  [DwnInterface.MessagesRead]       : MessagesRead;\n  [DwnInterface.MessagesSubscribe]  : MessagesSubscribe;\n  [DwnInterface.ProtocolsConfigure] : ProtocolsConfigure;\n  [DwnInterface.ProtocolsQuery]     : ProtocolsQuery;\n  [DwnInterface.RecordsDelete]      : RecordsDelete;\n  [DwnInterface.RecordsQuery]       : RecordsQuery;\n  [DwnInterface.RecordsRead]        : RecordsRead;\n  [DwnInterface.RecordsSubscribe]   : RecordsSubscribe;\n  [DwnInterface.RecordsWrite]       : RecordsWrite;\n}\n\nexport type DwnMessageWithData<T extends DwnInterface> = {\n  message: DwnMessage[T];\n  dataStream?: Readable;\n}\n\n// The following types are exported by the DWN SDK and are re-exported here so that dependent\n// packages do not need to import the DWN SDK directly. This ensures that downstream packages are\n// always using the same version of the DWN SDK as the agent package.\n\nexport {\n  DwnConstant,\n  Signer as DwnSigner,\n  DateSort as DwnDateSort,\n  DataEncodedRecordsWriteMessage as DwnDataEncodedRecordsWriteMessage,\n  PublicJwk as DwnPublicKeyJwk, // TODO: Remove once DWN SDK switches to Jwk from @web5/crypto\n  PaginationCursor as DwnPaginationCursor,\n  MessageSubscriptionHandler as DwnMessageSubscriptionHandler,\n  RecordSubscriptionHandler as DwnRecordSubscriptionHandler,\n  MessageSubscription as DwnMessageSubscription,\n  MessagesPermissionScope as DwnMessagesPermissionScope,\n  EncryptionAlgorithm as DwnEncryptionAlgorithm,\n  KeyDerivationScheme as DwnKeyDerivationScheme,\n  PermissionGrant as DwnPermissionGrant,\n  PermissionGrantData as DwnPermissionGrantData,\n  PermissionRequest as DwnPermissionRequest,\n  PermissionRequestData as DwnPermissionRequestData,\n  PermissionsProtocol as DwnPermissionsProtocol,\n  ProtocolDefinition as DwnProtocolDefinition,\n  ProtocolPermissionScope as DwnProtocolPermissionScope,\n  RecordsPermissionScope as DwnRecordsPermissionScope,\n  PermissionConditions as DwnPermissionConditions,\n  PermissionScope as DwnPermissionScope,\n} from '@tbd54566975/dwn-sdk-js';", "// export everything that we want to be consumable\nexport type { DwnConfig } from './dwn.js';\nexport type { EventLog } from './types/event-log.js';\nexport type { EventListener, EventStream, EventSubscription, MessageEvent, SubscriptionReply } from './types/subscriptions.js';\nexport type { GenericMessage, GenericMessageReply, MessageSort, MessageSubscription, Pagination, QueryResultEntry } from './types/message-types.js';\nexport type { MessagesFilter, MessagesReadMessage as MessagesReadMessage, MessagesReadReply as MessagesReadReply, MessagesReadReplyEntry as MessagesReadReplyEntry, MessagesQueryMessage, MessagesQueryReply, MessagesSubscribeDescriptor, MessagesSubscribeMessage, MessagesSubscribeReply, MessageSubscriptionHandler } from './types/messages-types.js';\nexport type { Filter, EqualFilter, OneOfFilter, RangeFilter, RangeCriterion, PaginationCursor, QueryOptions } from './types/query-types.js';\nexport type { ProtocolsConfigureDescriptor, ProtocolDefinition, ProtocolTypes, ProtocolRuleSet, ProtocolsQueryFilter, ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply } from './types/protocols-types.js';\nexport { authenticate } from './core/auth.js';\nexport { ActiveTenantCheckResult, AllowAllTenantGate, TenantGate } from './core/tenant-gate.js';\nexport { Cid } from './utils/cid.js';\nexport { RecordsQuery, RecordsQueryOptions } from './interfaces/records-query.js';\nexport { DataStore, DataStorePutResult, DataStoreGetResult } from './types/data-store.js';\nexport { ResumableTaskStore, ManagedResumableTask } from './types/resumable-task-store.js';\nexport { DataStream } from './utils/data-stream.js';\nexport { DerivedPrivateJwk, HdKey, KeyDerivationScheme } from './utils/hd-key.js';\nexport { Dwn } from './dwn.js';\nexport { DwnConstant } from './core/dwn-constant.js';\nexport { DwnError, DwnErrorCode } from './core/dwn-error.js';\nexport { DwnInterfaceName, DwnMethodName } from './enums/dwn-interface-method.js';\nexport { Encoder } from './utils/encoder.js';\nexport { MessagesSubscribe as MessagesSubscribe, MessagesSubscribeOptions as MessagesSubscribeOptions } from './interfaces/messages-subscribe.js';\nexport { Encryption, EncryptionAlgorithm } from './utils/encryption.js';\nexport { EncryptionInput, KeyEncryptionInput, RecordsWrite, RecordsWriteOptions, CreateFromOptions } from './interfaces/records-write.js';\nexport { executeUnlessAborted } from './utils/abort.js';\nexport { Jws } from './utils/jws.js';\nexport { KeyMaterial, PrivateJwk, PublicJwk } from './types/jose-types.js';\nexport { Message } from './core/message.js';\nexport { MessagesRead as MessagesRead, MessagesReadOptions as MessagesReadOptions } from './interfaces/messages-read.js';\nexport { MessagesQuery, MessagesQueryOptions } from './interfaces/messages-query.js';\nexport { UnionMessageReply } from './core/message-reply.js';\nexport { MessageStore, MessageStoreOptions } from './types/message-store.js';\nexport { PermissionGrant } from './protocols/permission-grant.js';\nexport { PermissionRequest } from './protocols/permission-request.js';\nexport { PermissionsProtocol } from './protocols/permissions.js';\nexport { PrivateKeySigner } from './utils/private-key-signer.js';\nexport { Protocols } from './utils/protocols.js';\nexport { ProtocolsConfigure, ProtocolsConfigureOptions } from './interfaces/protocols-configure.js';\nexport { ProtocolsQuery, ProtocolsQueryOptions } from './interfaces/protocols-query.js';\nexport { Records } from './utils/records.js';\nexport { RecordsDelete, RecordsDeleteOptions } from './interfaces/records-delete.js';\nexport { RecordsRead, RecordsReadOptions } from './interfaces/records-read.js';\nexport { RecordsSubscribe, RecordsSubscribeOptions } from './interfaces/records-subscribe.js';\nexport { Secp256k1 } from './utils/secp256k1.js';\nexport { Secp256r1 } from './utils/secp256r1.js';\nexport { Signer } from './types/signer.js';\nexport { SortDirection } from './types/query-types.js';\nexport { Time } from './utils/time.js';\nexport * from './types/permission-types.js';\nexport * from './types/records-types.js';\n\n// concrete implementations of stores and event stream\nexport { DataStoreLevel } from './store/data-store-level.js';\nexport { EventLogLevel } from './event-log/event-log-level.js';\nexport { MessageStoreLevel } from './store/message-store-level.js';\nexport { ResumableTaskStoreLevel } from './store/resumable-task-store-level.js';\nexport { EventEmitterStream } from './event-log/event-emitter-stream.js';\n\n// test library exports\nexport { Persona, TestDataGenerator } from '../tests/utils/test-data-generator.js';\nexport { Poller } from '../tests/utils/poller.js';", "import type { GeneralJws } from '../types/jws-types.js';\nimport type { SignatureEntry } from '../types/jws-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { KeyMaterial, PublicJwk } from '../types/jose-types.js';\n\nimport isPlainObject from 'lodash/isPlainObject.js';\n\nimport { Encoder } from './encoder.js';\nimport { PrivateKeySigner } from './private-key-signer.js';\nimport { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n\n/**\n * Utility class for JWS related operations.\n */\nexport class Jws {\n  /**\n   * Gets the `kid` from a general JWS signature entry.\n   */\n  public static getKid(signatureEntry: SignatureEntry): string {\n    const { kid } = Encoder.base64UrlToObject(signatureEntry.protected);\n    return kid;\n  }\n\n  /**\n   * Gets the signer DID from a general JWS signature entry.\n   */\n  public static getSignerDid(signatureEntry: SignatureEntry): string {\n    const kid = Jws.getKid(signatureEntry);\n    const did = Jws.extractDid(kid);\n    return did;\n  }\n\n  /**\n   * Verifies the signature against the given payload.\n   * @returns `true` if signature is valid; `false` otherwise\n   */\n  public static async verifySignature(base64UrlPayload: string, signatureEntry: SignatureEntry, jwkPublic: PublicJwk): Promise<boolean> {\n    const signatureAlgorithm = signatureAlgorithms[jwkPublic.crv];\n\n    if (!signatureAlgorithm) {\n      throw new DwnError(DwnErrorCode.JwsVerifySignatureUnsupportedCrv, `unsupported crv. crv must be one of ${Object.keys(signatureAlgorithms)}`);\n    }\n\n    const payload = Encoder.stringToBytes(`${signatureEntry.protected}.${base64UrlPayload}`);\n    const signatureBytes = Encoder.base64UrlToBytes(signatureEntry.signature);\n\n    return await signatureAlgorithm.verify(payload, signatureBytes, jwkPublic);\n  }\n\n  /**\n   * Decodes the payload of the given JWS object as a plain object.\n   */\n  public static decodePlainObjectPayload(jws: GeneralJws): any {\n    let payloadJson;\n    try {\n      payloadJson = Encoder.base64UrlToObject(jws.payload);\n    } catch {\n      throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'payload is not a JSON object');\n    }\n\n    if (!isPlainObject(payloadJson)) {\n      throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'signed payload must be a plain object');\n    }\n\n    return payloadJson;\n  }\n\n  /**\n   * Extracts the DID from the given `kid` string.\n   */\n  public static extractDid(kid: string): string {\n    const [ did ] = kid.split('#');\n    return did;\n  }\n\n  /**\n   * Creates a Signer[] from the given Personas.\n   */\n  public static createSigners(keyMaterials: KeyMaterial[]): Signer[] {\n    const signers = keyMaterials.map((keyMaterial) => Jws.createSigner(keyMaterial));\n    return signers;\n  }\n\n  /**\n   * Creates a Signer from the given Persona.\n   */\n  public static createSigner(keyMaterial: KeyMaterial): Signer {\n    const privateJwk = keyMaterial.keyPair.privateJwk;\n    const keyId = keyMaterial.keyId;\n    const signer = new PrivateKeySigner({ privateJwk, keyId });\n    return signer;\n  }\n}\n", "import { base64url } from 'multiformats/bases/base64';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * Utility class for encoding/converting data into various formats.\n */\nexport class Encoder {\n\n  public static base64UrlToBytes(base64urlString: string): Uint8Array {\n    const content = base64url.baseDecode(base64urlString);\n    return content;\n  }\n\n  public static base64UrlToObject(base64urlString: string): any {\n    const payloadBytes = base64url.baseDecode(base64urlString);\n    const payloadObject = Encoder.bytesToObject(payloadBytes);\n    return payloadObject;\n  }\n\n  public static bytesToBase64Url(bytes: Uint8Array): string {\n    const base64UrlString = base64url.baseEncode(bytes);\n    return base64UrlString;\n  }\n\n  public static bytesToString(content: Uint8Array): string {\n    const bytes = textDecoder.decode(content);\n    return bytes;\n  }\n\n  public static bytesToObject(content: Uint8Array): object {\n    const contentString = Encoder.bytesToString(content);\n    const contentObject = JSON.parse(contentString);\n    return contentObject;\n  }\n\n  public static objectToBytes(obj: Record<string, any>): Uint8Array {\n    const objectString = JSON.stringify(obj);\n    const objectBytes = textEncoder.encode(objectString);\n    return objectBytes;\n  }\n\n  public static stringToBase64Url(content: string): string {\n    const bytes = textEncoder.encode(content);\n    const base64UrlString = base64url.baseEncode(bytes);\n    return base64UrlString;\n  }\n\n  public static stringToBytes(content: string): Uint8Array {\n    const bytes = textEncoder.encode(content);\n    return bytes;\n  }\n}\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while ((out.length * bitsPerChar) & 7) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "import type { SignatureAlgorithm } from '../../../types/jose-types.js';\n\nimport { ed25519 } from './ed25519.js';\nimport { Secp256k1 } from '../../../utils/secp256k1.js';\nimport { Secp256r1 } from '../../../utils/secp256r1.js';\n\n// the key should be the appropriate `crv` value\nexport const signatureAlgorithms: Record<string, SignatureAlgorithm> = {\n  'Ed25519'   : ed25519,\n  'secp256k1' : {\n    sign            : Secp256k1.sign,\n    verify          : Secp256k1.verify,\n    generateKeyPair : Secp256k1.generateKeyPair,\n    publicKeyToJwk  : Secp256k1.publicKeyToJwk\n  },\n  'P-256': {\n    sign            : Secp256r1.sign,\n    verify          : Secp256r1.verify,\n    generateKeyPair : Secp256r1.generateKeyPair,\n    publicKeyToJwk  : Secp256r1.publicKeyToJwk,\n  },\n};", "/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nconst P = 2n ** 255n - 19n; // ed25519 is twisted edwards curve\nconst N = 2n ** 252n + 27742317777372353535851937790883648493n; // curve's (group) order\nconst Gx = 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an; // base point x\nconst Gy = 0x6666666666666666666666666666666666666666666666666666666666666658n; // base point y\nconst CURVE = {\n    a: -1n,\n    d: 37095705934669439343138083508754565189542113879843219016388785533085940283555n,\n    p: P, n: N, h: 8, Gx, Gy // field prime, curve (group) order, cofactor\n};\nconst err = (m = '') => { throw new Error(m); }; // error helper, messes-up stack trace\nconst str = (s) => typeof s === 'string'; // is string\nconst au8 = (a, l) => // is Uint8Array (of specific length)\n !(a instanceof Uint8Array) || (typeof l === 'number' && l > 0 && a.length !== l) ?\n    err('Uint8Array expected') : a;\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst toU8 = (a, len) => au8(str(a) ? h2b(a) : u8n(a), len); // norm(hex/u8a) to u8a\nconst mod = (a, b = P) => { let r = a % b; return r >= 0n ? r : b + r; }; // mod division\nconst isPoint = (p) => (p instanceof Point ? p : err('Point expected')); // is xyzt point\nlet Gpows = undefined; // precomputes for base point G\nclass Point {\n    constructor(ex, ey, ez, et) {\n        this.ex = ex;\n        this.ey = ey;\n        this.ez = ez;\n        this.et = et;\n    }\n    static fromAffine(p) { return new Point(p.x, p.y, 1n, mod(p.x * p.y)); }\n    static fromHex(hex, strict = true) {\n        const { d } = CURVE;\n        hex = toU8(hex, 32);\n        const normed = hex.slice(); // copy the array to not mess it up\n        normed[31] = hex[31] & ~0x80; // adjust first LE byte = last BE byte\n        const y = b2n_LE(normed); // decode as little-endian, convert to num\n        if (y === 0n) { // y=0 is valid, proceed\n        }\n        else {\n            if (strict && !(0n < y && y < P))\n                err('bad y coord 1'); // strict=true [1..P-1]\n            if (!strict && !(0n < y && y < 2n ** 256n))\n                err('bad y coord 2'); // strict=false [1..2^256-1]\n        }\n        const y2 = mod(y * y); // y\u00B2\n        const u = mod(y2 - 1n); // u=y\u00B2-1\n        const v = mod(d * y2 + 1n); // v=dy\u00B2+1\n        let { isValid, value: x } = uvRatio(u, v); // (uv\u00B3)(uv\u2077)^(p-5)/8; square root\n        if (!isValid)\n            err('bad y coordinate 3'); // not square root: bad point\n        const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n        const isHeadOdd = (hex[31] & 0x80) !== 0;\n        if (isHeadOdd !== isXOdd)\n            x = mod(-x);\n        return new Point(x, y, 1n, mod(x * y)); // Z=1, T=xy\n    }\n    get x() { return this.toAffine().x; } // .x, .y will call expensive toAffine.\n    get y() { return this.toAffine().y; } // Should be used with care.\n    equals(other) {\n        const { ex: X1, ey: Y1, ez: Z1 } = this;\n        const { ex: X2, ey: Y2, ez: Z2 } = isPoint(other); // isPoint() checks class equality\n        const X1Z2 = mod(X1 * Z2), X2Z1 = mod(X2 * Z1);\n        const Y1Z2 = mod(Y1 * Z2), Y2Z1 = mod(Y2 * Z1);\n        return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n    is0() { return this.equals(I); }\n    negate() {\n        return new Point(mod(-this.ex), this.ey, this.ez, mod(-this.et));\n    }\n    double() {\n        const { ex: X1, ey: Y1, ez: Z1 } = this; // Cost: 4M + 4S + 1*a + 6add + 1*2\n        const { a } = CURVE; // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n        const A = mod(X1 * X1);\n        const B = mod(Y1 * Y1);\n        const C = mod(2n * mod(Z1 * Z1));\n        const D = mod(a * A);\n        const x1y1 = X1 + Y1;\n        const E = mod(mod(x1y1 * x1y1) - A - B);\n        const G = D + B;\n        const F = G - C;\n        const H = D - B;\n        const X3 = mod(E * F);\n        const Y3 = mod(G * H);\n        const T3 = mod(E * H);\n        const Z3 = mod(F * G);\n        return new Point(X3, Y3, Z3, T3);\n    }\n    add(other) {\n        const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this; // Cost: 8M + 1*k + 8add + 1*2.\n        const { ex: X2, ey: Y2, ez: Z2, et: T2 } = isPoint(other); // doesn't check if other on-curve\n        const { a, d } = CURVE; // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n        const A = mod(X1 * X2);\n        const B = mod(Y1 * Y2);\n        const C = mod(T1 * d * T2);\n        const D = mod(Z1 * Z2);\n        const E = mod((X1 + Y1) * (X2 + Y2) - A - B);\n        const F = mod(D - C);\n        const G = mod(D + C);\n        const H = mod(B - a * A);\n        const X3 = mod(E * F);\n        const Y3 = mod(G * H);\n        const T3 = mod(E * H);\n        const Z3 = mod(F * G);\n        return new Point(X3, Y3, Z3, T3);\n    }\n    mul(n, safe = true) {\n        if (n === 0n)\n            return safe === true ? err('cannot multiply by 0') : I;\n        if (!(typeof n === 'bigint' && 0n < n && n < N))\n            err('invalid scalar, must be < L');\n        if (!safe && this.is0() || n === 1n)\n            return this; // safe=true bans 0. safe=false allows 0.\n        if (this.equals(G))\n            return wNAF(n).p; // use wNAF precomputes for base points\n        let p = I, f = G; // init result point & fake point\n        for (let d = this; n > 0n; d = d.double(), n >>= 1n) { // double-and-add ladder\n            if (n & 1n)\n                p = p.add(d); // if bit is present, add to point\n            else if (safe)\n                f = f.add(d); // if not, add to fake for timing safety\n        }\n        return p;\n    }\n    multiply(scalar) { return this.mul(scalar); } // Aliases for compatibilty\n    clearCofactor() { return this.mul(BigInt(CURVE.h), false); } // multiply by cofactor\n    isSmallOrder() { return this.clearCofactor().is0(); } // check if P is small order\n    isTorsionFree() {\n        let p = this.mul(N / 2n, false).double(); // ensures the point is not \"bad\".\n        if (N % 2n)\n            p = p.add(this); // P^(N+1)             // P*N == (P*(N/2))*2+P\n        return p.is0();\n    }\n    toAffine() {\n        const { ex: x, ey: y, ez: z } = this; // (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy)\n        if (this.is0())\n            return { x: 0n, y: 0n }; // fast-path for zero point\n        const iz = invert(z); // z^-1: invert z\n        if (mod(z * iz) !== 1n)\n            err('invalid inverse'); // (z * z^-1) must be 1, otherwise bad math\n        return { x: mod(x * iz), y: mod(y * iz) }; // x = x*z^-1; y = y*z^-1\n    }\n    toRawBytes() {\n        const { x, y } = this.toAffine(); // convert to affine 2d point\n        const b = n2b_32LE(y); // encode number to 32 bytes\n        b[31] |= x & 1n ? 0x80 : 0; // store sign in first LE byte\n        return b;\n    }\n    toHex() { return b2h(this.toRawBytes()); } // encode to hex string\n}\nPoint.BASE = new Point(Gx, Gy, 1n, mod(Gx * Gy)); // Generator / Base point\nPoint.ZERO = new Point(0n, 1n, 1n, 0n); // Identity / Zero point\nconst { BASE: G, ZERO: I } = Point; // Generator, identity points\nconst padh = (num, pad) => num.toString(16).padStart(pad, '0');\nconst b2h = (b) => Array.from(b).map(e => padh(e, 2)).join(''); // bytes to hex\nconst h2b = (hex) => {\n    const l = hex.length; // error if not string,\n    if (!str(hex) || l % 2)\n        err('hex invalid 1'); // or has odd length like 3, 5.\n    const arr = u8n(l / 2); // create result array\n    for (let i = 0; i < arr.length; i++) {\n        const j = i * 2;\n        const h = hex.slice(j, j + 2); // hexByte. slice is faster than substr\n        const b = Number.parseInt(h, 16); // byte, created from string part\n        if (Number.isNaN(b) || b < 0)\n            err('hex invalid 2'); // byte must be valid 0 <= byte < 256\n        arr[i] = b;\n    }\n    return arr;\n};\nconst n2b_32LE = (num) => h2b(padh(num, 32 * 2)).reverse(); // number to bytes LE\nconst b2n_LE = (b) => BigInt('0x' + b2h(u8n(au8(b)).reverse())); // bytes LE to num\nconst concatB = (...arrs) => {\n    const r = u8n(arrs.reduce((sum, a) => sum + au8(a).length, 0)); // create u8a of summed length\n    let pad = 0; // walk through each array,\n    arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n    return r;\n};\nconst invert = (num, md = P) => {\n    if (num === 0n || md <= 0n)\n        err('no inverse n=' + num + ' mod=' + md); // no neg exponent for now\n    let a = mod(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n    while (a !== 0n) { // uses euclidean gcd algorithm\n        const q = b / a, r = b % a; // not constant-time\n        const m = x - u * q, n = y - v * q;\n        b = a, a = r, x = u, y = v, u = m, v = n;\n    }\n    return b === 1n ? mod(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst pow2 = (x, power) => {\n    let r = x;\n    while (power-- > 0n) {\n        r *= r;\n        r %= P;\n    }\n    return r;\n};\nconst pow_2_252_3 = (x) => {\n    const x2 = (x * x) % P; // x^2,       bits 1\n    const b2 = (x2 * x) % P; // x^3,       bits 11\n    const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n    const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n    const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n    const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n    const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n    const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n    const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n    const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n    const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n    const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n    return { pow_p_5_8, b2 };\n};\nconst RM1 = 19681161376707505956807079304988542015446066515923890162744021073123829784752n; // \u221A-1\nconst uvRatio = (u, v) => {\n    const v3 = mod(v * v * v); // v\u00B3\n    const v7 = mod(v3 * v3 * v); // v\u2077\n    const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv\u2077)^(p-5)/8\n    let x = mod(u * v3 * pow); // (uv\u00B3)(uv\u2077)^(p-5)/8\n    const vx2 = mod(v * x * x); // vx\u00B2\n    const root1 = x; // First root candidate\n    const root2 = mod(x * RM1); // Second root candidate; RM1 is \u221A-1\n    const useRoot1 = vx2 === u; // If vx\u00B2 = u (mod p), x is a square root\n    const useRoot2 = vx2 === mod(-u); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n    const noRoot = vx2 === mod(-u * RM1); // There is no valid root, vx\u00B2 = -u\u221A-1\n    if (useRoot1)\n        x = root1;\n    if (useRoot2 || noRoot)\n        x = root2; // We return root2 anyway, for const-time\n    if ((mod(x) & 1n) === 1n)\n        x = mod(-x); // edIsNegative\n    return { isValid: useRoot1 || useRoot2, value: x };\n};\nconst modL_LE = (hash) => mod(b2n_LE(hash), N); // modulo L; but little-endian\nlet _shaS;\nconst sha512a = (...m) => etc.sha512Async(...m); // Async SHA512\nconst sha512s = (...m) => // Sync SHA512, not set by default\n typeof _shaS === 'function' ? _shaS(...m) : err('etc.sha512Sync not set');\nconst hash2extK = (hashed) => {\n    const head = hashed.slice(0, 32); // slice creates a copy, unlike subarray\n    head[0] &= 248; // Clamp bits: 0b1111_1000,\n    head[31] &= 127; // 0b0111_1111,\n    head[31] |= 64; // 0b0100_0000\n    const prefix = hashed.slice(32, 64); // private key \"prefix\"\n    const scalar = modL_LE(head); // modular division over curve order\n    const point = G.mul(scalar); // public key point\n    const pointBytes = point.toRawBytes(); // point serialized to Uint8Array\n    return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, 32)).then(hash2extK);\nconst getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, 32)));\nconst getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then(p => p.pointBytes);\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nfunction hashFinish(asynchronous, res) {\n    if (asynchronous)\n        return sha512a(res.hashable).then(res.finish);\n    return res.finish(sha512s(res.hashable));\n}\nconst _sign = (e, rBytes, msg) => {\n    const { pointBytes: P, scalar: s } = e;\n    const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n    const R = G.mul(r).toRawBytes(); // R = [r]B\n    const hashable = concatB(R, P, msg); // dom2(F, C) || R || A || PH(M)\n    const finish = (hashed) => {\n        const S = mod(r + modL_LE(hashed) * s, N); // S = (r + k * s) mod L; 0 <= s < l\n        return au8(concatB(R, n2b_32LE(S)), 64); // 64-byte sig: 32b R.x + 32b LE(S)\n    };\n    return { hashable, finish };\n};\nconst signAsync = async (msg, privKey) => {\n    const m = toU8(msg); // RFC8032 5.1.6: sign msg with key async\n    const e = await getExtendedPublicKeyAsync(privKey); // pub,prfx\n    const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n    return hashFinish(true, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst sign = (msg, privKey) => {\n    const m = toU8(msg); // RFC8032 5.1.6: sign msg with key sync\n    const e = getExtendedPublicKey(privKey); // pub,prfx\n    const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n    return hashFinish(false, _sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst _verify = (sig, msg, pub) => {\n    msg = toU8(msg); // Message hex str/Bytes\n    sig = toU8(sig, 64); // Signature hex str/Bytes, must be 64 bytes\n    const A = Point.fromHex(pub, false); // public key A decoded\n    const R = Point.fromHex(sig.slice(0, 32), false); // 0 <= R < 2^256: ZIP215 R can be >= P\n    const s = b2n_LE(sig.slice(32, 64)); // Decode second half as an integer S\n    const SB = G.mul(s, false); // in the range 0 <= s < L\n    const hashable = concatB(R.toRawBytes(), A.toRawBytes(), msg); // dom2(F, C) || R || A || PH(M)\n    const finish = (hashed) => {\n        const k = modL_LE(hashed); // decode in little-endian, modulo L\n        const RkA = R.add(A.mul(k, false)); // [8]R + [8][k]A'\n        return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n    };\n    return { hashable, finish };\n};\n// RFC8032 5.1.7: verification async, sync\nconst verifyAsync = async (s, m, p) => hashFinish(true, _verify(s, m, p));\nconst verify = (s, m, p) => hashFinish(false, _verify(s, m, p));\nconst cr = () => // We support: 1) browsers 2) node.js 19+\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\nconst etc = {\n    bytesToHex: b2h, hexToBytes: h2b, concatBytes: concatB,\n    mod, invert,\n    randomBytes: (len) => {\n        const crypto = cr(); // Can be shimmed in node.js <= 18 to prevent error:\n        // import { webcrypto } from 'node:crypto';\n        // if (!globalThis.crypto) globalThis.crypto = webcrypto;\n        if (!crypto)\n            err('crypto.getRandomValues must be defined');\n        return crypto.getRandomValues(u8n(len));\n    },\n    sha512Async: async (...messages) => {\n        const crypto = cr();\n        if (!crypto)\n            err('crypto.subtle or etc.sha512Async must be defined');\n        const m = concatB(...messages);\n        return u8n(await crypto.subtle.digest('SHA-512', m.buffer));\n    },\n    sha512Sync: undefined, // Actual logic below\n};\nObject.defineProperties(etc, { sha512Sync: {\n        configurable: false, get() { return _shaS; }, set(f) { if (!_shaS)\n            _shaS = f; },\n    } });\nconst utils = {\n    getExtendedPublicKeyAsync, getExtendedPublicKey,\n    randomPrivateKey: () => etc.randomBytes(32),\n    precompute(w = 8, p = G) { p.multiply(3n); return p; }, // no-op\n};\nconst W = 8; // Precomputes-related code. W = window size\nconst precompute = () => {\n    const points = []; // 10x sign(), 2x verify(). To achieve this,\n    const windows = 256 / W + 1; // app needs to spend 40ms+ to calculate\n    let p = G, b = p; // a lot of points related to base point G.\n    for (let w = 0; w < windows; w++) { // Points are stored in array and used\n        b = p; // any time Gx multiplication is done.\n        points.push(b); // They consume 16-32 MiB of RAM.\n        for (let i = 1; i < 2 ** (W - 1); i++) {\n            b = b.add(p);\n            points.push(b);\n        }\n        p = b.double(); // Precomputes don't speed-up getSharedKey,\n    } // which multiplies user point by scalar,\n    return points; // when precomputes are using base point\n};\nconst wNAF = (n) => {\n    // Compared to other point mult methods,\n    const comp = Gpows || (Gpows = precompute()); // stores 2x less points using subtraction\n    const neg = (cnd, p) => { let n = p.negate(); return cnd ? n : p; }; // negate\n    let p = I, f = G; // f must be G, or could become I in the end\n    const windows = 1 + 256 / W; // W=8 17 windows\n    const wsize = 2 ** (W - 1); // W=8 128 window size\n    const mask = BigInt(2 ** W - 1); // W=8 will create mask 0b11111111\n    const maxNum = 2 ** W; // W=8 256\n    const shiftBy = BigInt(W); // W=8 8\n    for (let w = 0; w < windows; w++) {\n        const off = w * wsize;\n        let wbits = Number(n & mask); // extract W bits.\n        n >>= shiftBy; // shift number by W bits.\n        if (wbits > wsize) {\n            wbits -= maxNum;\n            n += 1n;\n        } // split if bits > max: +224 => 256-32\n        const off1 = off, off2 = off + Math.abs(wbits) - 1; // offsets, evaluate both\n        const cnd1 = w % 2 !== 0, cnd2 = wbits < 0; // conditions, evaluate both\n        if (wbits === 0) {\n            f = f.add(neg(cnd1, comp[off1])); // bits are 0: add garbage to fake point\n        }\n        else { //          ^ can't add off2, off2 = I\n            p = p.add(neg(cnd2, comp[off2])); // bits are 1: add to result point\n        }\n    }\n    return { p, f }; // return both real and fake points for JIT\n}; // !! you can disable precomputes by commenting-out call of the wNAF() inside Point#mul()\nexport { getPublicKey, getPublicKeyAsync, sign, verify, // Remove the export to easily use in REPL\nsignAsync, verifyAsync, CURVE, etc, utils, Point as ExtendedPoint }; // envs like browser console\n", "/**\n * A class that represents a DWN error.\n */\nexport class DwnError extends Error {\n  constructor (public code: string, message: string) {\n    super(`${code}: ${message}`);\n\n    this.name = 'DwnError';\n  }\n}\n\n/**\n * DWN SDK error codes.\n */\nexport enum DwnErrorCode {\n  AuthenticateJwsMissing = 'AuthenticateJwsMissing',\n  AuthenticateDescriptorCidMismatch = 'AuthenticateDescriptorCidMismatch',\n  AuthenticationMoreThanOneSignatureNotSupported = 'AuthenticationMoreThanOneSignatureNotSupported',\n  AuthorizationNotGrantedToAuthor = 'AuthorizationNotGrantedToAuthor',\n  ComputeCidCodecNotSupported = 'ComputeCidCodecNotSupported',\n  ComputeCidMultihashNotSupported = 'ComputeCidMultihashNotSupported',\n  Ed25519InvalidJwk = 'Ed25519InvalidJwk',\n  EventEmitterStreamNotOpenError = 'EventEmitterStreamNotOpenError',\n  MessagesGrantAuthorizationMismatchedProtocol = 'EventsGrantAuthorizationMismatchedProtocol',\n  MessagesSubscribeAuthorizationFailed = 'MessagesSubscribeAuthorizationFailed',\n  MessagesSubscribeEventStreamUnimplemented = 'MessagesSubscribeEventStreamUnimplemented',\n  GeneralJwsVerifierGetPublicKeyNotFound = 'GeneralJwsVerifierGetPublicKeyNotFound',\n  GeneralJwsVerifierInvalidSignature = 'GeneralJwsVerifierInvalidSignature',\n  GrantAuthorizationGrantExpired = 'GrantAuthorizationGrantExpired',\n  GrantAuthorizationGrantMissing = 'GrantAuthorizationGrantMissing',\n  GrantAuthorizationGrantRevoked = 'GrantAuthorizationGrantRevoked',\n  GrantAuthorizationInterfaceMismatch = 'GrantAuthorizationInterfaceMismatch',\n  GrantAuthorizationMethodMismatch = 'GrantAuthorizationMethodMismatch',\n  GrantAuthorizationNotGrantedForTenant = 'GrantAuthorizationNotGrantedForTenant',\n  GrantAuthorizationNotGrantedToAuthor = 'GrantAuthorizationNotGrantedToAuthor',\n  GrantAuthorizationGrantNotYetActive = 'GrantAuthorizationGrantNotYetActive',\n  HdKeyDerivationPathInvalid = 'HdKeyDerivationPathInvalid',\n  JwsVerifySignatureUnsupportedCrv = 'JwsVerifySignatureUnsupportedCrv',\n  IndexInvalidCursorValueType = 'IndexInvalidCursorValueType',\n  IndexInvalidCursorSortProperty = 'IndexInvalidCursorSortProperty',\n  IndexInvalidSortPropertyInMemory = 'IndexInvalidSortPropertyInMemory',\n  IndexMissingIndexableProperty = 'IndexMissingIndexableProperty',\n  JwsDecodePlainObjectPayloadInvalid = 'JwsDecodePlainObjectPayloadInvalid',\n  MessagesReadInvalidCid = 'MessagesReadInvalidCid',\n  MessagesReadAuthorizationFailed = 'MessagesReadAuthorizationFailed',\n  MessageGetInvalidCid = 'MessageGetInvalidCid',\n  MessagesQueryAuthorizationFailed = 'MessagesQueryAuthorizationFailed',\n  MessagesReadVerifyScopeFailed = 'MessagesReadVerifyScopeFailed',\n  ParseCidCodecNotSupported = 'ParseCidCodecNotSupported',\n  ParseCidMultihashNotSupported = 'ParseCidMultihashNotSupported',\n  PermissionsProtocolCreateGrantRecordsScopeMissingProtocol = 'PermissionsProtocolCreateGrantRecordsScopeMissingProtocol',\n  PermissionsProtocolCreateRequestRecordsScopeMissingProtocol = 'PermissionsProtocolCreateRequestRecordsScopeMissingProtocol',\n  PermissionsProtocolGetScopeInvalidProtocol = 'PermissionsProtocolGetScopeInvalidProtocol',\n  PermissionsProtocolValidateSchemaUnexpectedRecord = 'PermissionsProtocolValidateSchemaUnexpectedRecord',\n  PermissionsProtocolValidateScopeContextIdProhibitedProperties = 'PermissionsProtocolValidateScopeContextIdProhibitedProperties',\n  PermissionsProtocolValidateScopeProtocolMismatch = 'PermissionsProtocolValidateScopeProtocolMismatch',\n  PermissionsProtocolValidateScopeMissingProtocolTag = 'PermissionsProtocolValidateScopeMissingProtocolTag',\n  PermissionsProtocolValidateRevocationProtocolTagMismatch = 'PermissionsProtocolValidateRevocationProtocolTagMismatch',\n  PrivateKeySignerUnableToDeduceAlgorithm = 'PrivateKeySignerUnableToDeduceAlgorithm',\n  PrivateKeySignerUnableToDeduceKeyId = 'PrivateKeySignerUnableToDeduceKeyId',\n  PrivateKeySignerUnsupportedCurve = 'PrivateKeySignerUnsupportedCurve',\n  ProtocolAuthorizationActionNotAllowed = 'ProtocolAuthorizationActionNotAllowed',\n  ProtocolAuthorizationActionRulesNotFound = 'ProtocolAuthorizationActionRulesNotFound',\n  ProtocolAuthorizationIncorrectDataFormat = 'ProtocolAuthorizationIncorrectDataFormat',\n  ProtocolAuthorizationIncorrectContextId = 'ProtocolAuthorizationIncorrectContextId',\n  ProtocolAuthorizationIncorrectProtocolPath = 'ProtocolAuthorizationIncorrectProtocolPath',\n  ProtocolAuthorizationDuplicateRoleRecipient = 'ProtocolAuthorizationDuplicateRoleRecipient',\n  ProtocolAuthorizationInvalidSchema = 'ProtocolAuthorizationInvalidSchema',\n  ProtocolAuthorizationInvalidType = 'ProtocolAuthorizationInvalidType',\n  ProtocolAuthorizationMatchingRoleRecordNotFound = 'ProtocolAuthorizationMatchingRoleRecordNotFound',\n  ProtocolAuthorizationMaxSizeInvalid = 'ProtocolAuthorizationMaxSizeInvalid',\n  ProtocolAuthorizationMinSizeInvalid = 'ProtocolAuthorizationMinSizeInvalid',\n  ProtocolAuthorizationMissingContextId = 'ProtocolAuthorizationMissingContextId',\n  ProtocolAuthorizationMissingRuleSet = 'ProtocolAuthorizationMissingRuleSet',\n  ProtocolAuthorizationParentlessIncorrectProtocolPath = 'ProtocolAuthorizationParentlessIncorrectProtocolPath',\n  ProtocolAuthorizationNotARole = 'ProtocolAuthorizationNotARole',\n  ProtocolAuthorizationParentNotFoundConstructingRecordChain = 'ProtocolAuthorizationParentNotFoundConstructingRecordChain',\n  ProtocolAuthorizationProtocolNotFound = 'ProtocolAuthorizationProtocolNotFound',\n  ProtocolAuthorizationRoleMissingRecipient = 'ProtocolAuthorizationRoleMissingRecipient',\n  ProtocolAuthorizationTagsInvalidSchema = 'ProtocolAuthorizationTagsInvalidSchema',\n  ProtocolsConfigureAuthorizationFailed = 'ProtocolsConfigureAuthorizationFailed',\n  ProtocolsConfigureDuplicateActorInRuleSet = 'ProtocolsConfigureDuplicateActorInRuleSet',\n  ProtocolsConfigureDuplicateRoleInRuleSet = 'ProtocolsConfigureDuplicateRoleInRuleSet',\n  ProtocolsConfigureInvalidSize = 'ProtocolsConfigureInvalidSize',\n  ProtocolsConfigureInvalidActionMissingOf = 'ProtocolsConfigureInvalidActionMissingOf',\n  ProtocolsConfigureInvalidActionOfNotAllowed = 'ProtocolsConfigureInvalidActionOfNotAllowed',\n  ProtocolsConfigureInvalidActionDeleteWithoutCreate = 'ProtocolsConfigureInvalidActionDeleteWithoutCreate',\n  ProtocolsConfigureInvalidActionUpdateWithoutCreate = 'ProtocolsConfigureInvalidActionUpdateWithoutCreate',\n  ProtocolsConfigureInvalidRecipientOfAction = 'ProtocolsConfigureInvalidRecipientOfAction',\n  ProtocolsConfigureInvalidRuleSetRecordType = 'ProtocolsConfigureInvalidRuleSetRecordType',\n  ProtocolsConfigureInvalidTagSchema = 'ProtocolsConfigureInvalidTagSchema',\n  ProtocolsConfigureRecordNestingDepthExceeded = 'ProtocolsConfigureRecordNestingDepthExceeded',\n  ProtocolsConfigureRoleDoesNotExistAtGivenPath = 'ProtocolsConfigureRoleDoesNotExistAtGivenPath',\n  ProtocolsConfigureRoleReadActionMissing = 'ProtocolsConfigureRoleReadActionMissing',\n  ProtocolsGrantAuthorizationQueryProtocolScopeMismatch = 'ProtocolsGrantAuthorizationQueryProtocolScopeMismatch',\n  ProtocolsGrantAuthorizationScopeProtocolMismatch = 'ProtocolsGrantAuthorizationScopeProtocolMismatch',\n  ProtocolsQueryUnauthorized = 'ProtocolsQueryUnauthorized',\n  RecordsAuthorDelegatedGrantAndIdExistenceMismatch = 'RecordsAuthorDelegatedGrantAndIdExistenceMismatch',\n  RecordsAuthorDelegatedGrantCidMismatch = 'RecordsAuthorDelegatedGrantCidMismatch',\n  RecordsAuthorDelegatedGrantGrantedToAndOwnerSignatureMismatch = 'RecordsAuthorDelegatedGrantGrantedToAndOwnerSignatureMismatch',\n  RecordsAuthorDelegatedGrantNotADelegatedGrant = 'RecordsAuthorDelegatedGrantNotADelegatedGrant',\n  RecordsDecryptNoMatchingKeyEncryptedFound = 'RecordsDecryptNoMatchingKeyEncryptedFound',\n  RecordsDeleteAuthorizationFailed = 'RecordsDeleteAuthorizationFailed',\n  RecordsQueryCreateFilterPublishedSortInvalid = 'RecordsQueryCreateFilterPublishedSortInvalid',\n  RecordsQueryParseFilterPublishedSortInvalid = 'RecordsQueryParseFilterPublishedSortInvalid',\n  RecordsGrantAuthorizationConditionPublicationProhibited = 'RecordsGrantAuthorizationConditionPublicationProhibited',\n  RecordsGrantAuthorizationConditionPublicationRequired = 'RecordsGrantAuthorizationConditionPublicationRequired',\n  RecordsGrantAuthorizationDeleteProtocolScopeMismatch = 'RecordsGrantAuthorizationDeleteProtocolScopeMismatch',\n  RecordsGrantAuthorizationQueryOrSubscribeProtocolScopeMismatch = 'RecordsGrantAuthorizationQueryOrSubscribeProtocolScopeMismatch',\n  RecordsGrantAuthorizationScopeContextIdMismatch = 'RecordsGrantAuthorizationScopeContextIdMismatch',\n  RecordsGrantAuthorizationScopeProtocolMismatch = 'RecordsGrantAuthorizationScopeProtocolMismatch',\n  RecordsGrantAuthorizationScopeProtocolPathMismatch = 'RecordsGrantAuthorizationScopeProtocolPathMismatch',\n  RecordsDerivePrivateKeyUnSupportedCurve = 'RecordsDerivePrivateKeyUnSupportedCurve',\n  RecordsInvalidAncestorKeyDerivationSegment = 'RecordsInvalidAncestorKeyDerivationSegment',\n  RecordsOwnerDelegatedGrantAndIdExistenceMismatch = 'RecordsOwnerDelegatedGrantAndIdExistenceMismatch',\n  RecordsOwnerDelegatedGrantCidMismatch = 'RecordsOwnerDelegatedGrantCidMismatch',\n  RecordsOwnerDelegatedGrantGrantedToAndOwnerSignatureMismatch = 'RecordsOwnerDelegatedGrantGrantedToAndOwnerSignatureMismatch',\n  RecordsOwnerDelegatedGrantNotADelegatedGrant = 'RecordsOwnerDelegatedGrantNotADelegatedGrant',\n  RecordsProtocolContextDerivationSchemeMissingContextId = 'RecordsProtocolContextDerivationSchemeMissingContextId',\n  RecordsProtocolPathDerivationSchemeMissingProtocol = 'RecordsProtocolPathDerivationSchemeMissingProtocol',\n  RecordsQueryFilterMissingRequiredProperties = 'RecordsQueryFilterMissingRequiredProperties',\n  RecordsReadReturnedMultiple = 'RecordsReadReturnedMultiple',\n  RecordsReadAuthorizationFailed = 'RecordsReadAuthorizationFailed',\n  RecordsSubscribeEventStreamUnimplemented = 'RecordsSubscribeEventStreamUnimplemented',\n  RecordsSubscribeFilterMissingRequiredProperties = 'RecordsSubscribeFilterMissingRequiredProperties',\n  RecordsSchemasDerivationSchemeMissingSchema = 'RecordsSchemasDerivationSchemeMissingSchema',\n  RecordsWriteAttestationIntegrityMoreThanOneSignature = 'RecordsWriteAttestationIntegrityMoreThanOneSignature',\n  RecordsWriteAttestationIntegrityDescriptorCidMismatch = 'RecordsWriteAttestationIntegrityDescriptorCidMismatch',\n  RecordsWriteAttestationIntegrityInvalidPayloadProperty = 'RecordsWriteAttestationIntegrityInvalidPayloadProperty',\n  RecordsWriteAuthorizationFailed = 'RecordsWriteAuthorizationFailed',\n  RecordsWriteCreateMissingSigner = 'RecordsWriteCreateMissingSigner',\n  RecordsWriteCreateDataAndDataCidMutuallyExclusive = 'RecordsWriteCreateDataAndDataCidMutuallyExclusive',\n  RecordsWriteCreateDataCidAndDataSizeMutuallyInclusive = 'RecordsWriteCreateDataCidAndDataSizeMutuallyInclusive',\n  RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive = 'RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive',\n  RecordsWriteDataCidMismatch = 'RecordsWriteDataCidMismatch',\n  RecordsWriteDataSizeMismatch = 'RecordsWriteDataSizeMismatch',\n  RecordsWriteGetEntryIdUndefinedAuthor = 'RecordsWriteGetEntryIdUndefinedAuthor',\n  RecordsWriteGetNewestWriteRecordNotFound = 'RecordsWriteGetNewestWriteRecordNotFound',\n  RecordsWriteGetInitialWriteNotFound = 'RecordsWriteGetInitialWriteNotFound',\n  RecordsWriteImmutablePropertyChanged = 'RecordsWriteImmutablePropertyChanged',\n  RecordsWriteMissingSigner = 'RecordsWriteMissingSigner',\n  RecordsWriteMissingDataInPrevious = 'RecordsWriteMissingDataInPrevious',\n  RecordsWriteMissingEncodedDataInPrevious = 'RecordsWriteMissingEncodedDataInPrevious',\n  RecordsWriteMissingProtocol = 'RecordsWriteMissingProtocol',\n  RecordsWriteMissingSchema = 'RecordsWriteMissingSchema',\n  RecordsWriteNotAllowedAfterDelete = 'RecordsWriteNotAllowedAfterDelete',\n  RecordsWriteOwnerAndTenantMismatch = 'RecordsWriteOwnerAndTenantMismatch',\n  RecordsWriteSignAsOwnerDelegateUnknownAuthor = 'RecordsWriteSignAsOwnerDelegateUnknownAuthor',\n  RecordsWriteSignAsOwnerUnknownAuthor = 'RecordsWriteSignAsOwnerUnknownAuthor',\n  RecordsWriteValidateIntegrityAttestationMismatch = 'RecordsWriteValidateIntegrityAttestationMismatch',\n  RecordsWriteValidateIntegrityContextIdMismatch = 'RecordsWriteValidateIntegrityContextIdMismatch',\n  RecordsWriteValidateIntegrityContextIdNotInSignerSignaturePayload = 'RecordsWriteValidateIntegrityContextIdNotInSignerSignaturePayload',\n  RecordsWriteValidateIntegrityDateCreatedMismatch = 'RecordsWriteValidateIntegrityDateCreatedMismatch',\n  RecordsWriteValidateIntegrityEncryptionCidMismatch = 'RecordsWriteValidateIntegrityEncryptionCidMismatch',\n  RecordsWriteValidateIntegrityRecordIdUnauthorized = 'RecordsWriteValidateIntegrityRecordIdUnauthorized',\n  SchemaValidatorAdditionalPropertyNotAllowed = 'SchemaValidatorAdditionalPropertyNotAllowed',\n  SchemaValidatorFailure = 'SchemaValidatorFailure',\n  SchemaValidatorSchemaNotFound = 'SchemaValidatorSchemaNotFound',\n  SchemaValidatorUnevaluatedPropertyNotAllowed = 'SchemaValidatorUnevaluatedPropertyNotAllowed',\n  Secp256k1KeyNotValid = 'Secp256k1KeyNotValid',\n  Secp256r1KeyNotValid = 'Secp256r1KeyNotValid',\n  TimestampInvalid = 'TimestampInvalid',\n  UrlProtocolNotNormalized = 'UrlProtocolNotNormalized',\n  UrlProtocolNotNormalizable = 'UrlProtocolNotNormalizable',\n  UrlSchemaNotNormalized = 'UrlSchemaNotNormalized',\n};\n", "import * as Ed25519 from '@noble/ed25519';\nimport type { PrivateJwk, PublicJwk, SignatureAlgorithm } from '../../../types/jose-types.js';\n\nimport { Encoder } from '../../../utils/encoder.js';\nimport { DwnError, DwnErrorCode } from '../../../core/dwn-error.js';\n\nfunction validateKey(jwk: PrivateJwk | PublicJwk): void {\n  if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519') {\n    throw new DwnError(DwnErrorCode.Ed25519InvalidJwk, 'invalid jwk. kty MUST be OKP. crv MUST be Ed25519');\n  }\n}\n\nfunction publicKeyToJwk(publicKeyBytes: Uint8Array): PublicJwk {\n  const x = Encoder.bytesToBase64Url(publicKeyBytes);\n\n  const publicJwk: PublicJwk = {\n    alg : 'EdDSA',\n    kty : 'OKP',\n    crv : 'Ed25519',\n    x\n  };\n\n  return publicJwk;\n}\n\nexport const ed25519: SignatureAlgorithm = {\n  sign: async (content: Uint8Array, privateJwk: PrivateJwk): Promise<Uint8Array> => {\n    validateKey(privateJwk);\n\n    const privateKeyBytes = Encoder.base64UrlToBytes(privateJwk.d);\n\n    return Ed25519.signAsync(content, privateKeyBytes);\n  },\n\n  verify: async (content: Uint8Array, signature: Uint8Array, publicJwk: PublicJwk): Promise<boolean> => {\n    validateKey(publicJwk);\n\n    const publicKeyBytes = Encoder.base64UrlToBytes(publicJwk.x);\n\n    return Ed25519.verifyAsync(signature, content, publicKeyBytes);\n  },\n\n  generateKeyPair: async (): Promise<{publicJwk: PublicJwk, privateJwk: PrivateJwk}> => {\n    const privateKeyBytes = Ed25519.utils.randomPrivateKey();\n    const publicKeyBytes = await Ed25519.getPublicKeyAsync(privateKeyBytes);\n\n    const d = Encoder.bytesToBase64Url(privateKeyBytes);\n\n    const publicJwk = publicKeyToJwk(publicKeyBytes);\n    const privateJwk: PrivateJwk = { ...publicJwk, d };\n\n    return { publicJwk, privateJwk };\n  },\n\n  publicKeyToJwk: async (publicKeyBytes: Uint8Array): Promise<PublicJwk> => {\n    return publicKeyToJwk(publicKeyBytes);\n  }\n};", "/*! noble-secp256k1 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nconst B256 = 2n ** 256n; // secp256k1 is short weierstrass curve\nconst P = B256 - 0x1000003d1n; // curve's field prime\nconst N = B256 - 0x14551231950b75fc4402da1732fc9bebfn; // curve (group) order\nconst Gx = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n; // base point x\nconst Gy = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n; // base point y\nconst CURVE = { p: P, n: N, a: 0n, b: 7n, Gx, Gy }; // exported variables incl. a, b\nconst fLen = 32; // field / group byte length\nconst crv = (x) => mod(mod(x * x) * x + CURVE.b); // x\u00B3 + ax + b weierstrass formula; no a\nconst err = (m = '') => { throw new Error(m); }; // error helper, messes-up stack trace\nconst big = (n) => typeof n === 'bigint'; // is big integer\nconst str = (s) => typeof s === 'string'; // is string\nconst fe = (n) => big(n) && 0n < n && n < P; // is field element (invertible)\nconst ge = (n) => big(n) && 0n < n && n < N; // is group element\nconst au8 = (a, l) => // is Uint8Array (of specific length)\n !(a instanceof Uint8Array) || (typeof l === 'number' && l > 0 && a.length !== l) ?\n    err('Uint8Array expected') : a;\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst toU8 = (a, len) => au8(str(a) ? h2b(a) : u8n(a), len); // norm(hex/u8a) to u8a\nconst mod = (a, b = P) => { let r = a % b; return r >= 0n ? r : b + r; }; // mod division\nconst isPoint = (p) => (p instanceof Point ? p : err('Point expected')); // is 3d point\nlet Gpows = undefined; // precomputes for base point G\nclass Point {\n    constructor(px, py, pz) {\n        this.px = px;\n        this.py = py;\n        this.pz = pz;\n    } //3d=less inversions\n    static fromAffine(p) { return new Point(p.x, p.y, 1n); }\n    static fromHex(hex) {\n        hex = toU8(hex); // convert hex string to Uint8Array\n        let p = undefined;\n        const head = hex[0], tail = hex.subarray(1); // first byte is prefix, rest is data\n        const x = slcNum(tail, 0, fLen), len = hex.length; // next 32 bytes are x coordinate\n        if (len === 33 && [0x02, 0x03].includes(head)) { // compressed points: 33b, start\n            if (!fe(x))\n                err('Point hex invalid: x not FE'); // with byte 0x02 or 0x03. Check if 0<x<P\n            let y = sqrt(crv(x)); // x\u00B3 + ax + b is right side of equation\n            const isYOdd = (y & 1n) === 1n; // y\u00B2 is equivalent left-side. Calculate y\u00B2:\n            const headOdd = (head & 1) === 1; // y = \u221Ay\u00B2; there are two solutions: y, -y\n            if (headOdd !== isYOdd)\n                y = mod(-y); // determine proper solution\n            p = new Point(x, y, 1n); // create point\n        } // Uncompressed points: 65b, start with 0x04\n        if (len === 65 && head === 0x04)\n            p = new Point(x, slcNum(tail, fLen, 2 * fLen), 1n);\n        return p ? p.ok() : err('Point is not on curve'); // Verify the result\n    }\n    static fromPrivateKey(k) { return G.mul(toPriv(k)); } // Create point from a private key.\n    get x() { return this.aff().x; } // .x, .y will call expensive toAffine:\n    get y() { return this.aff().y; } // should be used with care.\n    equals(other) {\n        const { px: X1, py: Y1, pz: Z1 } = this;\n        const { px: X2, py: Y2, pz: Z2 } = isPoint(other); // isPoint() checks class equality\n        const X1Z2 = mod(X1 * Z2), X2Z1 = mod(X2 * Z1);\n        const Y1Z2 = mod(Y1 * Z2), Y2Z1 = mod(Y2 * Z1);\n        return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n    negate() { return new Point(this.px, mod(-this.py), this.pz); } // Flip point over y coord\n    double() { return this.add(this); } // Point doubling: P+P, complete formula.\n    add(other) {\n        const { px: X1, py: Y1, pz: Z1 } = this; // free formula from Renes-Costello-Batina\n        const { px: X2, py: Y2, pz: Z2 } = isPoint(other); // https://eprint.iacr.org/2015/1060, algo 1\n        const { a, b } = CURVE; // Cost: 12M + 0S + 3*a + 3*b3 + 23add\n        let X3 = 0n, Y3 = 0n, Z3 = 0n;\n        const b3 = mod(b * 3n);\n        let t0 = mod(X1 * X2), t1 = mod(Y1 * Y2), t2 = mod(Z1 * Z2), t3 = mod(X1 + Y1); // step 1\n        let t4 = mod(X2 + Y2); // step 5\n        t3 = mod(t3 * t4);\n        t4 = mod(t0 + t1);\n        t3 = mod(t3 - t4);\n        t4 = mod(X1 + Z1);\n        let t5 = mod(X2 + Z2); // step 10\n        t4 = mod(t4 * t5);\n        t5 = mod(t0 + t2);\n        t4 = mod(t4 - t5);\n        t5 = mod(Y1 + Z1);\n        X3 = mod(Y2 + Z2); // step 15\n        t5 = mod(t5 * X3);\n        X3 = mod(t1 + t2);\n        t5 = mod(t5 - X3);\n        Z3 = mod(a * t4);\n        X3 = mod(b3 * t2); // step 20\n        Z3 = mod(X3 + Z3);\n        X3 = mod(t1 - Z3);\n        Z3 = mod(t1 + Z3);\n        Y3 = mod(X3 * Z3);\n        t1 = mod(t0 + t0); // step 25\n        t1 = mod(t1 + t0);\n        t2 = mod(a * t2);\n        t4 = mod(b3 * t4);\n        t1 = mod(t1 + t2);\n        t2 = mod(t0 - t2); // step 30\n        t2 = mod(a * t2);\n        t4 = mod(t4 + t2);\n        t0 = mod(t1 * t4);\n        Y3 = mod(Y3 + t0);\n        t0 = mod(t5 * t4); // step 35\n        X3 = mod(t3 * X3);\n        X3 = mod(X3 - t0);\n        t0 = mod(t3 * t1);\n        Z3 = mod(t5 * Z3);\n        Z3 = mod(Z3 + t0); // step 40\n        return new Point(X3, Y3, Z3);\n    }\n    mul(n, safe = true) {\n        if (!safe && n === 0n)\n            return I; // in unsafe mode, allow zero\n        if (!ge(n))\n            err('invalid scalar'); // must be 0 < n < CURVE.n\n        if (this.equals(G))\n            return wNAF(n).p; // use precomputes for base point\n        let p = I, f = G; // init result point & fake point\n        for (let d = this; n > 0n; d = d.double(), n >>= 1n) { // double-and-add ladder\n            if (n & 1n)\n                p = p.add(d); // if bit is present, add to point\n            else if (safe)\n                f = f.add(d); // if not, add to fake for timing safety\n        }\n        return p;\n    }\n    mulAddQUns(R, u1, u2) {\n        return this.mul(u1, false).add(R.mul(u2, false)).ok(); // Unsafe: do NOT use for stuff related\n    } // to private keys. Doesn't use Shamir trick\n    toAffine() {\n        const { px: x, py: y, pz: z } = this; // (x, y, z) \u220B (x=x/z, y=y/z)\n        if (this.equals(I))\n            return { x: 0n, y: 0n }; // fast-path for zero point\n        if (z === 1n)\n            return { x, y }; // if z is 1, pass affine coordinates as-is\n        const iz = inv(z); // z^-1: invert z\n        if (mod(z * iz) !== 1n)\n            err('invalid inverse'); // (z * z^-1) must be 1, otherwise bad math\n        return { x: mod(x * iz), y: mod(y * iz) }; // x = x*z^-1; y = y*z^-1\n    }\n    assertValidity() {\n        const { x, y } = this.aff(); // convert to 2d xy affine point.\n        if (!fe(x) || !fe(y))\n            err('Point invalid: x or y'); // x and y must be in range 0 < n < P\n        return mod(y * y) === crv(x) ? // y\u00B2 = x\u00B3 + ax + b, must be equal\n            this : err('Point invalid: not on curve');\n    }\n    multiply(n) { return this.mul(n); } // Aliases to compress code\n    aff() { return this.toAffine(); }\n    ok() { return this.assertValidity(); }\n    toHex(isCompressed = true) {\n        const { x, y } = this.aff(); // convert to 2d xy affine point\n        const head = isCompressed ? ((y & 1n) === 0n ? '02' : '03') : '04'; // 0x02, 0x03, 0x04 prefix\n        return head + n2h(x) + (isCompressed ? '' : n2h(y)); // prefix||x and ||y\n    }\n    toRawBytes(isCompressed = true) {\n        return h2b(this.toHex(isCompressed)); // re-use toHex(), convert hex to bytes\n    }\n}\nPoint.BASE = new Point(Gx, Gy, 1n); // Generator / base point\nPoint.ZERO = new Point(0n, 1n, 0n); // Identity / zero point\nconst { BASE: G, ZERO: I } = Point; // Generator, identity points\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst b2h = (b) => Array.from(b).map(e => padh(e, 2)).join(''); // bytes to hex\nconst h2b = (hex) => {\n    const l = hex.length; // error if not string,\n    if (!str(hex) || l % 2)\n        err('hex invalid 1'); // or has odd length like 3, 5.\n    const arr = u8n(l / 2); // create result array\n    for (let i = 0; i < arr.length; i++) {\n        const j = i * 2;\n        const h = hex.slice(j, j + 2); // hexByte. slice is faster than substr\n        const b = Number.parseInt(h, 16); // byte, created from string part\n        if (Number.isNaN(b) || b < 0)\n            err('hex invalid 2'); // byte must be valid 0 <= byte < 256\n        arr[i] = b;\n    }\n    return arr;\n};\nconst b2n = (b) => BigInt('0x' + (b2h(b) || '0')); // bytes to number\nconst slcNum = (b, from, to) => b2n(b.slice(from, to)); // slice bytes num\nconst n2b = (num) => {\n    return big(num) && num >= 0n && num < B256 ? h2b(padh(num, 2 * fLen)) : err('bigint expected');\n};\nconst n2h = (num) => b2h(n2b(num)); // number to 32b hex\nconst concatB = (...arrs) => {\n    const r = u8n(arrs.reduce((sum, a) => sum + au8(a).length, 0)); // create u8a of summed length\n    let pad = 0; // walk through each array,\n    arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n    return r;\n};\nconst inv = (num, md = P) => {\n    if (num === 0n || md <= 0n)\n        err('no inverse n=' + num + ' mod=' + md); // no neg exponent for now\n    let a = mod(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n    while (a !== 0n) { // uses euclidean gcd algorithm\n        const q = b / a, r = b % a; // not constant-time\n        const m = x - u * q, n = y - v * q;\n        b = a, a = r, x = u, y = v, u = m, v = n;\n    }\n    return b === 1n ? mod(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst sqrt = (n) => {\n    let r = 1n; // So, a special, fast case. Paper: \"Square Roots from 1;24,51,10 to Dan Shanks\".\n    for (let num = n, e = (P + 1n) / 4n; e > 0n; e >>= 1n) { // powMod: modular exponentiation.\n        if (e & 1n)\n            r = (r * num) % P; // Uses exponentiation by squaring.\n        num = (num * num) % P; // Not constant-time.\n    }\n    return mod(r * r) === n ? r : err('sqrt invalid'); // check if result is valid\n};\nconst toPriv = (p) => {\n    if (!big(p))\n        p = b2n(toU8(p, fLen)); // convert to bigint when bytes\n    return ge(p) ? p : err('private key out of range'); // check if bigint is in range\n};\nconst moreThanHalfN = (n) => n > (N >> 1n); // if a number is bigger than CURVE.n/2\nfunction getPublicKey(privKey, isCompressed = true) {\n    return Point.fromPrivateKey(privKey).toRawBytes(isCompressed); // 33b or 65b output\n}\nclass Signature {\n    constructor(r, s, recovery) {\n        this.r = r;\n        this.s = s;\n        this.recovery = recovery;\n        this.assertValidity(); // recovery bit is optional when\n    } // constructed outside.\n    static fromCompact(hex) {\n        hex = toU8(hex, 64); // compact repr is (32b r)||(32b s)\n        return new Signature(slcNum(hex, 0, fLen), slcNum(hex, fLen, 2 * fLen));\n    }\n    assertValidity() { return ge(this.r) && ge(this.s) ? this : err(); } // 0 < r or s < CURVE.n\n    addRecoveryBit(rec) { return new Signature(this.r, this.s, rec); }\n    hasHighS() { return moreThanHalfN(this.s); }\n    recoverPublicKey(msgh) {\n        const { r, s, recovery: rec } = this; // secg.org/sec1-v2.pdf 4.1.6\n        if (![0, 1, 2, 3].includes(rec))\n            err('recovery id invalid'); // check recovery id\n        const h = bits2int_modN(toU8(msgh, 32)); // Truncate hash\n        const radj = rec === 2 || rec === 3 ? r + N : r; // If rec was 2 or 3, q.x is bigger than n\n        if (radj >= P)\n            err('q.x invalid'); // ensure q.x is still a field element\n        const head = (rec & 1) === 0 ? '02' : '03'; // head is 0x02 or 0x03\n        const R = Point.fromHex(head + n2h(radj)); // concat head + hex repr of r\n        const ir = inv(radj, N); // r^-1\n        const u1 = mod(-h * ir, N); // -hr^-1\n        const u2 = mod(s * ir, N); // sr^-1\n        return G.mulAddQUns(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n    }\n    toCompactRawBytes() { return h2b(this.toCompactHex()); } // Uint8Array 64b compact repr\n    toCompactHex() { return n2h(this.r) + n2h(this.s); } // hex 64b compact repr\n}\nconst bits2int = (bytes) => {\n    const delta = bytes.length * 8 - 256; // RFC suggests optional truncating via bits2octets\n    const num = b2n(bytes); // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which\n    return delta > 0 ? num >> BigInt(delta) : num; // matches bits2int. bits2int can produce res>N.\n};\nconst bits2int_modN = (bytes) => {\n    return mod(bits2int(bytes), N); // with 0: BAD for trunc as per RFC vectors\n};\nconst i2o = (num) => n2b(num); // int to octets\nconst cr = () => // We support: 1) browsers 2) node.js 19+ 3) deno, other envs with crypto\n typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\nlet _hmacSync; // Can be redefined by use in utils; built-ins don't provide it\nconst optS = { lowS: true }; // opts for sign()\nconst optV = { lowS: true }; // standard opts for verify()\nfunction prepSig(msgh, priv, opts = optS) {\n    if (['der', 'recovered', 'canonical'].some(k => k in opts)) // Ban legacy options\n        err('sign() legacy options not supported');\n    let { lowS } = opts; // generates low-s sigs by default\n    if (lowS == null)\n        lowS = true; // RFC6979 3.2: we skip step A\n    const h1i = bits2int_modN(toU8(msgh)); // msg bigint\n    const h1o = i2o(h1i); // msg octets\n    const d = toPriv(priv); // validate private key, convert to bigint\n    const seed = [i2o(d), h1o]; // Step D of RFC6979 3.2\n    let ent = opts.extraEntropy; // RFC6979 3.6: additional k' (optional)\n    if (ent) { // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n        if (ent === true)\n            ent = etc.randomBytes(fLen); // if true, use CSPRNG to generate data\n        const e = toU8(ent); // convert Hex|Bytes to Bytes\n        if (e.length !== fLen)\n            err(); // Expected 32 bytes of extra data\n        seed.push(e);\n    }\n    const m = h1i; // convert msg to bigint\n    const k2sig = (kBytes) => {\n        const k = bits2int(kBytes); // RFC6979 method.\n        if (!ge(k))\n            return; // Check 0 < k < CURVE.n\n        const ik = inv(k, N); // k^-1 mod n, NOT mod P\n        const q = G.mul(k).aff(); // q = Gk\n        const r = mod(q.x, N); // r = q.x mod n\n        if (r === 0n)\n            return; // r=0 invalid\n        const s = mod(ik * mod(m + mod(d * r, N), N), N); // s = k^-1(m + rd) mod n\n        if (s === 0n)\n            return; // s=0 invalid\n        let normS = s; // normalized S\n        let rec = (q.x === r ? 0 : 2) | Number(q.y & 1n); // recovery bit\n        if (lowS && moreThanHalfN(s)) { // if lowS was passed, ensure s is always\n            normS = mod(-s, N); // in the bottom half of CURVE.n\n            rec ^= 1;\n        }\n        return new Signature(r, normS, rec); // use normS, not s\n    };\n    return { seed: concatB(...seed), k2sig };\n}\nfunction hmacDrbg(asynchronous) {\n    let v = u8n(fLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n    let k = u8n(fLen); // Steps B, C of RFC6979 3.2: set hashLen, in our case always same\n    let i = 0; // Iterations counter, will throw when over 1000\n    const reset = () => { v.fill(1); k.fill(0); i = 0; };\n    const _e = 'drbg: tried 1000 values';\n    if (asynchronous) { // asynchronous=true\n        const h = (...b) => etc.hmacSha256Async(k, v, ...b); // hmac(k)(v, ...values)\n        const reseed = async (seed = u8n()) => {\n            k = await h(u8n([0x00]), seed); // k = hmac(K || V || 0x00 || seed)\n            v = await h(); // v = hmac(K || V)\n            if (seed.length === 0)\n                return;\n            k = await h(u8n([0x01]), seed); // k = hmac(K || V || 0x01 || seed)\n            v = await h(); // v = hmac(K || V)\n        };\n        const gen = async () => {\n            if (i++ >= 1000)\n                err(_e);\n            v = await h(); // v = hmac(K || V)\n            return v;\n        };\n        return async (seed, pred) => {\n            reset(); // the returned fn, don't, it's: 1. slower (JIT). 2. unsafe (async race conditions)\n            await reseed(seed); // Steps D-G\n            let res = undefined; // Step H: grind until k is in [1..n-1]\n            while (!(res = pred(await gen())))\n                await reseed(); // test predicate until it returns ok\n            reset();\n            return res;\n        };\n    }\n    else {\n        const h = (...b) => {\n            const f = _hmacSync;\n            if (!f)\n                err('etc.hmacSha256Sync not set');\n            return f(k, v, ...b); // hmac(k)(v, ...values)\n        };\n        const reseed = (seed = u8n()) => {\n            k = h(u8n([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n            v = h(); // v = hmac(k || v)\n            if (seed.length === 0)\n                return;\n            k = h(u8n([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n            v = h(); // v = hmac(k || v)\n        };\n        const gen = () => {\n            if (i++ >= 1000)\n                err(_e);\n            v = h(); // v = hmac(k || v)\n            return v;\n        };\n        return (seed, pred) => {\n            reset();\n            reseed(seed); // Steps D-G\n            let res = undefined; // Step H: grind until k is in [1..n-1]\n            while (!(res = pred(gen())))\n                reseed(); // test predicate until it returns ok\n            reset();\n            return res;\n        };\n    }\n}\n// ECDSA signature generation. via secg.org/sec1-v2.pdf 4.1.2 + RFC6979 deterministic k\nasync function signAsync(msgh, priv, opts = optS) {\n    const { seed, k2sig } = prepSig(msgh, priv, opts); // Extract arguments for hmac-drbg\n    return hmacDrbg(true)(seed, k2sig); // Re-run hmac-drbg until k2sig returns ok\n}\nfunction sign(msgh, priv, opts = optS) {\n    const { seed, k2sig } = prepSig(msgh, priv, opts); // Extract arguments for hmac-drbg\n    return hmacDrbg(false)(seed, k2sig); // Re-run hmac-drbg until k2sig returns ok\n}\nfunction verify(sig, msgh, pub, opts = optV) {\n    let { lowS } = opts; // ECDSA signature verification\n    if (lowS == null)\n        lowS = true; // Default lowS=true\n    if ('strict' in opts)\n        err('verify() legacy options not supported'); // legacy param\n    let sig_, h, P; // secg.org/sec1-v2.pdf 4.1.4\n    const rs = sig && typeof sig === 'object' && 'r' in sig; // Previous ver supported DER sigs. We\n    if (!rs && (toU8(sig).length !== 2 * fLen)) // throw error when DER is suspected now.\n        err('signature must be 64 bytes');\n    try {\n        sig_ = rs ? new Signature(sig.r, sig.s).assertValidity() : Signature.fromCompact(sig);\n        h = bits2int_modN(toU8(msgh, fLen)); // Truncate hash\n        P = pub instanceof Point ? pub.ok() : Point.fromHex(pub); // Validate public key\n    }\n    catch (e) {\n        return false;\n    } // Check sig for validity in both cases\n    if (!sig_)\n        return false;\n    const { r, s } = sig_;\n    if (lowS && moreThanHalfN(s))\n        return false; // lowS bans sig.s >= CURVE.n/2\n    let R;\n    try {\n        const is = inv(s, N); // s^-1\n        const u1 = mod(h * is, N); // u1 = hs^-1 mod n\n        const u2 = mod(r * is, N); // u2 = rs^-1 mod n\n        R = G.mulAddQUns(P, u1, u2).aff(); // R = u1\u22C5G + u2\u22C5P\n    }\n    catch (error) {\n        return false;\n    }\n    if (!R)\n        return false; // stop if R is identity / zero point\n    const v = mod(R.x, N); // <== The weird ECDSA part. R.x must be in N's field, not P's\n    return v === r; // mod(R.x, n) == r\n}\nfunction getSharedSecret(privA, pubB, isCompressed = true) {\n    return Point.fromHex(pubB).mul(toPriv(privA)).toRawBytes(isCompressed); // ECDH\n}\nfunction hashToPrivateKey(hash) {\n    hash = toU8(hash); // produces private keys with modulo bias\n    const minLen = fLen + 8; // being neglible.\n    if (hash.length < minLen || hash.length > 1024)\n        err('expected proper params');\n    const num = mod(b2n(hash), N - 1n) + 1n; // takes at least n+8 bytes\n    return n2b(num);\n}\nconst etc = {\n    hexToBytes: h2b, bytesToHex: b2h,\n    concatBytes: concatB, bytesToNumberBE: b2n, numberToBytesBE: n2b,\n    mod, invert: inv,\n    hmacSha256Async: async (key, ...msgs) => {\n        const crypto = cr(); // HMAC-SHA256 async. No sync built-in!\n        if (!crypto)\n            return err('etc.hmacSha256Async not set'); // Uses webcrypto: native cryptography.\n        const s = crypto.subtle;\n        const k = await s.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n        return u8n(await s.sign('HMAC', k, concatB(...msgs)));\n    },\n    hmacSha256Sync: _hmacSync,\n    hashToPrivateKey,\n    randomBytes: (len) => {\n        const crypto = cr(); // Can be shimmed in node.js <= 18 to prevent error:\n        // import { webcrypto } from 'node:crypto';\n        // if (!globalThis.crypto) globalThis.crypto = webcrypto;\n        if (!crypto)\n            err('crypto.getRandomValues must be defined');\n        return crypto.getRandomValues(u8n(len));\n    },\n};\nconst utils = {\n    normPrivateKeyToScalar: toPriv,\n    isValidPrivateKey: (key) => { try {\n        return !!toPriv(key);\n    }\n    catch (e) {\n        return false;\n    } },\n    randomPrivateKey: () => hashToPrivateKey(etc.randomBytes(fLen + 8)),\n    precompute(w = 8, p = G) { p.multiply(3n); return p; }, // no-op\n};\nObject.defineProperties(etc, { hmacSha256Sync: {\n        configurable: false, get() { return _hmacSync; }, set(f) { if (!_hmacSync)\n            _hmacSync = f; },\n    } });\nconst W = 8; // Precomputes-related code. W = window size\nconst precompute = () => {\n    const points = []; // 10x sign(), 2x verify(). To achieve this,\n    const windows = 256 / W + 1; // app needs to spend 40ms+ to calculate\n    let p = G, b = p; // a lot of points related to base point G.\n    for (let w = 0; w < windows; w++) { // Points are stored in array and used\n        b = p; // any time Gx multiplication is done.\n        points.push(b); // They consume 16-32 MiB of RAM.\n        for (let i = 1; i < 2 ** (W - 1); i++) {\n            b = b.add(p);\n            points.push(b);\n        }\n        p = b.double(); // Precomputes don't speed-up getSharedKey,\n    } // which multiplies user point by scalar,\n    return points; // when precomputes are using base point\n};\nconst wNAF = (n) => {\n    // Compared to other point mult methods,\n    const comp = Gpows || (Gpows = precompute()); // stores 2x less points using subtraction\n    const neg = (cnd, p) => { let n = p.negate(); return cnd ? n : p; }; // negate\n    let p = I, f = G; // f must be G, or could become I in the end\n    const windows = 1 + 256 / W; // W=8 17 windows\n    const wsize = 2 ** (W - 1); // W=8 128 window size\n    const mask = BigInt(2 ** W - 1); // W=8 will create mask 0b11111111\n    const maxNum = 2 ** W; // W=8 256\n    const shiftBy = BigInt(W); // W=8 8\n    for (let w = 0; w < windows; w++) {\n        const off = w * wsize;\n        let wbits = Number(n & mask); // extract W bits.\n        n >>= shiftBy; // shift number by W bits.\n        if (wbits > wsize) {\n            wbits -= maxNum;\n            n += 1n;\n        } // split if bits > max: +224 => 256-32\n        const off1 = off, off2 = off + Math.abs(wbits) - 1; // offsets, evaluate both\n        const cnd1 = w % 2 !== 0, cnd2 = wbits < 0; // conditions, evaluate both\n        if (wbits === 0) {\n            f = f.add(neg(cnd1, comp[off1])); // bits are 0: add garbage to fake point\n        }\n        else { //          ^ can't add off2, off2 = I\n            p = p.add(neg(cnd2, comp[off2])); // bits are 1: add to result point\n        }\n    }\n    return { p, f }; // return both real and fake points for JIT\n}; // !! you can disable precomputes by commenting-out call of the wNAF() inside Point#mul()\nexport { getPublicKey, sign, signAsync, verify, CURVE, // Remove the export to easily use in REPL\ngetSharedSecret, etc, utils, Point as ProjectivePoint, Signature }; // envs like browser console\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';\n\nimport * as secp256k1 from '@noble/secp256k1';\n\nimport { Encoder } from '../utils/encoder.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n\n/**\n * Class containing SECP256K1 related utility methods.\n */\nexport class Secp256k1 {\n  /**\n   * Validates the given JWK is a SECP256K1 key.\n   * @throws {Error} if fails validation.\n   */\n  public static validateKey(jwk: PrivateJwk | PublicJwk): void {\n    if (jwk.kty !== 'EC' || jwk.crv !== 'secp256k1') {\n      throw new DwnError(DwnErrorCode.Secp256k1KeyNotValid, 'Invalid SECP256K1 JWK: `kty` MUST be `EC`. `crv` MUST be `secp256k1`');\n    }\n  }\n\n  /**\n   * Converts a public key in bytes into a JWK.\n   */\n  public static async publicKeyToJwk(publicKeyBytes: Uint8Array): Promise<PublicJwk> {\n  // ensure public key is in uncompressed format so we can convert it into both x and y value\n    let uncompressedPublicKeyBytes;\n    if (publicKeyBytes.byteLength === 33) {\n      // this means given key is compressed\n      const curvePoints = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n      uncompressedPublicKeyBytes = curvePoints.toRawBytes(false); // isCompressed = false\n    } else {\n      uncompressedPublicKeyBytes = publicKeyBytes;\n    }\n\n    // the first byte is a header that indicates whether the key is uncompressed (0x04 if uncompressed), we can safely ignore\n    // bytes 1 - 32 represent X\n    // bytes 33 - 64 represent Y\n\n    // skip the first byte because it's used as a header to indicate whether the key is uncompressed\n    const x = Encoder.bytesToBase64Url(uncompressedPublicKeyBytes.subarray(1, 33));\n    const y = Encoder.bytesToBase64Url(uncompressedPublicKeyBytes.subarray(33, 65));\n\n    const publicJwk: PublicJwk = {\n      alg : 'ES256K',\n      kty : 'EC',\n      crv : 'secp256k1',\n      x,\n      y\n    };\n\n    return publicJwk;\n  }\n\n  /**\n   * Converts a private key in bytes into a JWK.\n   */\n  public static async privateKeyToJwk(privateKeyBytes: Uint8Array): Promise<PrivateJwk> {\n    const publicKeyBytes = await Secp256k1.getPublicKey(privateKeyBytes);\n\n    const jwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n    (jwk as PrivateJwk).d = Encoder.bytesToBase64Url(privateKeyBytes);\n\n    return jwk as PrivateJwk;\n  }\n\n  /**\n   * Creates a compressed key in raw bytes from the given SECP256K1 JWK.\n   */\n  public static publicJwkToBytes(publicJwk: PublicJwk): Uint8Array {\n    const x = Encoder.base64UrlToBytes(publicJwk.x);\n    const y = Encoder.base64UrlToBytes(publicJwk.y!);\n\n    return secp256k1.ProjectivePoint.fromAffine({\n      x : secp256k1.etc.bytesToNumberBE(x),\n      y : secp256k1.etc.bytesToNumberBE(y)\n    }).toRawBytes(true);\n  }\n\n  /**\n   * Creates a private key in raw bytes from the given SECP256K1 JWK.\n   */\n  public static privateJwkToBytes(privateJwk: PrivateJwk): Uint8Array {\n    const privateKey = Encoder.base64UrlToBytes(privateJwk.d);\n    return privateKey;\n  }\n\n  /**\n   * Signs the provided content using the provided JWK.\n   */\n  public static async sign(content: Uint8Array, privateJwk: PrivateJwk): Promise<Uint8Array> {\n    Secp256k1.validateKey(privateJwk);\n\n    // the underlying lib expects us to hash the content ourselves:\n    // https://github.com/paulmillr/noble-secp256k1/blob/97aa518b9c12563544ea87eba471b32ecf179916/index.ts#L1160\n    const hashedContent = await sha256.encode(content);\n    const privateKeyBytes = Secp256k1.privateJwkToBytes(privateJwk);\n\n    return (await secp256k1.signAsync(hashedContent, privateKeyBytes)).toCompactRawBytes();\n  }\n\n  /**\n   * Verifies a signature against the provided payload hash and public key.\n   * @returns a boolean indicating whether the signature is valid.\n   */\n  public static async verify(content: Uint8Array, signature: Uint8Array, publicJwk: PublicJwk): Promise<boolean> {\n    Secp256k1.validateKey(publicJwk);\n\n    const publicKeyBytes = Secp256k1.publicJwkToBytes(publicJwk);\n    const hashedContent = await sha256.encode(content);\n    return secp256k1.verify(signature, hashedContent, publicKeyBytes, { lowS: false });\n  }\n\n  /**\n   * Generates a random key pair in JWK format.\n   */\n  public static async generateKeyPair(): Promise<{publicJwk: PublicJwk, privateJwk: PrivateJwk}> {\n    const privateKeyBytes = secp256k1.utils.randomPrivateKey();\n    const publicKeyBytes = secp256k1.getPublicKey(privateKeyBytes, false); // `false` = uncompressed\n\n    const d = Encoder.bytesToBase64Url(privateKeyBytes);\n    const publicJwk: PublicJwk = await Secp256k1.publicKeyToJwk(publicKeyBytes);\n    const privateJwk: PrivateJwk = { ...publicJwk, d };\n\n    return { publicJwk, privateJwk };\n  }\n\n  /**\n   * Generates key pair in raw bytes, where the `publicKey` is compressed.\n   */\n  public static async generateKeyPairRaw(): Promise<{publicKey: Uint8Array, privateKey: Uint8Array}> {\n    const privateKey = secp256k1.utils.randomPrivateKey();\n    const publicKey = secp256k1.getPublicKey(privateKey, true); // `true` = compressed\n\n    return { publicKey, privateKey };\n  }\n\n  /**\n   * Gets the compressed public key of the given private key.\n   */\n  public static async getPublicKey(privateKey: Uint8Array): Promise<Uint8Array> {\n    const publicKey = secp256k1.getPublicKey(privateKey, true); // `true` = compressed\n    return publicKey;\n  }\n\n  /**\n   * Gets the public JWK of the given private JWK.\n   */\n  public static async getPublicJwk(privateKeyJwk: PrivateJwk): Promise<PublicJwk> {\n    // strip away `d`\n    const { d: _d, ...publicKey } = privateKeyJwk;\n    return publicKey;\n  }\n}\n\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { createCurve } from './_shortw_utils.js';\nimport { createHasher } from './abstract/hash-to-curve.js';\nimport { Field } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\n\n// NIST secp256r1 aka p256\n// https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-256\n\nconst Fp = Field(BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'));\nconst CURVE_A = Fp.create(BigInt('-3'));\nconst CURVE_B = BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b');\n\n// prettier-ignore\nexport const p256 = createCurve({\n  a: CURVE_A, // Equation params: a, b\n  b: CURVE_B,\n  Fp, // Field: 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n\n  // Curve order, total count of valid points in the field\n  n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n  // Base (generator) point (x, y)\n  Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n  Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n  h: BigInt(1),\n  lowS: false,\n} as const, sha256);\nexport const secp256r1 = p256;\n\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: CURVE_A,\n    B: CURVE_B,\n    Z: Fp.create(BigInt('-10')),\n  }))();\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(secp256r1.ProjectivePoint, (scalars: bigint[]) => mapSWU(scalars[0]), {\n    DST: 'P256_XMD:SHA-256_SSWU_RO_',\n    encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n    p: Fp.ORDER,\n    m: 1,\n    k: 128,\n    expand: 'xmd',\n    hash: sha256,\n  }))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends HashMD<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = SHA256_IV[0] | 0;\n  B = SHA256_IV[1] | 0;\n  C = SHA256_IV[2] | 0;\n  D = SHA256_IV[3] | 0;\n  E = SHA256_IV[4] | 0;\n  F = SHA256_IV[5] | 0;\n  G = SHA256_IV[6] | 0;\n  H = SHA256_IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Choice: a ? b : c\nexport const Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nexport const Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    exists(this);\n    output(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in\n    // current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\n// copied from utils\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(h: Hash) {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(h.outputLen);\n  number(h.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word: number, shift: number) =>\n  (word << shift) | ((word >>> (32 - shift)) >>> 0);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word: number) =>\n  ((word << 24) & 0xff000000) |\n  ((word << 8) & 0xff0000) |\n  ((word >>> 8) & 0xff00) |\n  ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n: number) => n : (n: number) => byteSwap(n);\n\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr: Uint32Array) {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { CHash } from './abstract/utils.js';\nimport { CurveType, weierstrass } from './abstract/weierstrass.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest() {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  destroy() {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport { AffinePoint, BasicCurve, Group, GroupConstructor, validateBasic, wNAF } from './curve.js';\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\n    // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n    // since we always use positive integers here. It must always be empty:\n    // - add zero byte if exists\n    // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    ut.abytes(data);\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      if (this.is0()) {\n        // (0, 1, 0) aka ZERO is invalid in most contexts.\n        // In BLS, ZERO can be serialized, so we allow it.\n        // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n        if (CURVE.allowInfinityPoint && !Fp.is0(this.py)) return;\n        throw new Error('bad point: ZERO');\n      }\n      // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n      const { x, y } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(n);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.is0();\n      // If invZ was 0, we return zero point. However we still want to execute\n      // all operations, so we replace invZ with a random number, 1.\n      if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n      const ax = Fp.mul(x, iz);\n      const ay = Fp.mul(y, iz);\n      const zz = Fp.mul(z, iz);\n      if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y: bigint;\n        try {\n          y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        } catch (sqrtError) {\n          const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n          throw new Error('Point is not on curve' + suffix);\n        }\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null && ent !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || ut.isBytes(sg)) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nexport function abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    abytes(a);\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean) {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n", "/**\n * @packageDocumentation\n *\n * `Uint8Array`s bring memory-efficient(ish) byte handling to browsers - they are similar to Node.js `Buffer`s but lack a lot of the utility methods present on that class.\n *\n * This module exports a number of function that let you do common operations - joining Uint8Arrays together, seeing if they have the same contents etc.\n *\n * Since Node.js `Buffer`s are also `Uint8Array`s, it falls back to `Buffer` internally where it makes sense for performance reasons.\n *\n * ## alloc(size)\n *\n * Create a new `Uint8Array`. When running under Node.js, `Buffer` will be used in preference to `Uint8Array`.\n *\n * ### Example\n *\n * ```js\n * import { alloc } from 'uint8arrays/alloc'\n *\n * const buf = alloc(100)\n * ```\n *\n * ## allocUnsafe(size)\n *\n * Create a new `Uint8Array`. When running under Node.js, `Buffer` will be used in preference to `Uint8Array`.\n *\n * On platforms that support it, memory referenced by the returned `Uint8Array` will not be initialized.\n *\n * ### Example\n *\n * ```js\n * import { allocUnsafe } from 'uint8arrays/alloc'\n *\n * const buf = allocUnsafe(100)\n * ```\n *\n * ## compare(a, b)\n *\n * Compare two `Uint8Arrays`\n *\n * ### Example\n *\n * ```js\n * import { compare } from 'uint8arrays/compare'\n *\n * const arrays = [\n *   Uint8Array.from([3, 4, 5]),\n *   Uint8Array.from([0, 1, 2])\n * ]\n *\n * const sorted = arrays.sort(compare)\n *\n * console.info(sorted)\n * // [\n * //    Uint8Array[0, 1, 2]\n * //    Uint8Array[3, 4, 5]\n * // ]\n * ```\n *\n * ## concat(arrays, \\[length])\n *\n * Concatenate one or more `Uint8Array`s and return a `Uint8Array` with their contents.\n *\n * If you know the length of the arrays, pass it as a second parameter, otherwise it will be calculated by traversing the list of arrays.\n *\n * ### Example\n *\n * ```js\n * import { concat } from 'uint8arrays/concat'\n *\n * const arrays = [\n *   Uint8Array.from([0, 1, 2]),\n *   Uint8Array.from([3, 4, 5])\n * ]\n *\n * const all = concat(arrays, 6)\n *\n * console.info(all)\n * // Uint8Array[0, 1, 2, 3, 4, 5]\n * ```\n *\n * ## equals(a, b)\n *\n * Returns true if the two arrays are the same array or if they have the same length and contents.\n *\n * ### Example\n *\n * ```js\n * import { equals } from 'uint8arrays/equals'\n *\n * const a = Uint8Array.from([0, 1, 2])\n * const b = Uint8Array.from([3, 4, 5])\n * const c = Uint8Array.from([0, 1, 2])\n *\n * console.info(equals(a, b)) // false\n * console.info(equals(a, c)) // true\n * console.info(equals(a, a)) // true\n * ```\n *\n * ## fromString(string, encoding = 'utf8')\n *\n * Returns a new `Uint8Array` created from the passed string and interpreted as the passed encoding.\n *\n * Supports `utf8` and any of the [multibase encodings](https://github.com/multiformats/multibase/blob/master/multibase.csv) as implemented by the [multiformats module](https://www.npmjs.com/package/multiformats).\n *\n * ### Example\n *\n * ```js\n * import { fromString } from 'uint8arrays/from-string'\n *\n * console.info(fromString('hello world')) // Uint8Array[104, 101 ...\n * console.info(fromString('00010203aabbcc', 'base16')) // Uint8Array[0, 1 ...\n * console.info(fromString('AAECA6q7zA', 'base64')) // Uint8Array[0, 1 ...\n * console.info(fromString('01234', 'ascii')) // Uint8Array[48, 49 ...\n * ```\n *\n * ## toString(array, encoding = 'utf8')\n *\n * Returns a string created from the passed `Uint8Array` in the passed encoding.\n *\n * Supports `utf8` and any of the [multibase encodings](https://github.com/multiformats/multibase/blob/master/multibase.csv) as implemented by the [multiformats module](https://www.npmjs.com/package/multiformats).\n *\n * ### Example\n *\n * ```js\n * import { toString } from 'uint8arrays/to-string'\n *\n * console.info(toString(Uint8Array.from([104, 101...]))) // 'hello world'\n * console.info(toString(Uint8Array.from([0, 1, 2...]), 'base16')) // '00010203aabbcc'\n * console.info(toString(Uint8Array.from([0, 1, 2...]), 'base64')) // 'AAECA6q7zA'\n * console.info(toString(Uint8Array.from([48, 49, 50...]), 'ascii')) // '01234'\n * ```\n *\n * ## xor(a, b)\n *\n * Returns a `Uint8Array` containing `a` and `b` xored together.\n *\n * ### Example\n *\n * ```js\n * import { xor } from 'uint8arrays/xor'\n *\n * console.info(xor(Uint8Array.from([1, 0]), Uint8Array.from([0, 1]))) // Uint8Array[1, 1]\n * ```\n *\n * ## xorCompare(a, b)\n *\n * Compares the distances between two xor `Uint8Array`s.\n *\n * ### Example\n *\n * ```ts\n * import { xor } from 'uint8arrays/xor'\n * import { xorCompare } from 'uint8arrays/xor-compare'\n *\n * const target = Uint8Array.from([1, 1])\n * const val1 = Uint8Array.from([1, 0])\n * const xor1 = xor(target, val1)\n *\n * const val2 = Uint8Array.from([0, 1])\n * const xor2 = xor(target, val2)\n *\n * console.info(xorCompare(xor1, xor2)) // -1 or 0 or 1\n * ```\n */\n\nimport { equals } from './equals.js'\nimport { xor } from './xor.js'\nimport { compare } from '#compare'\nimport { concat } from '#concat'\nimport { fromString } from '#from-string'\nimport { toString } from '#to-string'\n\nexport {\n  compare,\n  concat,\n  equals,\n  fromString,\n  toString,\n  xor\n}\n\nexport type { SupportedEncodings } from './util/bases.js'\n", "/**\n * Returns true if the two passed Uint8Arrays have the same content\n */\nexport function equals (a: Uint8Array, b: Uint8Array): boolean {\n  if (a === b) {\n    return true\n  }\n\n  if (a.byteLength !== b.byteLength) {\n    return false\n  }\n\n  for (let i = 0; i < a.byteLength; i++) {\n    if (a[i] !== b[i]) {\n      return false\n    }\n  }\n\n  return true\n}\n", "import { allocUnsafe } from '#alloc'\nimport { asUint8Array } from '#util/as-uint8array'\n\n/**\n * Returns the xor distance between two Uint8Arrays\n */\nexport function xor (a: Uint8Array, b: Uint8Array): Uint8Array {\n  if (a.length !== b.length) {\n    throw new Error('Inputs should have the same length')\n  }\n\n  const result = allocUnsafe(a.length)\n\n  for (let i = 0; i < a.length; i++) {\n    result[i] = a[i] ^ b[i]\n  }\n\n  return asUint8Array(result)\n}\n", "/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  return new Uint8Array(size)\n}\n", "/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  return buf\n}\n", "/**\n * Can be used with Array.sort to sort and array with Uint8Array entries\n */\nexport function compare (a: Uint8Array, b: Uint8Array): number {\n  for (let i = 0; i < a.byteLength; i++) {\n    if (a[i] < b[i]) {\n      return -1\n    }\n\n    if (a[i] > b[i]) {\n      return 1\n    }\n  }\n\n  if (a.byteLength > b.byteLength) {\n    return 1\n  }\n\n  if (a.byteLength < b.byteLength) {\n    return -1\n  }\n\n  return 0\n}\n", "import { allocUnsafe } from '#alloc'\nimport { asUint8Array } from '#util/as-uint8array'\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Uint8Arrays\n */\nexport function concat (arrays: Uint8Array[], length?: number): Uint8Array {\n  if (length == null) {\n    length = arrays.reduce((acc, curr) => acc + curr.length, 0)\n  }\n\n  const output = allocUnsafe(length)\n  let offset = 0\n\n  for (const arr of arrays) {\n    output.set(arr, offset)\n    offset += arr.length\n  }\n\n  return asUint8Array(output)\n}\n", "import bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n  const base = bases[encoding]\n\n  if (base == null) {\n    throw new Error(`Unsupported encoding \"${encoding}\"`)\n  }\n\n  // add multibase prefix\n  return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "import { bases } from 'multiformats/basics'\nimport type { MultibaseCodec } from 'multiformats'\nimport { allocUnsafe } from '#alloc'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: {\n      decode\n    }\n  }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n  const decoder = new TextDecoder('utf8')\n  return 'u' + decoder.decode(buf)\n}, (str) => {\n  const encoder = new TextEncoder()\n  return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n  let string = 'a'\n\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i])\n  }\n  return string\n}, (str) => {\n  str = str.substring(1)\n  const buf = allocUnsafe(str.length)\n\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i)\n  }\n\n  return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii,\n  binary: ascii,\n\n  ...bases\n}\n\nexport default BASES\n", "import * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nexport const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nexport const hashes = { ...sha2, ...identity }\nexport const codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n})\n", "import { coerce } from '../bytes.js'\nimport basex from '../vendor/base-x.js'\nimport type { BaseCodec, BaseDecoder, BaseEncoder, CombobaseDecoder, Multibase, MultibaseCodec, MultibaseDecoder, MultibaseEncoder, UnibaseDecoder } from './interface.js'\n\ninterface EncodeFn { (bytes: Uint8Array): string }\ninterface DecodeFn { (text: string): Uint8Array }\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n */\nclass Encoder<Base extends string, Prefix extends string> implements MultibaseEncoder<Prefix>, BaseEncoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  encode (bytes: Uint8Array): Multibase<Prefix> {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n */\nclass Decoder<Base extends string, Prefix extends string> implements MultibaseDecoder<Prefix>, UnibaseDecoder<Prefix>, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseDecode: DecodeFn\n  private readonly prefixCodePoint: number\n\n  constructor (name: Base, prefix: Prefix, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    this.prefixCodePoint = prefix.codePointAt(0) as number\n    this.baseDecode = baseDecode\n  }\n\n  decode (text: string): Uint8Array {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  or<OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n}\n\ntype Decoders<Prefix extends string> = Record<Prefix, UnibaseDecoder<Prefix>>\n\nclass ComposedDecoder<Prefix extends string> implements MultibaseDecoder<Prefix>, CombobaseDecoder<Prefix> {\n  readonly decoders: Decoders<Prefix>\n\n  constructor (decoders: Decoders<Prefix>) {\n    this.decoders = decoders\n  }\n\n  or <OtherPrefix extends string> (decoder: UnibaseDecoder<OtherPrefix> | ComposedDecoder<OtherPrefix>): ComposedDecoder<Prefix | OtherPrefix> {\n    return or(this, decoder)\n  }\n\n  decode (input: string): Uint8Array {\n    const prefix = input[0] as Prefix\n    const decoder = this.decoders[prefix]\n    if (decoder != null) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\nexport function or <L extends string, R extends string> (left: UnibaseDecoder<L> | CombobaseDecoder<L>, right: UnibaseDecoder<R> | CombobaseDecoder<R>): ComposedDecoder<L | R> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return new ComposedDecoder({\n    ...(left.decoders ?? { [(left as UnibaseDecoder<L>).prefix]: left }),\n    ...(right.decoders ?? { [(right as UnibaseDecoder<R>).prefix]: right })\n  } as Decoders<L | R>)\n}\n\nexport class Codec<Base extends string, Prefix extends string> implements MultibaseCodec<Prefix>, MultibaseEncoder<Prefix>, MultibaseDecoder<Prefix>, BaseCodec, BaseEncoder, BaseDecoder {\n  readonly name: Base\n  readonly prefix: Prefix\n  readonly baseEncode: EncodeFn\n  readonly baseDecode: DecodeFn\n  readonly encoder: Encoder<Base, Prefix>\n  readonly decoder: Decoder<Base, Prefix>\n\n  constructor (name: Base, prefix: Prefix, baseEncode: EncodeFn, baseDecode: DecodeFn) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  encode (input: Uint8Array): string {\n    return this.encoder.encode(input)\n  }\n\n  decode (input: string): Uint8Array {\n    return this.decoder.decode(input)\n  }\n}\n\nexport function from <Base extends string, Prefix extends string> ({ name, prefix, encode, decode }: { name: Base, prefix: Prefix, encode: EncodeFn, decode: DecodeFn }): Codec<Base, Prefix> {\n  return new Codec(name, prefix, encode, decode)\n}\n\nexport function baseX <Base extends string, Prefix extends string> ({ name, prefix, alphabet }: { name: Base, prefix: Prefix, alphabet: string }): Codec<Base, Prefix> {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    decode: (text: string): Uint8Array => coerce(decode(text))\n  })\n}\n\nfunction decode (string: string, alphabet: string, bitsPerChar: number, name: string): Uint8Array {\n  // Build the character lookup table:\n  const codes: Record<string, number> = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || (0xff & (buffer << (8 - bits))) !== 0) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\nfunction encode (data: Uint8Array, alphabet: string, bitsPerChar: number): string {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits !== 0) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while (((out.length * bitsPerChar) & 7) !== 0) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n */\nexport function rfc4648 <Base extends string, Prefix extends string> ({ name, prefix, bitsPerChar, alphabet }: { name: Base, prefix: Prefix, bitsPerChar: number, alphabet: string }): Codec<Base, Prefix> {\n  return from({\n    prefix,\n    name,\n    encode (input: Uint8Array): string {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input: string): Uint8Array {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "export const empty = new Uint8Array(0)\n\nexport function toHex (d: Uint8Array): string {\n  return d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n}\n\nexport function fromHex (hex: string): Uint8Array {\n  const hexes = hex.match(/../g)\n  return hexes != null ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\nexport function equals (aa: Uint8Array, bb: Uint8Array): boolean {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\nexport function coerce (o: ArrayBufferView | ArrayBuffer | Uint8Array): Uint8Array {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\nexport function isBinary (o: unknown): o is ArrayBuffer | ArrayBufferView {\n  return o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n}\n\nexport function fromString (str: string): Uint8Array {\n  return new TextEncoder().encode(str)\n}\n\nexport function toString (b: Uint8Array): string {\n  return new TextDecoder().decode(b)\n}\n", "/* eslint-disable */\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n/**\n * @param {string} ALPHABET\n * @param {any} name\n */\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  /**\n   * @param {any[] | Iterable<number>} source\n   */\n  function encode (source) {\n    // @ts-ignore\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  /**\n   * @param {string | string[]} source\n   */\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  /**\n   * @param {string | string[]} string\n   */\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "import { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n})\n", "import { from } from './base.js'\n\nconst alphabet = Array.from('\uD83D\uDE80\uD83E\uDE90\u2604\uD83D\uDEF0\uD83C\uDF0C\uD83C\uDF11\uD83C\uDF12\uD83C\uDF13\uD83C\uDF14\uD83C\uDF15\uD83C\uDF16\uD83C\uDF17\uD83C\uDF18\uD83C\uDF0D\uD83C\uDF0F\uD83C\uDF0E\uD83D\uDC09\u2600\uD83D\uDCBB\uD83D\uDDA5\uD83D\uDCBE\uD83D\uDCBF\uD83D\uDE02\u2764\uD83D\uDE0D\uD83E\uDD23\uD83D\uDE0A\uD83D\uDE4F\uD83D\uDC95\uD83D\uDE2D\uD83D\uDE18\uD83D\uDC4D\uD83D\uDE05\uD83D\uDC4F\uD83D\uDE01\uD83D\uDD25\uD83E\uDD70\uD83D\uDC94\uD83D\uDC96\uD83D\uDC99\uD83D\uDE22\uD83E\uDD14\uD83D\uDE06\uD83D\uDE44\uD83D\uDCAA\uD83D\uDE09\u263A\uD83D\uDC4C\uD83E\uDD17\uD83D\uDC9C\uD83D\uDE14\uD83D\uDE0E\uD83D\uDE07\uD83C\uDF39\uD83E\uDD26\uD83C\uDF89\uD83D\uDC9E\u270C\u2728\uD83E\uDD37\uD83D\uDE31\uD83D\uDE0C\uD83C\uDF38\uD83D\uDE4C\uD83D\uDE0B\uD83D\uDC97\uD83D\uDC9A\uD83D\uDE0F\uD83D\uDC9B\uD83D\uDE42\uD83D\uDC93\uD83E\uDD29\uD83D\uDE04\uD83D\uDE00\uD83D\uDDA4\uD83D\uDE03\uD83D\uDCAF\uD83D\uDE48\uD83D\uDC47\uD83C\uDFB6\uD83D\uDE12\uD83E\uDD2D\u2763\uD83D\uDE1C\uD83D\uDC8B\uD83D\uDC40\uD83D\uDE2A\uD83D\uDE11\uD83D\uDCA5\uD83D\uDE4B\uD83D\uDE1E\uD83D\uDE29\uD83D\uDE21\uD83E\uDD2A\uD83D\uDC4A\uD83E\uDD73\uD83D\uDE25\uD83E\uDD24\uD83D\uDC49\uD83D\uDC83\uD83D\uDE33\u270B\uD83D\uDE1A\uD83D\uDE1D\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE2C\uD83D\uDE43\uD83C\uDF40\uD83C\uDF37\uD83D\uDE3B\uD83D\uDE13\u2B50\u2705\uD83E\uDD7A\uD83C\uDF08\uD83D\uDE08\uD83E\uDD18\uD83D\uDCA6\u2714\uD83D\uDE23\uD83C\uDFC3\uD83D\uDC90\u2639\uD83C\uDF8A\uD83D\uDC98\uD83D\uDE20\u261D\uD83D\uDE15\uD83C\uDF3A\uD83C\uDF82\uD83C\uDF3B\uD83D\uDE10\uD83D\uDD95\uD83D\uDC9D\uD83D\uDE4A\uD83D\uDE39\uD83D\uDDE3\uD83D\uDCAB\uD83D\uDC80\uD83D\uDC51\uD83C\uDFB5\uD83E\uDD1E\uD83D\uDE1B\uD83D\uDD34\uD83D\uDE24\uD83C\uDF3C\uD83D\uDE2B\u26BD\uD83E\uDD19\u2615\uD83C\uDFC6\uD83E\uDD2B\uD83D\uDC48\uD83D\uDE2E\uD83D\uDE46\uD83C\uDF7B\uD83C\uDF43\uD83D\uDC36\uD83D\uDC81\uD83D\uDE32\uD83C\uDF3F\uD83E\uDDE1\uD83C\uDF81\u26A1\uD83C\uDF1E\uD83C\uDF88\u274C\u270A\uD83D\uDC4B\uD83D\uDE30\uD83E\uDD28\uD83D\uDE36\uD83E\uDD1D\uD83D\uDEB6\uD83D\uDCB0\uD83C\uDF53\uD83D\uDCA2\uD83E\uDD1F\uD83D\uDE41\uD83D\uDEA8\uD83D\uDCA8\uD83E\uDD2C\u2708\uD83C\uDF80\uD83C\uDF7A\uD83E\uDD13\uD83D\uDE19\uD83D\uDC9F\uD83C\uDF31\uD83D\uDE16\uD83D\uDC76\uD83E\uDD74\u25B6\u27A1\u2753\uD83D\uDC8E\uD83D\uDCB8\u2B07\uD83D\uDE28\uD83C\uDF1A\uD83E\uDD8B\uD83D\uDE37\uD83D\uDD7A\u26A0\uD83D\uDE45\uD83D\uDE1F\uD83D\uDE35\uD83D\uDC4E\uD83E\uDD32\uD83E\uDD20\uD83E\uDD27\uD83D\uDCCC\uD83D\uDD35\uD83D\uDC85\uD83E\uDDD0\uD83D\uDC3E\uD83C\uDF52\uD83D\uDE17\uD83E\uDD11\uD83C\uDF0A\uD83E\uDD2F\uD83D\uDC37\u260E\uD83D\uDCA7\uD83D\uDE2F\uD83D\uDC86\uD83D\uDC46\uD83C\uDFA4\uD83D\uDE47\uD83C\uDF51\u2744\uD83C\uDF34\uD83D\uDCA3\uD83D\uDC38\uD83D\uDC8C\uD83D\uDCCD\uD83E\uDD40\uD83E\uDD22\uD83D\uDC45\uD83D\uDCA1\uD83D\uDCA9\uD83D\uDC50\uD83D\uDCF8\uD83D\uDC7B\uD83E\uDD10\uD83E\uDD2E\uD83C\uDFBC\uD83E\uDD75\uD83D\uDEA9\uD83C\uDF4E\uD83C\uDF4A\uD83D\uDC7C\uD83D\uDC8D\uD83D\uDCE3\uD83E\uDD42')\nconst alphabetBytesToChars: string[] = (alphabet.reduce<string[]>((p, c, i) => { p[i] = c; return p }, ([])))\nconst alphabetCharsToBytes: number[] = (alphabet.reduce<number[]>((p, c, i) => { p[c.codePointAt(0) as number] = i; return p }, ([])))\n\nfunction encode (data: Uint8Array): string {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c]\n    return p\n  }, '')\n}\n\nfunction decode (str: string): Uint8Array {\n  const byts = []\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[char.codePointAt(0) as number]\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${char}`)\n    }\n    byts.push(byt)\n  }\n  return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n  prefix: '\uD83D\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n})\n", "import { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n  prefix: '\\x00',\n  name: 'identity',\n  encode: (buf) => toString(buf),\n  decode: (str) => fromString(str)\n})\n", "import type { ArrayBufferView, ByteView } from './interface.js'\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\nexport function encode <T> (node: T): ByteView<T> {\n  return textEncoder.encode(JSON.stringify(node))\n}\n\nexport function decode <T> (data: ByteView<T> | ArrayBufferView<T>): T {\n  return JSON.parse(textDecoder.decode(data))\n}\n", "import { coerce } from '../bytes.js'\nimport type { ArrayBufferView, ByteView } from './interface.js'\n\nexport const name = 'raw'\nexport const code = 0x55\n\nexport function encode (node: Uint8Array): ByteView<Uint8Array> {\n  return coerce(node)\n}\n\nexport function decode (data: ByteView<Uint8Array> | ArrayBufferView<Uint8Array>): Uint8Array {\n  return coerce(data)\n}\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\nconst encode: (input: Uint8Array) => Uint8Array = coerce\n\nfunction digest (input: Uint8Array): Digest.Digest<typeof code, number> {\n  return Digest.create(code, encode(input))\n}\n\nexport const identity = { code, name, encode, digest }\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\nimport type { MultihashDigest } from './interface.js'\n\n/**\n * Creates a multihash digest.\n */\nexport function create <Code extends number> (code: Code, digest: Uint8Array): Digest<Code, number> {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n */\nexport function decode (multihash: Uint8Array): MultihashDigest {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\nexport function equals (a: MultihashDigest, b: unknown): b is MultihashDigest {\n  if (a === b) {\n    return true\n  } else {\n    const data = b as { code?: unknown, size?: unknown, bytes?: unknown }\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\nexport class Digest<Code extends number, Size extends number> implements MultihashDigest {\n  readonly code: Code\n  readonly size: Size\n  readonly digest: Uint8Array\n  readonly bytes: Uint8Array\n\n  /**\n   * Creates a multihash digest.\n   */\n  constructor (code: Code, size: Size, digest: Uint8Array, bytes: Uint8Array) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from './vendor/varint.js'\n\nexport function decode (data: Uint8Array, offset = 0): [number, number] {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\nexport function encodeTo (int: number, target: Uint8Array, offset = 0): Uint8Array {\n  varint.encode(int, target, offset)\n  return target\n}\n\nexport function encodingLength (int: number): number {\n  return varint.encodingLength(int)\n}\n", "/* eslint-disable */\nvar encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\n/**\n * @param {number} num\n * @param {number[]} out\n * @param {number} offset\n */\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  // @ts-ignore\n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\n/**\n * @param {string | any[]} buf\n * @param {number} offset\n */\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      // @ts-ignore\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  // @ts-ignore\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (/** @type {number} */ value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\nfunction sha (name: AlgorithmIdentifier): (data: Uint8Array) => Promise<Uint8Array> {\n  return async data => new Uint8Array(await crypto.subtle.digest(name, data))\n}\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\nimport type { MultihashHasher } from './interface.js'\n\ntype Await<T> = Promise<T> | T\n\nexport function from <Name extends string, Code extends number> ({ name, code, encode }: { name: Name, code: Code, encode(input: Uint8Array): Await<Uint8Array> }): Hasher<Name, Code> {\n  return new Hasher(name, code, encode)\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport class Hasher<Name extends string, Code extends number> implements MultihashHasher<Code> {\n  readonly name: Name\n  readonly code: Code\n  readonly encode: (input: Uint8Array) => Await<Uint8Array>\n\n  constructor (name: Name, code: Code, encode: (input: Uint8Array) => Await<Uint8Array>) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  digest (input: Uint8Array): Await<Digest.Digest<Code, number>> {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * This library defines common interfaces and low level building blocks for various interrelated multiformat technologies (multicodec, multihash, multibase, and CID). They can be used to implement custom base encoders / decoders / codecs, codec encoders /decoders and multihash hashers that comply to the interface that layers above assume.\n *\n * This library provides implementations for most basics and many others can be found in linked repositories.\n *\n * ```TypeScript\n * import { CID } from 'multiformats/cid'\n * import * as json from 'multiformats/codecs/json'\n * import { sha256 } from 'multiformats/hashes/sha2'\n *\n * const bytes = json.encode({ hello: 'world' })\n *\n * const hash = await sha256.digest(bytes)\n * const cid = CID.create(1, json.code, hash)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Creating Blocks\n *\n * ```TypeScript\n * import * as Block from 'multiformats/block'\n * import * as codec from '@ipld/dag-cbor'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * const value = { hello: 'world' }\n *\n * // encode a block\n * let block = await Block.encode({ value, codec, hasher })\n *\n * block.value // { hello: 'world' }\n * block.bytes // Uint8Array\n * block.cid   // CID() w/ sha2-256 hash address and dag-cbor codec\n *\n * // you can also decode blocks from their binary state\n * block = await Block.decode({ bytes: block.bytes, codec, hasher })\n *\n * // if you have the cid you can also verify the hash on decode\n * block = await Block.create({ bytes: block.bytes, cid: block.cid, codec, hasher })\n * ```\n *\n * ## Multibase Encoders / Decoders / Codecs\n *\n * CIDs can be serialized to string representation using multibase encoders that implement [`MultibaseEncoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides quite a few implementations that can be imported:\n *\n * ```TypeScript\n * import { base64 } from \"multiformats/bases/base64\"\n * cid.toString(base64.encoder)\n * //> 'mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA'\n * ```\n *\n * Parsing CID string serialized CIDs requires multibase decoder that implements [`MultibaseDecoder`](https://github.com/multiformats/js-multiformats/blob/master/src/bases/interface.ts) interface. This library provides a decoder for every encoder it provides:\n *\n * ```TypeScript\n * CID.parse('mAYAEEiCTojlxqRTl6svwqNJRVM2jCcPBxy+7mRTUfGDzy2gViA', base64.decoder)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * Dual of multibase encoder & decoder is defined as multibase codec and it exposes\n * them as `encoder` and `decoder` properties. For added convenience codecs also\n * implement `MultibaseEncoder` and `MultibaseDecoder` interfaces so they could be\n * used as either or both:\n *\n * ```TypeScript\n * cid.toString(base64)\n * CID.parse(cid.toString(base64), base64)\n * ```\n *\n * **Note:** CID implementation comes bundled with `base32` and `base58btc`\n * multibase codecs so that CIDs can be base serialized to (version specific)\n * default base encoding and parsed without having to supply base encoders/decoders:\n *\n * ```TypeScript\n * const v1 = CID.parse('bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea')\n * v1.toString()\n * //> 'bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea'\n *\n * const v0 = CID.parse('QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n')\n * v0.toString()\n * //> 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n'\n * v0.toV1().toString()\n * //> 'bafybeihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku'\n * ```\n *\n * ## Multicodec Encoders / Decoders / Codecs\n *\n * This library defines [`BlockEncoder`, `BlockDecoder` and `BlockCodec` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts).\n * Codec implementations should conform to the `BlockCodec` interface which implements both `BlockEncoder` and `BlockDecoder`.\n * Here is an example implementation of JSON `BlockCodec`.\n *\n * ```TypeScript\n * export const { name, code, encode, decode } = {\n *   name: 'json',\n *   code: 0x0200,\n *   encode: json => new TextEncoder().encode(JSON.stringify(json)),\n *   decode: bytes => JSON.parse(new TextDecoder().decode(bytes))\n * }\n * ```\n *\n * ## Multihash Hashers\n *\n * This library defines [`MultihashHasher` and `MultihashDigest` interfaces](https://github.com/multiformats/js-multiformats/blob/master/src/hashes/interface.ts) and convinient function for implementing them:\n *\n * ```TypeScript\n * import * as hasher from 'multiformats/hashes/hasher'\n *\n * const sha256 = hasher.from({\n *   // As per multiformats table\n *   // https://github.com/multiformats/multicodec/blob/master/table.csv#L9\n *   name: 'sha2-256',\n *   code: 0x12,\n *\n *   encode: (input) => new Uint8Array(crypto.createHash('sha256').update(input).digest())\n * })\n *\n * const hash = await sha256.digest(json.encode({ hello: 'world' }))\n * CID.create(1, json.code, hash)\n *\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n * ```\n *\n * ## Traversal\n *\n * This library contains higher-order functions for traversing graphs of data easily.\n *\n * `walk()` walks through the links in each block of a DAG calling a user-supplied loader function for each one, in depth-first order with no duplicate block visits. The loader should return a `Block` object and can be used to inspect and collect block ordering for a full DAG walk. The loader should `throw` on error, and return `null` if a block should be skipped by `walk()`.\n *\n * ```TypeScript\n * import { walk } from 'multiformats/traversal'\n * import * as Block from 'multiformats/block'\n * import * as codec from 'multiformats/codecs/json'\n * import { sha256 as hasher } from 'multiformats/hashes/sha2'\n *\n * // build a DAG (a single block for this simple example)\n * const value = { hello: 'world' }\n * const block = await Block.encode({ value, codec, hasher })\n * const { cid } = block\n * console.log(cid)\n * //> CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)\n *\n * // create a loader function that also collects CIDs of blocks in\n * // their traversal order\n * const load = (cid, blocks) => async (cid) => {\n *   // fetch a block using its cid\n *   // e.g.: const block = await fetchBlockByCID(cid)\n *   blocks.push(cid)\n *   return block\n * }\n *\n * // collect blocks in this DAG starting from the root `cid`\n * const blocks = []\n * await walk({ cid, load: load(cid, blocks) })\n *\n * console.log(blocks)\n * //> [CID(bagaaierasords4njcts6vs7qvdjfcvgnume4hqohf65zsfguprqphs3icwea)]\n * ```\n *\n * ## Legacy interface\n *\n * [`blockcodec-to-ipld-format`](https://github.com/ipld/js-blockcodec-to-ipld-format) converts a multiformats [`BlockCodec`](https://github.com/multiformats/js-multiformats/blob/master/src/codecs/interface.ts#L21) into an\n * [`interface-ipld-format`](https://github.com/ipld/interface-ipld-format) for use with the [`ipld`](https://github.com/ipld/ipld) package. This can help bridge IPLD codecs implemented using the structure and interfaces defined here to existing code that assumes, or requires `interface-ipld-format`. This bridge also includes the relevant TypeScript definitions.\n *\n * ## Implementations\n *\n * By default, no base encodings (other than base32 & base58btc), hash functions,\n * or codec implementations are exposed by `multiformats`, you need to\n * import the ones you need yourself.\n *\n * ### Multibase codecs\n *\n * | bases                                                         | import                      | repo                                                                                              |\n * | ------------------------------------------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------- |\n * | `base16`                                                      | `multiformats/bases/base16` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base32`, `base32pad`, `base32hex`, `base32hexpad`, `base32z` | `multiformats/bases/base32` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base64`, `base64pad`, `base64url`, `base64urlpad`            | `multiformats/bases/base64` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n * | `base58btc`, `base58flick4`                                   | `multiformats/bases/base58` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) |\n *\n * Other (less useful) bases implemented in [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/bases) include: `base2`, `base8`, `base10`, `base36` and `base256emoji`.\n *\n * ### Multihash hashers\n *\n * | hashes                                                                                                                          | import                         | repo                                                                                                               |\n * | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------ |\n * | `sha2-256`, `sha2-512`                                                                                                          | `multiformats/hashes/sha2`     | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes)             |\n * | `sha3-224`, `sha3-256`, `sha3-384`,`sha3-512`, `shake-128`, `shake-256`, `keccak-224`, `keccak-256`, `keccak-384`, `keccak-512` | `@multiformats/sha3`           | [multiformats/js-sha3](https://github.com/multiformats/js-sha3)                                                    |\n * | `identity`                                                                                                                      | `multiformats/hashes/identity` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/hashes/identity.js) |\n * | `murmur3-128`, `murmur3-32`                                                                                                     | `@multiformats/murmur3`        | [multiformats/js-murmur3](https://github.com/multiformats/js-murmur3)                                              |\n * | `blake2b-*`, `blake2s-*`                                                                                                        | `@multiformats/blake2`         | [multiformats/js-blake2](https://github.com/multiformats/js-blake2)                                                |\n *\n * ### IPLD codecs (multicodec)\n *\n * | codec      | import                     | repo                                                                                                   |\n * | ---------- | -------------------------- | ------------------------------------------------------------------------------------------------------ |\n * | `raw`      | `multiformats/codecs/raw`  | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `json`     | `multiformats/codecs/json` | [multiformats/js-multiformats](https://github.com/multiformats/js-multiformats/tree/master/src/codecs) |\n * | `dag-cbor` | `@ipld/dag-cbor`           | [ipld/js-dag-cbor](https://github.com/ipld/js-dag-cbor)                                                |\n * | `dag-json` | `@ipld/dag-json`           | [ipld/js-dag-json](https://github.com/ipld/js-dag-json)                                                |\n * | `dag-pb`   | `@ipld/dag-pb`             | [ipld/js-dag-pb](https://github.com/ipld/js-dag-pb)                                                    |\n * | `dag-jose` | `dag-jose`                 | [ceramicnetwork/js-dag-jose](https://github.com/ceramicnetwork/js-dag-jose)                            |\n */\n\nimport * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\nimport * as varint from './varint.js'\nimport type * as API from './link/interface.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\nexport function format <T extends API.Link<unknown, number, number, API.Version>, Prefix extends string> (link: T, base?: API.MultibaseEncoder<Prefix>): API.ToString<T, Prefix> {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        base as API.MultibaseEncoder<'z'> ?? base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        (base ?? base32.encoder) as API.MultibaseEncoder<Prefix>\n      )\n  }\n}\n\nexport function toJSON <Link extends API.UnknownLink> (link: Link): API.LinkJSON<Link> {\n  return {\n    '/': format(link)\n  }\n}\n\nexport function fromJSON <Link extends API.UnknownLink> (json: API.LinkJSON<Link>): CID<unknown, number, number, API.Version> {\n  return CID.parse(json['/'])\n}\n\nconst cache = new WeakMap<API.UnknownLink, Map<string, string>>()\n\nfunction baseCache (cid: API.UnknownLink): Map<string, string> {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\nexport class CID<Data = unknown, Format extends number = number, Alg extends number = number, Version extends API.Version = API.Version> implements API.Link<Data, Format, Alg, Version> {\n  readonly code: Format\n  readonly version: Version\n  readonly multihash: API.MultihashDigest<Alg>\n  readonly bytes: Uint8Array\n  readonly '/': Uint8Array\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param multihash - (Multi)hash of the of the content.\n   */\n  constructor (version: Version, code: Format, multihash: API.MultihashDigest<Alg>, bytes: Uint8Array) {\n    this.code = code\n    this.version = version\n    this.multihash = multihash\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID (): this {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset (): number {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength (): number {\n    return this.bytes.byteLength\n  }\n\n  toV0 (): CID<Data, API.DAG_PB, API.SHA_256, 0> {\n    switch (this.version) {\n      case 0: {\n        return this as CID<Data, API.DAG_PB, API.SHA_256, 0>\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return (\n          CID.createV0(\n            multihash as API.MultihashDigest<API.SHA_256>\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  toV1 (): CID<Data, Format, Alg, 1> {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return this as CID<Data, Format, Alg, 1>\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  equals (other: unknown): other is CID<Data, Format, Alg, Version> {\n    return CID.equals(this, other)\n  }\n\n  static equals <Data, Format extends number, Alg extends number, Version extends API.Version>(self: API.Link<Data, Format, Alg, Version>, other: unknown): other is CID {\n    const unknown = other as { code?: unknown, version?: unknown, multihash?: unknown }\n    return (\n      unknown != null &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  toString (base?: API.MultibaseEncoder<string>): string {\n    return format(this, base)\n  }\n\n  toJSON (): API.LinkJSON<this> {\n    return { '/': format(this) }\n  }\n\n  link (): this {\n    return this\n  }\n\n  readonly [Symbol.toStringTag] = 'CID';\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] (): string {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   */\n  static asCID <Data, Format extends number, Alg extends number, Version extends API.Version, U>(input: API.Link<Data, Format, Alg, Version> | U): CID<Data, Format, Alg, Version> | null {\n    if (input == null) {\n      return null\n    }\n\n    const value = input as any\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        multihash as API.MultihashDigest<Alg>,\n        bytes ?? encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest = Digest.decode(multihash) as API.MultihashDigest<Alg>\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   * @param version - Version of the CID\n   * @param code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param digest - (Multi)hash of the of the content.\n   */\n  static create <Data, Format extends number, Alg extends number, Version extends API.Version>(version: Version, code: Format, digest: API.MultihashDigest<Alg>): CID<Data, Format, Alg, Version> {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   */\n  static createV0 <T = unknown>(digest: API.MultihashDigest<typeof SHA_256_CODE>): CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0> {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @param code - Content encoding format code.\n   * @param digest - Multihash of the content.\n   */\n  static createV1 <Data, Code extends number, Alg extends number>(code: Code, digest: API.MultihashDigest<Alg>): CID<Data, Code, Alg, 1> {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   */\n  static decode <Data, Code extends number, Alg extends number, Version extends API.Version>(bytes: API.ByteView<API.Link<Data, Code, Alg, Version>>): CID<Data, Code, Alg, Version> {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length !== 0) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   */\n  static decodeFirst <T, C extends number, A extends number, V extends API.Version>(bytes: API.ByteView<API.Link<T, C, A, V>>): [CID<T, C, A, V>, Uint8Array] {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(digest as API.MultihashDigest<API.SHA_256>)\n        : CID.createV1(specs.codec, digest)\n    return [cid as CID<T, C, A, V>, bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   */\n  static inspectBytes <T, C extends number, A extends number, V extends API.Version>(initialBytes: API.ByteView<API.Link<T, C, A, V>>): { version: V, codec: C, multihashCode: A, digestSize: number, multihashSize: number, size: number } {\n    let offset = 0\n    const next = (): number => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = next() as V\n    let codec = DAG_PB_CODE as C\n    if (version as number === 18) {\n      // CIDv0\n      version = 0 as V\n      offset = 0\n    } else {\n      codec = next() as C\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = next() as A // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   */\n  static parse <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version>(source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): CID<Data, Code, Alg, Version> {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\nfunction parseCIDtoBytes <Prefix extends string, Data, Code extends number, Alg extends number, Version extends API.Version> (source: API.ToString<API.Link<Data, Code, Alg, Version>, Prefix>, base?: API.MultibaseDecoder<Prefix>): [Prefix, API.ByteView<API.Link<Data, Code, Alg, Version>>] {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base ?? base58btc\n      return [\n        base58btc.prefix as Prefix,\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base ?? base58btc\n      return [base58btc.prefix as Prefix, decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base ?? base32\n      return [base32.prefix as Prefix, decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [source[0] as Prefix, base.decode(source)]\n    }\n  }\n}\n\nfunction toStringV0 (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<'z'>): string {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nfunction toStringV1 <Prefix extends string> (bytes: Uint8Array, cache: Map<string, string>, base: API.MultibaseEncoder<Prefix>): string {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\nfunction encodeCID (version: API.Version, code: number, multihash: Uint8Array): Uint8Array {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "/* eslint-disable @typescript-eslint/no-unnecessary-type-constraint */\n/* eslint-disable no-use-before-define */\n\nimport type { MultibaseEncoder, MultibaseDecoder, Multibase } from '../bases/interface.js'\nimport type { Phantom, ByteView } from '../block/interface.js'\nimport type { MultihashDigest } from '../hashes/interface.js'\n\nexport type { MultihashDigest, MultibaseEncoder, MultibaseDecoder }\nexport type Version = 0 | 1\n\nexport type DAG_PB = 0x70\nexport type SHA_256 = 0x12\n\n/**\n * Represents an IPLD link to a specific data of type `T`.\n *\n * @template T - Logical type of the data being linked to.\n * @template C - multicodec code corresponding to a codec linked data is encoded with\n * @template A - multicodec code corresponding to the hashing algorithm of the CID\n * @template V - CID version\n */\nexport interface Link<\n  Data extends unknown = unknown,\n  Format extends number = number,\n  Alg extends number = number,\n  V extends Version = 1\n  > extends Phantom<Data> {\n  readonly version: V\n  readonly code: Format\n  readonly multihash: MultihashDigest<Alg>\n\n  readonly byteOffset: number\n  readonly byteLength: number\n  readonly bytes: ByteView<Link<Data, Format, Alg, V>>\n\n  equals(other: unknown): other is Link<Data, Format, Alg, Version>\n\n  toString<Prefix extends string>(base?: MultibaseEncoder<Prefix>): ToString<Link<Data, Format, Alg, Version>, Prefix>\n  link(): Link<Data, Format, Alg, V>\n\n  toV1(): Link<Data, Format, Alg, 1>\n}\n\nexport interface LinkJSON<T extends UnknownLink = UnknownLink> {\n  '/': ToString<T>\n}\n\nexport interface LegacyLink<T extends unknown = unknown> extends Link<T, DAG_PB, SHA_256, 0> {\n}\n\nexport type UnknownLink =\n  | LegacyLink<unknown>\n  | Link<unknown, number, number, Version>\n\nexport type ToString<T, Prefix extends string = string> = Multibase<Prefix> & Phantom<T>\n\nexport type { ByteView }\n", "export * from './bases/interface.js'\nexport * from './hashes/interface.js'\nexport * from './codecs/interface.js'\nexport * from './link/interface.js'\nexport * from './block/interface.js'\n", "// Base encoders / decoders just base encode / decode between binary and\n// textual representation. They are unaware of multibase.\n\n/**\n * Base encoder just encodes bytes into base encoded string.\n */\nexport interface BaseEncoder {\n  /**\n   * Base encodes to a **plain** (and not a multibase) string. Unlike\n   * `encode` no multibase prefix is added.\n   */\n  baseEncode(bytes: Uint8Array): string\n}\n\n/**\n * Base decoder decodes encoded with matching base encoding into bytes.\n */\nexport interface BaseDecoder {\n  /**\n   * Decodes **plain** (and not a multibase) string. Unlike\n   * decode\n   */\n  baseDecode(text: string): Uint8Array\n}\n\n/**\n * Base codec is just dual of encoder and decoder.\n */\nexport interface BaseCodec {\n  encoder: BaseEncoder\n  decoder: BaseDecoder\n}\n\n/**\n * Multibase represents base encoded strings with a prefix first character\n * describing it's encoding.\n */\nexport type Multibase<Prefix extends string> =\n  | string\n  | string & { [0]: Prefix }\n\n/**\n * Multibase encoder for the specific base encoding encodes bytes into\n * multibase of that encoding.\n */\nexport interface MultibaseEncoder<Prefix extends string> {\n  /**\n   * Name of the encoding.\n   */\n  name: string\n  /**\n   * Prefix character for that base encoding.\n   */\n  prefix: Prefix\n  /**\n   * Encodes binary data into **multibase** string (which will have a\n   * prefix added).\n   */\n  encode(bytes: Uint8Array): Multibase<Prefix>\n}\n\n/**\n * Interface implemented by multibase decoder, that takes multibase strings\n * to bytes. It may support single encoding like base32 or multiple encodings\n * like base32, base58btc, base64. If passed multibase is incompatible it will\n * throw an exception.\n */\nexport interface MultibaseDecoder<Prefix extends string> {\n  /**\n   * Decodes **multibase** string (which must have a multibase prefix added).\n   * If prefix does not match\n   */\n  decode(multibase: Multibase<Prefix>): Uint8Array\n}\n\n/**\n * Dual of multibase encoder and decoder.\n */\nexport interface MultibaseCodec<Prefix extends string> {\n  name: string\n  prefix: Prefix\n  encoder: MultibaseEncoder<Prefix>\n  decoder: MultibaseDecoder<Prefix>\n}\n\nexport interface UnibaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  // Reserve this property so it can be used to derive type.\n  readonly decoders?: null\n\n  readonly prefix: Prefix\n}\n\nexport interface CombobaseDecoder<Prefix extends string> extends MultibaseDecoder<Prefix> {\n  readonly decoders: Record<Prefix, UnibaseDecoder<Prefix>>\n}\n", "// # Multihash\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n */\n// Note: In the current version there is no first class multihash\n// representation (plain Uint8Array is used instead) instead there seems to be\n// a bunch of places that parse it to extract (code, digest, size). By creating\n// this first class representation we avoid reparsing and things generally fit\n// really nicely.\nexport interface MultihashDigest<Code extends number = number> {\n  /**\n   * Code of the multihash\n   */\n  code: Code\n\n  /**\n   * Raw digest (without a hashing algorithm info)\n   */\n  digest: Uint8Array\n\n  /**\n   * byte length of the `this.digest`\n   */\n  size: number\n\n  /**\n   * Binary representation of this multihash digest.\n   */\n  bytes: Uint8Array\n}\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n */\nexport interface MultihashHasher<Code extends number = number> {\n  /**\n   * Takes binary `input` and returns it (multi) hash digest. Return value is\n   * either promise of a digest or a digest. This way general use can `await`\n   * while performance critical code may asses return value to decide whether\n   * await is needed.\n   */\n  digest(input: Uint8Array): Promise<MultihashDigest<Code>> | MultihashDigest<Code>\n\n  /**\n   * Name of the multihash\n   */\n  name: string\n\n  /**\n   * Code of the multihash\n   */\n  code: Code\n}\n\n/**\n * Sync variant of `MultihashHasher` that refines return type of the `digest`\n * to `MultihashDigest`. It is subtype of `MultihashHasher` so implementations\n * of this interface can be passed anywhere `MultihashHasher` is expected,\n * allowing consumer to either `await` or check the return type to decide\n * whether to await or proceed with return value.\n *\n * `SyncMultihashHasher` is useful in certain APIs where async hashing would be\n * impractical e.g. implementation of Hash Array Mapped Trie (HAMT).\n */\nexport interface SyncMultihashHasher<Code extends number = number> extends MultihashHasher<Code> {\n  digest(input: Uint8Array): MultihashDigest<Code>\n}\n", "export {};\n//# sourceMappingURL=interface.js.map", "export {};\n//# sourceMappingURL=interface.js.map", "import bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Turns a `Uint8Array` into a string.\n *\n * Supports `utf8`, `utf-8` and any encoding supported by the multibase module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function toString (array: Uint8Array, encoding: SupportedEncodings = 'utf8'): string {\n  const base = bases[encoding]\n\n  if (base == null) {\n    throw new Error(`Unsupported encoding \"${encoding}\"`)\n  }\n\n  // strip multibase prefix\n  return base.encoder.encode(array).substring(1)\n}\n", "import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';\n\nimport { p256, secp256r1 } from '@noble/curves/p256';\n\nimport { Encoder } from './encoder.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { fromString, toString } from 'uint8arrays';\n\nconst u8a = { toString, fromString };\n\n/**\n * Class containing SECP256R1 related utility methods.\n */\nexport class Secp256r1 {\n  /**\n   * Validates the given JWK is a SECP256R1 key.\n   * @throws {Error} if fails validation.\n   */\n  public static validateKey(jwk: PrivateJwk | PublicJwk): void {\n    if (jwk.kty !== 'EC' || jwk.crv !== 'P-256') {\n      throw new DwnError(\n        DwnErrorCode.Secp256r1KeyNotValid,\n        'Invalid SECP256R1 JWK: `kty` MUST be `EC`. `crv` MUST be `P-256`'\n      );\n    }\n  }\n\n  /**\n   * Converts a public key in bytes into a JWK.\n   */\n  public static async publicKeyToJwk(\n    publicKeyBytes: Uint8Array\n  ): Promise<PublicJwk> {\n    // ensure public key is in uncompressed format so we can convert it into both x and y value\n    let uncompressedPublicKeyBytes;\n    if (publicKeyBytes.byteLength === 33) {\n      // this means given key is compressed\n      const curvePoints = p256.ProjectivePoint.fromHex(publicKeyBytes);\n      uncompressedPublicKeyBytes = curvePoints.toRawBytes(false); // isCompressed = false\n    } else {\n      uncompressedPublicKeyBytes = publicKeyBytes;\n    }\n\n    // the first byte is a header that indicates whether the key is uncompressed (0x04 if uncompressed), we can safely ignore\n    // bytes 1 - 32 represent X\n    // bytes 33 - 64 represent Y\n\n    // skip the first byte because it's used as a header to indicate whether the key is uncompressed\n    const x = Encoder.bytesToBase64Url(\n      uncompressedPublicKeyBytes.subarray(1, 33)\n    );\n    const y = Encoder.bytesToBase64Url(\n      uncompressedPublicKeyBytes.subarray(33, 65)\n    );\n\n    const publicJwk: PublicJwk = {\n      alg : 'ES256',\n      kty : 'EC',\n      crv : 'P-256',\n      x,\n      y,\n    };\n\n    return publicJwk;\n  }\n\n  /**\n   * Creates a private key in raw bytes from the given SECP256R1 JWK.\n   */\n  public static privateJwkToBytes(privateJwk: PrivateJwk): Uint8Array {\n    const privateKey = Encoder.base64UrlToBytes(privateJwk.d);\n    return privateKey;\n  }\n\n  /**\n   * Signs the provided content using the provided JWK.\n   * Signature that is outputted is JWS format, not DER.\n   */\n  public static async sign(\n    content: Uint8Array,\n    privateJwk: PrivateJwk\n  ): Promise<Uint8Array> {\n    Secp256r1.validateKey(privateJwk);\n\n    const hashedContent = await sha256.encode(content);\n    const privateKeyBytes = Secp256r1.privateJwkToBytes(privateJwk);\n\n    return Promise.resolve(\n      p256.sign(hashedContent, privateKeyBytes).toCompactRawBytes()\n    );\n  }\n\n  /**\n   * Verifies a signature against the provided payload hash and public key.\n   * @param signature - the signature to verify. Can be in either DER or compact format. If using Oracle Cloud KMS, keys will be DER formatted.\n   * @returns a boolean indicating whether the signature is valid.\n   */\n  public static async verify(\n    content: Uint8Array,\n    signature: Uint8Array,\n    publicJwk: PublicJwk\n  ): Promise<boolean> {\n    Secp256r1.validateKey(publicJwk);\n\n    // handle DER vs compact signature formats\n    let sig;\n    if (signature.length === 64) {\n      sig = p256.Signature.fromCompact(signature);\n    } else {\n      sig = p256.Signature.fromDER(signature);\n    }\n    const hashedContent = await sha256.encode(content);\n    const keyBytes = p256.ProjectivePoint.fromAffine({\n      x : Secp256r1.bytesToBigInt(Encoder.base64UrlToBytes(publicJwk.x)),\n      y : Secp256r1.bytesToBigInt(Encoder.base64UrlToBytes(publicJwk.y!)),\n    }).toRawBytes(false);\n\n    return p256.verify(sig, hashedContent, keyBytes);\n  }\n\n  /**\n   * Generates a random key pair in JWK format.\n   */\n  public static async generateKeyPair(): Promise<{\n    publicJwk: PublicJwk;\n    privateJwk: PrivateJwk;\n  }> {\n    const privateKeyBytes = p256.utils.randomPrivateKey();\n    const publicKeyBytes = secp256r1.getPublicKey(privateKeyBytes, false); // `false` = uncompressed\n\n    const d = Encoder.bytesToBase64Url(privateKeyBytes);\n    const publicJwk: PublicJwk = await Secp256r1.publicKeyToJwk(publicKeyBytes);\n    const privateJwk: PrivateJwk = { ...publicJwk, d };\n\n    return { publicJwk, privateJwk };\n  }\n\n  public static bytesToBigInt(b: Uint8Array): bigint {\n    return BigInt(`0x` + u8a.toString(b, 'base16'));\n  }\n}\n", "import type { PrivateJwk } from '../types/jose-types.js';\nimport type { Signer } from '../types/signer.js';\n\nimport { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * Input to `PrivateKeySigner` constructor.\n */\nexport type PrivateKeySignerOptions = {\n  /**\n   * Private JWK to create the signer from.\n   */\n  privateJwk: PrivateJwk;\n\n  /**\n   * If not specified, the constructor will attempt to default/fall back to the `kid` value in the given `privateJwk`.\n   */\n  keyId?: string;\n\n  /**\n   * If not specified, the constructor will attempt to default/fall back to the `alg` value in the given `privateJwk`.\n   */\n  algorithm?: string;\n};\n\n/**\n * A signer that signs using a private key.\n */\nexport class PrivateKeySigner implements Signer {\n  public keyId;\n  public algorithm;\n  private privateJwk: PrivateJwk;\n  private signatureAlgorithm;\n\n  public constructor(options: PrivateKeySignerOptions) {\n    if (options.keyId === undefined && options.privateJwk.kid === undefined) {\n      throw new DwnError(\n        DwnErrorCode.PrivateKeySignerUnableToDeduceKeyId,\n        `Unable to deduce the key ID`\n      );\n    }\n\n    // NOTE: `alg` is optional for a JWK as specified in https://datatracker.ietf.org/doc/html/rfc7517#section-4.4\n    if (options.algorithm === undefined && options.privateJwk.alg === undefined) {\n      throw new DwnError(\n        DwnErrorCode.PrivateKeySignerUnableToDeduceAlgorithm,\n        `Unable to deduce the signature algorithm`\n      );\n    }\n\n    this.keyId = options.keyId ?? options.privateJwk.kid!;\n    this.algorithm = options.algorithm ?? options.privateJwk.alg!;\n    this.privateJwk = options.privateJwk;\n    this.signatureAlgorithm = signatureAlgorithms[options.privateJwk.crv];\n\n    if (!this.signatureAlgorithm) {\n      throw new DwnError(\n        DwnErrorCode.PrivateKeySignerUnsupportedCurve,\n        `Unsupported crv ${options.privateJwk.crv}, crv must be one of ${Object.keys(signatureAlgorithms)}`\n      );\n    }\n  }\n\n  /**\n   * Signs the given content and returns the signature as bytes.\n   */\n  public async sign (content: Uint8Array): Promise<Uint8Array> {\n    const signatureBytes = await this.signatureAlgorithm.sign(content, this.privateJwk);\n    return signatureBytes;\n  }\n}\n", "/**\n * @module LRUCache\n */\n\n// module-private names and types\ntype Perf = { now: () => number }\nconst perf: Perf =\n  typeof performance === 'object' &&\n  performance &&\n  typeof performance.now === 'function'\n    ? performance\n    : Date\n\nconst warned = new Set<string>()\n\n// either a function or a class\ntype ForC = ((...a: any[]) => any) | { new (...a: any[]): any }\n\n/* c8 ignore start */\nconst PROCESS = (\n  typeof process === 'object' && !!process ? process : {}\n) as { [k: string]: any }\n/* c8 ignore start */\n\nconst emitWarning = (\n  msg: string,\n  type: string,\n  code: string,\n  fn: ForC\n) => {\n  typeof PROCESS.emitWarning === 'function'\n    ? PROCESS.emitWarning(msg, type, code, fn)\n    : console.error(`[${code}] ${type}: ${msg}`)\n}\n\nlet AC = globalThis.AbortController\nlet AS = globalThis.AbortSignal\n\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n  //@ts-ignore\n  AS = class AbortSignal {\n    onabort?: (...a: any[]) => any\n    _onabort: ((...a: any[]) => any)[] = []\n    reason?: any\n    aborted: boolean = false\n    addEventListener(_: string, fn: (...a: any[]) => any) {\n      this._onabort.push(fn)\n    }\n  }\n  //@ts-ignore\n  AC = class AbortController {\n    constructor() {\n      warnACPolyfill()\n    }\n    signal = new AS()\n    abort(reason: any) {\n      if (this.signal.aborted) return\n      //@ts-ignore\n      this.signal.reason = reason\n      //@ts-ignore\n      this.signal.aborted = true\n      //@ts-ignore\n      for (const fn of this.signal._onabort) {\n        fn(reason)\n      }\n      this.signal.onabort?.(reason)\n    }\n  }\n  let printACPolyfillWarning =\n    PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1'\n  const warnACPolyfill = () => {\n    if (!printACPolyfillWarning) return\n    printACPolyfillWarning = false\n    emitWarning(\n      'AbortController is not defined. If using lru-cache in ' +\n        'node 14, load an AbortController polyfill from the ' +\n        '`node-abort-controller` package. A minimal polyfill is ' +\n        'provided for use by LRUCache.fetch(), but it should not be ' +\n        'relied upon in other contexts (eg, passing it to other APIs that ' +\n        'use AbortController/AbortSignal might have undesirable effects). ' +\n        'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.',\n      'NO_ABORT_CONTROLLER',\n      'ENOTSUP',\n      warnACPolyfill\n    )\n  }\n}\n/* c8 ignore stop */\n\nconst shouldWarn = (code: string) => !warned.has(code)\n\nconst TYPE = Symbol('type')\ntype PosInt = number & { [TYPE]: 'Positive Integer' }\ntype Index = number & { [TYPE]: 'LRUCache Index' }\n\nconst isPosInt = (n: any): n is PosInt =>\n  n && n === Math.floor(n) && n > 0 && isFinite(n)\n\ntype UintArray = Uint8Array | Uint16Array | Uint32Array\ntype NumberArray = UintArray | number[]\n\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values.  Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max: number) =>\n  !isPosInt(max)\n    ? null\n    : max <= Math.pow(2, 8)\n    ? Uint8Array\n    : max <= Math.pow(2, 16)\n    ? Uint16Array\n    : max <= Math.pow(2, 32)\n    ? Uint32Array\n    : max <= Number.MAX_SAFE_INTEGER\n    ? ZeroArray\n    : null\n/* c8 ignore stop */\n\nclass ZeroArray extends Array<number> {\n  constructor(size: number) {\n    super(size)\n    this.fill(0)\n  }\n}\n\ntype StackLike = Stack | Index[]\nclass Stack {\n  heap: NumberArray\n  length: number\n  // private constructor\n  static #constructing: boolean = false\n  static create(max: number): StackLike {\n    const HeapCls = getUintArray(max)\n    if (!HeapCls) return []\n    Stack.#constructing = true\n    const s = new Stack(max, HeapCls)\n    Stack.#constructing = false\n    return s\n  }\n  constructor(\n    max: number,\n    HeapCls: { new (n: number): NumberArray }\n  ) {\n    /* c8 ignore start */\n    if (!Stack.#constructing) {\n      throw new TypeError('instantiate Stack using Stack.create(n)')\n    }\n    /* c8 ignore stop */\n    this.heap = new HeapCls(max)\n    this.length = 0\n  }\n  push(n: Index) {\n    this.heap[this.length++] = n\n  }\n  pop(): Index {\n    return this.heap[--this.length] as Index\n  }\n}\n\n/**\n * Promise representing an in-progress {@link LRUCache#fetch} call\n */\nexport type BackgroundFetch<V> = Promise<V | undefined | void> & {\n  __returned: BackgroundFetch<V> | undefined\n  __abortController: AbortController\n  __staleWhileFetching: V | undefined\n}\n\ntype DisposeTask<K, V> = [\n  value: V,\n  key: K,\n  reason: LRUCache.DisposeReason\n]\n\nexport namespace LRUCache {\n  /**\n   * An integer greater than 0, reflecting the calculated size of items\n   */\n  export type Size = number\n\n  /**\n   * Integer greater than 0, representing some number of milliseconds, or the\n   * time at which a TTL started counting from.\n   */\n  export type Milliseconds = number\n\n  /**\n   * An integer greater than 0, reflecting a number of items\n   */\n  export type Count = number\n\n  /**\n   * The reason why an item was removed from the cache, passed\n   * to the {@link Disposer} methods.\n   */\n  export type DisposeReason = 'evict' | 'set' | 'delete'\n  /**\n   * A method called upon item removal, passed as the\n   * {@link OptionsBase.dispose} and/or\n   * {@link OptionsBase.disposeAfter} options.\n   */\n  export type Disposer<K, V> = (\n    value: V,\n    key: K,\n    reason: DisposeReason\n  ) => void\n\n  /**\n   * A function that returns the effective calculated size\n   * of an entry in the cache.\n   */\n  export type SizeCalculator<K, V> = (value: V, key: K) => Size\n\n  /**\n   * Options provided to the\n   * {@link OptionsBase.fetchMethod} function.\n   */\n  export interface FetcherOptions<K, V, FC = unknown> {\n    signal: AbortSignal\n    options: FetcherFetchOptions<K, V, FC>\n    /**\n     * Object provided in the {@link FetchOptions.context} option to\n     * {@link LRUCache#fetch}\n     */\n    context: FC\n  }\n\n  /**\n   * Status object that may be passed to {@link LRUCache#fetch},\n   * {@link LRUCache#get}, {@link LRUCache#set}, and {@link LRUCache#has}.\n   */\n  export interface Status<V> {\n    /**\n     * The status of a set() operation.\n     *\n     * - add: the item was not found in the cache, and was added\n     * - update: the item was in the cache, with the same value provided\n     * - replace: the item was in the cache, and replaced\n     * - miss: the item was not added to the cache for some reason\n     */\n    set?: 'add' | 'update' | 'replace' | 'miss'\n\n    /**\n     * the ttl stored for the item, or undefined if ttls are not used.\n     */\n    ttl?: Milliseconds\n\n    /**\n     * the start time for the item, or undefined if ttls are not used.\n     */\n    start?: Milliseconds\n\n    /**\n     * The timestamp used for TTL calculation\n     */\n    now?: Milliseconds\n\n    /**\n     * the remaining ttl for the item, or undefined if ttls are not used.\n     */\n    remainingTTL?: Milliseconds\n\n    /**\n     * The calculated size for the item, if sizes are used.\n     */\n    entrySize?: Size\n\n    /**\n     * The total calculated size of the cache, if sizes are used.\n     */\n    totalCalculatedSize?: Size\n\n    /**\n     * A flag indicating that the item was not stored, due to exceeding the\n     * {@link OptionsBase.maxEntrySize}\n     */\n    maxEntrySizeExceeded?: true\n\n    /**\n     * The old value, specified in the case of `set:'update'` or\n     * `set:'replace'`\n     */\n    oldValue?: V\n\n    /**\n     * The results of a {@link LRUCache#has} operation\n     *\n     * - hit: the item was found in the cache\n     * - stale: the item was found in the cache, but is stale\n     * - miss: the item was not found in the cache\n     */\n    has?: 'hit' | 'stale' | 'miss'\n\n    /**\n     * The status of a {@link LRUCache#fetch} operation.\n     * Note that this can change as the underlying fetch() moves through\n     * various states.\n     *\n     * - inflight: there is another fetch() for this key which is in process\n     * - get: there is no fetchMethod, so {@link LRUCache#get} was called.\n     * - miss: the item is not in cache, and will be fetched.\n     * - hit: the item is in the cache, and was resolved immediately.\n     * - stale: the item is in the cache, but stale.\n     * - refresh: the item is in the cache, and not stale, but\n     *   {@link FetchOptions.forceRefresh} was specified.\n     */\n    fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh'\n\n    /**\n     * The {@link OptionsBase.fetchMethod} was called\n     */\n    fetchDispatched?: true\n\n    /**\n     * The cached value was updated after a successful call to\n     * {@link OptionsBase.fetchMethod}\n     */\n    fetchUpdated?: true\n\n    /**\n     * The reason for a fetch() rejection.  Either the error raised by the\n     * {@link OptionsBase.fetchMethod}, or the reason for an\n     * AbortSignal.\n     */\n    fetchError?: Error\n\n    /**\n     * The fetch received an abort signal\n     */\n    fetchAborted?: true\n\n    /**\n     * The abort signal received was ignored, and the fetch was allowed to\n     * continue.\n     */\n    fetchAbortIgnored?: true\n\n    /**\n     * The fetchMethod promise resolved successfully\n     */\n    fetchResolved?: true\n\n    /**\n     * The fetchMethod promise was rejected\n     */\n    fetchRejected?: true\n\n    /**\n     * The status of a {@link LRUCache#get} operation.\n     *\n     * - fetching: The item is currently being fetched.  If a previous value\n     *   is present and allowed, that will be returned.\n     * - stale: The item is in the cache, and is stale.\n     * - hit: the item is in the cache\n     * - miss: the item is not in the cache\n     */\n    get?: 'stale' | 'hit' | 'miss'\n\n    /**\n     * A fetch or get operation returned a stale value.\n     */\n    returnedStale?: true\n  }\n\n  /**\n   * options which override the options set in the LRUCache constructor\n   * when calling {@link LRUCache#fetch}.\n   *\n   * This is the union of {@link GetOptions} and {@link SetOptions}, plus\n   * {@link OptionsBase.noDeleteOnFetchRejection},\n   * {@link OptionsBase.allowStaleOnFetchRejection},\n   * {@link FetchOptions.forceRefresh}, and\n   * {@link OptionsBase.context}\n   *\n   * Any of these may be modified in the {@link OptionsBase.fetchMethod}\n   * function, but the {@link GetOptions} fields will of course have no\n   * effect, as the {@link LRUCache#get} call already happened by the time\n   * the fetchMethod is called.\n   */\n  export interface FetcherFetchOptions<K, V, FC = unknown>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      | 'allowStale'\n      | 'updateAgeOnGet'\n      | 'noDeleteOnStaleGet'\n      | 'sizeCalculation'\n      | 'ttl'\n      | 'noDisposeOnSet'\n      | 'noUpdateTTL'\n      | 'noDeleteOnFetchRejection'\n      | 'allowStaleOnFetchRejection'\n      | 'ignoreFetchAbort'\n      | 'allowStaleOnFetchAbort'\n    > {\n    status?: Status<V>\n    size?: Size\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#fetch} method.\n   */\n  export interface FetchOptions<K, V, FC>\n    extends FetcherFetchOptions<K, V, FC> {\n    /**\n     * Set to true to force a re-load of the existing data, even if it\n     * is not yet stale.\n     */\n    forceRefresh?: boolean\n    /**\n     * Context provided to the {@link OptionsBase.fetchMethod} as\n     * the {@link FetcherOptions.context} param.\n     *\n     * If the FC type is specified as unknown (the default),\n     * undefined or void, then this is optional.  Otherwise, it will\n     * be required.\n     */\n    context?: FC\n    signal?: AbortSignal\n    status?: Status<V>\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is something\n   * other than `unknown`, `undefined`, or `void`\n   */\n  export interface FetchOptionsWithContext<K, V, FC>\n    extends FetchOptions<K, V, FC> {\n    context: FC\n  }\n  /**\n   * Options provided to {@link LRUCache#fetch} when the FC type is\n   * `undefined` or `void`\n   */\n  export interface FetchOptionsNoContext<K, V>\n    extends FetchOptions<K, V, undefined> {\n    context?: undefined\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#has} method.\n   */\n  export interface HasOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'updateAgeOnHas'> {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#get} method.\n   */\n  export interface GetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'allowStale' | 'updateAgeOnGet' | 'noDeleteOnStaleGet'\n    > {\n    status?: Status<V>\n  }\n\n  /**\n   * Options that may be passed to the {@link LRUCache#peek} method.\n   */\n  export interface PeekOptions<K, V, FC>\n    extends Pick<OptionsBase<K, V, FC>, 'allowStale'> {}\n\n  /**\n   * Options that may be passed to the {@link LRUCache#set} method.\n   */\n  export interface SetOptions<K, V, FC>\n    extends Pick<\n      OptionsBase<K, V, FC>,\n      'sizeCalculation' | 'ttl' | 'noDisposeOnSet' | 'noUpdateTTL'\n    > {\n    /**\n     * If size tracking is enabled, then setting an explicit size\n     * in the {@link LRUCache#set} call will prevent calling the\n     * {@link OptionsBase.sizeCalculation} function.\n     */\n    size?: Size\n    /**\n     * If TTL tracking is enabled, then setting an explicit start\n     * time in the {@link LRUCache#set} call will override the\n     * default time from `performance.now()` or `Date.now()`.\n     *\n     * Note that it must be a valid value for whichever time-tracking\n     * method is in use.\n     */\n    start?: Milliseconds\n    status?: Status<V>\n  }\n\n  /**\n   * The type signature for the {@link OptionsBase.fetchMethod} option.\n   */\n  export type Fetcher<K, V, FC = unknown> = (\n    key: K,\n    staleValue: V | undefined,\n    options: FetcherOptions<K, V, FC>\n  ) => Promise<V | void | undefined> | V | void | undefined\n\n  /**\n   * Options which may be passed to the {@link LRUCache} constructor.\n   *\n   * Most of these may be overridden in the various options that use\n   * them.\n   *\n   * Despite all being technically optional, the constructor requires that\n   * a cache is at minimum limited by one or more of {@link OptionsBase.max},\n   * {@link OptionsBase.ttl}, or {@link OptionsBase.maxSize}.\n   *\n   * If {@link OptionsBase.ttl} is used alone, then it is strongly advised\n   * (and in fact required by the type definitions here) that the cache\n   * also set {@link OptionsBase.ttlAutopurge}, to prevent potentially\n   * unbounded storage.\n   */\n  export interface OptionsBase<K, V, FC> {\n    /**\n     * The maximum number of items to store in the cache before evicting\n     * old entries. This is read-only on the {@link LRUCache} instance,\n     * and may not be overridden.\n     *\n     * If set, then storage space will be pre-allocated at construction\n     * time, and the cache will perform significantly faster.\n     *\n     * Note that significantly fewer items may be stored, if\n     * {@link OptionsBase.maxSize} and/or {@link OptionsBase.ttl} are also\n     * set.\n     */\n    max?: Count\n\n    /**\n     * Max time in milliseconds for items to live in cache before they are\n     * considered stale.  Note that stale items are NOT preemptively removed\n     * by default, and MAY live in the cache long after they have expired.\n     *\n     * Also, as this cache is optimized for LRU/MRU operations, some of\n     * the staleness/TTL checks will reduce performance, as they will incur\n     * overhead by deleting items.\n     *\n     * Must be an integer number of ms. If set to 0, this indicates \"no TTL\"\n     *\n     * @default 0\n     */\n    ttl?: Milliseconds\n\n    /**\n     * Minimum amount of time in ms in which to check for staleness.\n     * Defaults to 1, which means that the current time is checked\n     * at most once per millisecond.\n     *\n     * Set to 0 to check the current time every time staleness is tested.\n     * (This reduces performance, and is theoretically unnecessary.)\n     *\n     * Setting this to a higher value will improve performance somewhat\n     * while using ttl tracking, albeit at the expense of keeping stale\n     * items around a bit longer than their TTLs would indicate.\n     *\n     * @default 1\n     */\n    ttlResolution?: Milliseconds\n\n    /**\n     * Preemptively remove stale items from the cache.\n     * Note that this may significantly degrade performance,\n     * especially if the cache is storing a large number of items.\n     * It is almost always best to just leave the stale items in\n     * the cache, and let them fall out as new items are added.\n     *\n     * Note that this means that {@link OptionsBase.allowStale} is a bit\n     * pointless, as stale items will be deleted almost as soon as they\n     * expire.\n     *\n     * @default false\n     */\n    ttlAutopurge?: boolean\n\n    /**\n     * Update the age of items on {@link LRUCache#get}, renewing their TTL\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * @default false\n     */\n    updateAgeOnGet?: boolean\n\n    /**\n     * Update the age of items on {@link LRUCache#has}, renewing their TTL\n     *\n     * Has no effect if {@link OptionsBase.ttl} is not set.\n     *\n     * @default false\n     */\n    updateAgeOnHas?: boolean\n\n    /**\n     * Allow {@link LRUCache#get} and {@link LRUCache#fetch} calls to return\n     * stale data, if available.\n     */\n    allowStale?: boolean\n\n    /**\n     * Function that is called on items when they are dropped from the cache.\n     * This can be handy if you want to close file descriptors or do other\n     * cleanup tasks when items are no longer accessible. Called with `key,\n     * value`.  It's called before actually removing the item from the\n     * internal cache, so it is *NOT* safe to re-add them.\n     *\n     * Use {@link OptionsBase.disposeAfter} if you wish to dispose items after\n     * they have been full removed, when it is safe to add them back to the\n     * cache.\n     */\n    dispose?: Disposer<K, V>\n\n    /**\n     * The same as {@link OptionsBase.dispose}, but called *after* the entry\n     * is completely removed and the cache is once again in a clean state.\n     * It is safe to add an item right back into the cache at this point.\n     * However, note that it is *very* easy to inadvertently create infinite\n     * recursion this way.\n     */\n    disposeAfter?: Disposer<K, V>\n\n    /**\n     * Set to true to suppress calling the\n     * {@link OptionsBase.dispose} function if the entry key is\n     * still accessible within the cache.\n     * This may be overridden by passing an options object to\n     * {@link LRUCache#set}.\n     */\n    noDisposeOnSet?: boolean\n\n    /**\n     * Boolean flag to tell the cache to not update the TTL when\n     * setting a new value for an existing key (ie, when updating a value\n     * rather than inserting a new value).  Note that the TTL value is\n     * _always_ set (if provided) when adding a new entry into the cache.\n     *\n     * Has no effect if a {@link OptionsBase.ttl} is not set.\n     */\n    noUpdateTTL?: boolean\n\n    /**\n     * If you wish to track item size, you must provide a maxSize\n     * note that we still will only keep up to max *actual items*,\n     * if max is set, so size tracking may cause fewer than max items\n     * to be stored.  At the extreme, a single item of maxSize size\n     * will cause everything else in the cache to be dropped when it\n     * is added.  Use with caution!\n     *\n     * Note also that size tracking can negatively impact performance,\n     * though for most cases, only minimally.\n     */\n    maxSize?: Size\n\n    /**\n     * The maximum allowed size for any single item in the cache.\n     *\n     * If a larger item is passed to {@link LRUCache#set} or returned by a\n     * {@link OptionsBase.fetchMethod}, then it will not be stored in the\n     * cache.\n     */\n    maxEntrySize?: Size\n\n    /**\n     * A function that returns a number indicating the item's size.\n     *\n     * If not provided, and {@link OptionsBase.maxSize} or\n     * {@link OptionsBase.maxEntrySize} are set, then all\n     * {@link LRUCache#set} calls **must** provide an explicit\n     * {@link SetOptions.size} or sizeCalculation param.\n     */\n    sizeCalculation?: SizeCalculator<K, V>\n\n    /**\n     * Method that provides the implementation for {@link LRUCache#fetch}\n     */\n    fetchMethod?: Fetcher<K, V, FC>\n\n    /**\n     * Set to true to suppress the deletion of stale data when a\n     * {@link OptionsBase.fetchMethod} returns a rejected promise.\n     */\n    noDeleteOnFetchRejection?: boolean\n\n    /**\n     * Do not delete stale items when they are retrieved with\n     * {@link LRUCache#get}.\n     *\n     * Note that the `get` return value will still be `undefined`\n     * unless {@link OptionsBase.allowStale} is true.\n     */\n    noDeleteOnStaleGet?: boolean\n\n    /**\n     * Set to true to allow returning stale data when a\n     * {@link OptionsBase.fetchMethod} throws an error or returns a rejected\n     * promise.\n     *\n     * This differs from using {@link OptionsBase.allowStale} in that stale\n     * data will ONLY be returned in the case that the\n     * {@link LRUCache#fetch} fails, not any other times.\n     */\n    allowStaleOnFetchRejection?: boolean\n\n    /**\n     * Set to true to return a stale value from the cache when the\n     * `AbortSignal` passed to the {@link OptionsBase.fetchMethod} dispatches an `'abort'`\n     * event, whether user-triggered, or due to internal cache behavior.\n     *\n     * Unless {@link OptionsBase.ignoreFetchAbort} is also set, the underlying\n     * {@link OptionsBase.fetchMethod} will still be considered canceled, and\n     * any value it returns will be ignored and not cached.\n     *\n     * Caveat: since fetches are aborted when a new value is explicitly\n     * set in the cache, this can lead to fetch returning a stale value,\n     * since that was the fallback value _at the moment the `fetch()` was\n     * initiated_, even though the new updated value is now present in\n     * the cache.\n     *\n     * For example:\n     *\n     * ```ts\n     * const cache = new LRUCache<string, any>({\n     *   ttl: 100,\n     *   fetchMethod: async (url, oldValue, { signal }) =>  {\n     *     const res = await fetch(url, { signal })\n     *     return await res.json()\n     *   }\n     * })\n     * cache.set('https://example.com/', { some: 'data' })\n     * // 100ms go by...\n     * const result = cache.fetch('https://example.com/')\n     * cache.set('https://example.com/', { other: 'thing' })\n     * console.log(await result) // { some: 'data' }\n     * console.log(cache.get('https://example.com/')) // { other: 'thing' }\n     * ```\n     */\n    allowStaleOnFetchAbort?: boolean\n\n    /**\n     * Set to true to ignore the `abort` event emitted by the `AbortSignal`\n     * object passed to {@link OptionsBase.fetchMethod}, and still cache the\n     * resulting resolution value, as long as it is not `undefined`.\n     *\n     * When used on its own, this means aborted {@link LRUCache#fetch} calls are not\n     * immediately resolved or rejected when they are aborted, and instead\n     * take the full time to await.\n     *\n     * When used with {@link OptionsBase.allowStaleOnFetchAbort}, aborted\n     * {@link LRUCache#fetch} calls will resolve immediately to their stale\n     * cached value or `undefined`, and will continue to process and eventually\n     * update the cache when they resolve, as long as the resulting value is\n     * not `undefined`, thus supporting a \"return stale on timeout while\n     * refreshing\" mechanism by passing `AbortSignal.timeout(n)` as the signal.\n     *\n     * **Note**: regardless of this setting, an `abort` event _is still\n     * emitted on the `AbortSignal` object_, so may result in invalid results\n     * when passed to other underlying APIs that use AbortSignals.\n     *\n     * This may be overridden in the {@link OptionsBase.fetchMethod} or the\n     * call to {@link LRUCache#fetch}.\n     */\n    ignoreFetchAbort?: boolean\n  }\n\n  export interface OptionsMaxLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    max: Count\n  }\n  export interface OptionsTTLLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    ttl: Milliseconds\n    ttlAutopurge: boolean\n  }\n  export interface OptionsSizeLimit<K, V, FC>\n    extends OptionsBase<K, V, FC> {\n    maxSize: Size\n  }\n\n  /**\n   * The valid safe options for the {@link LRUCache} constructor\n   */\n  export type Options<K, V, FC> =\n    | OptionsMaxLimit<K, V, FC>\n    | OptionsSizeLimit<K, V, FC>\n    | OptionsTTLLimit<K, V, FC>\n\n  /**\n   * Entry objects used by {@link LRUCache#load} and {@link LRUCache#dump}\n   */\n  export interface Entry<V> {\n    value: V\n    ttl?: Milliseconds\n    size?: Size\n    start?: Milliseconds\n  }\n}\n\n/**\n * Default export, the thing you're using this module to get.\n *\n * All properties from the options object (with the exception of\n * {@link OptionsBase.max} and {@link OptionsBase.maxSize}) are added as\n * normal public members. (`max` and `maxBase` are read-only getters.)\n * Changing any of these will alter the defaults for subsequent method calls,\n * but is otherwise safe.\n */\nexport class LRUCache<K extends {}, V extends {}, FC = unknown> {\n  // properties coming in from the options of these, only max and maxSize\n  // really *need* to be protected. The rest can be modified, as they just\n  // set defaults for various methods.\n  readonly #max: LRUCache.Count\n  readonly #maxSize: LRUCache.Size\n  readonly #dispose?: LRUCache.Disposer<K, V>\n  readonly #disposeAfter?: LRUCache.Disposer<K, V>\n  readonly #fetchMethod?: LRUCache.Fetcher<K, V, FC>\n\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl: LRUCache.Milliseconds\n\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution: LRUCache.Milliseconds\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale: boolean\n\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL: boolean\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize: LRUCache.Size\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort: boolean\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection: boolean\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort: boolean\n\n  // computed properties\n  #size: LRUCache.Count\n  #calculatedSize: LRUCache.Size\n  #keyMap: Map<K, Index>\n  #keyList: (K | undefined)[]\n  #valList: (V | BackgroundFetch<V> | undefined)[]\n  #next: NumberArray\n  #prev: NumberArray\n  #head: Index\n  #tail: Index\n  #free: StackLike\n  #disposed?: DisposeTask<K, V>[]\n  #sizes?: ZeroArray\n  #starts?: ZeroArray\n  #ttls?: ZeroArray\n\n  #hasDispose: boolean\n  #hasFetchMethod: boolean\n  #hasDisposeAfter: boolean\n\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals<\n    K extends {},\n    V extends {},\n    FC extends unknown = unknown\n  >(c: LRUCache<K, V, FC>) {\n    return {\n      // properties\n      starts: c.#starts,\n      ttls: c.#ttls,\n      sizes: c.#sizes,\n      keyMap: c.#keyMap as Map<K, number>,\n      keyList: c.#keyList,\n      valList: c.#valList,\n      next: c.#next,\n      prev: c.#prev,\n      get head() {\n        return c.#head\n      },\n      get tail() {\n        return c.#tail\n      },\n      free: c.#free,\n      // methods\n      isBackgroundFetch: (p: any) => c.#isBackgroundFetch(p),\n      backgroundFetch: (\n        k: K,\n        index: number | undefined,\n        options: LRUCache.FetchOptions<K, V, FC>,\n        context: any\n      ): BackgroundFetch<V> =>\n        c.#backgroundFetch(\n          k,\n          index as Index | undefined,\n          options,\n          context\n        ),\n      moveToTail: (index: number): void =>\n        c.#moveToTail(index as Index),\n      indexes: (options?: { allowStale: boolean }) =>\n        c.#indexes(options),\n      rindexes: (options?: { allowStale: boolean }) =>\n        c.#rindexes(options),\n      isStale: (index: number | undefined) =>\n        c.#isStale(index as Index),\n    }\n  }\n\n  // Protected read-only members\n\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max(): LRUCache.Count {\n    return this.#max\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize(): LRUCache.Count {\n    return this.#maxSize\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize(): LRUCache.Size {\n    return this.#calculatedSize\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size(): LRUCache.Count {\n    return this.#size\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod(): LRUCache.Fetcher<K, V, FC> | undefined {\n    return this.#fetchMethod\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#dispose\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#disposeAfter\n  }\n\n  constructor(\n    options: LRUCache.Options<K, V, FC> | LRUCache<K, V, FC>\n  ) {\n    const {\n      max = 0,\n      ttl,\n      ttlResolution = 1,\n      ttlAutopurge,\n      updateAgeOnGet,\n      updateAgeOnHas,\n      allowStale,\n      dispose,\n      disposeAfter,\n      noDisposeOnSet,\n      noUpdateTTL,\n      maxSize = 0,\n      maxEntrySize = 0,\n      sizeCalculation,\n      fetchMethod,\n      noDeleteOnFetchRejection,\n      noDeleteOnStaleGet,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n    } = options\n\n    if (max !== 0 && !isPosInt(max)) {\n      throw new TypeError('max option must be a nonnegative integer')\n    }\n\n    const UintArray = max ? getUintArray(max) : Array\n    if (!UintArray) {\n      throw new Error('invalid max value: ' + max)\n    }\n\n    this.#max = max\n    this.#maxSize = maxSize\n    this.maxEntrySize = maxEntrySize || this.#maxSize\n    this.sizeCalculation = sizeCalculation\n    if (this.sizeCalculation) {\n      if (!this.#maxSize && !this.maxEntrySize) {\n        throw new TypeError(\n          'cannot set sizeCalculation without setting maxSize or maxEntrySize'\n        )\n      }\n      if (typeof this.sizeCalculation !== 'function') {\n        throw new TypeError('sizeCalculation set to non-function')\n      }\n    }\n\n    if (\n      fetchMethod !== undefined &&\n      typeof fetchMethod !== 'function'\n    ) {\n      throw new TypeError(\n        'fetchMethod must be a function if specified'\n      )\n    }\n    this.#fetchMethod = fetchMethod\n    this.#hasFetchMethod = !!fetchMethod\n\n    this.#keyMap = new Map()\n    this.#keyList = new Array(max).fill(undefined)\n    this.#valList = new Array(max).fill(undefined)\n    this.#next = new UintArray(max)\n    this.#prev = new UintArray(max)\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free = Stack.create(max)\n    this.#size = 0\n    this.#calculatedSize = 0\n\n    if (typeof dispose === 'function') {\n      this.#dispose = dispose\n    }\n    if (typeof disposeAfter === 'function') {\n      this.#disposeAfter = disposeAfter\n      this.#disposed = []\n    } else {\n      this.#disposeAfter = undefined\n      this.#disposed = undefined\n    }\n    this.#hasDispose = !!this.#dispose\n    this.#hasDisposeAfter = !!this.#disposeAfter\n\n    this.noDisposeOnSet = !!noDisposeOnSet\n    this.noUpdateTTL = !!noUpdateTTL\n    this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection\n    this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection\n    this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort\n    this.ignoreFetchAbort = !!ignoreFetchAbort\n\n    // NB: maxEntrySize is set to maxSize if it's set\n    if (this.maxEntrySize !== 0) {\n      if (this.#maxSize !== 0) {\n        if (!isPosInt(this.#maxSize)) {\n          throw new TypeError(\n            'maxSize must be a positive integer if specified'\n          )\n        }\n      }\n      if (!isPosInt(this.maxEntrySize)) {\n        throw new TypeError(\n          'maxEntrySize must be a positive integer if specified'\n        )\n      }\n      this.#initializeSizeTracking()\n    }\n\n    this.allowStale = !!allowStale\n    this.noDeleteOnStaleGet = !!noDeleteOnStaleGet\n    this.updateAgeOnGet = !!updateAgeOnGet\n    this.updateAgeOnHas = !!updateAgeOnHas\n    this.ttlResolution =\n      isPosInt(ttlResolution) || ttlResolution === 0\n        ? ttlResolution\n        : 1\n    this.ttlAutopurge = !!ttlAutopurge\n    this.ttl = ttl || 0\n    if (this.ttl) {\n      if (!isPosInt(this.ttl)) {\n        throw new TypeError(\n          'ttl must be a positive integer if specified'\n        )\n      }\n      this.#initializeTTLTracking()\n    }\n\n    // do not allow completely unbounded caches\n    if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n      throw new TypeError(\n        'At least one of max, maxSize, or ttl is required'\n      )\n    }\n    if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n      const code = 'LRU_CACHE_UNBOUNDED'\n      if (shouldWarn(code)) {\n        warned.add(code)\n        const msg =\n          'TTL caching without ttlAutopurge, max, or maxSize can ' +\n          'result in unbounded memory consumption.'\n        emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache)\n      }\n    }\n  }\n\n  /**\n   * Return the remaining TTL time for a given entry key\n   */\n  getRemainingTTL(key: K) {\n    return this.#keyMap.has(key) ? Infinity : 0\n  }\n\n  #initializeTTLTracking() {\n    const ttls = new ZeroArray(this.#max)\n    const starts = new ZeroArray(this.#max)\n    this.#ttls = ttls\n    this.#starts = starts\n\n    this.#setItemTTL = (index, ttl, start = perf.now()) => {\n      starts[index] = ttl !== 0 ? start : 0\n      ttls[index] = ttl\n      if (ttl !== 0 && this.ttlAutopurge) {\n        const t = setTimeout(() => {\n          if (this.#isStale(index)) {\n            this.delete(this.#keyList[index] as K)\n          }\n        }, ttl + 1)\n        // unref() not supported on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n    }\n\n    this.#updateItemAge = index => {\n      starts[index] = ttls[index] !== 0 ? perf.now() : 0\n    }\n\n    this.#statusTTL = (status, index) => {\n      if (ttls[index]) {\n        const ttl = ttls[index]\n        const start = starts[index]\n        status.ttl = ttl\n        status.start = start\n        status.now = cachedNow || getNow()\n        const age = status.now - start\n        status.remainingTTL = ttl - age\n      }\n    }\n\n    // debounce calls to perf.now() to 1s so we're not hitting\n    // that costly call repeatedly.\n    let cachedNow = 0\n    const getNow = () => {\n      const n = perf.now()\n      if (this.ttlResolution > 0) {\n        cachedNow = n\n        const t = setTimeout(\n          () => (cachedNow = 0),\n          this.ttlResolution\n        )\n        // not available on all platforms\n        /* c8 ignore start */\n        if (t.unref) {\n          t.unref()\n        }\n        /* c8 ignore stop */\n      }\n      return n\n    }\n\n    this.getRemainingTTL = key => {\n      const index = this.#keyMap.get(key)\n      if (index === undefined) {\n        return 0\n      }\n      const ttl = ttls[index]\n      const start = starts[index]\n      if (ttl === 0 || start === 0) {\n        return Infinity\n      }\n      const age = (cachedNow || getNow()) - start\n      return ttl - age\n    }\n\n    this.#isStale = index => {\n      return (\n        ttls[index] !== 0 &&\n        starts[index] !== 0 &&\n        (cachedNow || getNow()) - starts[index] > ttls[index]\n      )\n    }\n  }\n\n  // conditionally set private methods related to TTL\n  #updateItemAge: (index: Index) => void = () => {}\n  #statusTTL: (status: LRUCache.Status<V>, index: Index) => void =\n    () => {}\n  #setItemTTL: (\n    index: Index,\n    ttl: LRUCache.Milliseconds,\n    start?: LRUCache.Milliseconds\n    // ignore because we never call this if we're not already in TTL mode\n    /* c8 ignore start */\n  ) => void = () => {}\n  /* c8 ignore stop */\n\n  #isStale: (index: Index) => boolean = () => false\n\n  #initializeSizeTracking() {\n    const sizes = new ZeroArray(this.#max)\n    this.#calculatedSize = 0\n    this.#sizes = sizes\n    this.#removeItemSize = index => {\n      this.#calculatedSize -= sizes[index]\n      sizes[index] = 0\n    }\n    this.#requireSize = (k, v, size, sizeCalculation) => {\n      // provisionally accept background fetches.\n      // actual value size will be checked when they return.\n      if (this.#isBackgroundFetch(v)) {\n        return 0\n      }\n      if (!isPosInt(size)) {\n        if (sizeCalculation) {\n          if (typeof sizeCalculation !== 'function') {\n            throw new TypeError('sizeCalculation must be a function')\n          }\n          size = sizeCalculation(v, k)\n          if (!isPosInt(size)) {\n            throw new TypeError(\n              'sizeCalculation return invalid (expect positive integer)'\n            )\n          }\n        } else {\n          throw new TypeError(\n            'invalid size value (must be positive integer). ' +\n              'When maxSize or maxEntrySize is used, sizeCalculation ' +\n              'or size must be set.'\n          )\n        }\n      }\n      return size\n    }\n    this.#addItemSize = (\n      index: Index,\n      size: LRUCache.Size,\n      status?: LRUCache.Status<V>\n    ) => {\n      sizes[index] = size\n      if (this.#maxSize) {\n        const maxSize = this.#maxSize - sizes[index]\n        while (this.#calculatedSize > maxSize) {\n          this.#evict(true)\n        }\n      }\n      this.#calculatedSize += sizes[index]\n      if (status) {\n        status.entrySize = size\n        status.totalCalculatedSize = this.#calculatedSize\n      }\n    }\n  }\n\n  #removeItemSize: (index: Index) => void = _i => {}\n  #addItemSize: (\n    index: Index,\n    size: LRUCache.Size,\n    status?: LRUCache.Status<V>\n  ) => void = (_i, _s, _st) => {}\n  #requireSize: (\n    k: K,\n    v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => LRUCache.Size = (\n    _k: K,\n    _v: V | BackgroundFetch<V>,\n    size?: LRUCache.Size,\n    sizeCalculation?: LRUCache.SizeCalculator<K, V>\n  ) => {\n    if (size || sizeCalculation) {\n      throw new TypeError(\n        'cannot set size without setting maxSize or maxEntrySize on cache'\n      )\n    }\n    return 0\n  };\n\n  *#indexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#tail; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#head) {\n          break\n        } else {\n          i = this.#prev[i] as Index\n        }\n      }\n    }\n  }\n\n  *#rindexes({ allowStale = this.allowStale } = {}) {\n    if (this.#size) {\n      for (let i = this.#head; true; ) {\n        if (!this.#isValidIndex(i)) {\n          break\n        }\n        if (allowStale || !this.#isStale(i)) {\n          yield i\n        }\n        if (i === this.#tail) {\n          break\n        } else {\n          i = this.#next[i] as Index\n        }\n      }\n    }\n  }\n\n  #isValidIndex(index: Index) {\n    return (\n      index !== undefined &&\n      this.#keyMap.get(this.#keyList[index] as K) === index\n    )\n  }\n\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const i of this.#indexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const i of this.#rindexes()) {\n      if (\n        this.#valList[i] !== undefined &&\n        this.#keyList[i] !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield [this.#keyList[i], this.#valList[i]]\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const i of this.#indexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const i of this.#rindexes()) {\n      const k = this.#keyList[i]\n      if (\n        k !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield k\n      }\n    }\n  }\n\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      if (\n        v !== undefined &&\n        !this.#isBackgroundFetch(this.#valList[i])\n      ) {\n        yield this.#valList[i]\n      }\n    }\n  }\n\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries()\n  }\n\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to Array.find().  fn is called as fn(value, key, cache).\n   */\n  find(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => boolean,\n    getOptions: LRUCache.GetOptions<K, V, FC> = {}\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      if (fn(value, this.#keyList[i] as K, this)) {\n        return this.get(this.#keyList[i] as K, getOptions)\n      }\n    }\n  }\n\n  /**\n   * Call the supplied function on each item in the cache, in order from\n   * most recently used to least recently used.  fn is called as\n   * fn(value, key, cache).  Does not update age or recenty of use.\n   * Does not iterate over stale values.\n   */\n  forEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#indexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(\n    fn: (v: V, k: K, self: LRUCache<K, V, FC>) => any,\n    thisp: any = this\n  ) {\n    for (const i of this.#rindexes()) {\n      const v = this.#valList[i]\n      const value = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined) continue\n      fn.call(thisp, value, this.#keyList[i] as K, this)\n    }\n  }\n\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let deleted = false\n    for (const i of this.#rindexes({ allowStale: true })) {\n      if (this.#isStale(i)) {\n        this.delete(this.#keyList[i] as K)\n        deleted = true\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to cache.load()\n   */\n  dump() {\n    const arr: [K, LRUCache.Entry<V>][] = []\n    for (const i of this.#indexes({ allowStale: true })) {\n      const key = this.#keyList[i]\n      const v = this.#valList[i]\n      const value: V | undefined = this.#isBackgroundFetch(v)\n        ? v.__staleWhileFetching\n        : v\n      if (value === undefined || key === undefined) continue\n      const entry: LRUCache.Entry<V> = { value }\n      if (this.#ttls && this.#starts) {\n        entry.ttl = this.#ttls[i]\n        // always dump the start relative to a portable timestamp\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = perf.now() - this.#starts[i]\n        entry.start = Math.floor(Date.now() - age)\n      }\n      if (this.#sizes) {\n        entry.size = this.#sizes[i]\n      }\n      arr.unshift([key, entry])\n    }\n    return arr\n  }\n\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   * Note that the shape of the resulting cache may be different if the\n   * same options are not used in both caches.\n   */\n  load(arr: [K, LRUCache.Entry<V>][]) {\n    this.clear()\n    for (const [key, entry] of arr) {\n      if (entry.start) {\n        // entry.start is a portable timestamp, but we may be using\n        // node's performance.now(), so calculate the offset, so that\n        // we get the intended remaining TTL, no matter how long it's\n        // been on ice.\n        //\n        // it's ok for this to be a bit slow, it's a rare operation.\n        const age = Date.now() - entry.start\n        entry.start = perf.now() - age\n      }\n      this.set(key, entry.value, entry)\n    }\n  }\n\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   */\n  set(\n    k: K,\n    v: V | BackgroundFetch<V> | undefined,\n    setOptions: LRUCache.SetOptions<K, V, FC> = {}\n  ) {\n    if (v === undefined) {\n      this.delete(k)\n      return this\n    }\n    const {\n      ttl = this.ttl,\n      start,\n      noDisposeOnSet = this.noDisposeOnSet,\n      sizeCalculation = this.sizeCalculation,\n      status,\n    } = setOptions\n    let { noUpdateTTL = this.noUpdateTTL } = setOptions\n\n    const size = this.#requireSize(\n      k,\n      v,\n      setOptions.size || 0,\n      sizeCalculation\n    )\n    // if the item doesn't fit, don't do anything\n    // NB: maxEntrySize set to maxSize by default\n    if (this.maxEntrySize && size > this.maxEntrySize) {\n      if (status) {\n        status.set = 'miss'\n        status.maxEntrySizeExceeded = true\n      }\n      // have to delete, in case something is there already.\n      this.delete(k)\n      return this\n    }\n    let index = this.#size === 0 ? undefined : this.#keyMap.get(k)\n    if (index === undefined) {\n      // addition\n      index = (\n        this.#size === 0\n          ? this.#tail\n          : this.#free.length !== 0\n          ? this.#free.pop()\n          : this.#size === this.#max\n          ? this.#evict(false)\n          : this.#size\n      ) as Index\n      this.#keyList[index] = k\n      this.#valList[index] = v\n      this.#keyMap.set(k, index)\n      this.#next[this.#tail] = index\n      this.#prev[index] = this.#tail\n      this.#tail = index\n      this.#size++\n      this.#addItemSize(index, size, status)\n      if (status) status.set = 'add'\n      noUpdateTTL = false\n    } else {\n      // update\n      this.#moveToTail(index)\n      const oldVal = this.#valList[index] as V | BackgroundFetch<V>\n      if (v !== oldVal) {\n        if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n          oldVal.__abortController.abort(new Error('replaced'))\n        } else if (!noDisposeOnSet) {\n          if (this.#hasDispose) {\n            this.#dispose?.(oldVal as V, k, 'set')\n          }\n          if (this.#hasDisposeAfter) {\n            this.#disposed?.push([oldVal as V, k, 'set'])\n          }\n        }\n        this.#removeItemSize(index)\n        this.#addItemSize(index, size, status)\n        this.#valList[index] = v\n        if (status) {\n          status.set = 'replace'\n          const oldValue =\n            oldVal && this.#isBackgroundFetch(oldVal)\n              ? oldVal.__staleWhileFetching\n              : oldVal\n          if (oldValue !== undefined) status.oldValue = oldValue\n        }\n      } else if (status) {\n        status.set = 'update'\n      }\n    }\n    if (ttl !== 0 && !this.#ttls) {\n      this.#initializeTTLTracking()\n    }\n    if (this.#ttls) {\n      if (!noUpdateTTL) {\n        this.#setItemTTL(index, ttl, start)\n      }\n      if (status) this.#statusTTL(status, index)\n    }\n    if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop(): V | undefined {\n    try {\n      while (this.#size) {\n        const val = this.#valList[this.#head]\n        this.#evict(true)\n        if (this.#isBackgroundFetch(val)) {\n          if (val.__staleWhileFetching) {\n            return val.__staleWhileFetching\n          }\n        } else if (val !== undefined) {\n          return val\n        }\n      }\n    } finally {\n      if (this.#hasDisposeAfter && this.#disposed) {\n        const dt = this.#disposed\n        let task: DisposeTask<K, V> | undefined\n        while ((task = dt?.shift())) {\n          this.#disposeAfter?.(...task)\n        }\n      }\n    }\n  }\n\n  #evict(free: boolean) {\n    const head = this.#head\n    const k = this.#keyList[head] as K\n    const v = this.#valList[head] as V\n    if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n      v.__abortController.abort(new Error('evicted'))\n    } else if (this.#hasDispose || this.#hasDisposeAfter) {\n      if (this.#hasDispose) {\n        this.#dispose?.(v, k, 'evict')\n      }\n      if (this.#hasDisposeAfter) {\n        this.#disposed?.push([v, k, 'evict'])\n      }\n    }\n    this.#removeItemSize(head)\n    // if we aren't about to use the index, then null these out\n    if (free) {\n      this.#keyList[head] = undefined\n      this.#valList[head] = undefined\n      this.#free.push(head)\n    }\n    if (this.#size === 1) {\n      this.#head = this.#tail = 0 as Index\n      this.#free.length = 0\n    } else {\n      this.#head = this.#next[head] as Index\n    }\n    this.#keyMap.delete(k)\n    this.#size--\n    return head\n  }\n\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(k: K, hasOptions: LRUCache.HasOptions<K, V, FC> = {}) {\n    const { updateAgeOnHas = this.updateAgeOnHas, status } =\n      hasOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const v = this.#valList[index]\n      if (\n        this.#isBackgroundFetch(v) &&\n        v.__staleWhileFetching === undefined\n      ) {\n        return false\n      }\n      if (!this.#isStale(index)) {\n        if (updateAgeOnHas) {\n          this.#updateItemAge(index)\n        }\n        if (status) {\n          status.has = 'hit'\n          this.#statusTTL(status, index)\n        }\n        return true\n      } else if (status) {\n        status.has = 'stale'\n        this.#statusTTL(status, index)\n      }\n    } else if (status) {\n      status.has = 'miss'\n    }\n    return false\n  }\n\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(k: K, peekOptions: LRUCache.PeekOptions<K, V, FC> = {}) {\n    const { allowStale = this.allowStale } = peekOptions\n    const index = this.#keyMap.get(k)\n    if (\n      index !== undefined &&\n      (allowStale || !this.#isStale(index))\n    ) {\n      const v = this.#valList[index]\n      // either stale and allowed, or forcing a refresh of non-stale value\n      return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v\n    }\n  }\n\n  #backgroundFetch(\n    k: K,\n    index: Index | undefined,\n    options: LRUCache.FetchOptions<K, V, FC>,\n    context: any\n  ): BackgroundFetch<V> {\n    const v = index === undefined ? undefined : this.#valList[index]\n    if (this.#isBackgroundFetch(v)) {\n      return v\n    }\n\n    const ac = new AC()\n    const { signal } = options\n    // when/if our AC signals, then stop listening to theirs.\n    signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n      signal: ac.signal,\n    })\n\n    const fetchOpts = {\n      signal: ac.signal,\n      options,\n      context,\n    }\n\n    const cb = (\n      v: V | void | undefined,\n      updateCache = false\n    ): V | undefined | void => {\n      const { aborted } = ac.signal\n      const ignoreAbort = options.ignoreFetchAbort && v !== undefined\n      if (options.status) {\n        if (aborted && !updateCache) {\n          options.status.fetchAborted = true\n          options.status.fetchError = ac.signal.reason\n          if (ignoreAbort) options.status.fetchAbortIgnored = true\n        } else {\n          options.status.fetchResolved = true\n        }\n      }\n      if (aborted && !ignoreAbort && !updateCache) {\n        return fetchFail(ac.signal.reason)\n      }\n      // either we didn't abort, and are still here, or we did, and ignored\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        if (v === undefined) {\n          if (bf.__staleWhileFetching) {\n            this.#valList[index as Index] = bf.__staleWhileFetching\n          } else {\n            this.delete(k)\n          }\n        } else {\n          if (options.status) options.status.fetchUpdated = true\n          this.set(k, v, fetchOpts.options)\n        }\n      }\n      return v\n    }\n\n    const eb = (er: any) => {\n      if (options.status) {\n        options.status.fetchRejected = true\n        options.status.fetchError = er\n      }\n      return fetchFail(er)\n    }\n\n    const fetchFail = (er: any): V | undefined => {\n      const { aborted } = ac.signal\n      const allowStaleAborted =\n        aborted && options.allowStaleOnFetchAbort\n      const allowStale =\n        allowStaleAborted || options.allowStaleOnFetchRejection\n      const noDelete = allowStale || options.noDeleteOnFetchRejection\n      const bf = p as BackgroundFetch<V>\n      if (this.#valList[index as Index] === p) {\n        // if we allow stale on fetch rejections, then we need to ensure that\n        // the stale value is not removed from the cache when the fetch fails.\n        const del = !noDelete || bf.__staleWhileFetching === undefined\n        if (del) {\n          this.delete(k)\n        } else if (!allowStaleAborted) {\n          // still replace the *promise* with the stale value,\n          // since we are done with the promise at this point.\n          // leave it untouched if we're still waiting for an\n          // aborted background fetch that hasn't yet returned.\n          this.#valList[index as Index] = bf.__staleWhileFetching\n        }\n      }\n      if (allowStale) {\n        if (options.status && bf.__staleWhileFetching !== undefined) {\n          options.status.returnedStale = true\n        }\n        return bf.__staleWhileFetching\n      } else if (bf.__returned === bf) {\n        throw er\n      }\n    }\n\n    const pcall = (\n      res: (v: V | void | undefined) => void,\n      rej: (e: any) => void\n    ) => {\n      const fmp = this.#fetchMethod?.(k, v, fetchOpts)\n      if (fmp && fmp instanceof Promise) {\n        fmp.then(v => res(v), rej)\n      }\n      // ignored, we go until we finish, regardless.\n      // defer check until we are actually aborting,\n      // so fetchMethod can override.\n      ac.signal.addEventListener('abort', () => {\n        if (\n          !options.ignoreFetchAbort ||\n          options.allowStaleOnFetchAbort\n        ) {\n          res()\n          // when it eventually resolves, update the cache.\n          if (options.allowStaleOnFetchAbort) {\n            res = v => cb(v, true)\n          }\n        }\n      })\n    }\n\n    if (options.status) options.status.fetchDispatched = true\n    const p = new Promise(pcall).then(cb, eb)\n    const bf = Object.assign(p, {\n      __abortController: ac,\n      __staleWhileFetching: v,\n      __returned: undefined,\n    })\n\n    if (index === undefined) {\n      // internal, don't expose status.\n      this.set(k, bf, { ...fetchOpts.options, status: undefined })\n      index = this.#keyMap.get(k)\n    } else {\n      this.#valList[index] = bf\n    }\n    return bf\n  }\n\n  #isBackgroundFetch(p: any): p is BackgroundFetch<V> {\n    if (!this.#hasFetchMethod) return false\n    const b = p as BackgroundFetch<V>\n    return (\n      !!b &&\n      b instanceof Promise &&\n      b.hasOwnProperty('__staleWhileFetching') &&\n      b.__abortController instanceof AC\n    )\n  }\n\n  /**\n   * Make an asynchronous cached fetch using the\n   * {@link LRUCache.OptionsBase.fetchMethod} function.\n   *\n   * If multiple fetches for the same key are issued, then they will all be\n   * coalesced into a single call to fetchMethod.\n   *\n   * Note that this means that handling options such as\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort},\n   * {@link LRUCache.FetchOptions.signal},\n   * and {@link LRUCache.OptionsBase.allowStaleOnFetchRejection} will be\n   * determined by the FIRST fetch() call for a given key.\n   *\n   * This is a known (fixable) shortcoming which will be addresed on when\n   * someone complains about it, as the fix would involve added complexity and\n   * may not be worth the costs for this edge case.\n   */\n  fetch(\n    k: K,\n    fetchOptions: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : LRUCache.FetchOptionsWithContext<K, V, FC>\n  ): Promise<void | V>\n  // this overload not allowed if context is required\n  fetch(\n    k: unknown extends FC\n      ? K\n      : FC extends undefined | void\n      ? K\n      : never,\n    fetchOptions?: unknown extends FC\n      ? LRUCache.FetchOptions<K, V, FC>\n      : FC extends undefined | void\n      ? LRUCache.FetchOptionsNoContext<K, V>\n      : never\n  ): Promise<void | V>\n  async fetch(\n    k: K,\n    fetchOptions: LRUCache.FetchOptions<K, V, FC> = {}\n  ): Promise<void | V> {\n    const {\n      // get options\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      // set options\n      ttl = this.ttl,\n      noDisposeOnSet = this.noDisposeOnSet,\n      size = 0,\n      sizeCalculation = this.sizeCalculation,\n      noUpdateTTL = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort = this.allowStaleOnFetchAbort,\n      context,\n      forceRefresh = false,\n      status,\n      signal,\n    } = fetchOptions\n\n    if (!this.#hasFetchMethod) {\n      if (status) status.fetch = 'get'\n      return this.get(k, {\n        allowStale,\n        updateAgeOnGet,\n        noDeleteOnStaleGet,\n        status,\n      })\n    }\n\n    const options = {\n      allowStale,\n      updateAgeOnGet,\n      noDeleteOnStaleGet,\n      ttl,\n      noDisposeOnSet,\n      size,\n      sizeCalculation,\n      noUpdateTTL,\n      noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection,\n      allowStaleOnFetchAbort,\n      ignoreFetchAbort,\n      status,\n      signal,\n    }\n\n    let index = this.#keyMap.get(k)\n    if (index === undefined) {\n      if (status) status.fetch = 'miss'\n      const p = this.#backgroundFetch(k, index, options, context)\n      return (p.__returned = p)\n    } else {\n      // in cache, maybe already fetching\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        const stale =\n          allowStale && v.__staleWhileFetching !== undefined\n        if (status) {\n          status.fetch = 'inflight'\n          if (stale) status.returnedStale = true\n        }\n        return stale ? v.__staleWhileFetching : (v.__returned = v)\n      }\n\n      // if we force a refresh, that means do NOT serve the cached value,\n      // unless we are already in the process of refreshing the cache.\n      const isStale = this.#isStale(index)\n      if (!forceRefresh && !isStale) {\n        if (status) status.fetch = 'hit'\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        if (status) this.#statusTTL(status, index)\n        return v\n      }\n\n      // ok, it is stale or a forced refresh, and not already fetching.\n      // refresh the cache.\n      const p = this.#backgroundFetch(k, index, options, context)\n      const hasStale = p.__staleWhileFetching !== undefined\n      const staleVal = hasStale && allowStale\n      if (status) {\n        status.fetch = isStale ? 'stale' : 'refresh'\n        if (staleVal && isStale) status.returnedStale = true\n      }\n      return staleVal ? p.__staleWhileFetching : (p.__returned = p)\n    }\n  }\n\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(k: K, getOptions: LRUCache.GetOptions<K, V, FC> = {}) {\n    const {\n      allowStale = this.allowStale,\n      updateAgeOnGet = this.updateAgeOnGet,\n      noDeleteOnStaleGet = this.noDeleteOnStaleGet,\n      status,\n    } = getOptions\n    const index = this.#keyMap.get(k)\n    if (index !== undefined) {\n      const value = this.#valList[index]\n      const fetching = this.#isBackgroundFetch(value)\n      if (status) this.#statusTTL(status, index)\n      if (this.#isStale(index)) {\n        if (status) status.get = 'stale'\n        // delete only if not an in-flight background fetch\n        if (!fetching) {\n          if (!noDeleteOnStaleGet) {\n            this.delete(k)\n          }\n          if (status && allowStale) status.returnedStale = true\n          return allowStale ? value : undefined\n        } else {\n          if (\n            status &&\n            allowStale &&\n            value.__staleWhileFetching !== undefined\n          ) {\n            status.returnedStale = true\n          }\n          return allowStale ? value.__staleWhileFetching : undefined\n        }\n      } else {\n        if (status) status.get = 'hit'\n        // if we're currently fetching it, we don't actually have it yet\n        // it's not stale, which means this isn't a staleWhileRefetching.\n        // If it's not stale, and fetching, AND has a __staleWhileFetching\n        // value, then that means the user fetched with {forceRefresh:true},\n        // so it's safe to return that value.\n        if (fetching) {\n          return value.__staleWhileFetching\n        }\n        this.#moveToTail(index)\n        if (updateAgeOnGet) {\n          this.#updateItemAge(index)\n        }\n        return value\n      }\n    } else if (status) {\n      status.get = 'miss'\n    }\n  }\n\n  #connect(p: Index, n: Index) {\n    this.#prev[n] = p\n    this.#next[p] = n\n  }\n\n  #moveToTail(index: Index): void {\n    // if tail already, nothing to do\n    // if head, move head to next[index]\n    // else\n    //   move next[prev[index]] to next[index] (head has no prev)\n    //   move prev[next[index]] to prev[index]\n    // prev[index] = tail\n    // next[tail] = index\n    // tail = index\n    if (index !== this.#tail) {\n      if (index === this.#head) {\n        this.#head = this.#next[index] as Index\n      } else {\n        this.#connect(\n          this.#prev[index] as Index,\n          this.#next[index] as Index\n        )\n      }\n      this.#connect(this.#tail, index)\n      this.#tail = index\n    }\n  }\n\n  /**\n   * Deletes a key out of the cache.\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(k: K) {\n    let deleted = false\n    if (this.#size !== 0) {\n      const index = this.#keyMap.get(k)\n      if (index !== undefined) {\n        deleted = true\n        if (this.#size === 1) {\n          this.clear()\n        } else {\n          this.#removeItemSize(index)\n          const v = this.#valList[index]\n          if (this.#isBackgroundFetch(v)) {\n            v.__abortController.abort(new Error('deleted'))\n          } else if (this.#hasDispose || this.#hasDisposeAfter) {\n            if (this.#hasDispose) {\n              this.#dispose?.(v as V, k, 'delete')\n            }\n            if (this.#hasDisposeAfter) {\n              this.#disposed?.push([v as V, k, 'delete'])\n            }\n          }\n          this.#keyMap.delete(k)\n          this.#keyList[index] = undefined\n          this.#valList[index] = undefined\n          if (index === this.#tail) {\n            this.#tail = this.#prev[index] as Index\n          } else if (index === this.#head) {\n            this.#head = this.#next[index] as Index\n          } else {\n            this.#next[this.#prev[index]] = this.#next[index]\n            this.#prev[this.#next[index]] = this.#prev[index]\n          }\n          this.#size--\n          this.#free.push(index)\n        }\n      }\n    }\n    if (this.#hasDisposeAfter && this.#disposed?.length) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n    return deleted\n  }\n\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    for (const index of this.#rindexes({ allowStale: true })) {\n      const v = this.#valList[index]\n      if (this.#isBackgroundFetch(v)) {\n        v.__abortController.abort(new Error('deleted'))\n      } else {\n        const k = this.#keyList[index]\n        if (this.#hasDispose) {\n          this.#dispose?.(v as V, k as K, 'delete')\n        }\n        if (this.#hasDisposeAfter) {\n          this.#disposed?.push([v as V, k as K, 'delete'])\n        }\n      }\n    }\n\n    this.#keyMap.clear()\n    this.#valList.fill(undefined)\n    this.#keyList.fill(undefined)\n    if (this.#ttls && this.#starts) {\n      this.#ttls.fill(0)\n      this.#starts.fill(0)\n    }\n    if (this.#sizes) {\n      this.#sizes.fill(0)\n    }\n    this.#head = 0 as Index\n    this.#tail = 0 as Index\n    this.#free.length = 0\n    this.#calculatedSize = 0\n    this.#size = 0\n    if (this.#hasDisposeAfter && this.#disposed) {\n      const dt = this.#disposed\n      let task: DisposeTask<K, V> | undefined\n      while ((task = dt?.shift())) {\n        this.#disposeAfter?.(...task)\n      }\n    }\n  }\n}\n", "import type { Cache } from '../types/cache.js';\nimport { LRUCache } from 'lru-cache';\n\n/**\n * A cache using local memory.\n */\nexport class MemoryCache implements Cache {\n  private cache: LRUCache<string, any>;\n\n  /**\n   * @param timeToLiveInSeconds time-to-live for every key-value pair set in the cache\n   */\n  public constructor (private timeToLiveInSeconds: number) {\n    this.cache = new LRUCache({\n      max : 100_000,\n      ttl : timeToLiveInSeconds * 1000\n    });\n  }\n\n  async set(key: string, value: any): Promise<void> {\n    try {\n      this.cache.set(key, value);\n    } catch {\n      // let the code continue as this is a non-fatal error\n    }\n  }\n\n  async get(key: string): Promise<any | undefined> {\n    return this.cache.get(key);\n  }\n}\n", "import * as precompiledValidators from '../generated/precompiled-validators.js';\nimport { DwnError, DwnErrorCode } from './core/dwn-error.js';\n\n/**\n * Validates the given payload using JSON schema keyed by the given schema name. Throws if the given payload fails validation.\n * @param schemaName the schema name use to look up the JSON schema to be used for schema validation.\n *                   The list of schema names can be found in compile-validators.js\n * @param payload javascript object to be validated\n */\nexport function validateJsonSchema(schemaName: string, payload: any): void {\n  // const validateFn = validator.getSchema(schemaName);\n  const validateFn = (precompiledValidators as any)[schemaName];\n\n  if (!validateFn) {\n    throw new DwnError(DwnErrorCode.SchemaValidatorSchemaNotFound, `schema for ${schemaName} not found.`);\n  }\n\n  validateFn(payload);\n\n  if (!validateFn.errors) {\n    return;\n  }\n\n  // AJV is configured by default to stop validating after the 1st error is encountered which means\n  // there will only ever be one error;\n  const [ errorObj ] = validateFn.errors;\n  let { instancePath, message, keyword } = errorObj;\n\n  if (!instancePath) {\n    instancePath = schemaName;\n  }\n\n  // handle a few frequently occurred errors to give more meaningful error for debugging\n\n  if (keyword === 'additionalProperties') {\n    const keyword = errorObj.params.additionalProperty;\n    throw new DwnError(DwnErrorCode.SchemaValidatorAdditionalPropertyNotAllowed, `${message}: ${instancePath}: ${keyword}`);\n  }\n\n  if (keyword === 'unevaluatedProperties') {\n    const keyword = errorObj.params.unevaluatedProperty;\n    throw new DwnError(DwnErrorCode.SchemaValidatorUnevaluatedPropertyNotAllowed, `${message}: ${instancePath}: ${keyword}`);\n  }\n\n  throw new DwnError(DwnErrorCode.SchemaValidatorFailure, `${instancePath}: ${message}`);\n}", null, "import type { Cache } from '../../../types/cache.js';\nimport type { GeneralJws } from '../../../types/jws-types.js';\nimport type { PublicJwk } from '../../../types/jose-types.js';\nimport type { DidResolver, DidVerificationMethod } from '@web5/dids';\n\nimport { Jws } from '../../../utils/jws.js';\nimport { MemoryCache } from '../../../utils/memory-cache.js';\nimport { validateJsonSchema } from '../../../schema-validator.js';\nimport { DwnError, DwnErrorCode } from '../../../core/dwn-error.js';\n\ntype VerificationResult = {\n  /** DIDs of all signers */\n  signers: string[];\n};\n\n/**\n * Verifies the signature(s) of a General JWS.\n */\nexport class GeneralJwsVerifier {\n\n  private static _singleton: GeneralJwsVerifier;\n\n  cache: Cache;\n\n  private constructor(cache?: Cache) {\n    this.cache = cache || new MemoryCache(600);\n  }\n\n  private static get singleton(): GeneralJwsVerifier {\n    if (GeneralJwsVerifier._singleton === undefined) {\n      GeneralJwsVerifier._singleton = new GeneralJwsVerifier();\n    }\n\n    return GeneralJwsVerifier._singleton;\n  }\n\n  /**\n   * Verifies the signatures of the given General JWS.\n   * @returns the list of signers that have valid signatures.\n   */\n  public static async verifySignatures(jws: GeneralJws, didResolver: DidResolver): Promise<VerificationResult> {\n    return await GeneralJwsVerifier.singleton.verifySignatures(jws, didResolver);\n  }\n\n  /**\n   * Verifies the signatures of the given General JWS.\n   * @returns the list of signers that have valid signatures.\n   */\n  public async verifySignatures(jws: GeneralJws, didResolver: DidResolver): Promise<VerificationResult> {\n    const signers: string[] = [];\n\n    for (const signatureEntry of jws.signatures) {\n      let isVerified: boolean;\n      const kid = Jws.getKid(signatureEntry);\n\n      const cacheKey = `${signatureEntry.protected}.${jws.payload}.${signatureEntry.signature}`;\n      const cachedValue = await this.cache.get(cacheKey);\n\n      // explicit `undefined` check to differentiate `false`\n      if (cachedValue === undefined) {\n        const publicJwk = await GeneralJwsVerifier.getPublicKey(kid, didResolver);\n        isVerified = await Jws.verifySignature(jws.payload, signatureEntry, publicJwk);\n        await this.cache.set(cacheKey, isVerified);\n      } else {\n        isVerified = cachedValue;\n      }\n\n      const did = Jws.extractDid(kid);\n\n      if (isVerified) {\n        signers.push(did);\n      } else {\n        throw new DwnError(DwnErrorCode.GeneralJwsVerifierInvalidSignature, `Signature verification failed for ${did}`);\n      }\n    }\n\n    return { signers };\n  }\n\n  /**\n   * Gets the public key given a fully qualified key ID (`kid`) by resolving the DID to its DID Document.\n   */\n  private static async getPublicKey(kid: string, didResolver: DidResolver): Promise<PublicJwk> {\n    // `resolve` throws exception if DID is invalid, DID method is not supported,\n    // or resolving DID fails\n    const did = Jws.extractDid(kid);\n    const { didDocument } = await didResolver.resolve(did);\n    const { verificationMethod: verificationMethods = [] } = didDocument || {};\n\n    let verificationMethod: DidVerificationMethod | undefined;\n\n    for (const method of verificationMethods) {\n      // consider optimizing using a set for O(1) lookups if needed\n      // key ID in DID Document may or may not be fully qualified. e.g.\n      // `did:ion:alice#key1` or `#key1`\n      if (kid.endsWith(method.id)) {\n        verificationMethod = method;\n        break;\n      }\n    }\n\n    if (!verificationMethod) {\n      throw new DwnError(DwnErrorCode.GeneralJwsVerifierGetPublicKeyNotFound, 'public key needed to verify signature not found in DID Document');\n    }\n\n    validateJsonSchema('JwkVerificationMethod', verificationMethod);\n\n    const { publicKeyJwk: publicJwk } = verificationMethod;\n\n    return publicJwk as PublicJwk;\n  }\n}", "import * as cborg from 'cborg'\nimport { CID } from 'multiformats/cid'\n\n// https://github.com/ipfs/go-ipfs/issues/3570#issuecomment-273931692\nconst CID_CBOR_TAG = 42\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal.\n *\n * @param {any} obj\n * @returns {cborg.Token[]|null}\n */\nfunction cidEncoder (obj) {\n  if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n    return null // any other kind of object\n  }\n  const cid = CID.asCID(obj)\n  /* c8 ignore next 4 */\n  // very unlikely case, and it'll probably throw a recursion error in cborg\n  if (!cid) {\n    return null\n  }\n  const bytes = new Uint8Array(cid.bytes.byteLength + 1)\n  bytes.set(cid.bytes, 1) // prefix is 0x00, for historical reasons\n  return [\n    new cborg.Token(cborg.Type.tag, CID_CBOR_TAG),\n    new cborg.Token(cborg.Type.bytes, bytes)\n  ]\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n  throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n  if (Number.isNaN(num)) {\n    throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  if (num === Infinity || num === -Infinity) {\n    throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  return null\n}\n\nconst encodeOptions = {\n  float64: true,\n  typeEncoders: {\n    Object: cidEncoder,\n    undefined: undefinedEncoder,\n    number: numberEncoder\n  }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {CID}\n */\nfunction cidDecoder (bytes) {\n  if (bytes[0] !== 0) {\n    throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00')\n  }\n  return CID.decode(bytes.subarray(1)) // ignore leading 0x00\n}\n\nconst decodeOptions = {\n  allowIndefinite: false,\n  coerceUndefinedToNull: true,\n  allowNaN: false,\n  allowInfinity: false,\n  allowBigInt: true, // this will lead to BigInt for ints outside of\n  // safe-integer range, which may surprise users\n  strict: true,\n  useMaps: false,\n  rejectDuplicateMapKeys: true,\n  /** @type {import('cborg').TagDecoder[]} */\n  tags: []\n}\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder\n\nexport const name = 'dag-cbor'\nexport const code = 0x71\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborg.encode(node, encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => cborg.decode(data, decodeOptions)\n", "import { encode } from './lib/encode.js';\nimport { decode } from './lib/decode.js';\nimport {\n  Token,\n  Type\n} from './lib/token.js';\nexport {\n  decode,\n  encode,\n  Token,\n  Type\n};", "import { is } from './is.js';\nimport {\n  Token,\n  Type\n} from './token.js';\nimport { Bl } from './bl.js';\nimport { encodeErrPrefix } from './common.js';\nimport { quickEncodeToken } from './jump.js';\nimport { asU8A } from './byte-utils.js';\nimport { encodeUint } from './0uint.js';\nimport { encodeNegint } from './1negint.js';\nimport { encodeBytes } from './2bytes.js';\nimport { encodeString } from './3string.js';\nimport { encodeArray } from './4array.js';\nimport { encodeMap } from './5map.js';\nimport { encodeTag } from './6tag.js';\nimport { encodeFloat } from './7float.js';\nconst defaultEncodeOptions = {\n  float64: false,\n  mapSorter,\n  quickEncodeToken\n};\nexport function makeCborEncoders() {\n  const encoders = [];\n  encoders[Type.uint.major] = encodeUint;\n  encoders[Type.negint.major] = encodeNegint;\n  encoders[Type.bytes.major] = encodeBytes;\n  encoders[Type.string.major] = encodeString;\n  encoders[Type.array.major] = encodeArray;\n  encoders[Type.map.major] = encodeMap;\n  encoders[Type.tag.major] = encodeTag;\n  encoders[Type.float.major] = encodeFloat;\n  return encoders;\n}\nconst cborEncoders = makeCborEncoders();\nconst buf = new Bl();\nclass Ref {\n  constructor(obj, parent) {\n    this.obj = obj;\n    this.parent = parent;\n  }\n  includes(obj) {\n    let p = this;\n    do {\n      if (p.obj === obj) {\n        return true;\n      }\n    } while (p = p.parent);\n    return false;\n  }\n  static createCheck(stack, obj) {\n    if (stack && stack.includes(obj)) {\n      throw new Error(`${ encodeErrPrefix } object contains circular references`);\n    }\n    return new Ref(obj, stack);\n  }\n}\nconst simpleTokens = {\n  null: new Token(Type.null, null),\n  undefined: new Token(Type.undefined, undefined),\n  true: new Token(Type.true, true),\n  false: new Token(Type.false, false),\n  emptyArray: new Token(Type.array, 0),\n  emptyMap: new Token(Type.map, 0)\n};\nconst typeEncoders = {\n  number(obj, _typ, _options, _refStack) {\n    if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n      return new Token(Type.float, obj);\n    } else if (obj >= 0) {\n      return new Token(Type.uint, obj);\n    } else {\n      return new Token(Type.negint, obj);\n    }\n  },\n  bigint(obj, _typ, _options, _refStack) {\n    if (obj >= BigInt(0)) {\n      return new Token(Type.uint, obj);\n    } else {\n      return new Token(Type.negint, obj);\n    }\n  },\n  Uint8Array(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, obj);\n  },\n  string(obj, _typ, _options, _refStack) {\n    return new Token(Type.string, obj);\n  },\n  boolean(obj, _typ, _options, _refStack) {\n    return obj ? simpleTokens.true : simpleTokens.false;\n  },\n  null(_obj, _typ, _options, _refStack) {\n    return simpleTokens.null;\n  },\n  undefined(_obj, _typ, _options, _refStack) {\n    return simpleTokens.undefined;\n  },\n  ArrayBuffer(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj));\n  },\n  DataView(obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength));\n  },\n  Array(obj, _typ, options, refStack) {\n    if (!obj.length) {\n      if (options.addBreakTokens === true) {\n        return [\n          simpleTokens.emptyArray,\n          new Token(Type.break)\n        ];\n      }\n      return simpleTokens.emptyArray;\n    }\n    refStack = Ref.createCheck(refStack, obj);\n    const entries = [];\n    let i = 0;\n    for (const e of obj) {\n      entries[i++] = objectToTokens(e, options, refStack);\n    }\n    if (options.addBreakTokens) {\n      return [\n        new Token(Type.array, obj.length),\n        entries,\n        new Token(Type.break)\n      ];\n    }\n    return [\n      new Token(Type.array, obj.length),\n      entries\n    ];\n  },\n  Object(obj, typ, options, refStack) {\n    const isMap = typ !== 'Object';\n    const keys = isMap ? obj.keys() : Object.keys(obj);\n    const length = isMap ? obj.size : keys.length;\n    if (!length) {\n      if (options.addBreakTokens === true) {\n        return [\n          simpleTokens.emptyMap,\n          new Token(Type.break)\n        ];\n      }\n      return simpleTokens.emptyMap;\n    }\n    refStack = Ref.createCheck(refStack, obj);\n    const entries = [];\n    let i = 0;\n    for (const key of keys) {\n      entries[i++] = [\n        objectToTokens(key, options, refStack),\n        objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n      ];\n    }\n    sortMapEntries(entries, options);\n    if (options.addBreakTokens) {\n      return [\n        new Token(Type.map, length),\n        entries,\n        new Token(Type.break)\n      ];\n    }\n    return [\n      new Token(Type.map, length),\n      entries\n    ];\n  }\n};\ntypeEncoders.Map = typeEncoders.Object;\ntypeEncoders.Buffer = typeEncoders.Uint8Array;\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n  typeEncoders[`${ typ }Array`] = typeEncoders.DataView;\n}\nfunction objectToTokens(obj, options = {}, refStack) {\n  const typ = is(obj);\n  const customTypeEncoder = options && options.typeEncoders && options.typeEncoders[typ] || typeEncoders[typ];\n  if (typeof customTypeEncoder === 'function') {\n    const tokens = customTypeEncoder(obj, typ, options, refStack);\n    if (tokens != null) {\n      return tokens;\n    }\n  }\n  const typeEncoder = typeEncoders[typ];\n  if (!typeEncoder) {\n    throw new Error(`${ encodeErrPrefix } unsupported type: ${ typ }`);\n  }\n  return typeEncoder(obj, typ, options, refStack);\n}\nfunction sortMapEntries(entries, options) {\n  if (options.mapSorter) {\n    entries.sort(options.mapSorter);\n  }\n}\nfunction mapSorter(e1, e2) {\n  const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0];\n  const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0];\n  if (keyToken1.type !== keyToken2.type) {\n    return keyToken1.type.compare(keyToken2.type);\n  }\n  const major = keyToken1.type.major;\n  const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2);\n  if (tcmp === 0) {\n    console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone');\n  }\n  return tcmp;\n}\nfunction tokensToEncoded(buf, tokens, encoders, options) {\n  if (Array.isArray(tokens)) {\n    for (const token of tokens) {\n      tokensToEncoded(buf, token, encoders, options);\n    }\n  } else {\n    encoders[tokens.type.major](buf, tokens, options);\n  }\n}\nfunction encodeCustom(data, encoders, options) {\n  const tokens = objectToTokens(data, options);\n  if (!Array.isArray(tokens) && options.quickEncodeToken) {\n    const quickBytes = options.quickEncodeToken(tokens);\n    if (quickBytes) {\n      return quickBytes;\n    }\n    const encoder = encoders[tokens.type.major];\n    if (encoder.encodedSize) {\n      const size = encoder.encodedSize(tokens, options);\n      const buf = new Bl(size);\n      encoder(buf, tokens, options);\n      if (buf.chunks.length !== 1) {\n        throw new Error(`Unexpected error: pre-calculated length for ${ tokens } was wrong`);\n      }\n      return asU8A(buf.chunks[0]);\n    }\n  }\n  buf.reset();\n  tokensToEncoded(buf, tokens, encoders, options);\n  return buf.toBytes(true);\n}\nfunction encode(data, options) {\n  options = Object.assign({}, defaultEncodeOptions, options);\n  return encodeCustom(data, cborEncoders, options);\n}\nexport {\n  objectToTokens,\n  encode,\n  encodeCustom,\n  Ref\n};", "const typeofs = [\n  'string',\n  'number',\n  'bigint',\n  'symbol'\n];\nconst objectTypeNames = [\n  'Function',\n  'Generator',\n  'AsyncGenerator',\n  'GeneratorFunction',\n  'AsyncGeneratorFunction',\n  'AsyncFunction',\n  'Observable',\n  'Array',\n  'Buffer',\n  'Object',\n  'RegExp',\n  'Date',\n  'Error',\n  'Map',\n  'Set',\n  'WeakMap',\n  'WeakSet',\n  'ArrayBuffer',\n  'SharedArrayBuffer',\n  'DataView',\n  'Promise',\n  'URL',\n  'HTMLElement',\n  'Int8Array',\n  'Uint8Array',\n  'Uint8ClampedArray',\n  'Int16Array',\n  'Uint16Array',\n  'Int32Array',\n  'Uint32Array',\n  'Float32Array',\n  'Float64Array',\n  'BigInt64Array',\n  'BigUint64Array'\n];\nexport function is(value) {\n  if (value === null) {\n    return 'null';\n  }\n  if (value === undefined) {\n    return 'undefined';\n  }\n  if (value === true || value === false) {\n    return 'boolean';\n  }\n  const typeOf = typeof value;\n  if (typeofs.includes(typeOf)) {\n    return typeOf;\n  }\n  if (typeOf === 'function') {\n    return 'Function';\n  }\n  if (Array.isArray(value)) {\n    return 'Array';\n  }\n  if (isBuffer(value)) {\n    return 'Buffer';\n  }\n  const objectType = getObjectType(value);\n  if (objectType) {\n    return objectType;\n  }\n  return 'Object';\n}\nfunction isBuffer(value) {\n  return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value);\n}\nfunction getObjectType(value) {\n  const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);\n  if (objectTypeNames.includes(objectTypeName)) {\n    return objectTypeName;\n  }\n  return undefined;\n}", "class Type {\n  constructor(major, name, terminal) {\n    this.major = major;\n    this.majorEncoded = major << 5;\n    this.name = name;\n    this.terminal = terminal;\n  }\n  toString() {\n    return `Type[${ this.major }].${ this.name }`;\n  }\n  compare(typ) {\n    return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0;\n  }\n}\nType.uint = new Type(0, 'uint', true);\nType.negint = new Type(1, 'negint', true);\nType.bytes = new Type(2, 'bytes', true);\nType.string = new Type(3, 'string', true);\nType.array = new Type(4, 'array', false);\nType.map = new Type(5, 'map', false);\nType.tag = new Type(6, 'tag', false);\nType.float = new Type(7, 'float', true);\nType.false = new Type(7, 'false', true);\nType.true = new Type(7, 'true', true);\nType.null = new Type(7, 'null', true);\nType.undefined = new Type(7, 'undefined', true);\nType.break = new Type(7, 'break', true);\nclass Token {\n  constructor(type, value, encodedLength) {\n    this.type = type;\n    this.value = value;\n    this.encodedLength = encodedLength;\n    this.encodedBytes = undefined;\n    this.byteValue = undefined;\n  }\n  toString() {\n    return `Token[${ this.type }].${ this.value }`;\n  }\n}\nexport {\n  Type,\n  Token\n};", "import {\n  alloc,\n  concat,\n  slice\n} from './byte-utils.js';\nconst defaultChunkSize = 256;\nexport class Bl {\n  constructor(chunkSize = defaultChunkSize) {\n    this.chunkSize = chunkSize;\n    this.cursor = 0;\n    this.maxCursor = -1;\n    this.chunks = [];\n    this._initReuseChunk = null;\n  }\n  reset() {\n    this.cursor = 0;\n    this.maxCursor = -1;\n    if (this.chunks.length) {\n      this.chunks = [];\n    }\n    if (this._initReuseChunk !== null) {\n      this.chunks.push(this._initReuseChunk);\n      this.maxCursor = this._initReuseChunk.length - 1;\n    }\n  }\n  push(bytes) {\n    let topChunk = this.chunks[this.chunks.length - 1];\n    const newMax = this.cursor + bytes.length;\n    if (newMax <= this.maxCursor + 1) {\n      const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n      topChunk.set(bytes, chunkPos);\n    } else {\n      if (topChunk) {\n        const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1;\n        if (chunkPos < topChunk.length) {\n          this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos);\n          this.maxCursor = this.cursor - 1;\n        }\n      }\n      if (bytes.length < 64 && bytes.length < this.chunkSize) {\n        topChunk = alloc(this.chunkSize);\n        this.chunks.push(topChunk);\n        this.maxCursor += topChunk.length;\n        if (this._initReuseChunk === null) {\n          this._initReuseChunk = topChunk;\n        }\n        topChunk.set(bytes, 0);\n      } else {\n        this.chunks.push(bytes);\n        this.maxCursor += bytes.length;\n      }\n    }\n    this.cursor += bytes.length;\n  }\n  toBytes(reset = false) {\n    let byts;\n    if (this.chunks.length === 1) {\n      const chunk = this.chunks[0];\n      if (reset && this.cursor > chunk.length / 2) {\n        byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor);\n        this._initReuseChunk = null;\n        this.chunks = [];\n      } else {\n        byts = slice(chunk, 0, this.cursor);\n      }\n    } else {\n      byts = concat(this.chunks, this.cursor);\n    }\n    if (reset) {\n      this.reset();\n    }\n    return byts;\n  }\n}", "export const useBuffer = globalThis.process && !globalThis.process.browser && globalThis.Buffer && typeof globalThis.Buffer.isBuffer === 'function';\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nfunction isBuffer(buf) {\n  return useBuffer && globalThis.Buffer.isBuffer(buf);\n}\nexport function asU8A(buf) {\n  if (!(buf instanceof Uint8Array)) {\n    return Uint8Array.from(buf);\n  }\n  return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf;\n}\nexport const toString = useBuffer ? (bytes, start, end) => {\n  return end - start > 64 ? globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8') : utf8Slice(bytes, start, end);\n} : (bytes, start, end) => {\n  return end - start > 64 ? textDecoder.decode(bytes.subarray(start, end)) : utf8Slice(bytes, start, end);\n};\nexport const fromString = useBuffer ? string => {\n  return string.length > 64 ? globalThis.Buffer.from(string) : utf8ToBytes(string);\n} : string => {\n  return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string);\n};\nexport const fromArray = arr => {\n  return Uint8Array.from(arr);\n};\nexport const slice = useBuffer ? (bytes, start, end) => {\n  if (isBuffer(bytes)) {\n    return new Uint8Array(bytes.subarray(start, end));\n  }\n  return bytes.slice(start, end);\n} : (bytes, start, end) => {\n  return bytes.slice(start, end);\n};\nexport const concat = useBuffer ? (chunks, length) => {\n  chunks = chunks.map(c => c instanceof Uint8Array ? c : globalThis.Buffer.from(c));\n  return asU8A(globalThis.Buffer.concat(chunks, length));\n} : (chunks, length) => {\n  const out = new Uint8Array(length);\n  let off = 0;\n  for (let b of chunks) {\n    if (off + b.length > out.length) {\n      b = b.subarray(0, out.length - off);\n    }\n    out.set(b, off);\n    off += b.length;\n  }\n  return out;\n};\nexport const alloc = useBuffer ? size => {\n  return globalThis.Buffer.allocUnsafe(size);\n} : size => {\n  return new Uint8Array(size);\n};\nexport const toHex = useBuffer ? d => {\n  if (typeof d === 'string') {\n    return d;\n  }\n  return globalThis.Buffer.from(toBytes(d)).toString('hex');\n} : d => {\n  if (typeof d === 'string') {\n    return d;\n  }\n  return Array.prototype.reduce.call(toBytes(d), (p, c) => `${ p }${ c.toString(16).padStart(2, '0') }`, '');\n};\nexport const fromHex = useBuffer ? hex => {\n  if (hex instanceof Uint8Array) {\n    return hex;\n  }\n  return globalThis.Buffer.from(hex, 'hex');\n} : hex => {\n  if (hex instanceof Uint8Array) {\n    return hex;\n  }\n  if (!hex.length) {\n    return new Uint8Array(0);\n  }\n  return new Uint8Array(hex.split('').map((c, i, d) => i % 2 === 0 ? `0x${ c }${ d[i + 1] }` : '').filter(Boolean).map(e => parseInt(e, 16)));\n};\nfunction toBytes(obj) {\n  if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n    return obj;\n  }\n  if (obj instanceof ArrayBuffer) {\n    return new Uint8Array(obj);\n  }\n  if (ArrayBuffer.isView(obj)) {\n    return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength);\n  }\n  throw new Error('Unknown type, must be binary type');\n}\nexport function compare(b1, b2) {\n  if (isBuffer(b1) && isBuffer(b2)) {\n    return b1.compare(b2);\n  }\n  for (let i = 0; i < b1.length; i++) {\n    if (b1[i] === b2[i]) {\n      continue;\n    }\n    return b1[i] < b2[i] ? -1 : 1;\n  }\n  return 0;\n}\nfunction utf8ToBytes(string, units = Infinity) {\n  let codePoint;\n  const length = string.length;\n  let leadSurrogate = null;\n  const bytes = [];\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i);\n    if (codePoint > 55295 && codePoint < 57344) {\n      if (!leadSurrogate) {\n        if (codePoint > 56319) {\n          if ((units -= 3) > -1)\n            bytes.push(239, 191, 189);\n          continue;\n        } else if (i + 1 === length) {\n          if ((units -= 3) > -1)\n            bytes.push(239, 191, 189);\n          continue;\n        }\n        leadSurrogate = codePoint;\n        continue;\n      }\n      if (codePoint < 56320) {\n        if ((units -= 3) > -1)\n          bytes.push(239, 191, 189);\n        leadSurrogate = codePoint;\n        continue;\n      }\n      codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n    } else if (leadSurrogate) {\n      if ((units -= 3) > -1)\n        bytes.push(239, 191, 189);\n    }\n    leadSurrogate = null;\n    if (codePoint < 128) {\n      if ((units -= 1) < 0)\n        break;\n      bytes.push(codePoint);\n    } else if (codePoint < 2048) {\n      if ((units -= 2) < 0)\n        break;\n      bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n    } else if (codePoint < 65536) {\n      if ((units -= 3) < 0)\n        break;\n      bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n    } else if (codePoint < 1114112) {\n      if ((units -= 4) < 0)\n        break;\n      bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n  return bytes;\n}\nfunction utf8Slice(buf, offset, end) {\n  const res = [];\n  while (offset < end) {\n    const firstByte = buf[offset];\n    let codePoint = null;\n    let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n    if (offset + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint;\n      switch (bytesPerSequence) {\n      case 1:\n        if (firstByte < 128) {\n          codePoint = firstByte;\n        }\n        break;\n      case 2:\n        secondByte = buf[offset + 1];\n        if ((secondByte & 192) === 128) {\n          tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n          if (tempCodePoint > 127) {\n            codePoint = tempCodePoint;\n          }\n        }\n        break;\n      case 3:\n        secondByte = buf[offset + 1];\n        thirdByte = buf[offset + 2];\n        if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n          tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n          if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n            codePoint = tempCodePoint;\n          }\n        }\n        break;\n      case 4:\n        secondByte = buf[offset + 1];\n        thirdByte = buf[offset + 2];\n        fourthByte = buf[offset + 3];\n        if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n          tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n          if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n            codePoint = tempCodePoint;\n          }\n        }\n      }\n    }\n    if (codePoint === null) {\n      codePoint = 65533;\n      bytesPerSequence = 1;\n    } else if (codePoint > 65535) {\n      codePoint -= 65536;\n      res.push(codePoint >>> 10 & 1023 | 55296);\n      codePoint = 56320 | codePoint & 1023;\n    }\n    res.push(codePoint);\n    offset += bytesPerSequence;\n  }\n  return decodeCodePointsArray(res);\n}\nconst MAX_ARGUMENTS_LENGTH = 4096;\nexport function decodeCodePointsArray(codePoints) {\n  const len = codePoints.length;\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints);\n  }\n  let res = '';\n  let i = 0;\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n  return res;\n}", "const decodeErrPrefix = 'CBOR decode error:';\nconst encodeErrPrefix = 'CBOR encode error:';\nconst uintMinorPrefixBytes = [];\nuintMinorPrefixBytes[23] = 1;\nuintMinorPrefixBytes[24] = 2;\nuintMinorPrefixBytes[25] = 3;\nuintMinorPrefixBytes[26] = 5;\nuintMinorPrefixBytes[27] = 9;\nfunction assertEnoughData(data, pos, need) {\n  if (data.length - pos < need) {\n    throw new Error(`${ decodeErrPrefix } not enough data for type`);\n  }\n}\nexport {\n  decodeErrPrefix,\n  encodeErrPrefix,\n  uintMinorPrefixBytes,\n  assertEnoughData\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport * as negint from './1negint.js';\nimport * as bytes from './2bytes.js';\nimport * as string from './3string.js';\nimport * as array from './4array.js';\nimport * as map from './5map.js';\nimport * as tag from './6tag.js';\nimport * as float from './7float.js';\nimport { decodeErrPrefix } from './common.js';\nimport { fromArray } from './byte-utils.js';\nfunction invalidMinor(data, pos, minor) {\n  throw new Error(`${ decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);\n}\nfunction errorer(msg) {\n  return () => {\n    throw new Error(`${ decodeErrPrefix } ${ msg }`);\n  };\n}\nexport const jump = [];\nfor (let i = 0; i <= 23; i++) {\n  jump[i] = invalidMinor;\n}\njump[24] = uint.decodeUint8;\njump[25] = uint.decodeUint16;\njump[26] = uint.decodeUint32;\njump[27] = uint.decodeUint64;\njump[28] = invalidMinor;\njump[29] = invalidMinor;\njump[30] = invalidMinor;\njump[31] = invalidMinor;\nfor (let i = 32; i <= 55; i++) {\n  jump[i] = invalidMinor;\n}\njump[56] = negint.decodeNegint8;\njump[57] = negint.decodeNegint16;\njump[58] = negint.decodeNegint32;\njump[59] = negint.decodeNegint64;\njump[60] = invalidMinor;\njump[61] = invalidMinor;\njump[62] = invalidMinor;\njump[63] = invalidMinor;\nfor (let i = 64; i <= 87; i++) {\n  jump[i] = bytes.decodeBytesCompact;\n}\njump[88] = bytes.decodeBytes8;\njump[89] = bytes.decodeBytes16;\njump[90] = bytes.decodeBytes32;\njump[91] = bytes.decodeBytes64;\njump[92] = invalidMinor;\njump[93] = invalidMinor;\njump[94] = invalidMinor;\njump[95] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 96; i <= 119; i++) {\n  jump[i] = string.decodeStringCompact;\n}\njump[120] = string.decodeString8;\njump[121] = string.decodeString16;\njump[122] = string.decodeString32;\njump[123] = string.decodeString64;\njump[124] = invalidMinor;\njump[125] = invalidMinor;\njump[126] = invalidMinor;\njump[127] = errorer('indefinite length bytes/strings are not supported');\nfor (let i = 128; i <= 151; i++) {\n  jump[i] = array.decodeArrayCompact;\n}\njump[152] = array.decodeArray8;\njump[153] = array.decodeArray16;\njump[154] = array.decodeArray32;\njump[155] = array.decodeArray64;\njump[156] = invalidMinor;\njump[157] = invalidMinor;\njump[158] = invalidMinor;\njump[159] = array.decodeArrayIndefinite;\nfor (let i = 160; i <= 183; i++) {\n  jump[i] = map.decodeMapCompact;\n}\njump[184] = map.decodeMap8;\njump[185] = map.decodeMap16;\njump[186] = map.decodeMap32;\njump[187] = map.decodeMap64;\njump[188] = invalidMinor;\njump[189] = invalidMinor;\njump[190] = invalidMinor;\njump[191] = map.decodeMapIndefinite;\nfor (let i = 192; i <= 215; i++) {\n  jump[i] = tag.decodeTagCompact;\n}\njump[216] = tag.decodeTag8;\njump[217] = tag.decodeTag16;\njump[218] = tag.decodeTag32;\njump[219] = tag.decodeTag64;\njump[220] = invalidMinor;\njump[221] = invalidMinor;\njump[222] = invalidMinor;\njump[223] = invalidMinor;\nfor (let i = 224; i <= 243; i++) {\n  jump[i] = errorer('simple values are not supported');\n}\njump[244] = invalidMinor;\njump[245] = invalidMinor;\njump[246] = invalidMinor;\njump[247] = float.decodeUndefined;\njump[248] = errorer('simple values are not supported');\njump[249] = float.decodeFloat16;\njump[250] = float.decodeFloat32;\njump[251] = float.decodeFloat64;\njump[252] = invalidMinor;\njump[253] = invalidMinor;\njump[254] = invalidMinor;\njump[255] = float.decodeBreak;\nexport const quick = [];\nfor (let i = 0; i < 24; i++) {\n  quick[i] = new Token(Type.uint, i, 1);\n}\nfor (let i = -1; i >= -24; i--) {\n  quick[31 - i] = new Token(Type.negint, i, 1);\n}\nquick[64] = new Token(Type.bytes, new Uint8Array(0), 1);\nquick[96] = new Token(Type.string, '', 1);\nquick[128] = new Token(Type.array, 0, 1);\nquick[160] = new Token(Type.map, 0, 1);\nquick[244] = new Token(Type.false, false, 1);\nquick[245] = new Token(Type.true, true, 1);\nquick[246] = new Token(Type.null, null, 1);\nexport function quickEncodeToken(token) {\n  switch (token.type) {\n  case Type.false:\n    return fromArray([244]);\n  case Type.true:\n    return fromArray([245]);\n  case Type.null:\n    return fromArray([246]);\n  case Type.bytes:\n    if (!token.value.length) {\n      return fromArray([64]);\n    }\n    return;\n  case Type.string:\n    if (token.value === '') {\n      return fromArray([96]);\n    }\n    return;\n  case Type.array:\n    if (token.value === 0) {\n      return fromArray([128]);\n    }\n    return;\n  case Type.map:\n    if (token.value === 0) {\n      return fromArray([160]);\n    }\n    return;\n  case Type.uint:\n    if (token.value < 24) {\n      return fromArray([Number(token.value)]);\n    }\n    return;\n  case Type.negint:\n    if (token.value >= -24) {\n      return fromArray([31 - Number(token.value)]);\n    }\n  }\n}", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  decodeErrPrefix,\n  assertEnoughData\n} from './common.js';\nexport const uintBoundaries = [\n  24,\n  256,\n  65536,\n  4294967296,\n  BigInt('18446744073709551616')\n];\nexport function readUint8(data, offset, options) {\n  assertEnoughData(data, offset, 1);\n  const value = data[offset];\n  if (options.strict === true && value < uintBoundaries[0]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint16(data, offset, options) {\n  assertEnoughData(data, offset, 2);\n  const value = data[offset] << 8 | data[offset + 1];\n  if (options.strict === true && value < uintBoundaries[1]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint32(data, offset, options) {\n  assertEnoughData(data, offset, 4);\n  const value = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n  if (options.strict === true && value < uintBoundaries[2]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  return value;\n}\nexport function readUint64(data, offset, options) {\n  assertEnoughData(data, offset, 8);\n  const hi = data[offset] * 16777216 + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3];\n  const lo = data[offset + 4] * 16777216 + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7];\n  const value = (BigInt(hi) << BigInt(32)) + BigInt(lo);\n  if (options.strict === true && value < uintBoundaries[3]) {\n    throw new Error(`${ decodeErrPrefix } integer encoded in more bytes than necessary (strict decode)`);\n  }\n  if (value <= Number.MAX_SAFE_INTEGER) {\n    return Number(value);\n  }\n  if (options.allowBigInt === true) {\n    return value;\n  }\n  throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n}\nexport function decodeUint8(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint8(data, pos + 1, options), 2);\n}\nexport function decodeUint16(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint16(data, pos + 1, options), 3);\n}\nexport function decodeUint32(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint32(data, pos + 1, options), 5);\n}\nexport function decodeUint64(data, pos, _minor, options) {\n  return new Token(Type.uint, readUint64(data, pos + 1, options), 9);\n}\nexport function encodeUint(buf, token) {\n  return encodeUintValue(buf, 0, token.value);\n}\nexport function encodeUintValue(buf, major, uint) {\n  if (uint < uintBoundaries[0]) {\n    const nuint = Number(uint);\n    buf.push([major | nuint]);\n  } else if (uint < uintBoundaries[1]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 24,\n      nuint\n    ]);\n  } else if (uint < uintBoundaries[2]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 25,\n      nuint >>> 8,\n      nuint & 255\n    ]);\n  } else if (uint < uintBoundaries[3]) {\n    const nuint = Number(uint);\n    buf.push([\n      major | 26,\n      nuint >>> 24 & 255,\n      nuint >>> 16 & 255,\n      nuint >>> 8 & 255,\n      nuint & 255\n    ]);\n  } else {\n    const buint = BigInt(uint);\n    if (buint < uintBoundaries[4]) {\n      const set = [\n        major | 27,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0\n      ];\n      let lo = Number(buint & BigInt(4294967295));\n      let hi = Number(buint >> BigInt(32) & BigInt(4294967295));\n      set[8] = lo & 255;\n      lo = lo >> 8;\n      set[7] = lo & 255;\n      lo = lo >> 8;\n      set[6] = lo & 255;\n      lo = lo >> 8;\n      set[5] = lo & 255;\n      set[4] = hi & 255;\n      hi = hi >> 8;\n      set[3] = hi & 255;\n      hi = hi >> 8;\n      set[2] = hi & 255;\n      hi = hi >> 8;\n      set[1] = hi & 255;\n      buf.push(set);\n    } else {\n      throw new Error(`${ decodeErrPrefix } encountered BigInt larger than allowable range`);\n    }\n  }\n}\nencodeUint.encodedSize = function encodedSize(token) {\n  return encodeUintValue.encodedSize(token.value);\n};\nencodeUintValue.encodedSize = function encodedSize(uint) {\n  if (uint < uintBoundaries[0]) {\n    return 1;\n  }\n  if (uint < uintBoundaries[1]) {\n    return 2;\n  }\n  if (uint < uintBoundaries[2]) {\n    return 3;\n  }\n  if (uint < uintBoundaries[3]) {\n    return 5;\n  }\n  return 9;\n};\nencodeUint.compareTokens = function compareTokens(tok1, tok2) {\n  return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : 0;\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nexport function decodeNegint8(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeNegint16(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeNegint32(data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5);\n}\nconst neg1b = BigInt(-1);\nconst pos1b = BigInt(1);\nexport function decodeNegint64(data, pos, _minor, options) {\n  const int = uint.readUint64(data, pos + 1, options);\n  if (typeof int !== 'bigint') {\n    const value = -1 - int;\n    if (value >= Number.MIN_SAFE_INTEGER) {\n      return new Token(Type.negint, value, 9);\n    }\n  }\n  if (options.allowBigInt !== true) {\n    throw new Error(`${ decodeErrPrefix } integers outside of the safe integer range are not supported`);\n  }\n  return new Token(Type.negint, neg1b - BigInt(int), 9);\n}\nexport function encodeNegint(buf, token) {\n  const negint = token.value;\n  const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n  uint.encodeUintValue(buf, token.type.majorEncoded, unsigned);\n}\nencodeNegint.encodedSize = function encodedSize(token) {\n  const negint = token.value;\n  const unsigned = typeof negint === 'bigint' ? negint * neg1b - pos1b : negint * -1 - 1;\n  if (unsigned < uint.uintBoundaries[0]) {\n    return 1;\n  }\n  if (unsigned < uint.uintBoundaries[1]) {\n    return 2;\n  }\n  if (unsigned < uint.uintBoundaries[2]) {\n    return 3;\n  }\n  if (unsigned < uint.uintBoundaries[3]) {\n    return 5;\n  }\n  return 9;\n};\nencodeNegint.compareTokens = function compareTokens(tok1, tok2) {\n  return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : 0;\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  assertEnoughData,\n  decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport {\n  compare,\n  fromString,\n  slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length) {\n  assertEnoughData(data, pos, prefix + length);\n  const buf = slice(data, pos + prefix, pos + prefix + length);\n  return new Token(Type.bytes, buf, prefix + length);\n}\nexport function decodeBytesCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeBytes8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeBytes16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeBytes32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeBytes64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer bytes lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nfunction tokenBytes(token) {\n  if (token.encodedBytes === undefined) {\n    token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value;\n  }\n  return token.encodedBytes;\n}\nexport function encodeBytes(buf, token) {\n  const bytes = tokenBytes(token);\n  uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length);\n  buf.push(bytes);\n}\nencodeBytes.encodedSize = function encodedSize(token) {\n  const bytes = tokenBytes(token);\n  return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length;\n};\nencodeBytes.compareTokens = function compareTokens(tok1, tok2) {\n  return compareBytes(tokenBytes(tok1), tokenBytes(tok2));\n};\nexport function compareBytes(b1, b2) {\n  return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2);\n}", "import {\n  Token,\n  Type\n} from './token.js';\nimport {\n  assertEnoughData,\n  decodeErrPrefix\n} from './common.js';\nimport * as uint from './0uint.js';\nimport { encodeBytes } from './2bytes.js';\nimport {\n  toString,\n  slice\n} from './byte-utils.js';\nfunction toToken(data, pos, prefix, length, options) {\n  const totLength = prefix + length;\n  assertEnoughData(data, pos, totLength);\n  const tok = new Token(Type.string, toString(data, pos + prefix, pos + totLength), totLength);\n  if (options.retainStringBytes === true) {\n    tok.byteValue = slice(data, pos + prefix, pos + totLength);\n  }\n  return tok;\n}\nexport function decodeStringCompact(data, pos, minor, options) {\n  return toToken(data, pos, 1, minor, options);\n}\nexport function decodeString8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options);\n}\nexport function decodeString16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options);\n}\nexport function decodeString32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options);\n}\nexport function decodeString64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer string lengths not supported`);\n  }\n  return toToken(data, pos, 9, l, options);\n}\nexport const encodeString = encodeBytes;", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n  return new Token(Type.array, length, prefix);\n}\nexport function decodeArrayCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeArray8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeArray16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeArray32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeArray64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer array lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nexport function decodeArrayIndefinite(data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return toToken(data, pos, 1, Infinity);\n}\nexport function encodeArray(buf, token) {\n  uint.encodeUintValue(buf, Type.array.majorEncoded, token.value);\n}\nencodeArray.compareTokens = uint.encodeUint.compareTokens;\nencodeArray.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nimport { decodeErrPrefix } from './common.js';\nfunction toToken(_data, _pos, prefix, length) {\n  return new Token(Type.map, length, prefix);\n}\nexport function decodeMapCompact(data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor);\n}\nexport function decodeMap8(data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options));\n}\nexport function decodeMap16(data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options));\n}\nexport function decodeMap32(data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options));\n}\nexport function decodeMap64(data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options);\n  if (typeof l === 'bigint') {\n    throw new Error(`${ decodeErrPrefix } 64-bit integer map lengths not supported`);\n  }\n  return toToken(data, pos, 9, l);\n}\nexport function decodeMapIndefinite(data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return toToken(data, pos, 1, Infinity);\n}\nexport function encodeMap(buf, token) {\n  uint.encodeUintValue(buf, Type.map.majorEncoded, token.value);\n}\nencodeMap.compareTokens = uint.encodeUint.compareTokens;\nencodeMap.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport * as uint from './0uint.js';\nexport function decodeTagCompact(_data, _pos, minor, _options) {\n  return new Token(Type.tag, minor, 1);\n}\nexport function decodeTag8(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2);\n}\nexport function decodeTag16(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3);\n}\nexport function decodeTag32(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5);\n}\nexport function decodeTag64(data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9);\n}\nexport function encodeTag(buf, token) {\n  uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value);\n}\nencodeTag.compareTokens = uint.encodeUint.compareTokens;\nencodeTag.encodedSize = function encodedSize(token) {\n  return uint.encodeUintValue.encodedSize(token.value);\n};", "import {\n  Token,\n  Type\n} from './token.js';\nimport { decodeErrPrefix } from './common.js';\nimport { encodeUint } from './0uint.js';\nconst MINOR_FALSE = 20;\nconst MINOR_TRUE = 21;\nconst MINOR_NULL = 22;\nconst MINOR_UNDEFINED = 23;\nexport function decodeUndefined(_data, _pos, _minor, options) {\n  if (options.allowUndefined === false) {\n    throw new Error(`${ decodeErrPrefix } undefined values are not supported`);\n  } else if (options.coerceUndefinedToNull === true) {\n    return new Token(Type.null, null, 1);\n  }\n  return new Token(Type.undefined, undefined, 1);\n}\nexport function decodeBreak(_data, _pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${ decodeErrPrefix } indefinite length items not allowed`);\n  }\n  return new Token(Type.break, undefined, 1);\n}\nfunction createToken(value, bytes, options) {\n  if (options) {\n    if (options.allowNaN === false && Number.isNaN(value)) {\n      throw new Error(`${ decodeErrPrefix } NaN values are not supported`);\n    }\n    if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n      throw new Error(`${ decodeErrPrefix } Infinity values are not supported`);\n    }\n  }\n  return new Token(Type.float, value, bytes);\n}\nexport function decodeFloat16(data, pos, _minor, options) {\n  return createToken(readFloat16(data, pos + 1), 3, options);\n}\nexport function decodeFloat32(data, pos, _minor, options) {\n  return createToken(readFloat32(data, pos + 1), 5, options);\n}\nexport function decodeFloat64(data, pos, _minor, options) {\n  return createToken(readFloat64(data, pos + 1), 9, options);\n}\nexport function encodeFloat(buf, token, options) {\n  const float = token.value;\n  if (float === false) {\n    buf.push([Type.float.majorEncoded | MINOR_FALSE]);\n  } else if (float === true) {\n    buf.push([Type.float.majorEncoded | MINOR_TRUE]);\n  } else if (float === null) {\n    buf.push([Type.float.majorEncoded | MINOR_NULL]);\n  } else if (float === undefined) {\n    buf.push([Type.float.majorEncoded | MINOR_UNDEFINED]);\n  } else {\n    let decoded;\n    let success = false;\n    if (!options || options.float64 !== true) {\n      encodeFloat16(float);\n      decoded = readFloat16(ui8a, 1);\n      if (float === decoded || Number.isNaN(float)) {\n        ui8a[0] = 249;\n        buf.push(ui8a.slice(0, 3));\n        success = true;\n      } else {\n        encodeFloat32(float);\n        decoded = readFloat32(ui8a, 1);\n        if (float === decoded) {\n          ui8a[0] = 250;\n          buf.push(ui8a.slice(0, 5));\n          success = true;\n        }\n      }\n    }\n    if (!success) {\n      encodeFloat64(float);\n      decoded = readFloat64(ui8a, 1);\n      ui8a[0] = 251;\n      buf.push(ui8a.slice(0, 9));\n    }\n  }\n}\nencodeFloat.encodedSize = function encodedSize(token, options) {\n  const float = token.value;\n  if (float === false || float === true || float === null || float === undefined) {\n    return 1;\n  }\n  if (!options || options.float64 !== true) {\n    encodeFloat16(float);\n    let decoded = readFloat16(ui8a, 1);\n    if (float === decoded || Number.isNaN(float)) {\n      return 3;\n    }\n    encodeFloat32(float);\n    decoded = readFloat32(ui8a, 1);\n    if (float === decoded) {\n      return 5;\n    }\n  }\n  return 9;\n};\nconst buffer = new ArrayBuffer(9);\nconst dataView = new DataView(buffer, 1);\nconst ui8a = new Uint8Array(buffer, 0);\nfunction encodeFloat16(inp) {\n  if (inp === Infinity) {\n    dataView.setUint16(0, 31744, false);\n  } else if (inp === -Infinity) {\n    dataView.setUint16(0, 64512, false);\n  } else if (Number.isNaN(inp)) {\n    dataView.setUint16(0, 32256, false);\n  } else {\n    dataView.setFloat32(0, inp);\n    const valu32 = dataView.getUint32(0);\n    const exponent = (valu32 & 2139095040) >> 23;\n    const mantissa = valu32 & 8388607;\n    if (exponent === 255) {\n      dataView.setUint16(0, 31744, false);\n    } else if (exponent === 0) {\n      dataView.setUint16(0, (inp & 2147483648) >> 16 | mantissa >> 13, false);\n    } else {\n      const logicalExponent = exponent - 127;\n      if (logicalExponent < -24) {\n        dataView.setUint16(0, 0);\n      } else if (logicalExponent < -14) {\n        dataView.setUint16(0, (valu32 & 2147483648) >> 16 | 1 << 24 + logicalExponent, false);\n      } else {\n        dataView.setUint16(0, (valu32 & 2147483648) >> 16 | logicalExponent + 15 << 10 | mantissa >> 13, false);\n      }\n    }\n  }\n}\nfunction readFloat16(ui8a, pos) {\n  if (ui8a.length - pos < 2) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float16`);\n  }\n  const half = (ui8a[pos] << 8) + ui8a[pos + 1];\n  if (half === 31744) {\n    return Infinity;\n  }\n  if (half === 64512) {\n    return -Infinity;\n  }\n  if (half === 32256) {\n    return NaN;\n  }\n  const exp = half >> 10 & 31;\n  const mant = half & 1023;\n  let val;\n  if (exp === 0) {\n    val = mant * 2 ** -24;\n  } else if (exp !== 31) {\n    val = (mant + 1024) * 2 ** (exp - 25);\n  } else {\n    val = mant === 0 ? Infinity : NaN;\n  }\n  return half & 32768 ? -val : val;\n}\nfunction encodeFloat32(inp) {\n  dataView.setFloat32(0, inp, false);\n}\nfunction readFloat32(ui8a, pos) {\n  if (ui8a.length - pos < 4) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float32`);\n  }\n  const offset = (ui8a.byteOffset || 0) + pos;\n  return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false);\n}\nfunction encodeFloat64(inp) {\n  dataView.setFloat64(0, inp, false);\n}\nfunction readFloat64(ui8a, pos) {\n  if (ui8a.length - pos < 8) {\n    throw new Error(`${ decodeErrPrefix } not enough data for float64`);\n  }\n  const offset = (ui8a.byteOffset || 0) + pos;\n  return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false);\n}\nencodeFloat.compareTokens = encodeUint.compareTokens;", "import { decodeErrPrefix } from './common.js';\nimport { Type } from './token.js';\nimport {\n  jump,\n  quick\n} from './jump.js';\nconst defaultDecodeOptions = {\n  strict: false,\n  allowIndefinite: true,\n  allowUndefined: true,\n  allowBigInt: true\n};\nclass Tokeniser {\n  constructor(data, options = {}) {\n    this.pos = 0;\n    this.data = data;\n    this.options = options;\n  }\n  done() {\n    return this.pos >= this.data.length;\n  }\n  next() {\n    const byt = this.data[this.pos];\n    let token = quick[byt];\n    if (token === undefined) {\n      const decoder = jump[byt];\n      if (!decoder) {\n        throw new Error(`${ decodeErrPrefix } no decoder for major type ${ byt >>> 5 } (byte 0x${ byt.toString(16).padStart(2, '0') })`);\n      }\n      const minor = byt & 31;\n      token = decoder(this.data, this.pos, minor, this.options);\n    }\n    this.pos += token.encodedLength;\n    return token;\n  }\n}\nconst DONE = Symbol.for('DONE');\nconst BREAK = Symbol.for('BREAK');\nfunction tokenToArray(token, tokeniser, options) {\n  const arr = [];\n  for (let i = 0; i < token.value; i++) {\n    const value = tokensToObject(tokeniser, options);\n    if (value === BREAK) {\n      if (token.value === Infinity) {\n        break;\n      }\n      throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed array`);\n    }\n    if (value === DONE) {\n      throw new Error(`${ decodeErrPrefix } found array but not enough entries (got ${ i }, expected ${ token.value })`);\n    }\n    arr[i] = value;\n  }\n  return arr;\n}\nfunction tokenToMap(token, tokeniser, options) {\n  const useMaps = options.useMaps === true;\n  const obj = useMaps ? undefined : {};\n  const m = useMaps ? new Map() : undefined;\n  for (let i = 0; i < token.value; i++) {\n    const key = tokensToObject(tokeniser, options);\n    if (key === BREAK) {\n      if (token.value === Infinity) {\n        break;\n      }\n      throw new Error(`${ decodeErrPrefix } got unexpected break to lengthed map`);\n    }\n    if (key === DONE) {\n      throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no key], expected ${ token.value })`);\n    }\n    if (useMaps !== true && typeof key !== 'string') {\n      throw new Error(`${ decodeErrPrefix } non-string keys not supported (got ${ typeof key })`);\n    }\n    if (options.rejectDuplicateMapKeys === true) {\n      if (useMaps && m.has(key) || !useMaps && key in obj) {\n        throw new Error(`${ decodeErrPrefix } found repeat map key \"${ key }\"`);\n      }\n    }\n    const value = tokensToObject(tokeniser, options);\n    if (value === DONE) {\n      throw new Error(`${ decodeErrPrefix } found map but not enough entries (got ${ i } [no value], expected ${ token.value })`);\n    }\n    if (useMaps) {\n      m.set(key, value);\n    } else {\n      obj[key] = value;\n    }\n  }\n  return useMaps ? m : obj;\n}\nfunction tokensToObject(tokeniser, options) {\n  if (tokeniser.done()) {\n    return DONE;\n  }\n  const token = tokeniser.next();\n  if (token.type === Type.break) {\n    return BREAK;\n  }\n  if (token.type.terminal) {\n    return token.value;\n  }\n  if (token.type === Type.array) {\n    return tokenToArray(token, tokeniser, options);\n  }\n  if (token.type === Type.map) {\n    return tokenToMap(token, tokeniser, options);\n  }\n  if (token.type === Type.tag) {\n    if (options.tags && typeof options.tags[token.value] === 'function') {\n      const tagged = tokensToObject(tokeniser, options);\n      return options.tags[token.value](tagged);\n    }\n    throw new Error(`${ decodeErrPrefix } tag not supported (${ token.value })`);\n  }\n  throw new Error('unsupported');\n}\nfunction decode(data, options) {\n  if (!(data instanceof Uint8Array)) {\n    throw new Error(`${ decodeErrPrefix } data to decode must be a Uint8Array`);\n  }\n  options = Object.assign({}, defaultDecodeOptions, options);\n  const tokeniser = options.tokenizer || new Tokeniser(data, options);\n  const decoded = tokensToObject(tokeniser, options);\n  if (decoded === DONE) {\n    throw new Error(`${ decodeErrPrefix } did not find any content to decode`);\n  }\n  if (decoded === BREAK) {\n    throw new Error(`${ decodeErrPrefix } got unexpected break`);\n  }\n  if (!tokeniser.done()) {\n    throw new Error(`${ decodeErrPrefix } too many terminals, data makes no sense`);\n  }\n  return decoded;\n}\nexport {\n  Tokeniser,\n  tokensToObject,\n  decode\n};", "import { base32 } from './bases/base32.js'\nimport { base58btc } from './bases/base58.js'\nimport { coerce } from './bytes.js'\nimport * as Digest from './hashes/digest.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  /**\n   * @returns {API.LinkJSON<this>}\n   */\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        /** @type {API.MultihashDigest<Alg>} */ (multihash),\n        bytes || encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   *\n   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = /** @type {A} */ (next()) // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   *\n   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "import basex from '../../vendor/base-x.js'\nimport { coerce } from '../bytes.js'\n// Linter can't see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\n/**\n * Class represents both BaseEncoder and MultibaseEncoder meaning it\n * can be used to encode to multibase or base encode without multibase\n * prefix.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.BaseEncoder}\n */\nclass Encoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   */\n  constructor (name, prefix, baseEncode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n  }\n\n  /**\n   * @param {Uint8Array} bytes\n   * @returns {API.Multibase<Prefix>}\n   */\n  encode (bytes) {\n    if (bytes instanceof Uint8Array) {\n      return `${this.prefix}${this.baseEncode(bytes)}`\n    } else {\n      throw Error('Unknown type, must be binary type')\n    }\n  }\n}\n\n/**\n * @template {string} Prefix\n */\n/**\n * Class represents both BaseDecoder and MultibaseDecoder so it could be used\n * to decode multibases (with matching prefix) or just base decode strings\n * with corresponding base encoding.\n *\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.UnibaseDecoder<Prefix>}\n * @implements {API.BaseDecoder}\n */\nclass Decoder {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    /* c8 ignore next 3 */\n    if (prefix.codePointAt(0) === undefined) {\n      throw new Error('Invalid prefix character')\n    }\n    /** @private */\n    this.prefixCodePoint = /** @type {number} */ (prefix.codePointAt(0))\n    this.baseDecode = baseDecode\n  }\n\n  /**\n   * @param {string} text\n   */\n  decode (text) {\n    if (typeof text === 'string') {\n      if (text.codePointAt(0) !== this.prefixCodePoint) {\n        throw Error(`Unable to decode multibase string ${JSON.stringify(text)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`)\n      }\n      return this.baseDecode(text.slice(this.prefix.length))\n    } else {\n      throw Error('Can only multibase decode strings')\n    }\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n}\n\n/**\n * @template {string} Prefix\n * @typedef {Record<Prefix, API.UnibaseDecoder<Prefix>>} Decoders\n */\n\n/**\n * @template {string} Prefix\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.CombobaseDecoder<Prefix>}\n */\nclass ComposedDecoder {\n  /**\n   * @param {Decoders<Prefix>} decoders\n   */\n  constructor (decoders) {\n    this.decoders = decoders\n  }\n\n  /**\n   * @template {string} OtherPrefix\n   * @param {API.UnibaseDecoder<OtherPrefix>|ComposedDecoder<OtherPrefix>} decoder\n   * @returns {ComposedDecoder<Prefix|OtherPrefix>}\n   */\n  or (decoder) {\n    return or(this, decoder)\n  }\n\n  /**\n   * @param {string} input\n   * @returns {Uint8Array}\n   */\n  decode (input) {\n    const prefix = /** @type {Prefix} */ (input[0])\n    const decoder = this.decoders[prefix]\n    if (decoder) {\n      return decoder.decode(input)\n    } else {\n      throw RangeError(`Unable to decode multibase string ${JSON.stringify(input)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)\n    }\n  }\n}\n\n/**\n * @template {string} L\n * @template {string} R\n * @param {API.UnibaseDecoder<L>|API.CombobaseDecoder<L>} left\n * @param {API.UnibaseDecoder<R>|API.CombobaseDecoder<R>} right\n * @returns {ComposedDecoder<L|R>}\n */\nexport const or = (left, right) => new ComposedDecoder(/** @type {Decoders<L|R>} */({\n  ...(left.decoders || { [/** @type API.UnibaseDecoder<L> */(left).prefix]: left }),\n  ...(right.decoders || { [/** @type API.UnibaseDecoder<R> */(right).prefix]: right })\n}))\n\n/**\n * @class\n * @template {string} Base\n * @template {string} Prefix\n * @implements {API.MultibaseCodec<Prefix>}\n * @implements {API.MultibaseEncoder<Prefix>}\n * @implements {API.MultibaseDecoder<Prefix>}\n * @implements {API.BaseCodec}\n * @implements {API.BaseEncoder}\n * @implements {API.BaseDecoder}\n */\nexport class Codec {\n  /**\n   * @param {Base} name\n   * @param {Prefix} prefix\n   * @param {(bytes:Uint8Array) => string} baseEncode\n   * @param {(text:string) => Uint8Array} baseDecode\n   */\n  constructor (name, prefix, baseEncode, baseDecode) {\n    this.name = name\n    this.prefix = prefix\n    this.baseEncode = baseEncode\n    this.baseDecode = baseDecode\n    this.encoder = new Encoder(name, prefix, baseEncode)\n    this.decoder = new Decoder(name, prefix, baseDecode)\n  }\n\n  /**\n   * @param {Uint8Array} input\n   */\n  encode (input) {\n    return this.encoder.encode(input)\n  }\n\n  /**\n   * @param {string} input\n   */\n  decode (input) {\n    return this.decoder.decode(input)\n  }\n}\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {(bytes:Uint8Array) => string} options.encode\n * @param {(input:string) => Uint8Array} options.decode\n * @returns {Codec<Base, Prefix>}\n */\nexport const from = ({ name, prefix, encode, decode }) =>\n  new Codec(name, prefix, encode, decode)\n\n/**\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @returns {Codec<Base, Prefix>}\n */\nexport const baseX = ({ prefix, name, alphabet }) => {\n  const { encode, decode } = basex(alphabet, name)\n  return from({\n    prefix,\n    name,\n    encode,\n    /**\n     * @param {string} text\n     */\n    decode: text => coerce(decode(text))\n  })\n}\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @param {string} name\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar, name) => {\n  // Build the character lookup table:\n  /** @type {Record<string, number>} */\n  const codes = {}\n  for (let i = 0; i < alphabet.length; ++i) {\n    codes[alphabet[i]] = i\n  }\n\n  // Count the padding bytes:\n  let end = string.length\n  while (string[end - 1] === '=') {\n    --end\n  }\n\n  // Allocate the output:\n  const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n  // Parse the data:\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  let written = 0 // Next byte to write\n  for (let i = 0; i < end; ++i) {\n    // Read one character from the string:\n    const value = codes[string[i]]\n    if (value === undefined) {\n      throw new SyntaxError(`Non-${name} character`)\n    }\n\n    // Append the bits to the buffer:\n    buffer = (buffer << bitsPerChar) | value\n    bits += bitsPerChar\n\n    // Write out some bits if the buffer has a byte's worth:\n    if (bits >= 8) {\n      bits -= 8\n      out[written++] = 0xff & (buffer >> bits)\n    }\n  }\n\n  // Verify that we have received just enough bits:\n  if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n    throw new SyntaxError('Unexpected end of data')\n  }\n\n  return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n  const pad = alphabet[alphabet.length - 1] === '='\n  const mask = (1 << bitsPerChar) - 1\n  let out = ''\n\n  let bits = 0 // Number of bits currently in the buffer\n  let buffer = 0 // Bits waiting to be written out, MSB first\n  for (let i = 0; i < data.length; ++i) {\n    // Slurp data into the buffer:\n    buffer = (buffer << 8) | data[i]\n    bits += 8\n\n    // Write out as much as we can:\n    while (bits > bitsPerChar) {\n      bits -= bitsPerChar\n      out += alphabet[mask & (buffer >> bits)]\n    }\n  }\n\n  // Partial character:\n  if (bits) {\n    out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n  }\n\n  // Add padding characters until we hit a byte boundary:\n  if (pad) {\n    while ((out.length * bitsPerChar) & 7) {\n      out += '='\n    }\n  }\n\n  return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @template {string} Base\n * @template {string} Prefix\n * @param {object} options\n * @param {Base} options.name\n * @param {Prefix} options.prefix\n * @param {string} options.alphabet\n * @param {number} options.bitsPerChar\n */\nexport const rfc4648 = ({ name, prefix, bitsPerChar, alphabet }) => {\n  return from({\n    prefix,\n    name,\n    encode (input) {\n      return encode(input, alphabet, bitsPerChar)\n    },\n    decode (input) {\n      return decode(input, alphabet, bitsPerChar, name)\n    }\n  })\n}\n", "// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET, name) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256);\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255;\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i);\n    var xc = x.charCodeAt(0);\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i;\n  }\n  var BASE = ALPHABET.length;\n  var LEADER = ALPHABET.charAt(0);\n  var FACTOR = Math.log(BASE) / Math.log(256); // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE); // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) ; else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source);\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0;\n    var length = 0;\n    var pbegin = 0;\n    var pend = source.length;\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++;\n      zeroes++;\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0;\n    var b58 = new Uint8Array(size);\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin];\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0;\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0;\n        b58[it1] = (carry % BASE) >>> 0;\n        carry = (carry / BASE) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      pbegin++;\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length;\n    while (it2 !== size && b58[it2] === 0) {\n      it2++;\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes);\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]); }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0;\n        // Skip leading spaces.\n    if (source[psz] === ' ') { return }\n        // Skip and count leading '1's.\n    var zeroes = 0;\n    var length = 0;\n    while (source[psz] === LEADER) {\n      zeroes++;\n      psz++;\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0; // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size);\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)];\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0;\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0;\n        b256[it3] = (carry % 256) >>> 0;\n        carry = (carry / 256) >>> 0;\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i;\n      psz++;\n    }\n        // Skip trailing spaces.\n    if (source[psz] === ' ') { return }\n        // Skip leading zeroes in b256.\n    var it4 = size - length;\n    while (it4 !== size && b256[it4] === 0) {\n      it4++;\n    }\n    var vch = new Uint8Array(zeroes + (size - it4));\n    var j = zeroes;\n    while (it4 !== size) {\n      vch[j++] = b256[it4++];\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string);\n    if (buffer) { return buffer }\n    throw new Error(`Non-${name} character`)\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nvar src = base;\n\nvar _brrp__multiformats_scope_baseX = src;\n\nexport default _brrp__multiformats_scope_baseX;\n", "const empty = new Uint8Array(0)\n\n/**\n * @param {Uint8Array} d\n */\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '')\n\n/**\n * @param {string} hex\n */\nconst fromHex = hex => {\n  const hexes = hex.match(/../g)\n  return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty\n}\n\n/**\n * @param {Uint8Array} aa\n * @param {Uint8Array} bb\n */\nconst equals = (aa, bb) => {\n  if (aa === bb) return true\n  if (aa.byteLength !== bb.byteLength) {\n    return false\n  }\n\n  for (let ii = 0; ii < aa.byteLength; ii++) {\n    if (aa[ii] !== bb[ii]) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {ArrayBufferView|ArrayBuffer|Uint8Array} o\n * @returns {Uint8Array}\n */\nconst coerce = o => {\n  if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array') return o\n  if (o instanceof ArrayBuffer) return new Uint8Array(o)\n  if (ArrayBuffer.isView(o)) {\n    return new Uint8Array(o.buffer, o.byteOffset, o.byteLength)\n  }\n  throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {any} o\n * @returns {o is ArrayBuffer|ArrayBufferView}\n */\nconst isBinary = o =>\n  o instanceof ArrayBuffer || ArrayBuffer.isView(o)\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nconst fromString = str => (new TextEncoder()).encode(str)\n\n/**\n * @param {Uint8Array} b\n * @returns {string}\n */\nconst toString = b => (new TextDecoder()).decode(b)\n\nexport { equals, coerce, isBinary, fromHex, toHex, fromString, toString, empty }\n", "// this is dummy module overlayed by interface.ts\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { coerce, equals as equalBytes } from '../bytes.js'\nimport * as varint from '../varint.js'\n\n/**\n * Creates a multihash digest.\n *\n * @template {number} Code\n * @param {Code} code\n * @param {Uint8Array} digest\n */\nexport const create = (code, digest) => {\n  const size = digest.byteLength\n  const sizeOffset = varint.encodingLength(code)\n  const digestOffset = sizeOffset + varint.encodingLength(size)\n\n  const bytes = new Uint8Array(digestOffset + size)\n  varint.encodeTo(code, bytes, 0)\n  varint.encodeTo(size, bytes, sizeOffset)\n  bytes.set(digest, digestOffset)\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * Turns bytes representation of multihash digest into an instance.\n *\n * @param {Uint8Array} multihash\n * @returns {MultihashDigest}\n */\nexport const decode = (multihash) => {\n  const bytes = coerce(multihash)\n  const [code, sizeOffset] = varint.decode(bytes)\n  const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset))\n  const digest = bytes.subarray(sizeOffset + digestOffset)\n\n  if (digest.byteLength !== size) {\n    throw new Error('Incorrect length')\n  }\n\n  return new Digest(code, size, digest, bytes)\n}\n\n/**\n * @param {MultihashDigest} a\n * @param {unknown} b\n * @returns {b is MultihashDigest}\n */\nexport const equals = (a, b) => {\n  if (a === b) {\n    return true\n  } else {\n    const data = /** @type {{code?:unknown, size?:unknown, bytes?:unknown}} */(b)\n\n    return (\n      a.code === data.code &&\n      a.size === data.size &&\n      data.bytes instanceof Uint8Array &&\n      equalBytes(a.bytes, data.bytes)\n    )\n  }\n}\n\n/**\n * @typedef {import('./interface.js').MultihashDigest} MultihashDigest\n */\n\n/**\n * Represents a multihash digest which carries information about the\n * hashing algorithm and an actual hash digest.\n *\n * @template {number} Code\n * @template {number} Size\n * @class\n * @implements {MultihashDigest}\n */\nexport class Digest {\n  /**\n   * Creates a multihash digest.\n   *\n   * @param {Code} code\n   * @param {Size} size\n   * @param {Uint8Array} digest\n   * @param {Uint8Array} bytes\n   */\n  constructor (code, size, digest, bytes) {\n    this.code = code\n    this.size = size\n    this.digest = digest\n    this.bytes = bytes\n  }\n}\n", "import varint from '../vendor/varint.js'\n\n/**\n * @param {Uint8Array} data\n * @param {number} [offset=0]\n * @returns {[number, number]}\n */\nexport const decode = (data, offset = 0) => {\n  const code = varint.decode(data, offset)\n  return [code, varint.decode.bytes]\n}\n\n/**\n * @param {number} int\n * @param {Uint8Array} target\n * @param {number} [offset=0]\n */\nexport const encodeTo = (int, target, offset = 0) => {\n  varint.encode(int, target, offset)\n  return target\n}\n\n/**\n * @param {number} int\n * @returns {number}\n */\nexport const encodingLength = (int) => {\n  return varint.encodingLength(int)\n}\n", "var encode_1 = encode;\n\nvar MSB = 0x80\n  , REST = 0x7F\n  , MSBALL = ~REST\n  , INT = Math.pow(2, 31);\n\nfunction encode(num, out, offset) {\n  out = out || [];\n  offset = offset || 0;\n  var oldOffset = offset;\n\n  while(num >= INT) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num /= 128;\n  }\n  while(num & MSBALL) {\n    out[offset++] = (num & 0xFF) | MSB;\n    num >>>= 7;\n  }\n  out[offset] = num | 0;\n  \n  encode.bytes = offset - oldOffset + 1;\n  \n  return out\n}\n\nvar decode = read;\n\nvar MSB$1 = 0x80\n  , REST$1 = 0x7F;\n\nfunction read(buf, offset) {\n  var res    = 0\n    , offset = offset || 0\n    , shift  = 0\n    , counter = offset\n    , b\n    , l = buf.length;\n\n  do {\n    if (counter >= l) {\n      read.bytes = 0;\n      throw new RangeError('Could not decode varint')\n    }\n    b = buf[counter++];\n    res += shift < 28\n      ? (b & REST$1) << shift\n      : (b & REST$1) * Math.pow(2, shift);\n    shift += 7;\n  } while (b >= MSB$1)\n\n  read.bytes = counter - offset;\n\n  return res\n}\n\nvar N1 = Math.pow(2,  7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\n\nvar length = function (value) {\n  return (\n    value < N1 ? 1\n  : value < N2 ? 2\n  : value < N3 ? 3\n  : value < N4 ? 4\n  : value < N5 ? 5\n  : value < N6 ? 6\n  : value < N7 ? 7\n  : value < N8 ? 8\n  : value < N9 ? 9\n  :              10\n  )\n};\n\nvar varint = {\n    encode: encode_1\n  , decode: decode\n  , encodingLength: length\n};\n\nvar _brrp_varint = varint;\n\nexport default _brrp_varint;\n", "// this is dummy module overlayed by interface.ts\n", "import { CID } from './cid.js'\nimport * as varint from './varint.js'\nimport * as bytes from './bytes.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as digest from './hashes/digest.js'\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "import * as varint from './varint.js'\nimport * as Digest from './hashes/digest.js'\nimport { base58btc } from './bases/base58.js'\nimport { base32 } from './bases/base32.js'\nimport { coerce } from './bytes.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from \"./link/interface.js\"\n\n// This way TS will also expose all the types from module\nexport * from './link/interface.js'\n\n/**\n * @template {API.Link<unknown, number, number, API.Version>} T\n * @template {string} Prefix\n * @param {T} link\n * @param {API.MultibaseEncoder<Prefix>} [base]\n * @returns {API.ToString<T, Prefix>}\n */\nexport const format = (link, base) => {\n  const { bytes, version } = link\n  switch (version) {\n    case 0:\n      return toStringV0(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<\"z\">} */ (base) || base58btc.encoder\n      )\n    default:\n      return toStringV1(\n        bytes,\n        baseCache(link),\n        /** @type {API.MultibaseEncoder<Prefix>} */ (base || base32.encoder)\n      )\n  }\n}\n\n/**\n * @template {API.UnknownLink} Link\n * @param {Link} link\n * @returns {API.LinkJSON<Link>}\n */\nexport const toJSON = (link) => ({\n  '/': format(link)\n})\n\n/**\n * @template {API.UnknownLink} Link\n * @param {API.LinkJSON<Link>} json\n */\nexport const fromJSON = (json) =>\n  CID.parse(json['/'])\n\n/** @type {WeakMap<API.UnknownLink, Map<string, string>>} */\nconst cache = new WeakMap()\n\n/**\n * @param {API.UnknownLink} cid\n * @returns {Map<string, string>}\n */\nconst baseCache = cid => {\n  const baseCache = cache.get(cid)\n  if (baseCache == null) {\n    const baseCache = new Map()\n    cache.set(cid, baseCache)\n    return baseCache\n  }\n  return baseCache\n}\n\n/**\n * @template {unknown} [Data=unknown]\n * @template {number} [Format=number]\n * @template {number} [Alg=number]\n * @template {API.Version} [Version=API.Version]\n * @implements {API.Link<Data, Format, Alg, Version>}\n */\n\nexport class CID {\n  /**\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} multihash - (Multi)hash of the of the content.\n   * @param {Uint8Array} bytes\n   *\n   */\n  constructor (version, code, multihash, bytes) {\n    /** @readonly */\n    this.code = code\n    /** @readonly */\n    this.version = version\n    /** @readonly */\n    this.multihash = multihash\n    /** @readonly */\n    this.bytes = bytes\n\n    // flag to serializers that this is a CID and\n    // should be treated specially\n    /** @readonly */\n    this['/'] = bytes\n  }\n\n  /**\n   * Signalling `cid.asCID === cid` has been replaced with `cid['/'] === cid.bytes`\n   * please either use `CID.asCID(cid)` or switch to new signalling mechanism\n   *\n   * @deprecated\n   */\n  get asCID () {\n    return this\n  }\n\n  // ArrayBufferView\n  get byteOffset () {\n    return this.bytes.byteOffset\n  }\n\n  // ArrayBufferView\n  get byteLength () {\n    return this.bytes.byteLength\n  }\n\n  /**\n   * @returns {CID<Data, API.DAG_PB, API.SHA_256, 0>}\n   */\n  toV0 () {\n    switch (this.version) {\n      case 0: {\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (this)\n      }\n      case 1: {\n        const { code, multihash } = this\n\n        if (code !== DAG_PB_CODE) {\n          throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n        }\n\n        // sha2-256\n        if (multihash.code !== SHA_256_CODE) {\n          throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n        }\n\n        return /** @type {CID<Data, API.DAG_PB, API.SHA_256, 0>} */ (\n          CID.createV0(\n            /** @type {API.MultihashDigest<API.SHA_256>} */ (multihash)\n          )\n        )\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 0. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @returns {CID<Data, Format, Alg, 1>}\n   */\n  toV1 () {\n    switch (this.version) {\n      case 0: {\n        const { code, digest } = this.multihash\n        const multihash = Digest.create(code, digest)\n        return /** @type {CID<Data, Format, Alg, 1>} */ (\n          CID.createV1(this.code, multihash)\n        )\n      }\n      case 1: {\n        return /** @type {CID<Data, Format, Alg, 1>} */ (this)\n      }\n      default: {\n        throw Error(\n          `Can not convert CID version ${this.version} to version 1. This is a bug please report`\n        )\n      }\n    }\n  }\n\n  /**\n   * @param {unknown} other\n   * @returns {other is CID<Data, Format, Alg, Version>}\n   */\n  equals (other) {\n    return CID.equals(this, other)\n  }\n\n  /**\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {API.Link<Data, Format, Alg, Version>} self\n   * @param {unknown} other\n   * @returns {other is CID}\n   */\n  static equals (self, other) {\n    const unknown =\n      /** @type {{code?:unknown, version?:unknown, multihash?:unknown}} */ (\n        other\n      )\n    return (\n      unknown &&\n      self.code === unknown.code &&\n      self.version === unknown.version &&\n      Digest.equals(self.multihash, unknown.multihash)\n    )\n  }\n\n  /**\n   * @param {API.MultibaseEncoder<string>} [base]\n   * @returns {string}\n   */\n  toString (base) {\n    return format(this, base)\n  }\n\n  toJSON () {\n    return { '/': format(this) }\n  }\n\n  link () {\n    return this\n  }\n\n  get [Symbol.toStringTag] () {\n    return 'CID'\n  }\n\n  // Legacy\n\n  [Symbol.for('nodejs.util.inspect.custom')] () {\n    return `CID(${this.toString()})`\n  }\n\n  /**\n   * Takes any input `value` and returns a `CID` instance if it was\n   * a `CID` otherwise returns `null`. If `value` is instanceof `CID`\n   * it will return value back. If `value` is not instance of this CID\n   * class, but is compatible CID it will return new instance of this\n   * `CID` class. Otherwise returns null.\n   *\n   * This allows two different incompatible versions of CID library to\n   * co-exist and interop as long as binary interface is compatible.\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @template {unknown} U\n   * @param {API.Link<Data, Format, Alg, Version>|U} input\n   * @returns {CID<Data, Format, Alg, Version>|null}\n   */\n  static asCID (input) {\n    if (input == null) {\n      return null\n    }\n\n    const value = /** @type {any} */ (input)\n    if (value instanceof CID) {\n      // If value is instance of CID then we're all set.\n      return value\n    } else if ((value['/'] != null && value['/'] === value.bytes) || value.asCID === value) {\n      // If value isn't instance of this CID class but `this.asCID === this` or\n      // `value['/'] === value.bytes` is true it is CID instance coming from a\n      // different implementation (diff version or duplicate). In that case we\n      // rebase it to this `CID` implementation so caller is guaranteed to get\n      // instance with expected API.\n      const { version, code, multihash, bytes } = value\n      return new CID(\n        version,\n        code,\n        /** @type {API.MultihashDigest<Alg>} */ (multihash),\n        bytes || encodeCID(version, code, multihash.bytes)\n      )\n    } else if (value[cidSymbol] === true) {\n      // If value is a CID from older implementation that used to be tagged via\n      // symbol we still rebase it to the this `CID` implementation by\n      // delegating that to a constructor.\n      const { version, multihash, code } = value\n      const digest =\n        /** @type {API.MultihashDigest<Alg>} */\n        (Digest.decode(multihash))\n      return CID.create(version, code, digest)\n    } else {\n      // Otherwise value is not a CID (or an incompatible version of it) in\n      // which case we return `null`.\n      return null\n    }\n  }\n\n  /**\n   *\n   * @template {unknown} Data\n   * @template {number} Format\n   * @template {number} Alg\n   * @template {API.Version} Version\n   * @param {Version} version - Version of the CID\n   * @param {Format} code - Code of the codec content is encoded in, see https://github.com/multiformats/multicodec/blob/master/table.csv\n   * @param {API.MultihashDigest<Alg>} digest - (Multi)hash of the of the content.\n   * @returns {CID<Data, Format, Alg, Version>}\n   */\n  static create (version, code, digest) {\n    if (typeof code !== 'number') {\n      throw new Error('String codecs are no longer supported')\n    }\n\n    if (!(digest.bytes instanceof Uint8Array)) {\n      throw new Error('Invalid digest')\n    }\n\n    switch (version) {\n      case 0: {\n        if (code !== DAG_PB_CODE) {\n          throw new Error(\n            `Version 0 CID must use dag-pb (code: ${DAG_PB_CODE}) block encoding`\n          )\n        } else {\n          return new CID(version, code, digest, digest.bytes)\n        }\n      }\n      case 1: {\n        const bytes = encodeCID(version, code, digest.bytes)\n        return new CID(version, code, digest, bytes)\n      }\n      default: {\n        throw new Error('Invalid version')\n      }\n    }\n  }\n\n  /**\n   * Simplified version of `create` for CIDv0.\n   *\n   * @template {unknown} [T=unknown]\n   * @param {API.MultihashDigest<typeof SHA_256_CODE>} digest - Multihash.\n   * @returns {CID<T, typeof DAG_PB_CODE, typeof SHA_256_CODE, 0>}\n   */\n  static createV0 (digest) {\n    return CID.create(0, DAG_PB_CODE, digest)\n  }\n\n  /**\n   * Simplified version of `create` for CIDv1.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @param {Code} code - Content encoding format code.\n   * @param {API.MultihashDigest<Alg>} digest - Miltihash of the content.\n   * @returns {CID<Data, Code, Alg, 1>}\n   */\n  static createV1 (code, digest) {\n    return CID.create(1, code, digest)\n  }\n\n  /**\n   * Decoded a CID from its binary representation. The byte array must contain\n   * only the CID with no additional bytes.\n   *\n   * An error will be thrown if the bytes provided do not contain a valid\n   * binary representation of a CID.\n   *\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ByteView<API.Link<Data, Code, Alg, Ver>>} bytes\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static decode (bytes) {\n    const [cid, remainder] = CID.decodeFirst(bytes)\n    if (remainder.length) {\n      throw new Error('Incorrect length')\n    }\n    return cid\n  }\n\n  /**\n   * Decoded a CID from its binary representation at the beginning of a byte\n   * array.\n   *\n   * Returns an array with the first element containing the CID and the second\n   * element containing the remainder of the original byte array. The remainder\n   * will be a zero-length byte array if the provided bytes only contained a\n   * binary CID representation.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} bytes\n   * @returns {[CID<T, C, A, V>, Uint8Array]}\n   */\n  static decodeFirst (bytes) {\n    const specs = CID.inspectBytes(bytes)\n    const prefixSize = specs.size - specs.multihashSize\n    const multihashBytes = coerce(\n      bytes.subarray(prefixSize, prefixSize + specs.multihashSize)\n    )\n    if (multihashBytes.byteLength !== specs.multihashSize) {\n      throw new Error('Incorrect length')\n    }\n    const digestBytes = multihashBytes.subarray(\n      specs.multihashSize - specs.digestSize\n    )\n    const digest = new Digest.Digest(\n      specs.multihashCode,\n      specs.digestSize,\n      digestBytes,\n      multihashBytes\n    )\n    const cid =\n      specs.version === 0\n        ? CID.createV0(/** @type {API.MultihashDigest<API.SHA_256>} */ (digest))\n        : CID.createV1(specs.codec, digest)\n    return [/** @type {CID<T, C, A, V>} */(cid), bytes.subarray(specs.size)]\n  }\n\n  /**\n   * Inspect the initial bytes of a CID to determine its properties.\n   *\n   * Involves decoding up to 4 varints. Typically this will require only 4 to 6\n   * bytes but for larger multicodec code values and larger multihash digest\n   * lengths these varints can be quite large. It is recommended that at least\n   * 10 bytes be made available in the `initialBytes` argument for a complete\n   * inspection.\n   *\n   * @template {unknown} T\n   * @template {number} C\n   * @template {number} A\n   * @template {API.Version} V\n   * @param {API.ByteView<API.Link<T, C, A, V>>} initialBytes\n   * @returns {{ version:V, codec:C, multihashCode:A, digestSize:number, multihashSize:number, size:number }}\n   */\n  static inspectBytes (initialBytes) {\n    let offset = 0\n    const next = () => {\n      const [i, length] = varint.decode(initialBytes.subarray(offset))\n      offset += length\n      return i\n    }\n\n    let version = /** @type {V} */ (next())\n    let codec = /** @type {C} */ (DAG_PB_CODE)\n    if (/** @type {number} */(version) === 18) {\n      // CIDv0\n      version = /** @type {V} */ (0)\n      offset = 0\n    } else {\n      codec = /** @type {C} */ (next())\n    }\n\n    if (version !== 0 && version !== 1) {\n      throw new RangeError(`Invalid CID version ${version}`)\n    }\n\n    const prefixSize = offset\n    const multihashCode = /** @type {A} */ (next()) // multihash code\n    const digestSize = next() // multihash length\n    const size = offset + digestSize\n    const multihashSize = size - prefixSize\n\n    return { version, codec, multihashCode, digestSize, multihashSize, size }\n  }\n\n  /**\n   * Takes cid in a string representation and creates an instance. If `base`\n   * decoder is not provided will use a default from the configuration. It will\n   * throw an error if encoding of the CID is not compatible with supplied (or\n   * a default decoder).\n   *\n   * @template {string} Prefix\n   * @template {unknown} Data\n   * @template {number} Code\n   * @template {number} Alg\n   * @template {API.Version} Ver\n   * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n   * @param {API.MultibaseDecoder<Prefix>} [base]\n   * @returns {CID<Data, Code, Alg, Ver>}\n   */\n  static parse (source, base) {\n    const [prefix, bytes] = parseCIDtoBytes(source, base)\n\n    const cid = CID.decode(bytes)\n\n    if (cid.version === 0 && source[0] !== 'Q') {\n      throw Error('Version 0 CID string must not include multibase prefix')\n    }\n\n    // Cache string representation to avoid computing it on `this.toString()`\n    baseCache(cid).set(prefix, source)\n\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @template {unknown} Data\n * @template {number} Code\n * @template {number} Alg\n * @template {API.Version} Ver\n * @param {API.ToString<API.Link<Data, Code, Alg, Ver>, Prefix>} source\n * @param {API.MultibaseDecoder<Prefix>} [base]\n * @returns {[Prefix, API.ByteView<API.Link<Data, Code, Alg, Ver>>]}\n */\nconst parseCIDtoBytes = (source, base) => {\n  switch (source[0]) {\n    // CIDv0 is parsed differently\n    case 'Q': {\n      const decoder = base || base58btc\n      return [\n        /** @type {Prefix} */ (base58btc.prefix),\n        decoder.decode(`${base58btc.prefix}${source}`)\n      ]\n    }\n    case base58btc.prefix: {\n      const decoder = base || base58btc\n      return [/** @type {Prefix} */(base58btc.prefix), decoder.decode(source)]\n    }\n    case base32.prefix: {\n      const decoder = base || base32\n      return [/** @type {Prefix} */(base32.prefix), decoder.decode(source)]\n    }\n    default: {\n      if (base == null) {\n        throw Error(\n          'To parse non base32 or base58btc encoded CID multibase decoder must be provided'\n        )\n      }\n      return [/** @type {Prefix} */(source[0]), base.decode(source)]\n    }\n  }\n}\n\n/**\n *\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<'z'>} base\n */\nconst toStringV0 = (bytes, cache, base) => {\n  const { prefix } = base\n  if (prefix !== base58btc.prefix) {\n    throw Error(`Cannot string encode V0 in ${base.name} encoding`)\n  }\n\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes).slice(1)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\n/**\n * @template {string} Prefix\n * @param {Uint8Array} bytes\n * @param {Map<string, string>} cache\n * @param {API.MultibaseEncoder<Prefix>} base\n */\nconst toStringV1 = (bytes, cache, base) => {\n  const { prefix } = base\n  const cid = cache.get(prefix)\n  if (cid == null) {\n    const cid = base.encode(bytes)\n    cache.set(prefix, cid)\n    return cid\n  } else {\n    return cid\n  }\n}\n\nconst DAG_PB_CODE = 0x70\nconst SHA_256_CODE = 0x12\n\n/**\n * @param {API.Version} version\n * @param {number} code\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n */\nconst encodeCID = (version, code, multihash) => {\n  const codeOffset = varint.encodingLength(version)\n  const hashOffset = codeOffset + varint.encodingLength(code)\n  const bytes = new Uint8Array(hashOffset + multihash.byteLength)\n  varint.encodeTo(version, bytes, 0)\n  varint.encodeTo(code, bytes, codeOffset)\n  bytes.set(multihash, hashOffset)\n  return bytes\n}\n\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID')\n", "import { baseX } from './base.js'\n\nexport const base58btc = baseX({\n  name: 'base58btc',\n  prefix: 'z',\n  alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n})\n\nexport const base58flickr = baseX({\n  name: 'base58flickr',\n  prefix: 'Z',\n  alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n})\n", "import { rfc4648 } from './base.js'\n\nexport const base32 = rfc4648({\n  prefix: 'b',\n  name: 'base32',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n  bitsPerChar: 5\n})\n\nexport const base32upper = rfc4648({\n  prefix: 'B',\n  name: 'base32upper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n  bitsPerChar: 5\n})\n\nexport const base32pad = rfc4648({\n  prefix: 'c',\n  name: 'base32pad',\n  alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n  bitsPerChar: 5\n})\n\nexport const base32padupper = rfc4648({\n  prefix: 'C',\n  name: 'base32padupper',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n  bitsPerChar: 5\n})\n\nexport const base32hex = rfc4648({\n  prefix: 'v',\n  name: 'base32hex',\n  alphabet: '0123456789abcdefghijklmnopqrstuv',\n  bitsPerChar: 5\n})\n\nexport const base32hexupper = rfc4648({\n  prefix: 'V',\n  name: 'base32hexupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n  bitsPerChar: 5\n})\n\nexport const base32hexpad = rfc4648({\n  prefix: 't',\n  name: 'base32hexpad',\n  alphabet: '0123456789abcdefghijklmnopqrstuv=',\n  bitsPerChar: 5\n})\n\nexport const base32hexpadupper = rfc4648({\n  prefix: 'T',\n  name: 'base32hexpadupper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n  bitsPerChar: 5\n})\n\nexport const base32z = rfc4648({\n  prefix: 'h',\n  name: 'base32z',\n  alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n  bitsPerChar: 5\n})\n", "// this is dummy module overlayed by interface.ts\n", "// this is dummy module overlayed by interface.ts\n", "import { CID } from 'multiformats';\nimport type { AbortOptions, AwaitIterable } from 'interface-store';\nimport type { Blockstore, Pair } from 'interface-blockstore';\n\n/**\n * Mock implementation for the Blockstore interface.\n *\n * WARNING!!! Purely to be used with `ipfs-unixfs-importer` to compute CID without needing consume any memory.\n * This is particularly useful when dealing with large files and a necessity in a large-scale production service environment.\n */\nexport class BlockstoreMock implements Blockstore {\n\n  async open(): Promise<void> {\n  }\n\n  async close(): Promise<void> {\n  }\n\n  async put(key: CID, _val: Uint8Array, _options?: AbortOptions): Promise<CID> {\n    return key;\n  }\n\n  async get(_key: CID, _options?: AbortOptions): Promise<Uint8Array> {\n    return new Uint8Array();\n  }\n\n  async has(_key: CID, _options?: AbortOptions): Promise<boolean> {\n    return false;\n  }\n\n  async delete(_key: CID, _options?: AbortOptions): Promise<void> {\n  }\n\n  async isEmpty(_options?: AbortOptions): Promise<boolean> {\n    return true;\n  }\n\n  async * putMany(source: AwaitIterable<Pair>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const entry of source) {\n      await this.put(entry.cid, entry.block, options);\n\n      yield entry.cid;\n    }\n  }\n\n  async * getMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<Pair> {\n    for await (const key of source) {\n      yield {\n        cid   : key,\n        block : await this.get(key, options)\n      };\n    }\n  }\n\n  async * getAll(options?: AbortOptions): AsyncIterable<Pair> {\n    // @ts-expect-error keyEncoding is 'buffer' but types for db.iterator always return the key type as 'string'\n    const li: AsyncGenerator<[Uint8Array, Uint8Array]> = this.db.iterator({\n      keys        : true,\n      keyEncoding : 'buffer'\n    }, options);\n\n    for await (const [key, value] of li) {\n      yield { cid: CID.decode(key), block: value };\n    }\n  }\n\n  async * deleteMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const key of source) {\n      await this.delete(key, options);\n\n      yield key;\n    }\n  }\n\n  /**\n   * deletes all entries\n   */\n  async clear(): Promise<void> {\n  }\n}\n", "import errcode from 'err-code'\nimport first from 'it-first'\nimport parallelBatch from 'it-parallel-batch'\nimport { fixedSize } from './chunker/fixed-size.js'\nimport { type BufferImportProgressEvents, defaultBufferImporter } from './dag-builder/buffer-importer.js'\nimport { type DAGBuilder, type DagBuilderProgressEvents, defaultDagBuilder } from './dag-builder/index.js'\nimport { type ChunkValidator, defaultChunkValidator } from './dag-builder/validate-chunks.js'\nimport { balanced, type FileLayout } from './layout/index.js'\nimport { defaultTreeBuilder } from './tree-builder.js'\nimport type { Chunker } from './chunker/index.js'\nimport type { ReducerProgressEvents } from './dag-builder/file.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { AwaitIterable } from 'interface-store'\nimport type { UnixFS, Mtime } from 'ipfs-unixfs'\nimport type { CID, Version as CIDVersion } from 'multiformats/cid'\nimport type { ProgressOptions } from 'progress-events'\n\nexport type ByteStream = AwaitIterable<Uint8Array>\nexport type ImportContent = ByteStream | Uint8Array\n\nexport type WritableStorage = Pick<Blockstore, 'put'>\n\nexport interface FileCandidate {\n  path?: string\n  content: ImportContent\n  mtime?: Mtime\n  mode?: number\n}\n\nexport interface DirectoryCandidate {\n  path: string\n  mtime?: Mtime\n  mode?: number\n}\n\nexport type ImportCandidate = FileCandidate | DirectoryCandidate\n\nexport interface File {\n  content: AsyncIterable<Uint8Array>\n  path?: string\n  mtime?: Mtime\n  mode?: number\n  originalPath?: string\n}\n\nexport interface Directory {\n  path?: string\n  mtime?: Mtime\n  mode?: number\n  originalPath?: string\n}\n\nexport interface ImportResult {\n  cid: CID\n  size: bigint\n  path?: string\n  unixfs?: UnixFS\n}\n\nexport interface MultipleBlockImportResult extends ImportResult {\n  originalPath?: string\n}\n\nexport interface SingleBlockImportResult extends ImportResult {\n  single: true\n  originalPath?: string\n  block: Uint8Array\n}\n\nexport type InProgressImportResult = SingleBlockImportResult | MultipleBlockImportResult\n\nexport interface BufferImporterResult extends ImportResult {\n  block: Uint8Array\n}\n\nexport interface HamtHashFn { (value: Uint8Array): Promise<Uint8Array> }\nexport interface TreeBuilder { (source: AsyncIterable<InProgressImportResult>, blockstore: WritableStorage): AsyncIterable<ImportResult> }\nexport interface BufferImporter { (file: File, blockstore: WritableStorage): AsyncIterable<() => Promise<BufferImporterResult>> }\n\nexport type ImporterProgressEvents =\n  BufferImportProgressEvents |\n  DagBuilderProgressEvents |\n  ReducerProgressEvents\n\n/**\n * Options to control the importer's behaviour\n */\nexport interface ImporterOptions extends ProgressOptions<ImporterProgressEvents> {\n  /**\n   * When a file would span multiple DAGNodes, if this is true the leaf nodes\n   * will not be wrapped in `UnixFS` protobufs and will instead contain the\n   * raw file bytes. Default: true\n   */\n  rawLeaves?: boolean\n\n  /**\n   * If the file being imported is small enough to fit into one DAGNodes, store\n   * the file data in the root node along with the UnixFS metadata instead of\n   * in a leaf node which would then require additional I/O to load. Default: true\n   */\n  reduceSingleLeafToSelf?: boolean\n\n  /**\n   * What type of UnixFS node leaves should be - can be `'file'` or `'raw'`\n   * (ignored when `rawLeaves` is `true`).\n   *\n   * This option exists to simulate kubo's trickle dag which uses a combination\n   * of `'raw'` UnixFS leaves and `reduceSingleLeafToSelf: false`.\n   *\n   * For modern code the `rawLeaves: true` option should be used instead so leaves\n   * are plain Uint8Arrays without a UnixFS/Protobuf wrapper.\n   */\n  leafType?: 'file' | 'raw'\n\n  /**\n   * the CID version to use when storing the data. Default: 1\n   */\n  cidVersion?: CIDVersion\n\n  /**\n   * If the serialized node is larger than this it might be converted to a HAMT\n   * sharded directory. Default: 256KiB\n   */\n  shardSplitThresholdBytes?: number\n\n  /**\n   * How many files to import concurrently. For large numbers of small files this\n   * should be high (e.g. 50). Default: 10\n   */\n  fileImportConcurrency?: number\n\n  /**\n   * How many blocks to hash and write to the block store concurrently. For small\n   * numbers of large files this should be high (e.g. 50). Default: 50\n   */\n  blockWriteConcurrency?: number\n\n  /**\n   * If true, all imported files and folders will be contained in a directory that\n   * will correspond to the CID of the final entry yielded. Default: false\n   */\n  wrapWithDirectory?: boolean\n\n  /**\n   * The chunking strategy. See [./src/chunker/index.ts](./src/chunker/index.ts)\n   * for available chunkers. Default: fixedSize\n   */\n  chunker?: Chunker\n\n  /**\n   * How the DAG that represents files are created. See\n   * [./src/layout/index.ts](./src/layout/index.ts) for available layouts. Default: balanced\n   */\n  layout?: FileLayout\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `{ path, content }` entries from `source` and turn them\n   * into DAGs\n   * It should yield a `function` that returns a `Promise` that resolves to\n   * `{ cid, path, unixfs, node }` where `cid` is a `CID`, `path` is a string, `unixfs`\n   * is a UnixFS entry and `node` is a `DAGNode`.\n   * Values will be pulled from this generator in parallel - the amount of parallelisation\n   * is controlled by the `fileImportConcurrency` option (default: 50)\n   */\n  dagBuilder?: DAGBuilder\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `{ cid, path, unixfs, node }` entries from `source` and\n   * place them in a directory structure\n   * It should yield an object with the properties `{ cid, path, unixfs, size }` where\n   * `cid` is a `CID`, `path` is a string, `unixfs` is a UnixFS entry and `size` is a `Number`.\n   */\n  treeBuilder?: TreeBuilder\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function should read `Buffer`s from `source` and persist them using `blockstore.put`\n   * or similar\n   * `entry` is the `{ path, content }` entry, where `entry.content` is an async\n   * generator that yields Buffers\n   * It should yield functions that return a Promise that resolves to an object with\n   * the properties `{ cid, unixfs, size }` where `cid` is a [CID], `unixfs` is a [UnixFS] entry and `size` is a `Number` that represents the serialized size of the [IPLD] node that holds the buffer data.\n   * Values will be pulled from this generator in parallel - the amount of\n   * parallelisation is controlled by the `blockWriteConcurrency` option (default: 10)\n   */\n  bufferImporter?: BufferImporter\n\n  /**\n   * This option can be used to override the importer internals.\n   *\n   * This function takes input from the `content` field of imported entries.\n   * It should transform them into `Buffer`s, throwing an error if it cannot.\n   * It should yield `Buffer` objects constructed from the `source` or throw an\n   * `Error`\n   */\n  chunkValidator?: ChunkValidator\n}\n\nexport type ImportCandidateStream = AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n/**\n * The importer creates UnixFS DAGs and stores the blocks that make\n * them up in the passed blockstore.\n *\n * @example\n *\n * ```typescript\n * import { importer } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [{\n *   path: './foo.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }, {\n *   path: './bar.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }]\n *\n * for await (const entry of importer(input, blockstore)) {\n *   console.info(entry)\n *   // { cid: CID(), ... }\n * }\n * ```\n */\nexport async function * importer (source: ImportCandidateStream, blockstore: WritableStorage, options: ImporterOptions = {}): AsyncGenerator<ImportResult, void, unknown> {\n  let candidates: AsyncIterable<FileCandidate | DirectoryCandidate> | Iterable<FileCandidate | DirectoryCandidate>\n\n  if (Symbol.asyncIterator in source || Symbol.iterator in source) {\n    candidates = source\n  } else {\n    candidates = [source]\n  }\n\n  const wrapWithDirectory = options.wrapWithDirectory ?? false\n  const shardSplitThresholdBytes = options.shardSplitThresholdBytes ?? 262144\n  const cidVersion = options.cidVersion ?? 1\n  const rawLeaves = options.rawLeaves ?? true\n  const leafType = options.leafType ?? 'file'\n  const fileImportConcurrency = options.fileImportConcurrency ?? 50\n  const blockWriteConcurrency = options.blockWriteConcurrency ?? 10\n  const reduceSingleLeafToSelf = options.reduceSingleLeafToSelf ?? true\n\n  const chunker = options.chunker ?? fixedSize()\n  const chunkValidator = options.chunkValidator ?? defaultChunkValidator()\n  const buildDag: DAGBuilder = options.dagBuilder ?? defaultDagBuilder({\n    chunker,\n    chunkValidator,\n    wrapWithDirectory,\n    layout: options.layout ?? balanced(),\n    bufferImporter: options.bufferImporter ?? defaultBufferImporter({\n      cidVersion,\n      rawLeaves,\n      leafType,\n      onProgress: options.onProgress\n    }),\n    blockWriteConcurrency,\n    reduceSingleLeafToSelf,\n    cidVersion,\n    onProgress: options.onProgress\n  })\n  const buildTree: TreeBuilder = options.treeBuilder ?? defaultTreeBuilder({\n    wrapWithDirectory,\n    shardSplitThresholdBytes,\n    cidVersion,\n    onProgress: options.onProgress\n  })\n\n  for await (const entry of buildTree(parallelBatch(buildDag(candidates, blockstore), fileImportConcurrency), blockstore)) {\n    yield {\n      cid: entry.cid,\n      path: entry.path,\n      unixfs: entry.unixfs,\n      size: entry.size\n    }\n  }\n}\n\n/**\n * `importFile` is similar to `importer` except it accepts a single\n * `FileCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importFile } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: FileCandidate = {\n *   path: './foo.txt',\n *   content: Uint8Array.from([0, 1, 2, 3, 4])\n * }\n *\n * const entry = await importFile(input, blockstore)\n * ```\n */\nexport async function importFile (content: FileCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  const result = await first(importer([content], blockstore, options))\n\n  if (result == null) {\n    throw errcode(new Error('Nothing imported'), 'ERR_INVALID_PARAMS')\n  }\n\n  return result\n}\n\n/**\n * `importDir` is similar to `importer` except it accepts a single\n * `DirectoryCandidate` and returns a promise of a single `ImportResult`\n * instead of a stream of results.\n *\n * @example\n *\n * ```typescript\n * import { importDirectory } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input: DirectoryCandidate = {\n *   path: './foo.txt'\n * }\n *\n * const entry = await importDirectory(input, blockstore)\n * ```\n */\nexport async function importDirectory (content: DirectoryCandidate, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  const result = await first(importer([content], blockstore, options))\n\n  if (result == null) {\n    throw errcode(new Error('Nothing imported'), 'ERR_INVALID_PARAMS')\n  }\n\n  return result\n}\n\n/**\n * `importBytes` accepts a single Uint8Array and returns a promise\n * of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importBytes } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = Uint8Array.from([0, 1, 2, 3, 4])\n *\n * const entry = await importBytes(input, blockstore)\n * ```\n */\nexport async function importBytes (buf: ImportContent, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  return importFile({\n    content: buf\n  }, blockstore, options)\n}\n\n/**\n * `importByteStream` accepts a single stream of Uint8Arrays and\n * returns a promise of a single `ImportResult`.\n *\n * @example\n *\n * ```typescript\n * import { importByteStream } from 'ipfs-unixfs-importer'\n * import { MemoryBlockstore } from 'blockstore-core'\n *\n * // store blocks in memory, other blockstores are available\n * const blockstore = new MemoryBlockstore()\n *\n * const input = [\n *   Uint8Array.from([0, 1, 2, 3, 4]),\n *   Uint8Array.from([5, 6, 7, 8, 9])\n * ]\n *\n * const entry = await importByteStream(input, blockstore)\n * ```\n */\nexport async function importByteStream (bufs: ByteStream, blockstore: WritableStorage, options: ImporterOptions = {}): Promise<ImportResult> {\n  return importFile({\n    content: bufs\n  }, blockstore, options)\n}\n", "/**\n * @packageDocumentation\n *\n * Return the first value in an (async)iterable\n *\n * @example\n *\n * ```javascript\n * import first from 'it-first'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const res = first(values)\n *\n * console.info(res) // 0\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import first from 'it-first'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const res = await first(values())\n *\n * console.info(res) // 0\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the first result from an (async) iterable, unless empty, in which\n * case returns `undefined`\n */\nfunction first <T> (source: Iterable<T>): T | undefined\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction first <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      for await (const entry of source) { // eslint-disable-line no-unreachable-loop\n        return entry\n      }\n\n      return undefined\n    })()\n  }\n\n  for (const entry of source) { // eslint-disable-line no-unreachable-loop\n    return entry\n  }\n\n  return undefined\n}\n\nexport default first\n", "/**\n * @packageDocumentation\n *\n * Takes an async iterator that emits promise-returning functions, invokes them in parallel and emits the results in the same order as the input.\n *\n * The final batch may be smaller than the batch size.\n *\n * @example\n *\n * ```javascript\n * import parallelBatch from 'it-parallel-batch'\n * import all from 'it-all'\n * import delay from 'delay'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const input = [\n *   async () => {\n *     await delay(500)\n *\n *     return 1\n *   },\n *   async () => {\n *     await delay(200)\n *\n *     return 2\n *   },\n *   async () => {\n *     await delay(100)\n *\n *     return 3\n *   }\n * ]\n *\n * const batchSize = 2\n *\n * const result = await all(parallelBatch(input, batchSize))\n *\n * console.info(result) // [1, 2, 3]\n * ```\n */\n\nimport batch from 'it-batch'\n\ninterface Success<T> {\n  ok: true\n  value: T\n}\n\ninterface Failure {\n  ok: false\n  err: Error\n}\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n */\nexport default async function * parallelBatch <T> (source: AsyncIterable<() => Promise<T>> | Iterable<() => Promise<T>>, size: number = 1): AsyncGenerator<T, void, undefined> {\n  for await (const tasks of batch(source, size)) {\n    const things: Array<Promise<Success<T> | Failure>> = tasks.map(\n      async (p: () => Promise<T>) => {\n        return p().then(value => ({ ok: true, value }), err => ({ ok: false, err }))\n      })\n\n    for (let i = 0; i < things.length; i++) {\n      const result = await things[i]\n\n      if (result.ok) {\n        yield result.value\n      } else {\n        throw result.err\n      }\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * The final batch may be smaller than the max.\n *\n * @example\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n * const batchSize = 2\n *\n * const result = all(batch(values, batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import batch from 'it-batch'\n * import all from 'it-all'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const batchSize = 2\n * const result = await all(batch(values(), batchSize))\n *\n * console.info(result) // [0, 1], [2, 3], [4]\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable that emits things and returns an async iterable that\n * emits those things in fixed-sized batches\n */\nfunction batch <T> (source: Iterable<T>, size?: number): Generator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size?: number): AsyncGenerator<T[], void, undefined>\nfunction batch <T> (source: Iterable<T> | AsyncIterable<T>, size: number = 1): Generator<T[], void, undefined> | AsyncGenerator<T[], void, undefined> {\n  size = Number(size)\n\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      let things: T[] = []\n\n      if (size < 1) {\n        size = 1\n      }\n\n      if (size !== Math.round(size)) {\n        throw new Error('Batch size must be an integer')\n      }\n\n      for await (const thing of source) {\n        things.push(thing)\n\n        while (things.length >= size) {\n          yield things.slice(0, size)\n\n          things = things.slice(size)\n        }\n      }\n\n      while (things.length > 0) {\n        yield things.slice(0, size)\n\n        things = things.slice(size)\n      }\n    }())\n  }\n\n  return (function * () {\n    let things: T[] = []\n\n    if (size < 1) {\n      size = 1\n    }\n\n    if (size !== Math.round(size)) {\n      throw new Error('Batch size must be an integer')\n    }\n\n    for (const thing of source) {\n      things.push(thing)\n\n      while (things.length >= size) {\n        yield things.slice(0, size)\n\n        things = things.slice(size)\n      }\n    }\n\n    while (things.length > 0) {\n      yield things.slice(0, size)\n\n      things = things.slice(size)\n    }\n  }())\n}\n\nexport default batch\n", "import { Uint8ArrayList } from 'uint8arraylist'\nimport type { Chunker } from './index.js'\n\nexport interface FixedSizeOptions {\n  chunkSize?: number\n}\n\nconst DEFAULT_CHUNK_SIZE = 262144\n\nexport const fixedSize = (options: FixedSizeOptions = {}): Chunker => {\n  const chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE\n\n  return async function * fixedSizeChunker (source) {\n    let list = new Uint8ArrayList()\n    let currentLength = 0\n    let emitted = false\n\n    for await (const buffer of source) {\n      list.append(buffer)\n\n      currentLength += buffer.length\n\n      while (currentLength >= chunkSize) {\n        yield list.slice(0, chunkSize)\n        emitted = true\n\n        // throw away consumed bytes\n        if (chunkSize === list.length) {\n          list = new Uint8ArrayList()\n          currentLength = 0\n        } else {\n          const newBl = new Uint8ArrayList()\n          newBl.append(list.sublist(chunkSize))\n          list = newBl\n\n          // update our offset\n          currentLength -= chunkSize\n        }\n      }\n    }\n\n    if (!emitted || currentLength > 0) {\n      // return any remaining bytes\n      yield list.subarray(0, currentLength)\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * A class that lets you do operations over a list of Uint8Arrays without\n * copying them.\n *\n * ```js\n * import { Uint8ArrayList } from 'uint8arraylist'\n *\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray()\n * // -> Uint8Array([0, 1, 2, 3, 4, 5])\n *\n * list.consume(3)\n * list.subarray()\n * // -> Uint8Array([3, 4, 5])\n *\n * // you can also iterate over the list\n * for (const buf of list) {\n *   // ..do something with `buf`\n * }\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ## Converting Uint8ArrayLists to Uint8Arrays\n *\n * There are two ways to turn a `Uint8ArrayList` into a `Uint8Array` - `.slice` and `.subarray` and one way to turn a `Uint8ArrayList` into a `Uint8ArrayList` with different contents - `.sublist`.\n *\n * ### slice\n *\n * Slice follows the same semantics as [Uint8Array.slice](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice) in that it creates a new `Uint8Array` and copies bytes into it using an optional offset & length.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.slice(0, 1)\n * // -> Uint8Array([0])\n * ```\n *\n * ### subarray\n *\n * Subarray attempts to follow the same semantics as [Uint8Array.subarray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray) with one important different - this is a no-copy operation, unless the requested bytes span two internal buffers in which case it is a copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.subarray(0, 1)\n * // -> Uint8Array([0]) - no-copy\n *\n * list.subarray(2, 5)\n * // -> Uint8Array([2, 3, 4]) - copy\n * ```\n *\n * ### sublist\n *\n * Sublist creates and returns a new `Uint8ArrayList` that shares the underlying buffers with the original so is always a no-copy operation.\n *\n * ```js\n * const list = new Uint8ArrayList()\n * list.append(Uint8Array.from([0, 1, 2]))\n * list.append(Uint8Array.from([3, 4, 5]))\n *\n * list.sublist(0, 1)\n * // -> Uint8ArrayList([0]) - no-copy\n *\n * list.sublist(2, 5)\n * // -> Uint8ArrayList([2], [3, 4]) - no-copy\n * ```\n *\n * ## Inspiration\n *\n * Borrows liberally from [bl](https://www.npmjs.com/package/bl) but only uses native JS types.\n */\nimport { allocUnsafe, alloc } from 'uint8arrays/alloc'\nimport { concat } from 'uint8arrays/concat'\nimport { equals } from 'uint8arrays/equals'\n\nconst symbol = Symbol.for('@achingbrain/uint8arraylist')\n\nexport type Appendable = Uint8ArrayList | Uint8Array\n\nfunction findBufAndOffset (bufs: Uint8Array[], index: number): { buf: Uint8Array, index: number } {\n  if (index == null || index < 0) {\n    throw new RangeError('index is out of bounds')\n  }\n\n  let offset = 0\n\n  for (const buf of bufs) {\n    const bufEnd = offset + buf.byteLength\n\n    if (index < bufEnd) {\n      return {\n        buf,\n        index: index - offset\n      }\n    }\n\n    offset = bufEnd\n  }\n\n  throw new RangeError('index is out of bounds')\n}\n\n/**\n * Check if object is a CID instance\n *\n * @example\n *\n * ```js\n * import { isUint8ArrayList, Uint8ArrayList } from 'uint8arraylist'\n *\n * isUint8ArrayList(true) // false\n * isUint8ArrayList([]) // false\n * isUint8ArrayList(new Uint8ArrayList()) // true\n * ```\n */\nexport function isUint8ArrayList (value: any): value is Uint8ArrayList {\n  return Boolean(value?.[symbol])\n}\n\nexport class Uint8ArrayList implements Iterable<Uint8Array> {\n  private bufs: Uint8Array[]\n  public length: number\n  public readonly [symbol] = true\n\n  constructor (...data: Appendable[]) {\n    this.bufs = []\n    this.length = 0\n\n    if (data.length > 0) {\n      this.appendAll(data)\n    }\n  }\n\n  * [Symbol.iterator] (): Iterator<Uint8Array> {\n    yield * this.bufs\n  }\n\n  get byteLength (): number {\n    return this.length\n  }\n\n  /**\n   * Add one or more `bufs` to the end of this Uint8ArrayList\n   */\n  append (...bufs: Appendable[]): void {\n    this.appendAll(bufs)\n  }\n\n  /**\n   * Add all `bufs` to the end of this Uint8ArrayList\n   */\n  appendAll (bufs: Appendable[]): void {\n    let length = 0\n\n    for (const buf of bufs) {\n      if (buf instanceof Uint8Array) {\n        length += buf.byteLength\n        this.bufs.push(buf)\n      } else if (isUint8ArrayList(buf)) {\n        length += buf.byteLength\n        this.bufs.push(...buf.bufs)\n      } else {\n        throw new Error('Could not append value, must be an Uint8Array or a Uint8ArrayList')\n      }\n    }\n\n    this.length += length\n  }\n\n  /**\n   * Add one or more `bufs` to the start of this Uint8ArrayList\n   */\n  prepend (...bufs: Appendable[]): void {\n    this.prependAll(bufs)\n  }\n\n  /**\n   * Add all `bufs` to the start of this Uint8ArrayList\n   */\n  prependAll (bufs: Appendable[]): void {\n    let length = 0\n\n    for (const buf of bufs.reverse()) {\n      if (buf instanceof Uint8Array) {\n        length += buf.byteLength\n        this.bufs.unshift(buf)\n      } else if (isUint8ArrayList(buf)) {\n        length += buf.byteLength\n        this.bufs.unshift(...buf.bufs)\n      } else {\n        throw new Error('Could not prepend value, must be an Uint8Array or a Uint8ArrayList')\n      }\n    }\n\n    this.length += length\n  }\n\n  /**\n   * Read the value at `index`\n   */\n  get (index: number): number {\n    const res = findBufAndOffset(this.bufs, index)\n\n    return res.buf[res.index]\n  }\n\n  /**\n   * Set the value at `index` to `value`\n   */\n  set (index: number, value: number): void {\n    const res = findBufAndOffset(this.bufs, index)\n\n    res.buf[res.index] = value\n  }\n\n  /**\n   * Copy bytes from `buf` to the index specified by `offset`\n   */\n  write (buf: Appendable, offset: number = 0): void {\n    if (buf instanceof Uint8Array) {\n      for (let i = 0; i < buf.length; i++) {\n        this.set(offset + i, buf[i])\n      }\n    } else if (isUint8ArrayList(buf)) {\n      for (let i = 0; i < buf.length; i++) {\n        this.set(offset + i, buf.get(i))\n      }\n    } else {\n      throw new Error('Could not write value, must be an Uint8Array or a Uint8ArrayList')\n    }\n  }\n\n  /**\n   * Remove bytes from the front of the pool\n   */\n  consume (bytes: number): void {\n    // first, normalize the argument, in accordance with how Buffer does it\n    bytes = Math.trunc(bytes)\n\n    // do nothing if not a positive number\n    if (Number.isNaN(bytes) || bytes <= 0) {\n      return\n    }\n\n    // if consuming all bytes, skip iterating\n    if (bytes === this.byteLength) {\n      this.bufs = []\n      this.length = 0\n      return\n    }\n\n    while (this.bufs.length > 0) {\n      if (bytes >= this.bufs[0].byteLength) {\n        bytes -= this.bufs[0].byteLength\n        this.length -= this.bufs[0].byteLength\n        this.bufs.shift()\n      } else {\n        this.bufs[0] = this.bufs[0].subarray(bytes)\n        this.length -= bytes\n        break\n      }\n    }\n  }\n\n  /**\n   * Extracts a section of an array and returns a new array.\n   *\n   * This is a copy operation as it is with Uint8Arrays and Arrays\n   * - note this is different to the behaviour of Node Buffers.\n   */\n  slice (beginInclusive?: number, endExclusive?: number): Uint8Array {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    return concat(bufs, length)\n  }\n\n  /**\n   * Returns a alloc from the given start and end element index.\n   *\n   * In the best case where the data extracted comes from a single Uint8Array\n   * internally this is a no-copy operation otherwise it is a copy operation.\n   */\n  subarray (beginInclusive?: number, endExclusive?: number): Uint8Array {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    if (bufs.length === 1) {\n      return bufs[0]\n    }\n\n    return concat(bufs, length)\n  }\n\n  /**\n   * Returns a allocList from the given start and end element index.\n   *\n   * This is a no-copy operation.\n   */\n  sublist (beginInclusive?: number, endExclusive?: number): Uint8ArrayList {\n    const { bufs, length } = this._subList(beginInclusive, endExclusive)\n\n    const list = new Uint8ArrayList()\n    list.length = length\n    // don't loop, just set the bufs\n    list.bufs = [...bufs]\n\n    return list\n  }\n\n  private _subList (beginInclusive?: number, endExclusive?: number): { bufs: Uint8Array[], length: number } {\n    beginInclusive = beginInclusive ?? 0\n    endExclusive = endExclusive ?? this.length\n\n    if (beginInclusive < 0) {\n      beginInclusive = this.length + beginInclusive\n    }\n\n    if (endExclusive < 0) {\n      endExclusive = this.length + endExclusive\n    }\n\n    if (beginInclusive < 0 || endExclusive > this.length) {\n      throw new RangeError('index is out of bounds')\n    }\n\n    if (beginInclusive === endExclusive) {\n      return { bufs: [], length: 0 }\n    }\n\n    if (beginInclusive === 0 && endExclusive === this.length) {\n      return { bufs: this.bufs, length: this.length }\n    }\n\n    const bufs: Uint8Array[] = []\n    let offset = 0\n\n    for (let i = 0; i < this.bufs.length; i++) {\n      const buf = this.bufs[i]\n      const bufStart = offset\n      const bufEnd = bufStart + buf.byteLength\n\n      // for next loop\n      offset = bufEnd\n\n      if (beginInclusive >= bufEnd) {\n        // start after this buf\n        continue\n      }\n\n      const sliceStartInBuf = beginInclusive >= bufStart && beginInclusive < bufEnd\n      const sliceEndsInBuf = endExclusive > bufStart && endExclusive <= bufEnd\n\n      if (sliceStartInBuf && sliceEndsInBuf) {\n        // slice is wholly contained within this buffer\n        if (beginInclusive === bufStart && endExclusive === bufEnd) {\n          // requested whole buffer\n          bufs.push(buf)\n          break\n        }\n\n        // requested part of buffer\n        const start = beginInclusive - bufStart\n        bufs.push(buf.subarray(start, start + (endExclusive - beginInclusive)))\n        break\n      }\n\n      if (sliceStartInBuf) {\n        // slice starts in this buffer\n        if (beginInclusive === 0) {\n          // requested whole buffer\n          bufs.push(buf)\n          continue\n        }\n\n        // requested part of buffer\n        bufs.push(buf.subarray(beginInclusive - bufStart))\n        continue\n      }\n\n      if (sliceEndsInBuf) {\n        if (endExclusive === bufEnd) {\n          // requested whole buffer\n          bufs.push(buf)\n          break\n        }\n\n        // requested part of buffer\n        bufs.push(buf.subarray(0, endExclusive - bufStart))\n        break\n      }\n\n      // slice started before this buffer and ends after it\n      bufs.push(buf)\n    }\n\n    return { bufs, length: endExclusive - beginInclusive }\n  }\n\n  indexOf (search: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n    if (!isUint8ArrayList(search) && !(search instanceof Uint8Array)) {\n      throw new TypeError('The \"value\" argument must be a Uint8ArrayList or Uint8Array')\n    }\n\n    const needle = search instanceof Uint8Array ? search : search.subarray()\n\n    offset = Number(offset ?? 0)\n\n    if (isNaN(offset)) {\n      offset = 0\n    }\n\n    if (offset < 0) {\n      offset = this.length + offset\n    }\n\n    if (offset < 0) {\n      offset = 0\n    }\n\n    if (search.length === 0) {\n      return offset > this.length ? this.length : offset\n    }\n\n    // https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm\n    const M: number = needle.byteLength\n\n    if (M === 0) {\n      throw new TypeError('search must be at least 1 byte long')\n    }\n\n    // radix\n    const radix: number = 256\n    const rightmostPositions: Int32Array = new Int32Array(radix)\n\n    // position of the rightmost occurrence of the byte c in the pattern\n    for (let c: number = 0; c < radix; c++) {\n      // -1 for bytes not in pattern\n      rightmostPositions[c] = -1\n    }\n\n    for (let j = 0; j < M; j++) {\n      // rightmost position for bytes in pattern\n      rightmostPositions[needle[j]] = j\n    }\n\n    // Return offset of first match, -1 if no match\n    const right = rightmostPositions\n    const lastIndex = this.byteLength - needle.byteLength\n    const lastPatIndex = needle.byteLength - 1\n    let skip: number\n\n    for (let i = offset; i <= lastIndex; i += skip) {\n      skip = 0\n\n      for (let j = lastPatIndex; j >= 0; j--) {\n        const char: number = this.get(i + j)\n\n        if (needle[j] !== char) {\n          skip = Math.max(1, j - right[char])\n          break\n        }\n      }\n\n      if (skip === 0) {\n        return i\n      }\n    }\n\n    return -1\n  }\n\n  getInt8 (byteOffset: number): number {\n    const buf = this.subarray(byteOffset, byteOffset + 1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt8(0)\n  }\n\n  setInt8 (byteOffset: number, value: number): void {\n    const buf = allocUnsafe(1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt8(0, value)\n\n    this.write(buf, byteOffset)\n  }\n\n  getInt16 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt16(0, littleEndian)\n  }\n\n  setInt16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt16(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getInt32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getInt32(0, littleEndian)\n  }\n\n  setInt32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setInt32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getBigInt64 (byteOffset: number, littleEndian?: boolean): bigint {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getBigInt64(0, littleEndian)\n  }\n\n  setBigInt64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setBigInt64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint8 (byteOffset: number): number {\n    const buf = this.subarray(byteOffset, byteOffset + 1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint8(0)\n  }\n\n  setUint8 (byteOffset: number, value: number): void {\n    const buf = allocUnsafe(1)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint8(0, value)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint16 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint16(0, littleEndian)\n  }\n\n  setUint16 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(2)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint16(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getUint32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getUint32(0, littleEndian)\n  }\n\n  setUint32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setUint32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getBigUint64 (byteOffset: number, littleEndian?: boolean): bigint {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getBigUint64(0, littleEndian)\n  }\n\n  setBigUint64 (byteOffset: number, value: bigint, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setBigUint64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getFloat32 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getFloat32(0, littleEndian)\n  }\n\n  setFloat32 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(4)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setFloat32(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  getFloat64 (byteOffset: number, littleEndian?: boolean): number {\n    const buf = this.subarray(byteOffset, byteOffset + 8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n\n    return view.getFloat64(0, littleEndian)\n  }\n\n  setFloat64 (byteOffset: number, value: number, littleEndian?: boolean): void {\n    const buf = alloc(8)\n    const view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n    view.setFloat64(0, value, littleEndian)\n\n    this.write(buf, byteOffset)\n  }\n\n  equals (other: any): other is Uint8ArrayList {\n    if (other == null) {\n      return false\n    }\n\n    if (!(other instanceof Uint8ArrayList)) {\n      return false\n    }\n\n    if (other.bufs.length !== this.bufs.length) {\n      return false\n    }\n\n    for (let i = 0; i < this.bufs.length; i++) {\n      if (!equals(this.bufs[i], other.bufs[i])) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  /**\n   * Create a Uint8ArrayList from a pre-existing list of Uint8Arrays.  Use this\n   * method if you know the total size of all the Uint8Arrays ahead of time.\n   */\n  static fromUint8Arrays (bufs: Uint8Array[], length?: number): Uint8ArrayList {\n    const list = new Uint8ArrayList()\n    list.bufs = bufs\n\n    if (length == null) {\n      length = bufs.reduce((acc, curr) => acc + curr.byteLength, 0)\n    }\n\n    list.length = length\n\n    return list\n  }\n}\n\n/*\nfunction indexOf (needle: Uint8Array, haystack: Uint8Array, offset = 0) {\n  for (let i = offset; i < haystack.byteLength; i++) {\n    for (let j = 0; j < needle.length; j++) {\n      if (haystack[i + j] !== needle[j]) {\n        break\n      }\n\n      if (j === needle.byteLength -1) {\n        return i\n      }\n    }\n\n    if (haystack.byteLength - i < needle.byteLength) {\n      break\n    }\n  }\n\n  return -1\n}\n*/\n", "import * as dagPb from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport * as raw from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist, type PersistOptions } from '../utils/persist.js'\nimport type { BufferImporter } from '../index.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportWriteProgress {\n  /**\n   * How many bytes we have written for this source so far - this may be\n   * bigger than the file size due to the DAG-PB wrappers of each block\n   */\n  bytesWritten: bigint\n\n  /**\n   * The CID of the block that has been written\n   */\n  cid: CID\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type BufferImportProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:write', ImportWriteProgress>\n\nexport interface BufferImporterOptions extends ProgressOptions<BufferImportProgressEvents> {\n  cidVersion: Version\n  rawLeaves: boolean\n  leafType: 'file' | 'raw'\n}\n\nexport function defaultBufferImporter (options: BufferImporterOptions): BufferImporter {\n  return async function * bufferImporter (file, blockstore) {\n    let bytesWritten = 0n\n\n    for await (let block of file.content) {\n      yield async () => { // eslint-disable-line no-loop-func\n        let unixfs\n\n        const opts: PersistOptions = {\n          codec: dagPb,\n          cidVersion: options.cidVersion,\n          onProgress: options.onProgress\n        }\n\n        if (options.rawLeaves) {\n          opts.codec = raw\n          opts.cidVersion = 1\n        } else {\n          unixfs = new UnixFS({\n            type: options.leafType,\n            data: block\n          })\n\n          block = dagPb.encode({\n            Data: unixfs.marshal(),\n            Links: []\n          })\n        }\n\n        const cid = await persist(block, blockstore, opts)\n\n        bytesWritten += BigInt(block.byteLength)\n\n        options.onProgress?.(new CustomProgressEvent<ImportWriteProgress>('unixfs:importer:progress:file:write', {\n          bytesWritten,\n          cid,\n          path: file.path\n        }))\n\n        return {\n          cid,\n          unixfs,\n          size: BigInt(block.length),\n          block\n        }\n      }\n    }\n  }\n}\n", "import { CID } from 'multiformats/cid'\nimport { decodeNode } from './pb-decode.js'\nimport { encodeNode } from './pb-encode.js'\nimport { prepare, validate, createNode, createLink, toByteView } from './util.js'\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\nexport const name = 'dag-pb'\nexport const code = 0x70\n\n/**\n * @param {PBNode} node\n * @returns {ByteView<PBNode>}\n */\nexport function encode (node) {\n  validate(node)\n\n  const pbn = {}\n  if (node.Links) {\n    pbn.Links = node.Links.map((l) => {\n      const link = {}\n      if (l.Hash) {\n        link.Hash = l.Hash.bytes // cid -> bytes\n      }\n      if (l.Name !== undefined) {\n        link.Name = l.Name\n      }\n      if (l.Tsize !== undefined) {\n        link.Tsize = l.Tsize\n      }\n      return link\n    })\n  }\n  if (node.Data) {\n    pbn.Data = node.Data\n  }\n\n  return encodeNode(pbn)\n}\n\n/**\n * @param {ByteView<PBNode> | ArrayBufferView<PBNode>} bytes\n * @returns {PBNode}\n */\nexport function decode (bytes) {\n  const buf = toByteView(bytes)\n  const pbn = decodeNode(buf)\n\n  const node = {}\n\n  if (pbn.Data) {\n    node.Data = pbn.Data\n  }\n\n  if (pbn.Links) {\n    node.Links = pbn.Links.map((l) => {\n      const link = {}\n      try {\n        link.Hash = CID.decode(l.Hash)\n      } catch (e) {}\n      if (!link.Hash) {\n        throw new Error('Invalid Hash field found in link, expected CID')\n      }\n      if (l.Name !== undefined) {\n        link.Name = l.Name\n      }\n      if (l.Tsize !== undefined) {\n        link.Tsize = l.Tsize\n      }\n      return link\n    })\n  }\n\n  return node\n}\n\nexport { prepare, validate, createNode, createLink }\n", "const textDecoder = new TextDecoder()\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[number, number]}\n */\nfunction decodeVarint (bytes, offset) {\n  let v = 0\n\n  for (let shift = 0; ; shift += 7) {\n    /* c8 ignore next 3 */\n    if (shift >= 64) {\n      throw new Error('protobuf: varint overflow')\n    }\n    /* c8 ignore next 3 */\n    if (offset >= bytes.length) {\n      throw new Error('protobuf: unexpected end of data')\n    }\n\n    const b = bytes[offset++]\n    v += shift < 28 ? (b & 0x7f) << shift : (b & 0x7f) * (2 ** shift)\n    if (b < 0x80) {\n      break\n    }\n  }\n  return [v, offset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @returns {[Uint8Array, number]}\n */\nfunction decodeBytes (bytes, offset) {\n  let byteLen\n  ;[byteLen, offset] = decodeVarint(bytes, offset)\n  const postOffset = offset + byteLen\n\n  /* c8 ignore next 3 */\n  if (byteLen < 0 || postOffset < 0) {\n    throw new Error('protobuf: invalid length')\n  }\n  /* c8 ignore next 3 */\n  if (postOffset > bytes.length) {\n    throw new Error('protobuf: unexpected end of data')\n  }\n\n  return [bytes.subarray(offset, postOffset), postOffset]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} index\n * @returns {[number, number, number]}\n */\nfunction decodeKey (bytes, index) {\n  let wire\n  ;[wire, index] = decodeVarint(bytes, index)\n  // [wireType, fieldNum, newIndex]\n  return [wire & 0x7, wire >> 3, index]\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBLink}\n */\nfunction decodeLink (bytes) {\n  /** @type {RawPBLink} */\n  const link = {}\n  const l = bytes.length\n  let index = 0\n\n  while (index < l) {\n    let wireType, fieldNum\n    ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n    if (fieldNum === 1) {\n      if (link.Hash) {\n        throw new Error('protobuf: (PBLink) duplicate Hash section')\n      }\n      if (wireType !== 2) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Hash`)\n      }\n      if (link.Name !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Name before Hash')\n      }\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Tsize before Hash')\n      }\n\n      [link.Hash, index] = decodeBytes(bytes, index)\n    } else if (fieldNum === 2) {\n      if (link.Name !== undefined) {\n        throw new Error('protobuf: (PBLink) duplicate Name section')\n      }\n      if (wireType !== 2) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Name`)\n      }\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) invalid order, found Tsize before Name')\n      }\n\n      let byts\n      ;[byts, index] = decodeBytes(bytes, index)\n      link.Name = textDecoder.decode(byts)\n    } else if (fieldNum === 3) {\n      if (link.Tsize !== undefined) {\n        throw new Error('protobuf: (PBLink) duplicate Tsize section')\n      }\n      if (wireType !== 0) {\n        throw new Error(`protobuf: (PBLink) wrong wireType (${wireType}) for Tsize`)\n      }\n\n      [link.Tsize, index] = decodeVarint(bytes, index)\n    } else {\n      throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${fieldNum}`)\n    }\n  }\n\n  /* c8 ignore next 3 */\n  if (index > l) {\n    throw new Error('protobuf: (PBLink) unexpected end of data')\n  }\n\n  return link\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {RawPBNode}\n */\nexport function decodeNode (bytes) {\n  const l = bytes.length\n  let index = 0\n  /** @type {RawPBLink[]|void} */\n  let links = undefined // eslint-disable-line no-undef-init\n  let linksBeforeData = false\n  /** @type {Uint8Array|void} */\n  let data = undefined // eslint-disable-line no-undef-init\n\n  while (index < l) {\n    let wireType, fieldNum\n    ;[wireType, fieldNum, index] = decodeKey(bytes, index)\n\n    if (wireType !== 2) {\n      throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${wireType}`)\n    }\n\n    if (fieldNum === 1) {\n      if (data) {\n        throw new Error('protobuf: (PBNode) duplicate Data section')\n      }\n\n      [data, index] = decodeBytes(bytes, index)\n      if (links) {\n        linksBeforeData = true\n      }\n    } else if (fieldNum === 2) {\n      if (linksBeforeData) { // interleaved Links/Data/Links\n        throw new Error('protobuf: (PBNode) duplicate Links section')\n      } else if (!links) {\n        links = []\n      }\n      let byts\n      ;[byts, index] = decodeBytes(bytes, index)\n      links.push(decodeLink(byts))\n    } else {\n      throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${fieldNum}`)\n    }\n  }\n\n  /* c8 ignore next 3 */\n  if (index > l) {\n    throw new Error('protobuf: (PBNode) unexpected end of data')\n  }\n\n  /** @type {RawPBNode} */\n  const node = {}\n  if (data) {\n    node.Data = data\n  }\n  node.Links = links || []\n  return node\n}\n", "const textEncoder = new TextEncoder()\nconst maxInt32 = 2 ** 32\nconst maxUInt32 = 2 ** 31\n\n/**\n * @typedef {import('./interface.js').RawPBLink} RawPBLink\n */\n\n/**\n * @typedef {import('./interface.js').RawPBNode} RawPBNode\n */\n\n// the encoders work backward from the end of the bytes array\n\n/**\n * encodeLink() is passed a slice of the parent byte array that ends where this\n * link needs to end, so it packs to the right-most part of the passed `bytes`\n *\n * @param {RawPBLink} link\n * @param {Uint8Array} bytes\n * @returns {number}\n */\nfunction encodeLink (link, bytes) {\n  let i = bytes.length\n\n  if (typeof link.Tsize === 'number') {\n    if (link.Tsize < 0) {\n      throw new Error('Tsize cannot be negative')\n    }\n    if (!Number.isSafeInteger(link.Tsize)) {\n      throw new Error('Tsize too large for encoding')\n    }\n    i = encodeVarint(bytes, i, link.Tsize) - 1\n    bytes[i] = 0x18\n  }\n\n  if (typeof link.Name === 'string') {\n    const nameBytes = textEncoder.encode(link.Name)\n    i -= nameBytes.length\n    bytes.set(nameBytes, i)\n    i = encodeVarint(bytes, i, nameBytes.length) - 1\n    bytes[i] = 0x12\n  }\n\n  if (link.Hash) {\n    i -= link.Hash.length\n    bytes.set(link.Hash, i)\n    i = encodeVarint(bytes, i, link.Hash.length) - 1\n    bytes[i] = 0xa\n  }\n\n  return bytes.length - i\n}\n\n/**\n * Encodes a PBNode into a new byte array of precisely the correct size\n *\n * @param {RawPBNode} node\n * @returns {Uint8Array}\n */\nexport function encodeNode (node) {\n  const size = sizeNode(node)\n  const bytes = new Uint8Array(size)\n  let i = size\n\n  if (node.Data) {\n    i -= node.Data.length\n    bytes.set(node.Data, i)\n    i = encodeVarint(bytes, i, node.Data.length) - 1\n    bytes[i] = 0xa\n  }\n\n  if (node.Links) {\n    for (let index = node.Links.length - 1; index >= 0; index--) {\n      const size = encodeLink(node.Links[index], bytes.subarray(0, i))\n      i -= size\n      i = encodeVarint(bytes, i, size) - 1\n      bytes[i] = 0x12\n    }\n  }\n\n  return bytes\n}\n\n/**\n * work out exactly how many bytes this link takes up\n *\n * @param {RawPBLink} link\n * @returns\n */\nfunction sizeLink (link) {\n  let n = 0\n\n  if (link.Hash) {\n    const l = link.Hash.length\n    n += 1 + l + sov(l)\n  }\n\n  if (typeof link.Name === 'string') {\n    const l = textEncoder.encode(link.Name).length\n    n += 1 + l + sov(l)\n  }\n\n  if (typeof link.Tsize === 'number') {\n    n += 1 + sov(link.Tsize)\n  }\n\n  return n\n}\n\n/**\n * Work out exactly how many bytes this node takes up\n *\n * @param {RawPBNode} node\n * @returns {number}\n */\nfunction sizeNode (node) {\n  let n = 0\n\n  if (node.Data) {\n    const l = node.Data.length\n    n += 1 + l + sov(l)\n  }\n\n  if (node.Links) {\n    for (const link of node.Links) {\n      const l = sizeLink(link)\n      n += 1 + l + sov(l)\n    }\n  }\n\n  return n\n}\n\n/**\n * @param {Uint8Array} bytes\n * @param {number} offset\n * @param {number} v\n * @returns {number}\n */\nfunction encodeVarint (bytes, offset, v) {\n  offset -= sov(v)\n  const base = offset\n\n  while (v >= maxUInt32) {\n    bytes[offset++] = (v & 0x7f) | 0x80\n    v /= 128\n  }\n\n  while (v >= 128) {\n    bytes[offset++] = (v & 0x7f) | 0x80\n    v >>>= 7\n  }\n\n  bytes[offset] = v\n\n  return base\n}\n\n/**\n * size of varint\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sov (x) {\n  if (x % 2 === 0) {\n    x++\n  }\n  return Math.floor((len64(x) + 6) / 7)\n}\n\n/**\n * golang math/bits, how many bits does it take to represent this integer?\n *\n * @param {number} x\n * @returns {number}\n */\nfunction len64 (x) {\n  let n = 0\n  if (x >= maxInt32) {\n    x = Math.floor(x / maxInt32)\n    n = 32\n  }\n  if (x >= (1 << 16)) {\n    x >>>= 16\n    n += 16\n  }\n  if (x >= (1 << 8)) {\n    x >>>= 8\n    n += 8\n  }\n  return n + len8tab[x]\n}\n\n// golang math/bits\nconst len8tab = [\n  0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8\n]\n", "import { CID } from 'multiformats/cid'\n\n/**\n * @typedef {import('./interface.js').PBLink} PBLink\n * @typedef {import('./interface.js').PBNode} PBNode\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ArrayBufferView<T>} ArrayBufferView\n */\n\nconst pbNodeProperties = ['Data', 'Links']\nconst pbLinkProperties = ['Hash', 'Name', 'Tsize']\n\nconst textEncoder = new TextEncoder()\n\n/**\n * @param {PBLink} a\n * @param {PBLink} b\n * @returns {number}\n */\nfunction linkComparator (a, b) {\n  if (a === b) {\n    return 0\n  }\n\n  const abuf = a.Name ? textEncoder.encode(a.Name) : []\n  const bbuf = b.Name ? textEncoder.encode(b.Name) : []\n\n  let x = abuf.length\n  let y = bbuf.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (abuf[i] !== bbuf[i]) {\n      x = abuf[i]\n      y = bbuf[i]\n      break\n    }\n  }\n\n  return x < y ? -1 : y < x ? 1 : 0\n}\n\n/**\n * @param {any} node\n * @param {string[]} properties\n * @returns {boolean}\n */\nfunction hasOnlyProperties (node, properties) {\n  return !Object.keys(node).some((p) => !properties.includes(p))\n}\n\n/**\n * Converts a CID, or a PBLink-like object to a PBLink\n *\n * @param {any} link\n * @returns {PBLink}\n */\nfunction asLink (link) {\n  if (typeof link.asCID === 'object') {\n    const Hash = CID.asCID(link)\n    if (!Hash) {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n    return { Hash }\n  }\n\n  if (typeof link !== 'object' || Array.isArray(link)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  const pbl = {}\n\n  if (link.Hash) {\n    let cid = CID.asCID(link.Hash)\n    try {\n      if (!cid) {\n        if (typeof link.Hash === 'string') {\n          cid = CID.parse(link.Hash)\n        } else if (link.Hash instanceof Uint8Array) {\n          cid = CID.decode(link.Hash)\n        }\n      }\n    } catch (/** @type {any} */ e) {\n      throw new TypeError(`Invalid DAG-PB form: ${e.message}`)\n    }\n\n    if (cid) {\n      pbl.Hash = cid\n    }\n  }\n\n  if (!pbl.Hash) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  if (typeof link.Name === 'string') {\n    pbl.Name = link.Name\n  }\n\n  if (typeof link.Tsize === 'number') {\n    pbl.Tsize = link.Tsize\n  }\n\n  return pbl\n}\n\n/**\n * @param {any} node\n * @returns {PBNode}\n */\nexport function prepare (node) {\n  if (node instanceof Uint8Array || typeof node === 'string') {\n    node = { Data: node }\n  }\n\n  if (typeof node !== 'object' || Array.isArray(node)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  /** @type {PBNode} */\n  const pbn = {}\n\n  if (node.Data !== undefined) {\n    if (typeof node.Data === 'string') {\n      pbn.Data = textEncoder.encode(node.Data)\n    } else if (node.Data instanceof Uint8Array) {\n      pbn.Data = node.Data\n    } else {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n  }\n\n  if (node.Links !== undefined) {\n    if (Array.isArray(node.Links)) {\n      pbn.Links = node.Links.map(asLink)\n      pbn.Links.sort(linkComparator)\n    } else {\n      throw new TypeError('Invalid DAG-PB form')\n    }\n  } else {\n    pbn.Links = []\n  }\n\n  return pbn\n}\n\n/**\n * @param {PBNode} node\n */\nexport function validate (node) {\n  /*\n  type PBLink struct {\n    Hash optional Link\n    Name optional String\n    Tsize optional Int\n  }\n\n  type PBNode struct {\n    Links [PBLink]\n    Data optional Bytes\n  }\n  */\n  // @ts-ignore private property for TS\n  if (!node || typeof node !== 'object' || Array.isArray(node) || node instanceof Uint8Array || (node['/'] && node['/'] === node.bytes)) {\n    throw new TypeError('Invalid DAG-PB form')\n  }\n\n  if (!hasOnlyProperties(node, pbNodeProperties)) {\n    throw new TypeError('Invalid DAG-PB form (extraneous properties)')\n  }\n\n  if (node.Data !== undefined && !(node.Data instanceof Uint8Array)) {\n    throw new TypeError('Invalid DAG-PB form (Data must be bytes)')\n  }\n\n  if (!Array.isArray(node.Links)) {\n    throw new TypeError('Invalid DAG-PB form (Links must be a list)')\n  }\n\n  for (let i = 0; i < node.Links.length; i++) {\n    const link = node.Links[i]\n    // @ts-ignore private property for TS\n    if (!link || typeof link !== 'object' || Array.isArray(link) || link instanceof Uint8Array || (link['/'] && link['/'] === link.bytes)) {\n      throw new TypeError('Invalid DAG-PB form (bad link)')\n    }\n\n    if (!hasOnlyProperties(link, pbLinkProperties)) {\n      throw new TypeError('Invalid DAG-PB form (extraneous properties on link)')\n    }\n\n    if (link.Hash === undefined) {\n      throw new TypeError('Invalid DAG-PB form (link must have a Hash)')\n    }\n\n    // @ts-ignore private property for TS\n    if (link.Hash == null || !link.Hash['/'] || link.Hash['/'] !== link.Hash.bytes) {\n      throw new TypeError('Invalid DAG-PB form (link Hash must be a CID)')\n    }\n\n    if (link.Name !== undefined && typeof link.Name !== 'string') {\n      throw new TypeError('Invalid DAG-PB form (link Name must be a string)')\n    }\n\n    if (link.Tsize !== undefined) {\n      if (typeof link.Tsize !== 'number' || link.Tsize % 1 !== 0) {\n        throw new TypeError('Invalid DAG-PB form (link Tsize must be an integer)')\n      }\n      if (link.Tsize < 0) {\n        throw new TypeError('Invalid DAG-PB form (link Tsize cannot be negative)')\n      }\n    }\n\n    if (i > 0 && linkComparator(link, node.Links[i - 1]) === -1) {\n      throw new TypeError('Invalid DAG-PB form (links must be sorted by Name bytes)')\n    }\n  }\n}\n\n/**\n * @param {Uint8Array} data\n * @param {PBLink[]} [links=[]]\n * @returns {PBNode}\n */\nexport function createNode (data, links = []) {\n  return prepare({ Data: data, Links: links })\n}\n\n/**\n * @param {string} name\n * @param {number} size\n * @param {CID} cid\n * @returns {PBLink}\n */\nexport function createLink (name, size, cid) {\n  return asLink({ Hash: cid, Name: name, Tsize: size })\n}\n\n/**\n * @template T\n * @param {ByteView<T> | ArrayBufferView<T>} buf\n * @returns {ByteView<T>}\n */\nexport function toByteView (buf) {\n  if (buf instanceof ArrayBuffer) {\n    return new Uint8Array(buf, 0, buf.byteLength)\n  }\n\n  return buf\n}\n", "/**\n * @packageDocumentation\n *\n * This module contains the protobuf definition of the UnixFS data structure found at the root of all UnixFS DAGs.\n *\n * The UnixFS spec can be found in the [ipfs/specs repository](http://github.com/ipfs/specs)\n *\n * @example Create a file composed of several blocks\n *\n * ```JavaScript\n * const data = new UnixFS({ type: 'file' })\n * data.addBlockSize(256) // add the size of each block\n * data.addBlockSize(256)\n * // ...\n * ```\n *\n * @example Create a directory that contains several files\n *\n * Creating a directory that contains several files is achieve by creating a unixfs element that identifies a MerkleDAG node as a directory. The links of that MerkleDAG node are the files that are contained in this directory.\n *\n * ```JavaScript\n * const data = new UnixFS({ type: 'directory' })\n * ```\n *\n * @example Create an unixfs Data element\n *\n * ```JavaScript\n * const data = new UnixFS([options])\n * ```\n *\n * `options` is an optional object argument that might include the following keys:\n *\n * - type (string, default `file`): The type of UnixFS entry.  Can be:\n *   - `raw`\n *   - `directory`\n *   - `file`\n *   - `metadata`\n *   - `symlink`\n *   - `hamt-sharded-directory`\n * - data (Uint8Array): The optional data field for this node\n * - blockSizes (Array, default: `[]`): If this is a `file` node that is made up of multiple blocks, `blockSizes` is a list numbers that represent the size of the file chunks stored in each child node. It is used to calculate the total file size.\n * - mode (Number, default `0644` for files, `0755` for directories/hamt-sharded-directories) file mode\n * - mtime (`Date`, `{ secs, nsecs }`, `{ Seconds, FractionalNanoseconds }`, `[ secs, nsecs ]`): The modification time of this node\n *\n * @example Add and remove a block size to the block size list\n *\n * ```JavaScript\n * data.addBlockSize(<size in bytes>)\n * ```\n *\n * ```JavaScript\n * data.removeBlockSize(<index>)\n * ```\n *\n * @example Get total fileSize\n *\n * ```JavaScript\n * data.fileSize() // => size in bytes\n * ```\n *\n * @example Marshal and unmarshal\n *\n * ```javascript\n * const marshaled = data.marshal()\n * const unmarshaled = Unixfs.unmarshal(marshaled)\n * ```\n *\n * @example Is this UnixFS entry a directory?\n *\n * ```JavaScript\n * const dir = new Data({ type: 'directory' })\n * dir.isDirectory() // true\n *\n * const file = new Data({ type: 'file' })\n * file.isDirectory() // false\n * ```\n *\n * @example Has an mtime been set?\n *\n * If no modification time has been set, no `mtime` property will be present on the `Data` instance:\n *\n * ```JavaScript\n * const file = new Data({ type: 'file' })\n * file.mtime // undefined\n *\n * Object.prototype.hasOwnProperty.call(file, 'mtime') // false\n *\n * const dir = new Data({ type: 'dir', mtime: new Date() })\n * dir.mtime // { secs: Number, nsecs: Number }\n * ```\n */\n\nimport errcode from 'err-code'\nimport { Data as PBData } from './unixfs.js'\n\nexport interface Mtime {\n  secs: bigint\n  nsecs?: number\n}\n\nexport type MtimeLike = Mtime | { Seconds: number, FractionalNanoseconds?: number } | [number, number] | Date\n\nconst types: Record<string, string> = {\n  Raw: 'raw',\n  Directory: 'directory',\n  File: 'file',\n  Metadata: 'metadata',\n  Symlink: 'symlink',\n  HAMTShard: 'hamt-sharded-directory'\n}\n\nconst dirTypes = [\n  'directory',\n  'hamt-sharded-directory'\n]\n\nconst DEFAULT_FILE_MODE = parseInt('0644', 8)\nconst DEFAULT_DIRECTORY_MODE = parseInt('0755', 8)\n\nexport interface UnixFSOptions {\n  type?: string\n  data?: Uint8Array\n  blockSizes?: bigint[]\n  hashType?: bigint\n  fanout?: bigint\n  mtime?: Mtime\n  mode?: number\n}\n\nclass UnixFS {\n  /**\n   * Decode from protobuf https://github.com/ipfs/specs/blob/master/UNIXFS.md\n   */\n  static unmarshal (marshaled: Uint8Array): UnixFS {\n    const message = PBData.decode(marshaled)\n\n    const data = new UnixFS({\n      type: types[message.Type != null ? message.Type.toString() : 'File'],\n      data: message.Data,\n      blockSizes: message.blocksizes,\n      mode: message.mode,\n      mtime: message.mtime != null\n        ? {\n            secs: message.mtime.Seconds ?? 0n,\n            nsecs: message.mtime.FractionalNanoseconds\n          }\n        : undefined,\n      fanout: message.fanout\n    })\n\n    // make sure we honour the original mode\n    data._originalMode = message.mode ?? 0\n\n    return data\n  }\n\n  public type: string\n  public data?: Uint8Array\n  public blockSizes: bigint[]\n  public hashType?: bigint\n  public fanout?: bigint\n  public mtime?: Mtime\n\n  private _mode?: number\n  private _originalMode: number\n\n  constructor (options: UnixFSOptions = {\n    type: 'file'\n  }) {\n    const {\n      type,\n      data,\n      blockSizes,\n      hashType,\n      fanout,\n      mtime,\n      mode\n    } = options\n\n    if (type != null && !Object.values(types).includes(type)) {\n      throw errcode(new Error('Type: ' + type + ' is not valid'), 'ERR_INVALID_TYPE')\n    }\n\n    this.type = type ?? 'file'\n    this.data = data\n    this.hashType = hashType\n    this.fanout = fanout\n    this.blockSizes = blockSizes ?? []\n    this._originalMode = 0\n    this.mode = mode\n    this.mtime = mtime\n  }\n\n  set mode (mode: number | undefined) {\n    if (mode == null) {\n      this._mode = this.isDirectory() ? DEFAULT_DIRECTORY_MODE : DEFAULT_FILE_MODE\n    } else {\n      this._mode = (mode & 0xFFF)\n    }\n  }\n\n  get mode (): number | undefined {\n    return this._mode\n  }\n\n  isDirectory (): boolean {\n    return dirTypes.includes(this.type)\n  }\n\n  addBlockSize (size: bigint): void {\n    this.blockSizes.push(size)\n  }\n\n  removeBlockSize (index: number): void {\n    this.blockSizes.splice(index, 1)\n  }\n\n  /**\n   * Returns `0n` for directories or `data.length + sum(blockSizes)` for everything else\n   */\n  fileSize (): bigint {\n    if (this.isDirectory()) {\n      // dirs don't have file size\n      return 0n\n    }\n\n    let sum = 0n\n    this.blockSizes.forEach((size) => {\n      sum += size\n    })\n\n    if (this.data != null) {\n      sum += BigInt(this.data.length)\n    }\n\n    return sum\n  }\n\n  /**\n   * encode to protobuf Uint8Array\n   */\n  marshal (): Uint8Array {\n    let type\n\n    switch (this.type) {\n      case 'raw': type = PBData.DataType.Raw; break\n      case 'directory': type = PBData.DataType.Directory; break\n      case 'file': type = PBData.DataType.File; break\n      case 'metadata': type = PBData.DataType.Metadata; break\n      case 'symlink': type = PBData.DataType.Symlink; break\n      case 'hamt-sharded-directory': type = PBData.DataType.HAMTShard; break\n      default:\n        throw errcode(new Error(`Type: ${type} is not valid`), 'ERR_INVALID_TYPE')\n    }\n\n    let data = this.data\n\n    if (this.data == null || this.data.length === 0) {\n      data = undefined\n    }\n\n    let mode\n\n    if (this.mode != null) {\n      mode = (this._originalMode & 0xFFFFF000) | (this.mode ?? 0)\n\n      if (mode === DEFAULT_FILE_MODE && !this.isDirectory()) {\n        mode = undefined\n      }\n\n      if (mode === DEFAULT_DIRECTORY_MODE && this.isDirectory()) {\n        mode = undefined\n      }\n    }\n\n    let mtime\n\n    if (this.mtime != null) {\n      mtime = {\n        Seconds: this.mtime.secs,\n        FractionalNanoseconds: this.mtime.nsecs\n      }\n    }\n\n    return PBData.encode({\n      Type: type,\n      Data: data,\n      filesize: this.isDirectory() ? undefined : this.fileSize(),\n      blocksizes: this.blockSizes,\n      hashType: this.hashType,\n      fanout: this.fanout,\n      mode,\n      mtime\n    })\n  }\n}\n\nexport { UnixFS }\n", "/* eslint-disable import/export */\n/* eslint-disable complexity */\n/* eslint-disable @typescript-eslint/no-namespace */\n/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */\n/* eslint-disable @typescript-eslint/no-empty-interface */\n\nimport { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime'\nimport type { Codec } from 'protons-runtime'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport interface Data {\n  Type?: Data.DataType\n  Data?: Uint8Array\n  filesize?: bigint\n  blocksizes: bigint[]\n  hashType?: bigint\n  fanout?: bigint\n  mode?: number\n  mtime?: UnixTime\n}\n\nexport namespace Data {\n  export enum DataType {\n    Raw = 'Raw',\n    Directory = 'Directory',\n    File = 'File',\n    Metadata = 'Metadata',\n    Symlink = 'Symlink',\n    HAMTShard = 'HAMTShard'\n  }\n\n  enum __DataTypeValues {\n    Raw = 0,\n    Directory = 1,\n    File = 2,\n    Metadata = 3,\n    Symlink = 4,\n    HAMTShard = 5\n  }\n\n  export namespace DataType {\n    export const codec = (): Codec<DataType> => {\n      return enumeration<DataType>(__DataTypeValues)\n    }\n  }\n\n  let _codec: Codec<Data>\n\n  export const codec = (): Codec<Data> => {\n    if (_codec == null) {\n      _codec = message<Data>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.Type != null) {\n          w.uint32(8)\n          Data.DataType.codec().encode(obj.Type, w)\n        }\n\n        if (obj.Data != null) {\n          w.uint32(18)\n          w.bytes(obj.Data)\n        }\n\n        if (obj.filesize != null) {\n          w.uint32(24)\n          w.uint64(obj.filesize)\n        }\n\n        if (obj.blocksizes != null) {\n          for (const value of obj.blocksizes) {\n            w.uint32(32)\n            w.uint64(value)\n          }\n        }\n\n        if (obj.hashType != null) {\n          w.uint32(40)\n          w.uint64(obj.hashType)\n        }\n\n        if (obj.fanout != null) {\n          w.uint32(48)\n          w.uint64(obj.fanout)\n        }\n\n        if (obj.mode != null) {\n          w.uint32(56)\n          w.uint32(obj.mode)\n        }\n\n        if (obj.mtime != null) {\n          w.uint32(66)\n          UnixTime.codec().encode(obj.mtime, w)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {\n          blocksizes: []\n        }\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.Type = Data.DataType.codec().decode(reader)\n              break\n            case 2:\n              obj.Data = reader.bytes()\n              break\n            case 3:\n              obj.filesize = reader.uint64()\n              break\n            case 4:\n              obj.blocksizes.push(reader.uint64())\n              break\n            case 5:\n              obj.hashType = reader.uint64()\n              break\n            case 6:\n              obj.fanout = reader.uint64()\n              break\n            case 7:\n              obj.mode = reader.uint32()\n              break\n            case 8:\n              obj.mtime = UnixTime.codec().decode(reader, reader.uint32())\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<Data>): Uint8Array => {\n    return encodeMessage(obj, Data.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): Data => {\n    return decodeMessage(buf, Data.codec())\n  }\n}\n\nexport interface UnixTime {\n  Seconds?: bigint\n  FractionalNanoseconds?: number\n}\n\nexport namespace UnixTime {\n  let _codec: Codec<UnixTime>\n\n  export const codec = (): Codec<UnixTime> => {\n    if (_codec == null) {\n      _codec = message<UnixTime>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.Seconds != null) {\n          w.uint32(8)\n          w.int64(obj.Seconds)\n        }\n\n        if (obj.FractionalNanoseconds != null) {\n          w.uint32(21)\n          w.fixed32(obj.FractionalNanoseconds)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {}\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.Seconds = reader.int64()\n              break\n            case 2:\n              obj.FractionalNanoseconds = reader.fixed32()\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<UnixTime>): Uint8Array => {\n    return encodeMessage(obj, UnixTime.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): UnixTime => {\n    return decodeMessage(buf, UnixTime.codec())\n  }\n}\n\nexport interface Metadata {\n  MimeType?: string\n}\n\nexport namespace Metadata {\n  let _codec: Codec<Metadata>\n\n  export const codec = (): Codec<Metadata> => {\n    if (_codec == null) {\n      _codec = message<Metadata>((obj, w, opts = {}) => {\n        if (opts.lengthDelimited !== false) {\n          w.fork()\n        }\n\n        if (obj.MimeType != null) {\n          w.uint32(10)\n          w.string(obj.MimeType)\n        }\n\n        if (opts.lengthDelimited !== false) {\n          w.ldelim()\n        }\n      }, (reader, length) => {\n        const obj: any = {}\n\n        const end = length == null ? reader.len : reader.pos + length\n\n        while (reader.pos < end) {\n          const tag = reader.uint32()\n\n          switch (tag >>> 3) {\n            case 1:\n              obj.MimeType = reader.string()\n              break\n            default:\n              reader.skipType(tag & 7)\n              break\n          }\n        }\n\n        return obj\n      })\n    }\n\n    return _codec\n  }\n\n  export const encode = (obj: Partial<Metadata>): Uint8Array => {\n    return encodeMessage(obj, Metadata.codec())\n  }\n\n  export const decode = (buf: Uint8Array | Uint8ArrayList): Metadata => {\n    return decodeMessage(buf, Metadata.codec())\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * This module contains serialization/deserialization code used when encoding/decoding protobufs.\n *\n * It should be declared as a dependency of your project:\n *\n * ```console\n * npm i protons-runtime\n * ```\n */\n\nimport type { Codec } from './codec.js'\n\nexport interface FieldDef {\n  name: string\n  codec: Codec<any>\n  optional?: true\n  repeats?: true\n  packed?: true\n}\n\nexport {\n  decodeMessage\n} from './decode.js'\n\nexport {\n  encodeMessage\n} from './encode.js'\n\nexport { enumeration } from './codecs/enum.js'\nexport { message } from './codecs/message.js'\nexport { createReader as reader } from './utils/reader.js'\nexport { createWriter as writer } from './utils/writer.js'\nexport type { Codec, EncodeOptions, DecodeOptions } from './codec.js'\n\nexport interface Writer {\n  /**\n   * Current length\n   */\n  len: number\n\n  /**\n   * Writes an unsigned 32 bit value as a varint\n   */\n  uint32(value: number): this\n\n  /**\n   * Writes a signed 32 bit value as a varint`\n   */\n  int32(value: number): this\n\n  /**\n   * Writes a 32 bit value as a varint, zig-zag encoded\n   */\n  sint32(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64(value: bigint): this\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64Number(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64String(value: string): this\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64(value: bigint): this\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64Number(value: number): this\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64String(value: string): this\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64(value: bigint): this\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64Number(value: number): this\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64String(value: string): this\n\n  /**\n   * Writes a boolish value as a varint\n   */\n  bool(value: boolean): this\n\n  /**\n   * Writes an unsigned 32 bit value as fixed 32 bits\n   */\n  fixed32(value: number): this\n\n  /**\n   * Writes a signed 32 bit value as fixed 32 bits\n   */\n  sfixed32(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64(value: bigint): this\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64Number(value: number): this\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64String(value: string): this\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64(value: bigint): this\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64Number(value: number): this\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64String(value: string): this\n\n  /**\n   * Writes a float (32 bit)\n   */\n  float(value: number): this\n\n  /**\n   * Writes a double (64 bit float)\n   */\n  double(value: number): this\n\n  /**\n   * Writes a sequence of bytes\n   */\n  bytes(value: Uint8Array): this\n\n  /**\n   * Writes a string\n   */\n  string(value: string): this\n\n  /**\n   * Forks this writer's state by pushing it to a stack.\n   * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n   */\n  fork(): this\n\n  /**\n   * Resets this instance to the last state.\n   */\n  reset(): this\n\n  /**\n   * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n   */\n  ldelim(): this\n\n  /**\n   * Finishes the write operation\n   */\n  finish(): Uint8Array\n}\n\nexport interface Reader {\n  /**\n   * Read buffer\n   */\n  buf: Uint8Array\n\n  /**\n   * Read buffer position\n   */\n  pos: number\n\n  /**\n   * Read buffer length\n   */\n  len: number\n\n  /**\n   * Reads a varint as an unsigned 32 bit value\n   */\n  uint32(): number\n\n  /**\n   * Reads a varint as a signed 32 bit value\n   */\n  int32(): number\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 32 bit value\n   */\n  sint32(): number\n\n  /**\n   * Reads a varint as a boolean\n   */\n  bool(): boolean\n\n  /**\n   * Reads fixed 32 bits as an unsigned 32 bit integer\n   */\n  fixed32(): number\n\n  /**\n   * Reads fixed 32 bits as a signed 32 bit integer\n   */\n  sfixed32(): number\n\n  /**\n   * Reads a float (32 bit) as a number\n   */\n  float(): number\n\n  /**\n   * Reads a double (64 bit float) as a number\n   */\n  double(): number\n\n  /**\n   * Reads a sequence of bytes preceded by its length as a varint\n   */\n  bytes(): Uint8Array\n\n  /**\n   * Reads a string preceded by its byte length as a varint\n   */\n  string(): string\n\n  /**\n   * Skips the specified number of bytes if specified, otherwise skips a varints`\n   */\n  skip(length?: number): void\n\n  /**\n   * Skips the next element of the specified wire type\n   */\n  skipType(wireType: number): void\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64(): bigint\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64Number(): number\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64String(): string\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64(): bigint\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64Number(): number\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64String(): string\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64(): bigint\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64Number(): number\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64String(): string\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64(): bigint\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64Number(): number\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64String(): string\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64(): bigint\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64Number(): number\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64String(): string\n}\n\nexport class CodeError extends Error {\n  public code: string\n\n  constructor (message: string, code: string, options?: ErrorOptions) {\n    super(message, options)\n\n    this.code = code\n  }\n}\n", "import { createReader } from './utils/reader.js'\nimport type { Codec, DecodeOptions } from './codec.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nexport function decodeMessage <T> (buf: Uint8Array | Uint8ArrayList, codec: Pick<Codec<T>, 'decode'>, opts?: DecodeOptions<T>): T {\n  const reader = createReader(buf)\n\n  return codec.decode(reader, undefined, opts)\n}\n", "import { decodeUint8Array, encodingLength } from 'uint8-varint'\nimport { readFloatLE, readDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport * as utf8 from './utf8.js'\nimport type { Reader } from '../index.js'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\n/* istanbul ignore next */\nfunction indexOutOfRange (reader: Reader, writeLength?: number): RangeError {\n  return RangeError(`index out of range: ${reader.pos} + ${writeLength ?? 1} > ${reader.len}`)\n}\n\nfunction readFixed32End (buf: Uint8Array, end: number): number { // note that this uses `end`, not `pos`\n  return (buf[end - 4] |\n        buf[end - 3] << 8 |\n        buf[end - 2] << 16 |\n        buf[end - 1] << 24) >>> 0\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n */\nexport class Uint8ArrayReader implements Reader {\n  public buf: Uint8Array\n  public pos: number\n  public len: number\n\n  public _slice = Uint8Array.prototype.subarray\n\n  constructor (buffer: Uint8Array) {\n    /**\n     * Read buffer\n     */\n    this.buf = buffer\n\n    /**\n     * Read buffer position\n     */\n    this.pos = 0\n\n    /**\n     * Read buffer length\n     */\n    this.len = buffer.length\n  }\n\n  /**\n   * Reads a varint as an unsigned 32 bit value\n   */\n  uint32 (): number {\n    let value = 4294967295\n\n    value = (this.buf[this.pos] & 127) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value\n    value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value\n\n    if ((this.pos += 5) > this.len) {\n      this.pos = this.len\n      throw indexOutOfRange(this, 10)\n    }\n\n    return value\n  }\n\n  /**\n   * Reads a varint as a signed 32 bit value\n   */\n  int32 (): number {\n    return this.uint32() | 0\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 32 bit value\n   */\n  sint32 (): number {\n    const value = this.uint32()\n    return value >>> 1 ^ -(value & 1) | 0\n  }\n\n  /**\n   * Reads a varint as a boolean\n   */\n  bool (): boolean {\n    return this.uint32() !== 0\n  }\n\n  /**\n   * Reads fixed 32 bits as an unsigned 32 bit integer\n   */\n  fixed32 (): number {\n    if (this.pos + 4 > this.len) { throw indexOutOfRange(this, 4) }\n\n    const res = readFixed32End(this.buf, this.pos += 4)\n\n    return res\n  }\n\n  /**\n   * Reads fixed 32 bits as a signed 32 bit integer\n   */\n  sfixed32 (): number {\n    if (this.pos + 4 > this.len) {\n      throw indexOutOfRange(this, 4)\n    }\n\n    const res = readFixed32End(this.buf, this.pos += 4) | 0\n\n    return res\n  }\n\n  /**\n   * Reads a float (32 bit) as a number\n   */\n  float (): number {\n    if (this.pos + 4 > this.len) {\n      throw indexOutOfRange(this, 4)\n    }\n\n    const value = readFloatLE(this.buf, this.pos)\n    this.pos += 4\n    return value\n  }\n\n  /**\n   * Reads a double (64 bit float) as a number\n   */\n  double (): number {\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len) { throw indexOutOfRange(this, 4) }\n\n    const value = readDoubleLE(this.buf, this.pos)\n    this.pos += 8\n    return value\n  }\n\n  /**\n   * Reads a sequence of bytes preceded by its length as a varint\n   */\n  bytes (): Uint8Array {\n    const length = this.uint32()\n    const start = this.pos\n    const end = this.pos + length\n\n    /* istanbul ignore if */\n    if (end > this.len) {\n      throw indexOutOfRange(this, length)\n    }\n\n    this.pos += length\n\n    return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n      ? new Uint8Array(0)\n      : this.buf.subarray(start, end)\n  }\n\n  /**\n   * Reads a string preceded by its byte length as a varint\n   */\n  string (): string {\n    const bytes = this.bytes()\n    return utf8.read(bytes, 0, bytes.length)\n  }\n\n  /**\n   * Skips the specified number of bytes if specified, otherwise skips a varint\n   */\n  skip (length?: number): this {\n    if (typeof length === 'number') {\n      /* istanbul ignore if */\n      if (this.pos + length > this.len) { throw indexOutOfRange(this, length) }\n      this.pos += length\n    } else {\n      do {\n        /* istanbul ignore if */\n        if (this.pos >= this.len) {\n          throw indexOutOfRange(this)\n        }\n      } while ((this.buf[this.pos++] & 128) !== 0)\n    }\n    return this\n  }\n\n  /**\n   * Skips the next element of the specified wire type\n   */\n  skipType (wireType: number): this {\n    switch (wireType) {\n      case 0:\n        this.skip()\n        break\n      case 1:\n        this.skip(8)\n        break\n      case 2:\n        this.skip(this.uint32())\n        break\n      case 3:\n        while ((wireType = this.uint32() & 7) !== 4) {\n          this.skipType(wireType)\n        }\n        break\n      case 5:\n        this.skip(4)\n        break\n\n        /* istanbul ignore next */\n      default:\n        throw Error(`invalid wire type ${wireType} at offset ${this.pos}`)\n    }\n    return this\n  }\n\n  private readLongVarint (): LongBits {\n    // tends to deopt with local vars for octet etc.\n    const bits = new LongBits(0, 0)\n    let i = 0\n    if (this.len - this.pos > 4) { // fast route (lo)\n      for (; i < 4; ++i) {\n        // 1st..4th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n      // 5th\n      bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0\n      bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0\n      if (this.buf[this.pos++] < 128) { return bits }\n      i = 0\n    } else {\n      for (; i < 3; ++i) {\n        /* istanbul ignore if */\n        if (this.pos >= this.len) { throw indexOutOfRange(this) }\n        // 1st..3th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n      // 4th\n      bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0\n      return bits\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n      for (; i < 5; ++i) {\n        // 6th..10th\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n    } else {\n      for (; i < 5; ++i) {\n        if (this.pos >= this.len) {\n          throw indexOutOfRange(this)\n        }\n\n        // 6th..10th\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0\n        if (this.buf[this.pos++] < 128) { return bits }\n      }\n    }\n\n    throw Error('invalid varint encoding')\n  }\n\n  private readFixed64 (): LongBits {\n    if (this.pos + 8 > this.len) {\n      throw indexOutOfRange(this, 8)\n    }\n\n    const lo = readFixed32End(this.buf, this.pos += 4)\n    const hi = readFixed32End(this.buf, this.pos += 4)\n\n    return new LongBits(lo, hi)\n  }\n\n  /**\n   * Reads a varint as a signed 64 bit value\n   */\n  int64 (): bigint {\n    return this.readLongVarint().toBigInt()\n  }\n\n  /**\n   * Reads a varint as a signed 64 bit value returned as a possibly unsafe\n   * JavaScript number\n   */\n  int64Number (): number {\n    return this.readLongVarint().toNumber()\n  }\n\n  /**\n   * Reads a varint as a signed 64 bit value returned as a string\n   */\n  int64String (): string {\n    return this.readLongVarint().toString()\n  }\n\n  /**\n   * Reads a varint as an unsigned 64 bit value\n   */\n  uint64 (): bigint {\n    return this.readLongVarint().toBigInt(true)\n  }\n\n  /**\n   * Reads a varint as an unsigned 64 bit value returned as a possibly unsafe\n   * JavaScript number\n   */\n  uint64Number (): number {\n    const value = decodeUint8Array(this.buf, this.pos)\n    this.pos += encodingLength(value)\n    return value\n  }\n\n  /**\n   * Reads a varint as an unsigned 64 bit value returned as a string\n   */\n  uint64String (): string {\n    return this.readLongVarint().toString(true)\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value\n   */\n  sint64 (): bigint {\n    return this.readLongVarint().zzDecode().toBigInt()\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n   * possibly unsafe JavaScript number\n   */\n  sint64Number (): number {\n    return this.readLongVarint().zzDecode().toNumber()\n  }\n\n  /**\n   * Reads a zig-zag encoded varint as a signed 64 bit value returned as a\n   * string\n   */\n  sint64String (): string {\n    return this.readLongVarint().zzDecode().toString()\n  }\n\n  /**\n   * Reads fixed 64 bits\n   */\n  fixed64 (): bigint {\n    return this.readFixed64().toBigInt()\n  }\n\n  /**\n   * Reads fixed 64 bits returned as a possibly unsafe JavaScript number\n   */\n  fixed64Number (): number {\n    return this.readFixed64().toNumber()\n  }\n\n  /**\n   * Reads fixed 64 bits returned as a string\n   */\n  fixed64String (): string {\n    return this.readFixed64().toString()\n  }\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits\n   */\n  sfixed64 (): bigint {\n    return this.readFixed64().toBigInt()\n  }\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits returned as a possibly unsafe\n   * JavaScript number\n   */\n  sfixed64Number (): number {\n    return this.readFixed64().toNumber()\n  }\n\n  /**\n   * Reads zig-zag encoded fixed 64 bits returned as a string\n   */\n  sfixed64String (): string {\n    return this.readFixed64().toString()\n  }\n}\n\nexport function createReader (buf: Uint8Array | Uint8ArrayList): Reader {\n  return new Uint8ArrayReader(buf instanceof Uint8Array ? buf : buf.subarray())\n}\n", "/* eslint-disable no-fallthrough */\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport type { Uint8ArrayList } from 'uint8arraylist'\n\nconst N1 = Math.pow(2, 7)\nconst N2 = Math.pow(2, 14)\nconst N3 = Math.pow(2, 21)\nconst N4 = Math.pow(2, 28)\nconst N5 = Math.pow(2, 35)\nconst N6 = Math.pow(2, 42)\nconst N7 = Math.pow(2, 49)\n\n/** Most significant bit of a byte */\nconst MSB = 0x80\n/** Rest of the bits in a byte */\nconst REST = 0x7f\n\nexport function encodingLength (value: number): number {\n  if (value < N1) {\n    return 1\n  }\n\n  if (value < N2) {\n    return 2\n  }\n\n  if (value < N3) {\n    return 3\n  }\n\n  if (value < N4) {\n    return 4\n  }\n\n  if (value < N5) {\n    return 5\n  }\n\n  if (value < N6) {\n    return 6\n  }\n\n  if (value < N7) {\n    return 7\n  }\n\n  if (Number.MAX_SAFE_INTEGER != null && value > Number.MAX_SAFE_INTEGER) {\n    throw new RangeError('Could not encode varint')\n  }\n\n  return 8\n}\n\nexport function encodeUint8Array (value: number, buf: Uint8Array, offset: number = 0): Uint8Array {\n  switch (encodingLength(value)) {\n    case 8: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 7: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 6: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 5: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value /= 128\n    }\n    case 4: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value >>>= 7\n    }\n    case 3: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value >>>= 7\n    }\n    case 2: {\n      buf[offset++] = (value & 0xFF) | MSB\n      value >>>= 7\n    }\n    case 1: {\n      buf[offset++] = (value & 0xFF)\n      value >>>= 7\n      break\n    }\n    default: throw new Error('unreachable')\n  }\n  return buf\n}\n\nexport function encodeUint8ArrayList (value: number, buf: Uint8ArrayList, offset: number = 0): Uint8ArrayList {\n  switch (encodingLength(value)) {\n    case 8: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 7: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 6: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 5: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value /= 128\n    }\n    case 4: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value >>>= 7\n    }\n    case 3: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value >>>= 7\n    }\n    case 2: {\n      buf.set(offset++, (value & 0xFF) | MSB)\n      value >>>= 7\n    }\n    case 1: {\n      buf.set(offset++, (value & 0xFF))\n      value >>>= 7\n      break\n    }\n    default: throw new Error('unreachable')\n  }\n  return buf\n}\n\nexport function decodeUint8Array (buf: Uint8Array, offset: number): number {\n  let b = buf[offset]\n  let res = 0\n\n  res += b & REST\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 1]\n  res += (b & REST) << 7\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 2]\n  res += (b & REST) << 14\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 3]\n  res += (b & REST) << 21\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 4]\n  res += (b & REST) * N4\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 5]\n  res += (b & REST) * N5\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 6]\n  res += (b & REST) * N6\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf[offset + 7]\n  res += (b & REST) * N7\n  if (b < MSB) {\n    return res\n  }\n\n  throw new RangeError('Could not decode varint')\n}\n\nexport function decodeUint8ArrayList (buf: Uint8ArrayList, offset: number): number {\n  let b = buf.get(offset)\n  let res = 0\n\n  res += b & REST\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 1)\n  res += (b & REST) << 7\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 2)\n  res += (b & REST) << 14\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 3)\n  res += (b & REST) << 21\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 4)\n  res += (b & REST) * N4\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 5)\n  res += (b & REST) * N5\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 6)\n  res += (b & REST) * N6\n  if (b < MSB) {\n    return res\n  }\n\n  b = buf.get(offset + 7)\n  res += (b & REST) * N7\n  if (b < MSB) {\n    return res\n  }\n\n  throw new RangeError('Could not decode varint')\n}\n\nexport function encode (value: number): Uint8Array\nexport function encode (value: number, buf: Uint8Array, offset?: number): Uint8Array\nexport function encode (value: number, buf: Uint8ArrayList, offset?: number): Uint8ArrayList\nexport function encode <T extends Uint8Array | Uint8ArrayList = Uint8Array> (value: number, buf?: T, offset: number = 0): T {\n  if (buf == null) {\n    buf = allocUnsafe(encodingLength(value)) as T\n  }\n  if (buf instanceof Uint8Array) {\n    return encodeUint8Array(value, buf, offset) as T\n  } else {\n    return encodeUint8ArrayList(value, buf, offset) as T\n  }\n}\n\nexport function decode (buf: Uint8ArrayList | Uint8Array, offset: number = 0): number {\n  if (buf instanceof Uint8Array) {\n    return decodeUint8Array(buf, offset)\n  } else {\n    return decodeUint8ArrayList(buf, offset)\n  }\n}\n", "const f32 = new Float32Array([-0])\nconst f8b = new Uint8Array(f32.buffer)\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order\n */\nexport function writeFloatLE (val: number, buf: Uint8Array, pos: number): void {\n  f32[0] = val\n  buf[pos] = f8b[0]\n  buf[pos + 1] = f8b[1]\n  buf[pos + 2] = f8b[2]\n  buf[pos + 3] = f8b[3]\n}\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order\n */\nexport function writeFloatBE (val: number, buf: Uint8Array, pos: number): void {\n  f32[0] = val\n  buf[pos] = f8b[3]\n  buf[pos + 1] = f8b[2]\n  buf[pos + 2] = f8b[1]\n  buf[pos + 3] = f8b[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order\n */\nexport function readFloatLE (buf: Uint8Array, pos: number): number {\n  f8b[0] = buf[pos]\n  f8b[1] = buf[pos + 1]\n  f8b[2] = buf[pos + 2]\n  f8b[3] = buf[pos + 3]\n  return f32[0]\n}\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order\n */\nexport function readFloatBE (buf: Uint8Array, pos: number): number {\n  f8b[3] = buf[pos]\n  f8b[2] = buf[pos + 1]\n  f8b[1] = buf[pos + 2]\n  f8b[0] = buf[pos + 3]\n  return f32[0]\n}\n\nconst f64 = new Float64Array([-0])\nconst d8b = new Uint8Array(f64.buffer)\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order\n */\nexport function writeDoubleLE (val: number, buf: Uint8Array, pos: number): void {\n  f64[0] = val\n  buf[pos] = d8b[0]\n  buf[pos + 1] = d8b[1]\n  buf[pos + 2] = d8b[2]\n  buf[pos + 3] = d8b[3]\n  buf[pos + 4] = d8b[4]\n  buf[pos + 5] = d8b[5]\n  buf[pos + 6] = d8b[6]\n  buf[pos + 7] = d8b[7]\n}\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order\n */\nexport function writeDoubleBE (val: number, buf: Uint8Array, pos: number): void {\n  f64[0] = val\n  buf[pos] = d8b[7]\n  buf[pos + 1] = d8b[6]\n  buf[pos + 2] = d8b[5]\n  buf[pos + 3] = d8b[4]\n  buf[pos + 4] = d8b[3]\n  buf[pos + 5] = d8b[2]\n  buf[pos + 6] = d8b[1]\n  buf[pos + 7] = d8b[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order\n */\nexport function readDoubleLE (buf: Uint8Array, pos: number): number {\n  d8b[0] = buf[pos]\n  d8b[1] = buf[pos + 1]\n  d8b[2] = buf[pos + 2]\n  d8b[3] = buf[pos + 3]\n  d8b[4] = buf[pos + 4]\n  d8b[5] = buf[pos + 5]\n  d8b[6] = buf[pos + 6]\n  d8b[7] = buf[pos + 7]\n  return f64[0]\n}\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order\n */\nexport function readDoubleBE (buf: Uint8Array, pos: number): number {\n  d8b[7] = buf[pos]\n  d8b[6] = buf[pos + 1]\n  d8b[5] = buf[pos + 2]\n  d8b[4] = buf[pos + 3]\n  d8b[3] = buf[pos + 4]\n  d8b[2] = buf[pos + 5]\n  d8b[1] = buf[pos + 6]\n  d8b[0] = buf[pos + 7]\n  return f64[0]\n}\n", "// the largest BigInt we can safely downcast to a Number\nconst MAX_SAFE_NUMBER_INTEGER = BigInt(Number.MAX_SAFE_INTEGER)\nconst MIN_SAFE_NUMBER_INTEGER = BigInt(Number.MIN_SAFE_INTEGER)\n\n/**\n * Constructs new long bits.\n *\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @function Object() { [native code] }\n * @param {number} lo - Low 32 bits, unsigned\n * @param {number} hi - High 32 bits, unsigned\n */\nexport class LongBits {\n  public lo: number\n  public hi: number\n\n  constructor (lo: number, hi: number) {\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits\n     */\n    this.lo = lo | 0\n\n    /**\n     * High bits\n     */\n    this.hi = hi | 0\n  }\n\n  /**\n   * Converts this long bits to a possibly unsafe JavaScript number\n   */\n  toNumber (unsigned: boolean = false): number {\n    if (!unsigned && (this.hi >>> 31) > 0) {\n      const lo = ~this.lo + 1 >>> 0\n      let hi = ~this.hi >>> 0\n      if (lo === 0) {\n        hi = hi + 1 >>> 0\n      }\n      return -(lo + hi * 4294967296)\n    }\n    return this.lo + this.hi * 4294967296\n  }\n\n  /**\n   * Converts this long bits to a bigint\n   */\n  toBigInt (unsigned: boolean = false): bigint {\n    if (unsigned) {\n      return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n    }\n\n    if ((this.hi >>> 31) !== 0) {\n      const lo = ~this.lo + 1 >>> 0\n      let hi = ~this.hi >>> 0\n      if (lo === 0) {\n        hi = hi + 1 >>> 0\n      }\n      return -(BigInt(lo) + (BigInt(hi) << 32n))\n    }\n\n    return BigInt(this.lo >>> 0) + (BigInt(this.hi >>> 0) << 32n)\n  }\n\n  /**\n   * Converts this long bits to a string\n   */\n  toString (unsigned: boolean = false): string {\n    return this.toBigInt(unsigned).toString()\n  }\n\n  /**\n   * Zig-zag encodes this long bits\n   */\n  zzEncode (): this {\n    const mask = this.hi >> 31\n    this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0\n    this.lo = (this.lo << 1 ^ mask) >>> 0\n    return this\n  }\n\n  /**\n   * Zig-zag decodes this long bits\n   */\n  zzDecode (): this {\n    const mask = -(this.lo & 1)\n    this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0\n    this.hi = (this.hi >>> 1 ^ mask) >>> 0\n    return this\n  }\n\n  /**\n   * Calculates the length of this longbits when encoded as a varint.\n   */\n  length (): number {\n    const part0 = this.lo\n    const part1 = (this.lo >>> 28 | this.hi << 4) >>> 0\n    const part2 = this.hi >>> 24\n    return part2 === 0\n      ? part1 === 0\n        ? part0 < 16384\n          ? part0 < 128 ? 1 : 2\n          : part0 < 2097152 ? 3 : 4\n        : part1 < 16384\n          ? part1 < 128 ? 5 : 6\n          : part1 < 2097152 ? 7 : 8\n      : part2 < 128 ? 9 : 10\n  }\n\n  /**\n   * Constructs new long bits from the specified number\n   */\n  static fromBigInt (value: bigint): LongBits {\n    if (value === 0n) {\n      return zero\n    }\n\n    if (value < MAX_SAFE_NUMBER_INTEGER && value > MIN_SAFE_NUMBER_INTEGER) {\n      return this.fromNumber(Number(value))\n    }\n\n    const negative = value < 0n\n\n    if (negative) {\n      value = -value\n    }\n\n    let hi = value >> 32n\n    let lo = value - (hi << 32n)\n\n    if (negative) {\n      hi = ~hi | 0n\n      lo = ~lo | 0n\n\n      if (++lo > TWO_32) {\n        lo = 0n\n        if (++hi > TWO_32) { hi = 0n }\n      }\n    }\n\n    return new LongBits(Number(lo), Number(hi))\n  }\n\n  /**\n   * Constructs new long bits from the specified number\n   */\n  static fromNumber (value: number): LongBits {\n    if (value === 0) { return zero }\n    const sign = value < 0\n    if (sign) { value = -value }\n    let lo = value >>> 0\n    let hi = (value - lo) / 4294967296 >>> 0\n    if (sign) {\n      hi = ~hi >>> 0\n      lo = ~lo >>> 0\n      if (++lo > 4294967295) {\n        lo = 0\n        if (++hi > 4294967295) { hi = 0 }\n      }\n    }\n    return new LongBits(lo, hi)\n  }\n\n  /**\n   * Constructs new long bits from a number, long or string\n   */\n  static from (value: bigint | number | string | { low: number, high: number }): LongBits {\n    if (typeof value === 'number') {\n      return LongBits.fromNumber(value)\n    }\n    if (typeof value === 'bigint') {\n      return LongBits.fromBigInt(value)\n    }\n    if (typeof value === 'string') {\n      return LongBits.fromBigInt(BigInt(value))\n    }\n    return value.low != null || value.high != null ? new LongBits(value.low >>> 0, value.high >>> 0) : zero\n  }\n}\n\nconst zero = new LongBits(0, 0)\nzero.toBigInt = function () { return 0n }\nzero.zzEncode = zero.zzDecode = function () { return this }\nzero.length = function () { return 1 }\n\nconst TWO_32 = 4294967296n\n", "/**\n * Calculates the UTF8 byte length of a string\n */\nexport function length (string: string): number {\n  let len = 0\n  let c = 0\n  for (let i = 0; i < string.length; ++i) {\n    c = string.charCodeAt(i)\n\n    if (c < 128) {\n      len += 1\n    } else if (c < 2048) {\n      len += 2\n    } else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n      ++i\n      len += 4\n    } else {\n      len += 3\n    }\n  }\n\n  return len\n}\n\n/**\n * Reads UTF8 bytes as a string\n */\nexport function read (buffer: Uint8Array, start: number, end: number): string {\n  const len = end - start\n\n  if (len < 1) {\n    return ''\n  }\n\n  let parts: string[] | undefined\n  const chunk: number[] = []\n  let i = 0 // char offset\n  let t: number // temporary\n\n  while (start < end) {\n    t = buffer[start++]\n\n    if (t < 128) {\n      chunk[i++] = t\n    } else if (t > 191 && t < 224) {\n      chunk[i++] = (t & 31) << 6 | buffer[start++] & 63\n    } else if (t > 239 && t < 365) {\n      t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000\n      chunk[i++] = 0xD800 + (t >> 10)\n      chunk[i++] = 0xDC00 + (t & 1023)\n    } else {\n      chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63\n    }\n\n    if (i > 8191) {\n      (parts ?? (parts = [])).push(String.fromCharCode.apply(String, chunk))\n      i = 0\n    }\n  }\n\n  if (parts != null) {\n    if (i > 0) {\n      parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)))\n    }\n\n    return parts.join('')\n  }\n\n  return String.fromCharCode.apply(String, chunk.slice(0, i))\n}\n\n/**\n * Writes a string as UTF8 bytes\n */\nexport function write (string: string, buffer: Uint8Array, offset: number): number {\n  const start = offset\n  let c1 // character 1\n  let c2 // character 2\n\n  for (let i = 0; i < string.length; ++i) {\n    c1 = string.charCodeAt(i)\n\n    if (c1 < 128) {\n      buffer[offset++] = c1\n    } else if (c1 < 2048) {\n      buffer[offset++] = c1 >> 6 | 192\n      buffer[offset++] = c1 & 63 | 128\n    } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n      c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF)\n      ++i\n      buffer[offset++] = c1 >> 18 | 240\n      buffer[offset++] = c1 >> 12 & 63 | 128\n      buffer[offset++] = c1 >> 6 & 63 | 128\n      buffer[offset++] = c1 & 63 | 128\n    } else {\n      buffer[offset++] = c1 >> 12 | 224\n      buffer[offset++] = c1 >> 6 & 63 | 128\n      buffer[offset++] = c1 & 63 | 128\n    }\n  }\n\n  return offset - start\n}\n", "import { createWriter } from './utils/writer.js'\nimport type { Codec } from './codec.js'\n\nexport function encodeMessage <T> (message: Partial<T>, codec: Pick<Codec<T>, 'encode'>): Uint8Array {\n  const w = createWriter()\n\n  codec.encode(message, w, {\n    lengthDelimited: false\n  })\n\n  return w.finish()\n}\n", "import { encodeUint8Array, encodingLength } from 'uint8-varint'\nimport { allocUnsafe } from 'uint8arrays/alloc'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { writeFloatLE, writeDoubleLE } from './float.js'\nimport { LongBits } from './longbits.js'\nimport pool from './pool.js'\nimport * as utf8 from './utf8.js'\nimport type { Writer } from '../index.js'\n\ninterface WriterOperation<T> {\n  (val: T, buf: Uint8Array, pos: number): any\n}\n\n/**\n * Constructs a new writer operation instance.\n *\n * @classdesc Scheduled writer operation\n */\nclass Op<T> {\n  /**\n   * Function to call\n   */\n  public fn: WriterOperation<T>\n\n  /**\n   * Value byte length\n   */\n  public len: number\n\n  /**\n   * Next operation\n   */\n  public next?: Op<any>\n\n  /**\n   * Value to write\n   */\n  public val: T\n\n  constructor (fn: WriterOperation<T>, len: number, val: T) {\n    this.fn = fn\n    this.len = len\n    this.next = undefined\n    this.val = val // type varies\n  }\n}\n\n/* istanbul ignore next */\nfunction noop (): void {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance\n */\nclass State {\n  /**\n   * Current head\n   */\n  public head: Op<any>\n\n  /**\n   * Current tail\n   */\n  public tail: Op<any>\n\n  /**\n   * Current buffer length\n   */\n  public len: number\n\n  /**\n   * Next state\n   */\n  public next?: State\n\n  constructor (writer: Uint8ArrayWriter) {\n    this.head = writer.head\n    this.tail = writer.tail\n    this.len = writer.len\n    this.next = writer.states\n  }\n}\n\nconst bufferPool = pool()\n\n/**\n * Allocates a buffer of the specified size\n */\nfunction alloc (size: number): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return allocUnsafe(size)\n  }\n\n  return bufferPool(size)\n}\n\n/**\n * When a value is written, the writer calculates its byte length and puts it into a linked\n * list of operations to perform when finish() is called. This both allows us to allocate\n * buffers of the exact required size and reduces the amount of work we have to do compared\n * to first calculating over objects and then encoding over objects. In our case, the encoding\n * part is just a linked list walk calling operations with already prepared values.\n */\nclass Uint8ArrayWriter implements Writer {\n  /**\n   * Current length\n   */\n  public len: number\n\n  /**\n   * Operations head\n   */\n  public head: Op<any>\n\n  /**\n   * Operations tail\n   */\n  public tail: Op<any>\n\n  /**\n   * Linked forked states\n   */\n  public states?: any\n\n  constructor () {\n    this.len = 0\n    this.head = new Op(noop, 0, 0)\n    this.tail = this.head\n    this.states = null\n  }\n\n  /**\n   * Pushes a new operation to the queue\n   */\n  _push (fn: WriterOperation<any>, len: number, val: any): this {\n    this.tail = this.tail.next = new Op(fn, len, val)\n    this.len += len\n\n    return this\n  }\n\n  /**\n   * Writes an unsigned 32 bit value as a varint\n   */\n  uint32 (value: number): this {\n    // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n    // uint32 is by far the most frequently used operation and benefits significantly from this.\n    this.len += (this.tail = this.tail.next = new VarintOp(\n      (value = value >>> 0) <\n                128\n        ? 1\n        : value < 16384\n          ? 2\n          : value < 2097152\n            ? 3\n            : value < 268435456\n              ? 4\n              : 5,\n      value)).len\n    return this\n  }\n\n  /**\n   * Writes a signed 32 bit value as a varint`\n   */\n  int32 (value: number): this {\n    return value < 0\n      ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n      : this.uint32(value)\n  }\n\n  /**\n   * Writes a 32 bit value as a varint, zig-zag encoded\n   */\n  sint32 (value: number): this {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64 (value: bigint): this {\n    const bits = LongBits.fromBigInt(value)\n    return this._push(writeVarint64, bits.length(), bits)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64Number (value: number): this {\n    return this._push(encodeUint8Array, encodingLength(value), value)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as a varint\n   */\n  uint64String (value: string): this {\n    return this.uint64(BigInt(value))\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64 (value: bigint): this {\n    return this.uint64(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64Number (value: number): this {\n    return this.uint64Number(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint\n   */\n  int64String (value: string): this {\n    return this.uint64String(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64 (value: bigint): this {\n    const bits = LongBits.fromBigInt(value).zzEncode()\n    return this._push(writeVarint64, bits.length(), bits)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64Number (value: number): this {\n    const bits = LongBits.fromNumber(value).zzEncode()\n    return this._push(writeVarint64, bits.length(), bits)\n  }\n\n  /**\n   * Writes a signed 64 bit value as a varint, zig-zag encoded\n   */\n  sint64String (value: string): this {\n    return this.sint64(BigInt(value))\n  }\n\n  /**\n   * Writes a boolish value as a varint\n   */\n  bool (value: boolean): this {\n    return this._push(writeByte, 1, value ? 1 : 0)\n  }\n\n  /**\n   * Writes an unsigned 32 bit value as fixed 32 bits\n   */\n  fixed32 (value: number): this {\n    return this._push(writeFixed32, 4, value >>> 0)\n  }\n\n  /**\n   * Writes a signed 32 bit value as fixed 32 bits\n   */\n  sfixed32 (value: number): this {\n    return this.fixed32(value)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64 (value: bigint): this {\n    const bits = LongBits.fromBigInt(value)\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64Number (value: number): this {\n    const bits = LongBits.fromNumber(value)\n    return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi)\n  }\n\n  /**\n   * Writes an unsigned 64 bit value as fixed 64 bits\n   */\n  fixed64String (value: string): this {\n    return this.fixed64(BigInt(value))\n  }\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64 (value: bigint): this {\n    return this.fixed64(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64Number (value: number): this {\n    return this.fixed64Number(value)\n  }\n\n  /**\n   * Writes a signed 64 bit value as fixed 64 bits\n   */\n  sfixed64String (value: string): this {\n    return this.fixed64String(value)\n  }\n\n  /**\n   * Writes a float (32 bit)\n   */\n  float (value: number): this {\n    return this._push(writeFloatLE, 4, value)\n  }\n\n  /**\n   * Writes a double (64 bit float).\n   *\n   * @function\n   * @param {number} value - Value to write\n   * @returns {Writer} `this`\n   */\n  double (value: number): this {\n    return this._push(writeDoubleLE, 8, value)\n  }\n\n  /**\n   * Writes a sequence of bytes\n   */\n  bytes (value: Uint8Array): this {\n    const len = value.length >>> 0\n\n    if (len === 0) {\n      return this._push(writeByte, 1, 0)\n    }\n\n    return this.uint32(len)._push(writeBytes, len, value)\n  }\n\n  /**\n   * Writes a string\n   */\n  string (value: string): this {\n    const len = utf8.length(value)\n    return len !== 0\n      ? this.uint32(len)._push(utf8.write, len, value)\n      : this._push(writeByte, 1, 0)\n  }\n\n  /**\n   * Forks this writer's state by pushing it to a stack.\n   * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n   */\n  fork (): this {\n    this.states = new State(this)\n    this.head = this.tail = new Op(noop, 0, 0)\n    this.len = 0\n    return this\n  }\n\n  /**\n   * Resets this instance to the last state\n   */\n  reset (): this {\n    if (this.states != null) {\n      this.head = this.states.head\n      this.tail = this.states.tail\n      this.len = this.states.len\n      this.states = this.states.next\n    } else {\n      this.head = this.tail = new Op(noop, 0, 0)\n      this.len = 0\n    }\n    return this\n  }\n\n  /**\n   * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n   */\n  ldelim (): this {\n    const head = this.head\n    const tail = this.tail\n    const len = this.len\n    this.reset().uint32(len)\n    if (len !== 0) {\n      this.tail.next = head.next // skip noop\n      this.tail = tail\n      this.len += len\n    }\n    return this\n  }\n\n  /**\n   * Finishes the write operation\n   */\n  finish (): Uint8Array {\n    let head = this.head.next // skip noop\n    const buf = alloc(this.len)\n    let pos = 0\n    while (head != null) {\n      head.fn(head.val, buf, pos)\n      pos += head.len\n      head = head.next\n    }\n    // this.head = this.tail = null;\n    return buf\n  }\n}\n\nfunction writeByte (val: number, buf: Uint8Array, pos: number): void {\n  buf[pos] = val & 255\n}\n\nfunction writeVarint32 (val: number, buf: Uint8Array, pos: number): void {\n  while (val > 127) {\n    buf[pos++] = val & 127 | 128\n    val >>>= 7\n  }\n  buf[pos] = val\n}\n\n/**\n * Constructs a new varint writer operation instance.\n *\n * @classdesc Scheduled varint writer operation\n */\nclass VarintOp extends Op<number> {\n  public next?: Op<any>\n\n  constructor (len: number, val: number) {\n    super(writeVarint32, len, val)\n    this.next = undefined\n  }\n}\n\nfunction writeVarint64 (val: LongBits, buf: Uint8Array, pos: number): void {\n  while (val.hi !== 0) {\n    buf[pos++] = val.lo & 127 | 128\n    val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0\n    val.hi >>>= 7\n  }\n  while (val.lo > 127) {\n    buf[pos++] = val.lo & 127 | 128\n    val.lo = val.lo >>> 7\n  }\n  buf[pos++] = val.lo\n}\n\nfunction writeFixed32 (val: number, buf: Uint8Array, pos: number): void {\n  buf[pos] = val & 255\n  buf[pos + 1] = val >>> 8 & 255\n  buf[pos + 2] = val >>> 16 & 255\n  buf[pos + 3] = val >>> 24\n}\n\nfunction writeBytes (val: Uint8Array, buf: Uint8Array, pos: number): void {\n  buf.set(val, pos)\n}\n\nif (globalThis.Buffer != null) {\n  Uint8ArrayWriter.prototype.bytes = function (value: Uint8Array) {\n    const len = value.length >>> 0\n\n    this.uint32(len)\n\n    if (len > 0) {\n      this._push(writeBytesBuffer, len, value)\n    }\n\n    return this\n  }\n\n  Uint8ArrayWriter.prototype.string = function (value: string) {\n    const len = globalThis.Buffer.byteLength(value)\n\n    this.uint32(len)\n\n    if (len > 0) {\n      this._push(writeStringBuffer, len, value)\n    }\n\n    return this\n  }\n}\n\nfunction writeBytesBuffer (val: Uint8Array, buf: Uint8Array, pos: number): void {\n  buf.set(val, pos) // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n  // also works for plain array values\n}\n\nfunction writeStringBuffer (val: string, buf: Uint8Array, pos: number): void {\n  if (val.length < 40) {\n    // plain js is faster for short strings (probably due to redundant assertions)\n    utf8.write(val, buf, pos)\n    // @ts-expect-error buf isn't a Uint8Array?\n  } else if (buf.utf8Write != null) {\n    // @ts-expect-error buf isn't a Uint8Array?\n    buf.utf8Write(val, pos)\n  } else {\n    buf.set(uint8ArrayFromString(val), pos)\n  }\n}\n\n/**\n * Creates a new writer\n */\nexport function createWriter (): Writer {\n  return new Uint8ArrayWriter()\n}\n", "import { allocUnsafe } from 'uint8arrays/alloc'\n\n/**\n * A general purpose buffer pool\n */\nexport default function pool (size?: number): (size: number) => Uint8Array {\n  const SIZE = size ?? 8192\n  const MAX = SIZE >>> 1\n  let slab: Uint8Array\n  let offset = SIZE\n  return function poolAlloc (size: number) {\n    if (size < 1 || size > MAX) {\n      return allocUnsafe(size)\n    }\n\n    if (offset + size > SIZE) {\n      slab = allocUnsafe(SIZE)\n      offset = 0\n    }\n\n    const buf = slab.subarray(offset, offset += size)\n\n    if ((offset & 7) !== 0) {\n      // align to 32 bit\n      offset = (offset | 7) + 1\n    }\n\n    return buf\n  }\n}\n", "import { createCodec, CODEC_TYPES } from '../codec.js'\nimport type { DecodeFunction, EncodeFunction, Codec } from '../codec.js'\n\nexport function enumeration <T> (v: any): Codec<T> {\n  function findValue (val: string | number): number {\n    // Use the reverse mapping to look up the enum key for the stored value\n    // https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n    if (v[val.toString()] == null) {\n      throw new Error('Invalid enum value')\n    }\n\n    return v[val]\n  }\n\n  const encode: EncodeFunction<number | string> = function enumEncode (val, writer) {\n    const enumValue = findValue(val)\n\n    writer.int32(enumValue)\n  }\n\n  const decode: DecodeFunction<number | string> = function enumDecode (reader) {\n    const val = reader.int32()\n\n    return findValue(val)\n  }\n\n  // @ts-expect-error yeah yeah\n  return createCodec('enum', CODEC_TYPES.VARINT, encode, decode)\n}\n", "import type { Writer, Reader } from './index.js'\n\n// https://developers.google.com/protocol-buffers/docs/encoding#structure\nexport enum CODEC_TYPES {\n  VARINT = 0,\n  BIT64,\n  LENGTH_DELIMITED,\n  START_GROUP,\n  END_GROUP,\n  BIT32\n}\n\nexport interface EncodeOptions {\n  lengthDelimited?: boolean\n  writeDefaults?: boolean\n}\n\nexport interface EncodeFunction<T> {\n  (value: Partial<T>, writer: Writer, opts?: EncodeOptions): void\n}\n\n// protobuf types that contain multiple values\ntype CollectionTypes = any[] | Map<any, any>\n\n// protobuf types that are not collections or messages\ntype PrimitiveTypes = boolean | number | string | bigint | Uint8Array\n\n// recursive array/map field length limits\ntype CollectionLimits <T> = {\n  [K in keyof T]: T[K] extends CollectionTypes ? number :\n    T[K] extends PrimitiveTypes ? never : Limits<T[K]>\n}\n\n// recursive array member array/map field length limits\ntype ArrayElementLimits <T> = {\n  [K in keyof T as `${string & K}$`]: T[K] extends Array<infer ElementType> ?\n      (ElementType extends PrimitiveTypes ? never : Limits<ElementType>) :\n      (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// recursive map value array/map field length limits\ntype MapValueLimits <T> = {\n  [K in keyof T as `${string & K}$value`]: T[K] extends Map<any, infer MapValueType> ?\n      (MapValueType extends PrimitiveTypes ? never : Limits<MapValueType>) :\n      (T[K] extends PrimitiveTypes ? never : Limits<T[K]>)\n}\n\n// union of collection and array elements\ntype Limits<T> = Partial<CollectionLimits<T> & ArrayElementLimits<T> & MapValueLimits<T>>\n\nexport interface DecodeOptions<T> {\n  /**\n   * Runtime-specified limits for lengths of repeated/map fields\n   */\n  limits?: Limits<T>\n}\n\nexport interface DecodeFunction<T> {\n  (reader: Reader, length?: number, opts?: DecodeOptions<T>): T\n}\n\nexport interface Codec<T> {\n  name: string\n  type: CODEC_TYPES\n  encode: EncodeFunction<T>\n  decode: DecodeFunction<T>\n}\n\nexport function createCodec <T> (name: string, type: CODEC_TYPES, encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n  return {\n    name,\n    type,\n    encode,\n    decode\n  }\n}\n", "import { createCodec, CODEC_TYPES, type EncodeFunction, type DecodeFunction, type Codec } from '../codec.js'\n\nexport interface Factory<A, T> {\n  new (obj: A): T\n}\n\nexport function message <T> (encode: EncodeFunction<T>, decode: DecodeFunction<T>): Codec<T> {\n  return createCodec('message', CODEC_TYPES.LENGTH_DELIMITED, encode, decode)\n}\n", "// @ts-check\n\nimport { coerce } from '../bytes.js'\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nexport const name = 'raw'\nexport const code = 0x55\n\n/**\n * @param {Uint8Array} node\n * @returns {ByteView<Uint8Array>}\n */\nexport const encode = (node) => coerce(node)\n\n/**\n * @param {ByteView<Uint8Array>} data\n * @returns {Uint8Array}\n */\nexport const decode = (data) => coerce(data)\n", "/**\n * Progress events are emitted during long running operations\n */\nexport interface ProgressEvent<T extends string = any, D = unknown> {\n  /**\n   * The event type\n   */\n  type: T\n\n  /**\n   * Context-specific event information\n   */\n  detail: D\n}\n\n/**\n * An implementation of the ProgressEvent interface, this is essentially\n * a typed `CustomEvent` with a `type` property that lets us disambiguate\n * events passed to `progress` callbacks.\n */\nexport class CustomProgressEvent<D = unknown, T extends string = any> extends Event implements ProgressEvent<T, D> {\n  public type: T\n  public detail: D\n\n  constructor (type: T, detail?: D) {\n    super(type)\n\n    this.type = type\n    // @ts-expect-error detail may be undefined\n    this.detail = detail\n  }\n}\n\n/**\n * Define an `onProgress` callback that can be invoked with `ProgressEvent`s\n *\n * @example\n *\n * ```typescript\n * type MyOperationProgressEvents =\n *   ProgressEvent<'operation:start'> |\n *   ProgressEvent<'operation:success', Result> |\n *   ProgressEvent<'operation:error', Error>\n *\n * export interface MyOperationOptions extends ProgressOptions<MyOperationProgressEvents> {\n *  // define options here\n * }\n * ```\n */\nexport interface ProgressOptions<Event extends ProgressEvent = any> {\n  onProgress?: (evt: Event) => void\n}\n", "import * as dagPb from '@ipld/dag-pb'\nimport { CID } from 'multiformats/cid'\nimport { sha256 } from 'multiformats/hashes/sha2'\nimport type { WritableStorage } from '../index.js'\nimport type { Version as CIDVersion } from 'multiformats/cid'\nimport type { BlockCodec } from 'multiformats/codecs/interface'\nimport type { ProgressOptions } from 'progress-events'\n\nexport interface PersistOptions extends ProgressOptions {\n  codec?: BlockCodec<any, any>\n  cidVersion: CIDVersion\n  signal?: AbortSignal\n}\n\nexport const persist = async (buffer: Uint8Array, blockstore: WritableStorage, options: PersistOptions): Promise<CID> => {\n  if (options.codec == null) {\n    options.codec = dagPb\n  }\n\n  const multihash = await sha256.digest(buffer)\n  const cid = CID.create(options.cidVersion, options.codec.code, multihash)\n\n  await blockstore.put(cid, buffer, options)\n\n  return cid\n}\n", "import errCode from 'err-code'\nimport { CustomProgressEvent } from 'progress-events'\nimport { dirBuilder, type DirBuilderOptions } from './dir.js'\nimport { fileBuilder, type FileBuilderOptions } from './file.js'\nimport type { ChunkValidator } from './validate-chunks.js'\nimport type { Chunker } from '../chunker/index.js'\nimport type { Directory, File, FileCandidate, ImportCandidate, ImporterProgressEvents, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { ProgressEvent, ProgressOptions } from 'progress-events'\n\n/**\n * Passed to the onProgress callback while importing files\n */\nexport interface ImportReadProgress {\n  /**\n   * How many bytes we have read from this source so far\n   */\n  bytesRead: bigint\n\n  /**\n   * The size of the current chunk\n   */\n  chunkSize: bigint\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type DagBuilderProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:read', ImportReadProgress>\n\nfunction isIterable (thing: any): thing is Iterable<any> {\n  return Symbol.iterator in thing\n}\n\nfunction isAsyncIterable (thing: any): thing is AsyncIterable<any> {\n  return Symbol.asyncIterator in thing\n}\n\nfunction contentAsAsyncIterable (content: Uint8Array | AsyncIterable<Uint8Array> | Iterable<Uint8Array>): AsyncIterable<Uint8Array> {\n  try {\n    if (content instanceof Uint8Array) {\n      return (async function * () {\n        yield content\n      }())\n    } else if (isIterable(content)) {\n      return (async function * () {\n        yield * content\n      }())\n    } else if (isAsyncIterable(content)) {\n      return content\n    }\n  } catch {\n    throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n  }\n\n  throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n}\n\nexport interface DagBuilderOptions extends FileBuilderOptions, DirBuilderOptions, ProgressOptions<ImporterProgressEvents> {\n  chunker: Chunker\n  chunkValidator: ChunkValidator\n  wrapWithDirectory: boolean\n}\n\nexport type ImporterSourceStream = AsyncIterable<ImportCandidate> | Iterable<ImportCandidate>\n\nexport interface DAGBuilder {\n  (source: ImporterSourceStream, blockstore: WritableStorage): AsyncIterable<() => Promise<InProgressImportResult>>\n}\n\nexport function defaultDagBuilder (options: DagBuilderOptions): DAGBuilder {\n  return async function * dagBuilder (source, blockstore) {\n    for await (const entry of source) {\n      let originalPath: string | undefined\n\n      if (entry.path != null) {\n        originalPath = entry.path\n        entry.path = entry.path\n          .split('/')\n          .filter(path => path != null && path !== '.')\n          .join('/')\n      }\n\n      if (isFileCandidate(entry)) {\n        const file: File = {\n          path: entry.path,\n          mtime: entry.mtime,\n          mode: entry.mode,\n          content: (async function * () {\n            let bytesRead = 0n\n\n            for await (const chunk of options.chunker(options.chunkValidator(contentAsAsyncIterable(entry.content)))) {\n              const currentChunkSize = BigInt(chunk.byteLength)\n              bytesRead += currentChunkSize\n\n              options.onProgress?.(new CustomProgressEvent<ImportReadProgress>('unixfs:importer:progress:file:read', {\n                bytesRead,\n                chunkSize: currentChunkSize,\n                path: entry.path\n              }))\n\n              yield chunk\n            }\n          })(),\n          originalPath\n        }\n\n        yield async () => fileBuilder(file, blockstore, options)\n      } else if (entry.path != null) {\n        const dir: Directory = {\n          path: entry.path,\n          mtime: entry.mtime,\n          mode: entry.mode,\n          originalPath\n        }\n\n        yield async () => dirBuilder(dir, blockstore, options)\n      } else {\n        throw new Error('Import candidate must have content or path or both')\n      }\n    }\n  }\n}\n\nfunction isFileCandidate (entry: any): entry is FileCandidate {\n  return entry.content != null\n}\n", "import { encode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { persist } from '../utils/persist.js'\nimport type { Directory, InProgressImportResult, WritableStorage } from '../index.js'\nimport type { Version } from 'multiformats/cid'\n\nexport interface DirBuilderOptions {\n  cidVersion: Version\n  signal?: AbortSignal\n}\n\nexport const dirBuilder = async (dir: Directory, blockstore: WritableStorage, options: DirBuilderOptions): Promise<InProgressImportResult> => {\n  const unixfs = new UnixFS({\n    type: 'directory',\n    mtime: dir.mtime,\n    mode: dir.mode\n  })\n\n  const block = encode(prepare({ Data: unixfs.marshal() }))\n  const cid = await persist(block, blockstore, options)\n  const path = dir.path\n\n  return {\n    cid,\n    path,\n    unixfs,\n    size: BigInt(block.length),\n    originalPath: dir.originalPath,\n    block\n  }\n}\n", "import { encode, type PBLink, type PBNode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport parallelBatch from 'it-parallel-batch'\nimport * as rawCodec from 'multiformats/codecs/raw'\nimport { CustomProgressEvent } from 'progress-events'\nimport { persist } from '../utils/persist.js'\nimport type { BufferImporter, File, InProgressImportResult, WritableStorage, SingleBlockImportResult, ImporterProgressEvents } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { CID, Version } from 'multiformats/cid'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\ninterface BuildFileBatchOptions {\n  bufferImporter: BufferImporter\n  blockWriteConcurrency: number\n}\n\nasync function * buildFileBatch (file: File, blockstore: WritableStorage, options: BuildFileBatchOptions): AsyncGenerator<InProgressImportResult> {\n  let count = -1\n  let previous: SingleBlockImportResult | undefined\n\n  for await (const entry of parallelBatch(options.bufferImporter(file, blockstore), options.blockWriteConcurrency)) {\n    count++\n\n    if (count === 0) {\n      // cache the first entry if case there aren't any more\n      previous = {\n        ...entry,\n        single: true\n      }\n\n      continue\n    } else if (count === 1 && (previous != null)) {\n      // we have the second block of a multiple block import so yield the first\n      yield {\n        ...previous,\n        block: undefined,\n        single: undefined\n      }\n      previous = undefined\n    }\n\n    // yield the second or later block of a multiple block import\n    yield {\n      ...entry,\n      block: undefined\n    }\n  }\n\n  if (previous != null) {\n    yield previous\n  }\n}\n\nexport interface LayoutLeafProgress {\n  /**\n   * The CID of the leaf being written\n   */\n  cid: CID\n\n  /**\n   * The path of the file being imported, if one was specified\n   */\n  path?: string\n}\n\nexport type ReducerProgressEvents =\n  ProgressEvent<'unixfs:importer:progress:file:layout', LayoutLeafProgress>\n\ninterface ReduceOptions extends ProgressOptions<ImporterProgressEvents> {\n  reduceSingleLeafToSelf: boolean\n  cidVersion: Version\n  signal?: AbortSignal\n}\n\nfunction isSingleBlockImport (result: any): result is SingleBlockImportResult {\n  return result.single === true\n}\n\nconst reduce = (file: File, blockstore: WritableStorage, options: ReduceOptions): Reducer => {\n  const reducer: Reducer = async function (leaves) {\n    if (leaves.length === 1 && isSingleBlockImport(leaves[0]) && options.reduceSingleLeafToSelf) {\n      const leaf = leaves[0]\n      let node: Uint8Array | PBNode = leaf.block\n\n      if (isSingleBlockImport(leaf) && (file.mtime !== undefined || file.mode !== undefined)) {\n        // only one leaf node which is a raw leaf - we have metadata so convert it into a\n        // UnixFS entry otherwise we'll have nowhere to store the metadata\n        leaf.unixfs = new UnixFS({\n          type: 'file',\n          mtime: file.mtime,\n          mode: file.mode,\n          data: leaf.block\n        })\n\n        node = { Data: leaf.unixfs.marshal(), Links: [] }\n\n        leaf.block = encode(prepare(node))\n\n        leaf.cid = await persist(leaf.block, blockstore, {\n          ...options,\n          cidVersion: options.cidVersion\n        })\n        leaf.size = BigInt(leaf.block.length)\n      }\n\n      options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n        cid: leaf.cid,\n        path: leaf.originalPath\n      }))\n\n      return {\n        cid: leaf.cid,\n        path: file.path,\n        unixfs: leaf.unixfs,\n        size: leaf.size,\n        originalPath: leaf.originalPath\n      }\n    }\n\n    // create a parent node and add all the leaves\n    const f = new UnixFS({\n      type: 'file',\n      mtime: file.mtime,\n      mode: file.mode\n    })\n\n    const links: PBLink[] = leaves\n      .filter(leaf => {\n        if (leaf.cid.code === rawCodec.code && leaf.size > 0) {\n          return true\n        }\n\n        if ((leaf.unixfs != null) && (leaf.unixfs.data == null) && leaf.unixfs.fileSize() > 0n) {\n          return true\n        }\n\n        return Boolean(leaf.unixfs?.data?.length)\n      })\n      .map((leaf) => {\n        if (leaf.cid.code === rawCodec.code) {\n          // node is a leaf buffer\n          f.addBlockSize(leaf.size)\n\n          return {\n            Name: '',\n            Tsize: Number(leaf.size),\n            Hash: leaf.cid\n          }\n        }\n\n        if ((leaf.unixfs == null) || (leaf.unixfs.data == null)) {\n          // node is an intermediate node\n          f.addBlockSize(leaf.unixfs?.fileSize() ?? 0n)\n        } else {\n          // node is a unixfs 'file' leaf node\n          f.addBlockSize(BigInt(leaf.unixfs.data.length))\n        }\n\n        return {\n          Name: '',\n          Tsize: Number(leaf.size),\n          Hash: leaf.cid\n        }\n      })\n\n    const node = {\n      Data: f.marshal(),\n      Links: links\n    }\n    const block = encode(prepare(node))\n    const cid = await persist(block, blockstore, options)\n\n    options.onProgress?.(new CustomProgressEvent<LayoutLeafProgress>('unixfs:importer:progress:file:layout', {\n      cid,\n      path: file.originalPath\n    }))\n\n    return {\n      cid,\n      path: file.path,\n      unixfs: f,\n      size: BigInt(block.length + node.Links.reduce((acc, curr) => acc + (curr.Tsize ?? 0), 0)),\n      originalPath: file.originalPath,\n      block\n    }\n  }\n\n  return reducer\n}\n\nexport interface FileBuilderOptions extends BuildFileBatchOptions, ReduceOptions {\n  layout: FileLayout\n}\n\nexport const fileBuilder = async (file: File, block: WritableStorage, options: FileBuilderOptions): Promise<InProgressImportResult> => {\n  return options.layout(buildFileBatch(file, block, options), reduce(file, block, options))\n}\n", "import errCode from 'err-code'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\n\nexport interface ChunkValidator { (source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> }\n\nexport const defaultChunkValidator = (): ChunkValidator => {\n  return async function * validateChunks (source) {\n    for await (const content of source) {\n      if (content.length === undefined) {\n        throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n      }\n\n      if (typeof content === 'string' || content instanceof String) {\n        yield uint8ArrayFromString(content.toString())\n      } else if (Array.isArray(content)) {\n        yield Uint8Array.from(content)\n      } else if (content instanceof Uint8Array) {\n        yield content\n      } else {\n        throw errCode(new Error('Content was invalid'), 'ERR_INVALID_CONTENT')\n      }\n    }\n  }\n}\n", "import { asUint8Array } from './util/as-uint8array.js'\nimport bases, { type SupportedEncodings } from './util/bases.js'\n\nexport type { SupportedEncodings }\n\n/**\n * Create a `Uint8Array` from the passed string\n *\n * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.\n *\n * Also `ascii` which is similar to node's 'binary' encoding.\n */\nexport function fromString (string: string, encoding: SupportedEncodings = 'utf8'): Uint8Array {\n  const base = bases[encoding]\n\n  if (base == null) {\n    throw new Error(`Unsupported encoding \"${encoding}\"`)\n  }\n\n  if ((encoding === 'utf8' || encoding === 'utf-8') && globalThis.Buffer != null && globalThis.Buffer.from != null) {\n    return asUint8Array(globalThis.Buffer.from(string, 'utf-8'))\n  }\n\n  // add multibase prefix\n  return base.decoder.decode(`${base.prefix}${string}`) // eslint-disable-line @typescript-eslint/restrict-template-expressions\n}\n", "/**\n * To guarantee Uint8Array semantics, convert nodejs Buffers\n * into vanilla Uint8Arrays\n */\nexport function asUint8Array (buf: Uint8Array): Uint8Array {\n  if (globalThis.Buffer != null) {\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n\n  return buf\n}\n", "import { bases } from 'multiformats/basics'\nimport { allocUnsafe } from '../alloc.js'\nimport type { MultibaseCodec } from 'multiformats'\n\nfunction createCodec (name: string, prefix: string, encode: (buf: Uint8Array) => string, decode: (str: string) => Uint8Array): MultibaseCodec<any> {\n  return {\n    name,\n    prefix,\n    encoder: {\n      name,\n      prefix,\n      encode\n    },\n    decoder: {\n      decode\n    }\n  }\n}\n\nconst string = createCodec('utf8', 'u', (buf) => {\n  const decoder = new TextDecoder('utf8')\n  return 'u' + decoder.decode(buf)\n}, (str) => {\n  const encoder = new TextEncoder()\n  return encoder.encode(str.substring(1))\n})\n\nconst ascii = createCodec('ascii', 'a', (buf) => {\n  let string = 'a'\n\n  for (let i = 0; i < buf.length; i++) {\n    string += String.fromCharCode(buf[i])\n  }\n  return string\n}, (str) => {\n  str = str.substring(1)\n  const buf = allocUnsafe(str.length)\n\n  for (let i = 0; i < str.length; i++) {\n    buf[i] = str.charCodeAt(i)\n  }\n\n  return buf\n})\n\nexport type SupportedEncodings = 'utf8' | 'utf-8' | 'hex' | 'latin1' | 'ascii' | 'binary' | keyof typeof bases\n\nconst BASES: Record<SupportedEncodings, MultibaseCodec<any>> = {\n  utf8: string,\n  'utf-8': string,\n  hex: bases.base16,\n  latin1: ascii,\n  ascii,\n  binary: ascii,\n\n  ...bases\n}\n\nexport default BASES\n", "// @ts-check\n\nimport * as base10 from './bases/base10.js'\nimport * as base16 from './bases/base16.js'\nimport * as base2 from './bases/base2.js'\nimport * as base256emoji from './bases/base256emoji.js'\nimport * as base32 from './bases/base32.js'\nimport * as base36 from './bases/base36.js'\nimport * as base58 from './bases/base58.js'\nimport * as base64 from './bases/base64.js'\nimport * as base8 from './bases/base8.js'\nimport * as identityBase from './bases/identity.js'\nimport * as json from './codecs/json.js'\nimport * as raw from './codecs/raw.js'\nimport * as identity from './hashes/identity.js'\nimport * as sha2 from './hashes/sha2.js'\nimport { CID, hasher, digest, varint, bytes } from './index.js'\n\nconst bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji }\nconst hashes = { ...sha2, ...identity }\nconst codecs = { raw, json }\n\nexport { CID, hasher, digest, varint, bytes, hashes, bases, codecs }\n", "import { baseX } from './base.js'\n\nexport const base10 = baseX({\n  prefix: '9',\n  name: 'base10',\n  alphabet: '0123456789'\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base16 = rfc4648({\n  prefix: 'f',\n  name: 'base16',\n  alphabet: '0123456789abcdef',\n  bitsPerChar: 4\n})\n\nexport const base16upper = rfc4648({\n  prefix: 'F',\n  name: 'base16upper',\n  alphabet: '0123456789ABCDEF',\n  bitsPerChar: 4\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base2 = rfc4648({\n  prefix: '0',\n  name: 'base2',\n  alphabet: '01',\n  bitsPerChar: 1\n})\n", "import { from } from './base.js'\n\nconst alphabet = Array.from('\uD83D\uDE80\uD83E\uDE90\u2604\uD83D\uDEF0\uD83C\uDF0C\uD83C\uDF11\uD83C\uDF12\uD83C\uDF13\uD83C\uDF14\uD83C\uDF15\uD83C\uDF16\uD83C\uDF17\uD83C\uDF18\uD83C\uDF0D\uD83C\uDF0F\uD83C\uDF0E\uD83D\uDC09\u2600\uD83D\uDCBB\uD83D\uDDA5\uD83D\uDCBE\uD83D\uDCBF\uD83D\uDE02\u2764\uD83D\uDE0D\uD83E\uDD23\uD83D\uDE0A\uD83D\uDE4F\uD83D\uDC95\uD83D\uDE2D\uD83D\uDE18\uD83D\uDC4D\uD83D\uDE05\uD83D\uDC4F\uD83D\uDE01\uD83D\uDD25\uD83E\uDD70\uD83D\uDC94\uD83D\uDC96\uD83D\uDC99\uD83D\uDE22\uD83E\uDD14\uD83D\uDE06\uD83D\uDE44\uD83D\uDCAA\uD83D\uDE09\u263A\uD83D\uDC4C\uD83E\uDD17\uD83D\uDC9C\uD83D\uDE14\uD83D\uDE0E\uD83D\uDE07\uD83C\uDF39\uD83E\uDD26\uD83C\uDF89\uD83D\uDC9E\u270C\u2728\uD83E\uDD37\uD83D\uDE31\uD83D\uDE0C\uD83C\uDF38\uD83D\uDE4C\uD83D\uDE0B\uD83D\uDC97\uD83D\uDC9A\uD83D\uDE0F\uD83D\uDC9B\uD83D\uDE42\uD83D\uDC93\uD83E\uDD29\uD83D\uDE04\uD83D\uDE00\uD83D\uDDA4\uD83D\uDE03\uD83D\uDCAF\uD83D\uDE48\uD83D\uDC47\uD83C\uDFB6\uD83D\uDE12\uD83E\uDD2D\u2763\uD83D\uDE1C\uD83D\uDC8B\uD83D\uDC40\uD83D\uDE2A\uD83D\uDE11\uD83D\uDCA5\uD83D\uDE4B\uD83D\uDE1E\uD83D\uDE29\uD83D\uDE21\uD83E\uDD2A\uD83D\uDC4A\uD83E\uDD73\uD83D\uDE25\uD83E\uDD24\uD83D\uDC49\uD83D\uDC83\uD83D\uDE33\u270B\uD83D\uDE1A\uD83D\uDE1D\uD83D\uDE34\uD83C\uDF1F\uD83D\uDE2C\uD83D\uDE43\uD83C\uDF40\uD83C\uDF37\uD83D\uDE3B\uD83D\uDE13\u2B50\u2705\uD83E\uDD7A\uD83C\uDF08\uD83D\uDE08\uD83E\uDD18\uD83D\uDCA6\u2714\uD83D\uDE23\uD83C\uDFC3\uD83D\uDC90\u2639\uD83C\uDF8A\uD83D\uDC98\uD83D\uDE20\u261D\uD83D\uDE15\uD83C\uDF3A\uD83C\uDF82\uD83C\uDF3B\uD83D\uDE10\uD83D\uDD95\uD83D\uDC9D\uD83D\uDE4A\uD83D\uDE39\uD83D\uDDE3\uD83D\uDCAB\uD83D\uDC80\uD83D\uDC51\uD83C\uDFB5\uD83E\uDD1E\uD83D\uDE1B\uD83D\uDD34\uD83D\uDE24\uD83C\uDF3C\uD83D\uDE2B\u26BD\uD83E\uDD19\u2615\uD83C\uDFC6\uD83E\uDD2B\uD83D\uDC48\uD83D\uDE2E\uD83D\uDE46\uD83C\uDF7B\uD83C\uDF43\uD83D\uDC36\uD83D\uDC81\uD83D\uDE32\uD83C\uDF3F\uD83E\uDDE1\uD83C\uDF81\u26A1\uD83C\uDF1E\uD83C\uDF88\u274C\u270A\uD83D\uDC4B\uD83D\uDE30\uD83E\uDD28\uD83D\uDE36\uD83E\uDD1D\uD83D\uDEB6\uD83D\uDCB0\uD83C\uDF53\uD83D\uDCA2\uD83E\uDD1F\uD83D\uDE41\uD83D\uDEA8\uD83D\uDCA8\uD83E\uDD2C\u2708\uD83C\uDF80\uD83C\uDF7A\uD83E\uDD13\uD83D\uDE19\uD83D\uDC9F\uD83C\uDF31\uD83D\uDE16\uD83D\uDC76\uD83E\uDD74\u25B6\u27A1\u2753\uD83D\uDC8E\uD83D\uDCB8\u2B07\uD83D\uDE28\uD83C\uDF1A\uD83E\uDD8B\uD83D\uDE37\uD83D\uDD7A\u26A0\uD83D\uDE45\uD83D\uDE1F\uD83D\uDE35\uD83D\uDC4E\uD83E\uDD32\uD83E\uDD20\uD83E\uDD27\uD83D\uDCCC\uD83D\uDD35\uD83D\uDC85\uD83E\uDDD0\uD83D\uDC3E\uD83C\uDF52\uD83D\uDE17\uD83E\uDD11\uD83C\uDF0A\uD83E\uDD2F\uD83D\uDC37\u260E\uD83D\uDCA7\uD83D\uDE2F\uD83D\uDC86\uD83D\uDC46\uD83C\uDFA4\uD83D\uDE47\uD83C\uDF51\u2744\uD83C\uDF34\uD83D\uDCA3\uD83D\uDC38\uD83D\uDC8C\uD83D\uDCCD\uD83E\uDD40\uD83E\uDD22\uD83D\uDC45\uD83D\uDCA1\uD83D\uDCA9\uD83D\uDC50\uD83D\uDCF8\uD83D\uDC7B\uD83E\uDD10\uD83E\uDD2E\uD83C\uDFBC\uD83E\uDD75\uD83D\uDEA9\uD83C\uDF4E\uD83C\uDF4A\uD83D\uDC7C\uD83D\uDC8D\uD83D\uDCE3\uD83E\uDD42')\nconst alphabetBytesToChars = /** @type {string[]} */ (alphabet.reduce((p, c, i) => { p[i] = c; return p }, /** @type {string[]} */([])))\nconst alphabetCharsToBytes = /** @type {number[]} */ (alphabet.reduce((p, c, i) => { p[/** @type {number} */ (c.codePointAt(0))] = i; return p }, /** @type {number[]} */([])))\n\n/**\n * @param {Uint8Array} data\n * @returns {string}\n */\nfunction encode (data) {\n  return data.reduce((p, c) => {\n    p += alphabetBytesToChars[c]\n    return p\n  }, '')\n}\n\n/**\n * @param {string} str\n * @returns {Uint8Array}\n */\nfunction decode (str) {\n  const byts = []\n  for (const char of str) {\n    const byt = alphabetCharsToBytes[/** @type {number} */ (char.codePointAt(0))]\n    if (byt === undefined) {\n      throw new Error(`Non-base256emoji character: ${char}`)\n    }\n    byts.push(byt)\n  }\n  return new Uint8Array(byts)\n}\n\nexport const base256emoji = from({\n  prefix: '\uD83D\uDE80',\n  name: 'base256emoji',\n  encode,\n  decode\n})\n", "import { baseX } from './base.js'\n\nexport const base36 = baseX({\n  prefix: 'k',\n  name: 'base36',\n  alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n})\n\nexport const base36upper = baseX({\n  prefix: 'K',\n  name: 'base36upper',\n  alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base64 = rfc4648({\n  prefix: 'm',\n  name: 'base64',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n  bitsPerChar: 6\n})\n\nexport const base64pad = rfc4648({\n  prefix: 'M',\n  name: 'base64pad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n  bitsPerChar: 6\n})\n\nexport const base64url = rfc4648({\n  prefix: 'u',\n  name: 'base64url',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n  bitsPerChar: 6\n})\n\nexport const base64urlpad = rfc4648({\n  prefix: 'U',\n  name: 'base64urlpad',\n  alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n  bitsPerChar: 6\n})\n", "// @ts-check\n\nimport { rfc4648 } from './base.js'\n\nexport const base8 = rfc4648({\n  prefix: '7',\n  name: 'base8',\n  alphabet: '01234567',\n  bitsPerChar: 3\n})\n", "// @ts-check\n\nimport { fromString, toString } from '../bytes.js'\nimport { from } from './base.js'\n\nexport const identity = from({\n  prefix: '\\x00',\n  name: 'identity',\n  encode: (buf) => toString(buf),\n  decode: (str) => fromString(str)\n})\n", "// @ts-check\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nconst textEncoder = new TextEncoder()\nconst textDecoder = new TextDecoder()\n\nexport const name = 'json'\nexport const code = 0x0200\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => textEncoder.encode(JSON.stringify(node))\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => JSON.parse(textDecoder.decode(data))\n", "// @ts-check\n\nimport { coerce } from '../bytes.js'\n\n/**\n * @template T\n * @typedef {import('./interface.js').ByteView<T>} ByteView\n */\n\nexport const name = 'raw'\nexport const code = 0x55\n\n/**\n * @param {Uint8Array} node\n * @returns {ByteView<Uint8Array>}\n */\nexport const encode = (node) => coerce(node)\n\n/**\n * @param {ByteView<Uint8Array>} data\n * @returns {Uint8Array}\n */\nexport const decode = (data) => coerce(data)\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\n/** @type {(input:Uint8Array) => Uint8Array} */\nconst encode = coerce\n\n/**\n * @param {Uint8Array} input\n * @returns {Digest.Digest<typeof code, number>}\n */\nconst digest = (input) => Digest.create(code, encode(input))\n\nexport const identity = { code, name, encode, digest }\n", "/* global crypto */\n\nimport { from } from './hasher.js'\n\n/**\n * @param {AlgorithmIdentifier} name\n */\nconst sha = name =>\n  /**\n   * @param {Uint8Array} data\n   */\n  async data => new Uint8Array(await crypto.subtle.digest(name, data))\n\nexport const sha256 = from({\n  name: 'sha2-256',\n  code: 0x12,\n  encode: sha('SHA-256')\n})\n\nexport const sha512 = from({\n  name: 'sha2-512',\n  code: 0x13,\n  encode: sha('SHA-512')\n})\n", "import * as Digest from './digest.js'\n\n/**\n * @template {string} Name\n * @template {number} Code\n * @param {object} options\n * @param {Name} options.name\n * @param {Code} options.code\n * @param {(input: Uint8Array) => Await<Uint8Array>} options.encode\n */\nexport const from = ({ name, code, encode }) => new Hasher(name, code, encode)\n\n/**\n * Hasher represents a hashing algorithm implementation that produces as\n * `MultihashDigest`.\n *\n * @template {string} Name\n * @template {number} Code\n * @class\n * @implements {MultihashHasher<Code>}\n */\nexport class Hasher {\n  /**\n   *\n   * @param {Name} name\n   * @param {Code} code\n   * @param {(input: Uint8Array) => Await<Uint8Array>} encode\n   */\n  constructor (name, code, encode) {\n    this.name = name\n    this.code = code\n    this.encode = encode\n  }\n\n  /**\n   * @param {Uint8Array} input\n   * @returns {Await<Digest.Digest<Code, number>>}\n   */\n  digest (input) {\n    if (input instanceof Uint8Array) {\n      const result = this.encode(input)\n      return result instanceof Uint8Array\n        ? Digest.create(this.code, result)\n        /* c8 ignore next 1 */\n        : result.then(digest => Digest.create(this.code, digest))\n    } else {\n      throw Error('Unknown type, must be binary type')\n      /* c8 ignore next 1 */\n    }\n  }\n}\n\n/**\n * @template {number} Alg\n * @typedef {import('./interface.js').MultihashHasher} MultihashHasher\n */\n\n/**\n * @template T\n * @typedef {Promise<T>|T} Await\n */\n", "import * as bytes from './bytes.js'\nimport { CID } from './cid.js'\nimport * as digest from './hashes/digest.js'\nimport * as hasher from './hashes/hasher.js'\nimport * as varint from './varint.js'\n\n// This way TS will also expose all the types from module\nexport * from './interface.js'\n\nexport { CID, hasher, digest, varint, bytes }\n", "// this is dummy module overlayed by interface.ts\n", "import { asUint8Array } from './util/as-uint8array.js'\n\n/**\n * Returns a `Uint8Array` of the requested size. Referenced memory will\n * be initialized to 0.\n */\nexport function alloc (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.alloc != null) {\n    return asUint8Array(globalThis.Buffer.alloc(size))\n  }\n\n  return new Uint8Array(size)\n}\n\n/**\n * Where possible returns a Uint8Array of the requested size that references\n * uninitialized memory. Only use if you are certain you will immediately\n * overwrite every value in the returned `Uint8Array`.\n */\nexport function allocUnsafe (size: number = 0): Uint8Array {\n  if (globalThis.Buffer?.allocUnsafe != null) {\n    return asUint8Array(globalThis.Buffer.allocUnsafe(size))\n  }\n\n  return new Uint8Array(size)\n}\n", "import type { InProgressImportResult } from '../index.js'\n\nexport interface Reducer { (leaves: InProgressImportResult[]): Promise<InProgressImportResult> }\nexport interface FileLayout { (source: AsyncIterable<InProgressImportResult> | Iterable<InProgressImportResult>, reducer: Reducer): Promise<InProgressImportResult> }\n\nexport { balanced } from './balanced.js'\nexport { flat } from './flat.js'\nexport { trickle } from './trickle.js'\n", "import batch from 'it-batch'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\nexport interface BalancedOptions {\n  maxChildrenPerNode?: number\n}\n\nexport function balanced (options?: BalancedOptions): FileLayout {\n  const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n  return async function balancedLayout (source, reduce): Promise<InProgressImportResult> {\n    const roots = []\n\n    for await (const chunked of batch(source, maxChildrenPerNode)) {\n      roots.push(await reduce(chunked))\n    }\n\n    if (roots.length > 1) {\n      return balancedLayout(roots, reduce)\n    }\n\n    return roots[0]\n  }\n}\n", "import all from 'it-all'\nimport type { FileLayout } from './index.js'\nimport type { InProgressImportResult } from '../index.js'\n\nexport function flat (): FileLayout {\n  return async function flatLayout (source, reduce): Promise<InProgressImportResult> {\n    return reduce(await all(source))\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * For when you need a one-liner to collect iterable values.\n *\n * @example\n *\n * ```javascript\n * import all from 'it-all'\n *\n * // This can also be an iterator, etc\n * const values = function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const arr = all(values)\n *\n * console.info(arr) // 0, 1, 2, 3, 4\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const arr = await all(values())\n *\n * console.info(arr) // 0, 1, 2, 3, 4\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Collects all values from an (async) iterable and returns them as an array\n */\nfunction all <T> (source: Iterable<T>): T[]\nfunction all <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T[]>\nfunction all <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T[]> | T[] {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      const arr = []\n\n      for await (const entry of source) {\n        arr.push(entry)\n      }\n\n      return arr\n    })()\n  }\n\n  const arr = []\n\n  for (const entry of source) {\n    arr.push(entry)\n  }\n\n  return arr\n}\n\nexport default all\n", "import batch from 'it-batch'\nimport type { InProgressImportResult } from '../index.js'\nimport type { FileLayout, Reducer } from '../layout/index.js'\nimport type { UnixFS } from 'ipfs-unixfs'\nimport type { CID } from 'multiformats/cid'\n\nconst DEFAULT_LAYER_REPEAT = 4\nconst DEFAULT_MAX_CHILDREN_PER_NODE = 174\n\ninterface TrickleDagNode {\n  children: InProgressImportResult[]\n  depth: number\n  maxDepth: number\n  maxChildren: number\n  data?: InProgressImportResult[]\n  parent?: TrickleDagNode\n  cid?: CID\n  size?: number\n  unixfs?: UnixFS\n}\n\nexport interface TrickleOptions {\n  layerRepeat?: number\n  maxChildrenPerNode?: number\n}\n\n/**\n * @see https://github.com/ipfs/specs/pull/57#issuecomment-265205384\n */\nexport function trickle (options?: TrickleOptions): FileLayout {\n  const layerRepeat = options?.layerRepeat ?? DEFAULT_LAYER_REPEAT\n  const maxChildrenPerNode = options?.maxChildrenPerNode ?? DEFAULT_MAX_CHILDREN_PER_NODE\n\n  return async function trickleLayout (source, reduce): Promise<InProgressImportResult> {\n    const root = new Root(layerRepeat)\n    let iteration = 0\n    let maxDepth = 1\n    let subTree: SubTree = root\n\n    for await (const layer of batch(source, maxChildrenPerNode)) {\n      if (subTree.isFull()) {\n        if (subTree !== root) {\n          root.addChild(await subTree.reduce(reduce))\n        }\n\n        if (iteration > 0 && iteration % layerRepeat === 0) {\n          maxDepth++\n        }\n\n        subTree = new SubTree(maxDepth, layerRepeat, iteration)\n\n        iteration++\n      }\n\n      subTree.append(layer)\n    }\n\n    if (subTree != null && subTree !== root) {\n      root.addChild(await subTree.reduce(reduce))\n    }\n\n    return root.reduce(reduce)\n  }\n}\n\nclass SubTree {\n  public root: TrickleDagNode\n  public node: TrickleDagNode\n  public parent: TrickleDagNode\n  public maxDepth: number\n  public layerRepeat: number\n  public currentDepth: number\n  public iteration: number\n\n  constructor (maxDepth: number, layerRepeat: number, iteration: number = 0) {\n    this.maxDepth = maxDepth\n    this.layerRepeat = layerRepeat\n    this.currentDepth = 1\n    this.iteration = iteration\n\n    this.root = this.node = this.parent = {\n      children: [],\n      depth: this.currentDepth,\n      maxDepth,\n      maxChildren: (this.maxDepth - this.currentDepth) * this.layerRepeat\n    }\n  }\n\n  isFull (): boolean {\n    if (this.root.data == null) {\n      return false\n    }\n\n    if (this.currentDepth < this.maxDepth && this.node.maxChildren > 0) {\n      // can descend\n      this._addNextNodeToParent(this.node)\n\n      return false\n    }\n\n    // try to find new node from node.parent\n    const distantRelative = this._findParent(this.node, this.currentDepth)\n\n    if (distantRelative != null) {\n      this._addNextNodeToParent(distantRelative)\n\n      return false\n    }\n\n    return true\n  }\n\n  _addNextNodeToParent (parent: TrickleDagNode): void {\n    this.parent = parent\n\n    // find site for new node\n    const nextNode = {\n      children: [],\n      depth: parent.depth + 1,\n      parent,\n      maxDepth: this.maxDepth,\n      maxChildren: Math.floor(parent.children.length / this.layerRepeat) * this.layerRepeat\n    }\n\n    // @ts-expect-error nextNode is different type\n    parent.children.push(nextNode)\n\n    this.currentDepth = nextNode.depth\n    this.node = nextNode\n  }\n\n  append (layer: InProgressImportResult[]): void {\n    this.node.data = layer\n  }\n\n  async reduce (reduce: Reducer): Promise<InProgressImportResult> {\n    return this._reduce(this.root, reduce)\n  }\n\n  async _reduce (node: TrickleDagNode, reduce: Reducer): Promise<InProgressImportResult> {\n    let children: InProgressImportResult[] = []\n\n    if (node.children.length > 0) {\n      children = await Promise.all(\n        node.children\n          // @ts-expect-error data is not present on type\n          .filter(child => child.data)\n          // @ts-expect-error child is wrong type\n          .map(async child => this._reduce(child, reduce))\n      )\n    }\n\n    return reduce((node.data ?? []).concat(children))\n  }\n\n  _findParent (node: TrickleDagNode, depth: number): TrickleDagNode | undefined {\n    const parent = node.parent\n\n    if (parent == null || parent.depth === 0) {\n      return\n    }\n\n    if (parent.children.length === parent.maxChildren || parent.maxChildren === 0) {\n      // this layer is full, may be able to traverse to a different branch\n      return this._findParent(parent, depth)\n    }\n\n    return parent\n  }\n}\n\nclass Root extends SubTree {\n  constructor (layerRepeat: number) {\n    super(0, layerRepeat)\n\n    this.root.depth = 0\n    this.currentDepth = 1\n  }\n\n  addChild (child: InProgressImportResult): void {\n    this.root.children.push(child)\n  }\n\n  async reduce (reduce: Reducer): Promise<InProgressImportResult> {\n    return reduce((this.root.data ?? []).concat(this.root.children))\n  }\n}\n", "import { DirFlat } from './dir-flat.js'\nimport { Dir } from './dir.js'\nimport { flatToShard } from './flat-to-shard.js'\nimport { toPathComponents } from './utils/to-path-components.js'\nimport type { ImportResult, InProgressImportResult, TreeBuilder, WritableStorage } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport interface AddToTreeOptions extends PersistOptions {\n  shardSplitThresholdBytes: number\n}\n\nasync function addToTree (elem: InProgressImportResult, tree: Dir, options: AddToTreeOptions): Promise<Dir> {\n  const pathElems = toPathComponents(elem.path ?? '')\n  const lastIndex = pathElems.length - 1\n  let parent = tree\n  let currentPath = ''\n\n  for (let i = 0; i < pathElems.length; i++) {\n    const pathElem = pathElems[i]\n\n    currentPath += `${currentPath !== '' ? '/' : ''}${pathElem}`\n\n    const last = (i === lastIndex)\n    parent.dirty = true\n    parent.cid = undefined\n    parent.size = undefined\n\n    if (last) {\n      await parent.put(pathElem, elem)\n      tree = await flatToShard(null, parent, options.shardSplitThresholdBytes, options)\n    } else {\n      let dir = await parent.get(pathElem)\n\n      if ((dir == null) || !(dir instanceof Dir)) {\n        dir = new DirFlat({\n          root: false,\n          dir: true,\n          parent,\n          parentKey: pathElem,\n          path: currentPath,\n          dirty: true,\n          flat: true,\n          mtime: dir?.unixfs?.mtime,\n          mode: dir?.unixfs?.mode\n        }, options)\n      }\n\n      await parent.put(pathElem, dir)\n\n      parent = dir\n    }\n  }\n\n  return tree\n}\n\nasync function * flushAndYield (tree: Dir | InProgressImportResult, blockstore: WritableStorage): AsyncGenerator<ImportResult> {\n  if (!(tree instanceof Dir)) {\n    if (tree.unixfs?.isDirectory() === true) {\n      yield tree\n    }\n\n    return\n  }\n\n  yield * tree.flush(blockstore)\n}\n\nexport interface TreeBuilderOptions extends AddToTreeOptions {\n  wrapWithDirectory: boolean\n}\n\nexport function defaultTreeBuilder (options: TreeBuilderOptions): TreeBuilder {\n  return async function * treeBuilder (source, block) {\n    let tree: Dir = new DirFlat({\n      root: true,\n      dir: true,\n      path: '',\n      dirty: true,\n      flat: true\n    }, options)\n\n    let rootDir: string | undefined\n    let singleRoot = false\n\n    for await (const entry of source) {\n      if (entry == null) {\n        continue\n      }\n\n      // if all paths are from the same root directory, we should\n      // wrap them all in that root directory\n      const dir = `${entry.originalPath ?? ''}`.split('/')[0]\n\n      if (dir != null && dir !== '') {\n        if (rootDir == null) {\n          rootDir = dir\n          singleRoot = true\n        } else if (rootDir !== dir) {\n          singleRoot = false\n        }\n      }\n\n      tree = await addToTree(entry, tree, options)\n\n      if (entry.unixfs == null || !entry.unixfs.isDirectory()) {\n        yield entry\n      }\n    }\n\n    if (options.wrapWithDirectory || (singleRoot && tree.childCount() > 1)) {\n      yield * flushAndYield(tree, block)\n    } else {\n      for await (const unwrapped of tree.eachChildSeries()) {\n        if (unwrapped == null) {\n          continue\n        }\n\n        yield * flushAndYield(unwrapped.child, block)\n      }\n    }\n  }\n}\n", "import { encode, type PBNode, prepare } from '@ipld/dag-pb'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1, type DirProps } from './dir.js'\nimport { persist, type PersistOptions } from './utils/persist.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { CID } from 'multiformats/cid'\n\nexport class DirFlat extends Dir {\n  private readonly _children: Map<string, InProgressImportResult | Dir>\n\n  constructor (props: DirProps, options: PersistOptions) {\n    super(props, options)\n\n    this._children = new Map()\n  }\n\n  async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n    this.cid = undefined\n    this.size = undefined\n    this.nodeSize = undefined\n\n    this._children.set(name, value)\n  }\n\n  async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n    return Promise.resolve(this._children.get(name))\n  }\n\n  childCount (): number {\n    return this._children.size\n  }\n\n  directChildrenCount (): number {\n    return this.childCount()\n  }\n\n  onlyChild (): InProgressImportResult | Dir {\n    return this._children.values().next().value\n  }\n\n  async * eachChildSeries (): AsyncGenerator<{ key: string, child: InProgressImportResult | Dir }, void, undefined> {\n    for (const [key, child] of this._children.entries()) {\n      yield {\n        key,\n        child\n      }\n    }\n  }\n\n  estimateNodeSize (): number {\n    if (this.nodeSize !== undefined) {\n      return this.nodeSize\n    }\n\n    this.nodeSize = 0\n\n    // estimate size only based on DAGLink name and CID byte lengths\n    // https://github.com/ipfs/go-unixfsnode/blob/37b47f1f917f1b2f54c207682f38886e49896ef9/data/builder/directory.go#L81-L96\n    for (const [name, child] of this._children.entries()) {\n      if (child.size != null && (child.cid != null)) {\n        this.nodeSize += name.length + (this.options.cidVersion === 1 ? CID_V1.bytes.byteLength : CID_V0.bytes.byteLength)\n      }\n    }\n\n    return this.nodeSize\n  }\n\n  async * flush (block: Blockstore): AsyncGenerator<ImportResult> {\n    const links = []\n\n    for (const [name, child] of this._children.entries()) {\n      let result: { size?: bigint | number, cid?: CID } = child\n\n      if (child instanceof Dir) {\n        for await (const entry of child.flush(block)) {\n          result = entry\n\n          yield entry\n        }\n      }\n\n      if (result.size != null && (result.cid != null)) {\n        links.push({\n          Name: name,\n          Tsize: Number(result.size),\n          Hash: result.cid\n        })\n      }\n    }\n\n    const unixfs = new UnixFS({\n      type: 'directory',\n      mtime: this.mtime,\n      mode: this.mode\n    })\n\n    const node: PBNode = { Data: unixfs.marshal(), Links: links }\n    const buffer = encode(prepare(node))\n    const cid = await persist(buffer, block, this.options)\n    const size = buffer.length + node.Links.reduce(\n      /**\n       * @param {number} acc\n       * @param {PBLink} curr\n       */\n      (acc, curr) => acc + (curr.Tsize == null ? 0 : curr.Tsize),\n      0)\n\n    this.cid = cid\n    this.size = size\n\n    yield {\n      cid,\n      unixfs,\n      path: this.path,\n      size: BigInt(size)\n    }\n  }\n}\n", "import { CID } from 'multiformats/cid'\nimport type { WritableStorage, ImportResult, InProgressImportResult } from './index.js'\nimport type { PersistOptions } from './utils/persist.js'\nimport type { Mtime, UnixFS } from 'ipfs-unixfs'\n\nexport interface DirProps {\n  root: boolean\n  dir: boolean\n  path: string\n  dirty: boolean\n  flat: boolean\n  parent?: Dir\n  parentKey?: string\n  unixfs?: UnixFS\n  mode?: number\n  mtime?: Mtime\n}\n\nexport abstract class Dir {\n  public options: PersistOptions\n  public root: boolean\n  public dir: boolean\n  public path: string\n  public dirty: boolean\n  public flat: boolean\n  public parent?: Dir\n  public parentKey?: string\n  public unixfs?: UnixFS\n  public mode?: number\n  public mtime?: Mtime\n  public cid?: CID\n  public size?: number\n  public nodeSize?: number\n\n  constructor (props: DirProps, options: PersistOptions) {\n    this.options = options ?? {}\n\n    this.root = props.root\n    this.dir = props.dir\n    this.path = props.path\n    this.dirty = props.dirty\n    this.flat = props.flat\n    this.parent = props.parent\n    this.parentKey = props.parentKey\n    this.unixfs = props.unixfs\n    this.mode = props.mode\n    this.mtime = props.mtime\n  }\n\n  abstract put (name: string, value: InProgressImportResult | Dir): Promise<void>\n  abstract get (name: string): Promise<InProgressImportResult | Dir | undefined>\n  abstract eachChildSeries (): AsyncIterable<{ key: string, child: InProgressImportResult | Dir }>\n  abstract flush (blockstore: WritableStorage): AsyncGenerator<ImportResult>\n  abstract estimateNodeSize (): number\n  abstract childCount (): number\n}\n\n// we use these to calculate the node size to use as a check for whether a directory\n// should be sharded or not. Since CIDs have a constant length and We're only\n// interested in the data length and not the actual content identifier we can use\n// any old CID instead of having to hash the data which is expensive.\nexport const CID_V0 = CID.parse('QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn')\nexport const CID_V1 = CID.parse('zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi')\n", "import { DirFlat } from './dir-flat.js'\nimport DirSharded from './dir-sharded.js'\nimport type { Dir } from './dir.js'\nimport type { PersistOptions } from './utils/persist.js'\n\nexport async function flatToShard (child: Dir | null, dir: Dir, threshold: number, options: PersistOptions): Promise<DirSharded> {\n  let newDir = dir as DirSharded\n\n  if (dir instanceof DirFlat && dir.estimateNodeSize() > threshold) {\n    newDir = await convertToShard(dir, options)\n  }\n\n  const parent = newDir.parent\n\n  if (parent != null) {\n    if (newDir !== dir) {\n      if (child != null) {\n        child.parent = newDir\n      }\n\n      if (newDir.parentKey == null) {\n        throw new Error('No parent key found')\n      }\n\n      await parent.put(newDir.parentKey, newDir)\n    }\n\n    return flatToShard(newDir, parent, threshold, options)\n  }\n\n  return newDir\n}\n\nasync function convertToShard (oldDir: DirFlat, options: PersistOptions): Promise<DirSharded> {\n  const newDir = new DirSharded({\n    root: oldDir.root,\n    dir: true,\n    parent: oldDir.parent,\n    parentKey: oldDir.parentKey,\n    path: oldDir.path,\n    dirty: oldDir.dirty,\n    flat: false,\n    mtime: oldDir.mtime,\n    mode: oldDir.mode\n  }, options)\n\n  for await (const { key, child } of oldDir.eachChildSeries()) {\n    await newDir.put(key, child)\n  }\n\n  return newDir\n}\n", "import { encode, type PBLink, prepare } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { createHAMT, Bucket, type BucketChild } from 'hamt-sharding'\nimport { UnixFS } from 'ipfs-unixfs'\nimport { Dir, CID_V0, CID_V1, type DirProps } from './dir.js'\nimport { persist, type PersistOptions } from './utils/persist.js'\nimport type { ImportResult, InProgressImportResult } from './index.js'\nimport type { Blockstore } from 'interface-blockstore'\n\nasync function hamtHashFn (buf: Uint8Array): Promise<Uint8Array> {\n  return (await murmur3128.encode(buf))\n    // Murmur3 outputs 128 bit but, accidentally, IPFS Go's\n    // implementation only uses the first 64, so we must do the same\n    // for parity..\n    .slice(0, 8)\n    // Invert buffer because that's how Go impl does it\n    .reverse()\n}\n\nconst HAMT_HASH_CODE = BigInt(0x22)\n\nclass DirSharded extends Dir {\n  private readonly _bucket: Bucket<InProgressImportResult | Dir>\n\n  constructor (props: DirProps, options: PersistOptions) {\n    super(props, options)\n\n    this._bucket = createHAMT({\n      hashFn: hamtHashFn,\n      bits: 8\n    })\n  }\n\n  async put (name: string, value: InProgressImportResult | Dir): Promise<void> {\n    this.cid = undefined\n    this.size = undefined\n    this.nodeSize = undefined\n\n    await this._bucket.put(name, value)\n  }\n\n  async get (name: string): Promise<InProgressImportResult | Dir | undefined> {\n    return this._bucket.get(name)\n  }\n\n  childCount (): number {\n    return this._bucket.leafCount()\n  }\n\n  directChildrenCount (): number {\n    return this._bucket.childrenCount()\n  }\n\n  onlyChild (): Bucket<InProgressImportResult | Dir> | BucketChild<InProgressImportResult | Dir> {\n    return this._bucket.onlyChild()\n  }\n\n  async * eachChildSeries (): AsyncGenerator<{ key: string, child: InProgressImportResult | Dir }> {\n    for await (const { key, value } of this._bucket.eachLeafSeries()) {\n      yield {\n        key,\n        child: value\n      }\n    }\n  }\n\n  estimateNodeSize (): number {\n    if (this.nodeSize !== undefined) {\n      return this.nodeSize\n    }\n\n    this.nodeSize = calculateSize(this._bucket, this, this.options)\n\n    return this.nodeSize\n  }\n\n  async * flush (blockstore: Blockstore): AsyncGenerator<ImportResult> {\n    for await (const entry of flush(this._bucket, blockstore, this, this.options)) {\n      yield {\n        ...entry,\n        path: this.path\n      }\n    }\n  }\n}\n\nexport default DirSharded\n\nasync function * flush (bucket: Bucket<Dir | InProgressImportResult>, blockstore: Blockstore, shardRoot: DirSharded | null, options: PersistOptions): AsyncIterable<ImportResult> {\n  const children = bucket._children\n  const links: PBLink[] = []\n  let childrenSize = 0n\n\n  for (let i = 0; i < children.length; i++) {\n    const child = children.get(i)\n\n    if (child == null) {\n      continue\n    }\n\n    const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0')\n\n    if (child instanceof Bucket) {\n      let shard\n\n      for await (const subShard of flush(child, blockstore, null, options)) {\n        shard = subShard\n      }\n\n      if (shard == null) {\n        throw new Error('Could not flush sharded directory, no subshard found')\n      }\n\n      links.push({\n        Name: labelPrefix,\n        Tsize: Number(shard.size),\n        Hash: shard.cid\n      })\n      childrenSize += shard.size\n    } else if (isDir(child.value)) {\n      const dir = child.value\n      let flushedDir: ImportResult | undefined\n\n      for await (const entry of dir.flush(blockstore)) {\n        flushedDir = entry\n\n        yield flushedDir\n      }\n\n      if (flushedDir == null) {\n        throw new Error('Did not flush dir')\n      }\n\n      const label = labelPrefix + child.key\n      links.push({\n        Name: label,\n        Tsize: Number(flushedDir.size),\n        Hash: flushedDir.cid\n      })\n\n      childrenSize += flushedDir.size\n    } else {\n      const value = child.value\n\n      if (value.cid == null) {\n        continue\n      }\n\n      const label = labelPrefix + child.key\n      const size = value.size\n\n      links.push({\n        Name: label,\n        Tsize: Number(size),\n        Hash: value.cid\n      })\n      childrenSize += BigInt(size ?? 0)\n    }\n  }\n\n  // go-ipfs uses little endian, that's why we have to\n  // reverse the bit field before storing it\n  const data = Uint8Array.from(children.bitField().reverse())\n  const dir = new UnixFS({\n    type: 'hamt-sharded-directory',\n    data,\n    fanout: BigInt(bucket.tableSize()),\n    hashType: HAMT_HASH_CODE,\n    mtime: shardRoot?.mtime,\n    mode: shardRoot?.mode\n  })\n\n  const node = {\n    Data: dir.marshal(),\n    Links: links\n  }\n  const buffer = encode(prepare(node))\n  const cid = await persist(buffer, blockstore, options)\n  const size = BigInt(buffer.byteLength) + childrenSize\n\n  yield {\n    cid,\n    unixfs: dir,\n    size\n  }\n}\n\nfunction isDir (obj: any): obj is Dir {\n  return typeof obj.flush === 'function'\n}\n\nfunction calculateSize (bucket: Bucket<any>, shardRoot: DirSharded | null, options: PersistOptions): number {\n  const children = bucket._children\n  const links: PBLink[] = []\n\n  for (let i = 0; i < children.length; i++) {\n    const child = children.get(i)\n\n    if (child == null) {\n      continue\n    }\n\n    const labelPrefix = i.toString(16).toUpperCase().padStart(2, '0')\n\n    if (child instanceof Bucket) {\n      const size = calculateSize(child, null, options)\n\n      links.push({\n        Name: labelPrefix,\n        Tsize: Number(size),\n        Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n      })\n    } else if (typeof child.value.flush === 'function') {\n      const dir = child.value\n      const size = dir.nodeSize()\n\n      links.push({\n        Name: labelPrefix + child.key,\n        Tsize: Number(size),\n        Hash: options.cidVersion === 0 ? CID_V0 : CID_V1\n      })\n    } else {\n      const value = child.value\n\n      if (value.cid == null) {\n        continue\n      }\n\n      const label = labelPrefix + child.key\n      const size = value.size\n\n      links.push({\n        Name: label,\n        Tsize: Number(size),\n        Hash: value.cid\n      })\n    }\n  }\n\n  // go-ipfs uses little endian, that's why we have to\n  // reverse the bit field before storing it\n  const data = Uint8Array.from(children.bitField().reverse())\n  const dir = new UnixFS({\n    type: 'hamt-sharded-directory',\n    data,\n    fanout: BigInt(bucket.tableSize()),\n    hashType: HAMT_HASH_CODE,\n    mtime: shardRoot?.mtime,\n    mode: shardRoot?.mode\n  })\n\n  const buffer = encode(prepare({\n    Data: dir.marshal(),\n    Links: links\n  }))\n\n  return buffer.length\n}\n", "import { bytes } from 'multiformats'\nimport { from } from 'multiformats/hashes/hasher'\n// @ts-expect-error no types\nimport mur from 'murmurhash3js-revisited'\n\n/**\n * @param {number} number\n * @returns {Uint8Array}\n */\nfunction fromNumberTo32BitBuf (number) {\n  const bytes = new Array(4)\n  for (let i = 0; i < 4; i++) {\n    bytes[i] = number & 0xff\n    number = number >> 8\n  }\n  return new Uint8Array(bytes)\n}\n\nexport const murmur332 = from({\n  name: 'murmur3-32',\n  code: 0x23,\n  encode: (input) => fromNumberTo32BitBuf(mur.x86.hash32(input))\n})\n\nexport const murmur3128 = from({\n  name: 'murmur3-128',\n  code: 0x22,\n  encode: (input) => bytes.fromHex(mur.x64.hash128(input))\n})\n\n// A special-use 0x22 that truncates 64 bits, specifically for use in the UnixFS HAMT\nexport const murmur364 = from({\n  name: 'murmur3-x64-64',\n  code: 0x22,\n  encode: (input) => bytes.fromHex(mur.x64.hash128(input)).subarray(0, 8)\n})\n", "/**\n * @packageDocumentation\n *\n * A [Hash Mapped Trie](https://en.wikipedia.org/wiki/Hash_array_mapped_trie) implementation for JavaScript.\n *\n * This is used by [@helia/unixfs](https://www.npmjs.com/package/@helia/unixfs) for it's HAMT-sharded directory implementation.\n *\n * @example\n *\n * ```TypeScript\n * import { createHAMT } from 'hamt-sharding'\n * import crypto from 'crypto-promise'\n *\n * // decide how to hash buffers made from keys, can return a Promise\n * const hashFn = async (buf) => {\n *   return crypto\n *     .createHash('sha256')\n *     .update(buf)\n *     .digest()\n * }\n *\n * const bucket = createHAMT({\n *   hashFn: hashFn\n * })\n *\n * await bucket.put('key', 'value')\n *\n * const output = await bucket.get('key')\n * // output === 'value'\n * ```\n */\n\nimport { Bucket } from './bucket.js'\nimport { wrapHash } from './consumable-hash.js'\nimport type { BucketOptions, BucketPosition, BucketChild } from './bucket.js'\n\ninterface UserBucketOptions {\n  hashFn(value: Uint8Array): Promise<Uint8Array>\n  bits?: number\n}\n\nexport function createHAMT<T> (options: UserBucketOptions): Bucket<T> {\n  if (options == null || options.hashFn == null) {\n    throw new Error('please define an options.hashFn')\n  }\n\n  const bucketOptions = {\n    bits: options.bits ?? 8,\n    hash: wrapHash(options.hashFn)\n  }\n\n  return new Bucket<T>(bucketOptions)\n}\n\nexport { Bucket }\nexport type { BucketOptions, BucketPosition, BucketChild }\n", "// @ts-expect-error no types\nimport SparseArray from 'sparse-array'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport type { InfiniteHash } from './consumable-hash.js'\n\nexport interface BucketChild<V> {\n  key: string\n  value: V\n  hash: InfiniteHash\n}\n\ninterface SA<B> {\n  length: number\n  compactArray(): B[]\n  get(i: number): B\n  set(i: number, value: B): void\n  reduce <A> (fn: (acc: A, curr: B, index: number) => A, initial: A): B\n  find(fn: (item: B) => boolean): B | undefined\n  bitField(): number[]\n  unset(i: number): void\n}\n\nexport interface BucketPosition<T> {\n  bucket: Bucket<T>\n  pos: number\n  hash: InfiniteHash\n  existingChild?: BucketChild<T>\n}\n\nexport interface BucketOptions {\n  bits: number\n  hash(value: Uint8Array | InfiniteHash): InfiniteHash\n}\n\nexport class Bucket<T> {\n  _options: BucketOptions\n  _popCount: number\n  _parent?: Bucket<T>\n  _posAtParent: number\n  _children: SA<Bucket<T> | BucketChild<T>>\n\n  key: string | null\n\n  constructor (options: BucketOptions, parent?: Bucket<T>, posAtParent = 0) {\n    this._options = options\n    this._popCount = 0\n    this._parent = parent\n    this._posAtParent = posAtParent\n    this._children = new SparseArray()\n    this.key = null\n  }\n\n  async put (key: string, value: T): Promise<void> {\n    const place = await this._findNewBucketAndPos(key)\n\n    place.bucket._putAt(place, key, value)\n  }\n\n  async get (key: string): Promise<T | undefined> {\n    const child = await this._findChild(key)\n\n    if (child != null) {\n      return child.value\n    }\n  }\n\n  async del (key: string): Promise<void> {\n    const place = await this._findPlace(key)\n    const child = place.bucket._at(place.pos)\n\n    if (child != null && child.key === key) {\n      place.bucket._delAt(place.pos)\n    }\n  }\n\n  leafCount (): number {\n    const children = this._children.compactArray()\n\n    return children.reduce((acc, child) => {\n      if (child instanceof Bucket) {\n        return acc + child.leafCount()\n      }\n\n      return acc + 1\n    }, 0)\n  }\n\n  childrenCount (): number {\n    return this._children.length\n  }\n\n  onlyChild (): Bucket<T> | BucketChild<T> {\n    return this._children.get(0)\n  }\n\n  * eachLeafSeries (): Iterable<BucketChild<T>> {\n    const children = this._children.compactArray()\n\n    for (const child of children) {\n      if (child instanceof Bucket) {\n        yield * child.eachLeafSeries()\n      } else {\n        yield child\n      }\n    }\n  }\n\n  serialize <M> (map: (value: BucketChild<T>, index: number) => M, reduce: (reduced: Bucket<T> | BucketChild<T>) => M): M {\n    const acc: M[] = []\n    // serialize to a custom non-sparse representation\n    return reduce(this._children.reduce((acc, child, index) => {\n      if (child != null) {\n        if (child instanceof Bucket) {\n          acc.push(child.serialize(map, reduce))\n        } else {\n          acc.push(map(child, index))\n        }\n      }\n      return acc\n    }, acc))\n  }\n\n  async asyncTransform <R = T> (asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\n    return asyncTransformBucket(this, asyncMap, asyncReduce)\n  }\n\n  toJSON (): Record<string, any> {\n    return this.serialize(mapNode, reduceNodes)\n  }\n\n  prettyPrint (): string {\n    return JSON.stringify(this.toJSON(), null, '  ')\n  }\n\n  tableSize (): number {\n    return Math.pow(2, this._options.bits)\n  }\n\n  async _findChild (key: string): Promise<BucketChild<T> | undefined> {\n    const result = await this._findPlace(key)\n    const child = result.bucket._at(result.pos)\n\n    if (child instanceof Bucket) {\n      // should not be possible, this._findPlace should always\n      // return a location for a child, not a bucket\n      return undefined\n    }\n\n    if (child != null && child.key === key) {\n      return child\n    }\n  }\n\n  async _findPlace (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n    const hashValue = this._options.hash(typeof key === 'string' ? uint8ArrayFromString(key) : key)\n    const index = await hashValue.take(this._options.bits)\n\n    const child = this._children.get(index)\n\n    if (child instanceof Bucket) {\n      return child._findPlace(hashValue)\n    }\n\n    return {\n      bucket: this,\n      pos: index,\n      hash: hashValue,\n      existingChild: child\n    }\n  }\n\n  async _findNewBucketAndPos (key: string | InfiniteHash): Promise<BucketPosition<T>> {\n    const place = await this._findPlace(key)\n\n    if ((place.existingChild != null) && place.existingChild.key !== key) {\n      // conflict\n      const bucket = new Bucket(this._options, place.bucket, place.pos)\n      place.bucket._putObjectAt(place.pos, bucket)\n\n      // put the previous value\n      const newPlace = await bucket._findPlace(place.existingChild.hash)\n      newPlace.bucket._putAt(newPlace, place.existingChild.key, place.existingChild.value)\n\n      return bucket._findNewBucketAndPos(place.hash)\n    }\n\n    // no conflict, we found the place\n    return place\n  }\n\n  _putAt (place: BucketPosition<T>, key: string, value: T): void {\n    this._putObjectAt(place.pos, {\n      key,\n      value,\n      hash: place.hash\n    })\n  }\n\n  _putObjectAt (pos: number, object: Bucket<T> | BucketChild<T>): void {\n    if (this._children.get(pos) == null) {\n      this._popCount++\n    }\n    this._children.set(pos, object)\n  }\n\n  _delAt (pos: number): void {\n    if (pos === -1) {\n      throw new Error('Invalid position')\n    }\n\n    if (this._children.get(pos) != null) {\n      this._popCount--\n    }\n    this._children.unset(pos)\n    this._level()\n  }\n\n  _level (): void {\n    if (this._parent != null && this._popCount <= 1) {\n      if (this._popCount === 1) {\n        // remove myself from parent, replacing me with my only child\n        const onlyChild = this._children.find(exists)\n\n        if ((onlyChild != null) && !(onlyChild instanceof Bucket)) {\n          const hash = onlyChild.hash\n          hash.untake(this._options.bits)\n          const place = {\n            pos: this._posAtParent,\n            hash,\n            bucket: this._parent\n          }\n          this._parent._putAt(place, onlyChild.key, onlyChild.value)\n        }\n      } else {\n        this._parent._delAt(this._posAtParent)\n      }\n    }\n  }\n\n  _at (index: number): Bucket<T> | BucketChild<T> {\n    return this._children.get(index)\n  }\n}\n\nfunction exists (o: any): boolean {\n  return Boolean(o)\n}\n\nfunction mapNode (node: { key: string }, _: number): string {\n  return node.key\n}\n\nfunction reduceNodes <T> (nodes: T): any {\n  return nodes\n}\n\nasync function asyncTransformBucket <T, R = T> (bucket: Bucket<T>, asyncMap: (value: BucketChild<T>) => Promise<T[]>, asyncReduce: (reduced: any) => Promise<R>): Promise<R> {\n  const output = []\n\n  for (const child of bucket._children.compactArray()) {\n    if (child instanceof Bucket) {\n      await asyncTransformBucket(child, asyncMap, asyncReduce)\n    } else {\n      const mappedChildren = await asyncMap(child)\n\n      output.push({\n        bitField: bucket._children.bitField(),\n        children: mappedChildren\n      })\n    }\n  }\n\n  return asyncReduce(output)\n}\n", "import { concat as uint8ArrayConcat } from 'uint8arrays/concat'\nimport { ConsumableBuffer } from './consumable-buffer.js'\n\nexport function wrapHash (hashFn: (value: Uint8Array) => Promise<Uint8Array>): (value: InfiniteHash | Uint8Array) => InfiniteHash {\n  function hashing (value: InfiniteHash | Uint8Array): InfiniteHash {\n    if (value instanceof InfiniteHash) {\n      // already a hash. return it\n      return value\n    } else {\n      return new InfiniteHash(value, hashFn)\n    }\n  }\n\n  return hashing\n}\n\nexport class InfiniteHash {\n  _value: Uint8Array\n  _hashFn: (value: Uint8Array) => Promise<Uint8Array>\n  _depth: number\n  _availableBits: number\n  _currentBufferIndex: number\n  _buffers: ConsumableBuffer[]\n\n  constructor (value: Uint8Array, hashFn: (value: Uint8Array) => Promise<Uint8Array>) {\n    if (!(value instanceof Uint8Array)) {\n      throw new Error('can only hash Uint8Arrays')\n    }\n\n    this._value = value\n    this._hashFn = hashFn\n    this._depth = -1\n    this._availableBits = 0\n    this._currentBufferIndex = 0\n    this._buffers = []\n  }\n\n  async take (bits: number): Promise<number> {\n    let pendingBits = bits\n\n    while (this._availableBits < pendingBits) {\n      await this._produceMoreBits()\n    }\n\n    let result = 0\n\n    while (pendingBits > 0) {\n      const hash = this._buffers[this._currentBufferIndex]\n      const available = Math.min(hash.availableBits(), pendingBits)\n      const took = hash.take(available)\n      result = (result << available) + took\n      pendingBits -= available\n      this._availableBits -= available\n\n      if (hash.availableBits() === 0) {\n        this._currentBufferIndex++\n      }\n    }\n\n    return result\n  }\n\n  untake (bits: number): void {\n    let pendingBits = bits\n\n    while (pendingBits > 0) {\n      const hash = this._buffers[this._currentBufferIndex]\n      const availableForUntake = Math.min(hash.totalBits() - hash.availableBits(), pendingBits)\n      hash.untake(availableForUntake)\n      pendingBits -= availableForUntake\n      this._availableBits += availableForUntake\n\n      if (this._currentBufferIndex > 0 && hash.totalBits() === hash.availableBits()) {\n        this._depth--\n        this._currentBufferIndex--\n      }\n    }\n  }\n\n  async _produceMoreBits (): Promise<void> {\n    this._depth++\n\n    const value = this._depth > 0 ? uint8ArrayConcat([this._value, Uint8Array.from([this._depth])]) : this._value\n    const hashValue = await this._hashFn(value)\n    const buffer = new ConsumableBuffer(hashValue)\n\n    this._buffers.push(buffer)\n    this._availableBits += buffer.availableBits()\n  }\n}\n", "const START_MASKS = [\n  0b11111111,\n  0b11111110,\n  0b11111100,\n  0b11111000,\n  0b11110000,\n  0b11100000,\n  0b11000000,\n  0b10000000\n]\n\nconst STOP_MASKS = [\n  0b00000001,\n  0b00000011,\n  0b00000111,\n  0b00001111,\n  0b00011111,\n  0b00111111,\n  0b01111111,\n  0b11111111\n]\n\nexport class ConsumableBuffer {\n  _value: Uint8Array\n  _currentBytePos: number\n  _currentBitPos: number\n\n  constructor (value: Uint8Array) {\n    this._value = value\n    this._currentBytePos = value.length - 1\n    this._currentBitPos = 7\n  }\n\n  availableBits (): number {\n    return this._currentBitPos + 1 + this._currentBytePos * 8\n  }\n\n  totalBits (): number {\n    return this._value.length * 8\n  }\n\n  take (bits: number): number {\n    let pendingBits = bits\n    let result = 0\n    while (pendingBits > 0 && this._haveBits()) {\n      const byte = this._value[this._currentBytePos]\n      const availableBits = this._currentBitPos + 1\n      const taking = Math.min(availableBits, pendingBits)\n      const value = byteBitsToInt(byte, availableBits - taking, taking)\n      result = (result << taking) + value\n\n      pendingBits -= taking\n\n      this._currentBitPos -= taking\n      if (this._currentBitPos < 0) {\n        this._currentBitPos = 7\n        this._currentBytePos--\n      }\n    }\n\n    return result\n  }\n\n  untake (bits: number): void {\n    this._currentBitPos += bits\n    while (this._currentBitPos > 7) {\n      this._currentBitPos -= 8\n      this._currentBytePos += 1\n    }\n  }\n\n  _haveBits (): boolean {\n    return this._currentBytePos >= 0\n  }\n}\n\nfunction byteBitsToInt (byte: number, start: number, length: number): number {\n  const mask = maskFor(start, length)\n  return (byte & mask) >>> start\n}\n\nfunction maskFor (start: number, length: number): number {\n  return START_MASKS[start] & STOP_MASKS[Math.min(length + start - 1, 7)]\n}\n", "export const toPathComponents = (path: string = ''): string[] => {\n  // split on / unless escaped with \\\n  return (path\n    .trim()\n    .match(/([^\\\\/]|\\\\\\/)+/g) ?? [])\n    .filter(Boolean)\n}\n", "import * as cbor from '@ipld/dag-cbor';\n\nimport type { Readable } from 'readable-stream';\n\nimport { BlockstoreMock } from '../store/blockstore-mock.js';\nimport { CID } from 'multiformats/cid';\nimport { importer } from 'ipfs-unixfs-importer';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n// a map of all supported CID hashing algorithms. This map is used to select the appropriate hasher\n// when generating a CID to compare against a provided CID\nconst hashers = {\n  [sha256.code as number]: sha256,\n};\n\n// a map of all support codecs.This map is used to select the appropriate codec\n// when generating a CID to compare against a provided CID\nconst codecs = {\n  [cbor.code as number]: cbor\n};\n\n/**\n * Utility class for creating CIDs. Exported for the convenience of developers.\n */\nexport class Cid {\n\n  /**\n   * Computes a V1 CID for the provided payload\n   * @param codecCode - the codec to use. Defaults to cbor\n   * @param multihashCode - the multihasher to use. Defaults to sha256\n   * @returns payload CID\n   * @throws {Error} codec is not supported\n   * @throws {Error} encoding fails\n   * @throws {Error} if hasher is not supported\n   */\n  public static async computeCid(\n    payload: any,\n    codecCode: number = cbor.code,\n    multihashCode: number = sha256.code\n  ): Promise<string> {\n    const codec = codecs[codecCode];\n    if (!codec) {\n      throw new DwnError(DwnErrorCode.ComputeCidCodecNotSupported, `codec [${codecCode}] not supported`);\n    }\n\n    const hasher = hashers[multihashCode];\n    if (!hasher) {\n      throw new DwnError(DwnErrorCode.ComputeCidMultihashNotSupported, `multihash code [${multihashCode}] not supported`);\n    }\n\n    const payloadBytes = codec.encode(payload);\n    const payloadHash = await hasher.digest(payloadBytes);\n\n    const cid = await CID.createV1(codec.code, payloadHash);\n    return cid.toString();\n  }\n\n  /**\n   * Parses the given CID string into a {CID}.\n   */\n  public static parseCid(str: string): CID {\n    const cid: CID = CID.parse(str).toV1();\n\n    if (!codecs[cid.code]) {\n      throw new DwnError(DwnErrorCode.ParseCidCodecNotSupported, `codec [${cid.code}] not supported`);\n    }\n\n    if (!hashers[cid.multihash.code]) {\n      throw new DwnError(DwnErrorCode.ParseCidMultihashNotSupported, `multihash code [${cid.multihash.code}] not supported`);\n    }\n\n    return cid;\n  }\n\n  /**\n   * @returns V1 CID of the DAG comprised by chunking data into unixfs DAG-PB encoded blocks\n   */\n  public static async computeDagPbCidFromBytes(content: Uint8Array): Promise<string> {\n    const asyncDataBlocks = importer([{ content }], new BlockstoreMock(), { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID\n    let block;\n    for await (block of asyncDataBlocks) { ; }\n\n    return block ? block.cid.toString() : '';\n  }\n\n  /**\n   * @returns V1 CID of the DAG comprised by chunking data into unixfs DAG-PB encoded blocks\n   */\n  public static async computeDagPbCidFromStream(dataStream: Readable): Promise<string> {\n    const asyncDataBlocks = importer([{ content: dataStream }], new BlockstoreMock(), { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID\n    let block;\n    for await (block of asyncDataBlocks) { ; }\n\n    return block ? block.cid.toString() : '';\n  }\n}\n", "import * as crypto from 'crypto';\nimport * as eciesjs from 'eciesjs';\nimport { Readable } from 'readable-stream';\n\n// compress publicKey for message encryption\neciesjs.ECIES_CONFIG.isEphemeralKeyCompressed = true;\n\n/**\n * Utility class for performing common, non-DWN specific encryption operations.\n */\nexport class Encryption {\n  /**\n   * Encrypts the given plaintext stream using AES-256-CTR algorithm.\n   */\n  public static async aes256CtrEncrypt(key: Uint8Array, initializationVector: Uint8Array, plaintextStream: Readable): Promise<Readable> {\n    const cipher = crypto.createCipheriv('aes-256-ctr', key, initializationVector);\n\n    const cipherStream = new Readable({\n      read(): void { }\n    });\n\n    plaintextStream.on('data', (chunk) => {\n      const encryptedChunk = cipher.update(chunk);\n      cipherStream.push(encryptedChunk);\n    });\n\n    plaintextStream.on('end', () => {\n      const finalChunk = cipher.final();\n      cipherStream.push(finalChunk);\n      cipherStream.push(null);\n    });\n\n    plaintextStream.on('error', (err) => {\n      cipherStream.emit('error', err);\n    });\n\n    return cipherStream;\n  }\n\n  /**\n   * Decrypts the given cipher stream using AES-256-CTR algorithm.\n   */\n  public static async aes256CtrDecrypt(key: Uint8Array, initializationVector: Uint8Array, cipherStream: Readable): Promise<Readable> {\n    const decipher = crypto.createDecipheriv('aes-256-ctr', key, initializationVector);\n\n    const plaintextStream = new Readable({\n      read(): void { }\n    });\n\n    cipherStream.on('data', (chunk) => {\n      const decryptedChunk = decipher.update(chunk);\n      plaintextStream.push(decryptedChunk);\n    });\n\n    cipherStream.on('end', () => {\n      const finalChunk = decipher.final();\n      plaintextStream.push(finalChunk);\n      plaintextStream.push(null);\n    });\n\n    cipherStream.on('error', (err) => {\n      plaintextStream.emit('error', err);\n    });\n\n    return plaintextStream;\n  }\n\n  /**\n   * Encrypts the given plaintext using ECIES (Elliptic Curve Integrated Encryption Scheme)\n   * with SECP256K1 for the asymmetric calculations, HKDF as the key-derivation function,\n   * and AES-GCM for the symmetric encryption and MAC algorithms.\n   */\n  public static async eciesSecp256k1Encrypt(publicKeyBytes: Uint8Array, plaintext: Uint8Array): Promise<EciesEncryptionOutput> {\n    // underlying library requires Buffer as input\n    const publicKey = Buffer.from(publicKeyBytes);\n    const plaintextBuffer = Buffer.from(plaintext);\n\n    const cryptogram = eciesjs.encrypt(publicKey, plaintextBuffer);\n\n    // split cryptogram returned into constituent parts\n    let start = 0;\n    let end = Encryption.isEphemeralKeyCompressed ? 33 : 65;\n    const ephemeralPublicKey = cryptogram.subarray(start, end);\n\n    start = end;\n    end += eciesjs.ECIES_CONFIG.symmetricNonceLength;\n    const initializationVector = cryptogram.subarray(start, end);\n\n    start = end;\n    end += 16; // eciesjs.consts.AEAD_TAG_LENGTH\n    const messageAuthenticationCode = cryptogram.subarray(start, end);\n\n    const ciphertext = cryptogram.subarray(end);\n\n    return {\n      ciphertext,\n      ephemeralPublicKey,\n      initializationVector,\n      messageAuthenticationCode\n    };\n  }\n\n  /**\n   * Decrypt the given plaintext using ECIES (Elliptic Curve Integrated Encryption Scheme)\n   * with SECP256K1 for the asymmetric calculations, HKDF as the key-derivation function,\n   * and AES-GCM for the symmetric encryption and MAC algorithms.\n   */\n  public static async eciesSecp256k1Decrypt(input: EciesEncryptionInput): Promise<Uint8Array> {\n    // underlying library requires Buffer as input\n    const privateKeyBuffer = Buffer.from(input.privateKey);\n    const eciesEncryptionOutput = Buffer.concat([\n      input.ephemeralPublicKey,\n      input.initializationVector,\n      input.messageAuthenticationCode,\n      input.ciphertext\n    ]);\n\n    const plaintext = eciesjs.decrypt(privateKeyBuffer, eciesEncryptionOutput);\n\n    return plaintext;\n  }\n\n  /**\n   * Expose eciesjs library configuration\n   */\n  static get isEphemeralKeyCompressed():boolean {\n    return eciesjs.ECIES_CONFIG.isEphemeralKeyCompressed;\n  }\n}\n\nexport type EciesEncryptionOutput = {\n  initializationVector: Uint8Array;\n  ephemeralPublicKey: Uint8Array;\n  ciphertext: Uint8Array;\n  messageAuthenticationCode: Uint8Array;\n};\n\nexport type EciesEncryptionInput = EciesEncryptionOutput & {\n  privateKey: Uint8Array;\n};\n\nexport enum EncryptionAlgorithm {\n  Aes256Ctr = 'A256CTR',\n  EciesSecp256k1 = 'ECIES-ES256K'\n}", "import type { GeneralJws } from '../../../types/jws-types.js';\nimport type { Signer } from '../../../types/signer.js';\n\nimport { Encoder } from '../../../utils/encoder.js';\n\nexport class GeneralJwsBuilder {\n  private jws: GeneralJws;\n\n  private constructor(jws: GeneralJws) {\n    this.jws = jws;\n  }\n\n  static async create(payload: Uint8Array, signers: Signer[] = []): Promise<GeneralJwsBuilder> {\n    const jws: GeneralJws = {\n      payload    : Encoder.bytesToBase64Url(payload),\n      signatures : []\n    };\n\n    const builder = new GeneralJwsBuilder(jws);\n\n    for (const signer of signers) {\n      await builder.addSignature(signer);\n    }\n\n    return builder;\n  }\n\n  async addSignature(signer: Signer): Promise<void> {\n    const protectedHeader = {\n      kid : signer.keyId,\n      alg : signer.algorithm\n    };\n    const protectedHeaderString = JSON.stringify(protectedHeader);\n    const protectedHeaderBase64UrlString = Encoder.stringToBase64Url(protectedHeaderString);\n\n    const signingInputString = `${protectedHeaderBase64UrlString}.${this.jws.payload}`;\n    const signingInputBytes = Encoder.stringToBytes(signingInputString);\n\n    const signatureBytes = await signer.sign(signingInputBytes);\n    const signature = Encoder.bytesToBase64Url(signatureBytes);\n\n    this.jws.signatures.push({ protected: protectedHeaderBase64UrlString, signature });\n  }\n\n  getJws(): GeneralJws {\n    return this.jws;\n  }\n}", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.js on#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\n//\n// Use full path so that Node.js can rewrite it to `cryptoNode.js`.\nimport { randomBytes, getWebcryptoSubtle } from '@noble/ciphers/crypto';\nimport { AsyncCipher, Cipher, concatBytes } from './utils.js';\nimport { number, bytes as abytes } from './_assert.js';\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport { randomBytes, getWebcryptoSubtle };\n\ntype RemoveNonceInner<T extends any[], Ret> = ((...args: T) => Ret) extends (\n  arg0: any,\n  arg1: any,\n  ...rest: infer R\n) => any\n  ? (key: Uint8Array, ...args: R) => Ret\n  : never;\n\ntype RemoveNonce<T extends (...args: any) => any> = RemoveNonceInner<Parameters<T>, ReturnType<T>>;\ntype CipherWithNonce = ((key: Uint8Array, nonce: Uint8Array, ...args: any[]) => Cipher) & {\n  nonceLength: number;\n};\n\n// Uses CSPRG for nonce, nonce injected in ciphertext\nexport function managedNonce<T extends CipherWithNonce>(fn: T): RemoveNonce<T> {\n  number(fn.nonceLength);\n  return ((key: Uint8Array, ...args: any[]): any => ({\n    encrypt: (plaintext: Uint8Array, ...argsEnc: any[]) => {\n      const { nonceLength } = fn;\n      const nonce = randomBytes(nonceLength);\n      const ciphertext = (fn(key, nonce, ...args).encrypt as any)(plaintext, ...argsEnc);\n      const out = concatBytes(nonce, ciphertext);\n      ciphertext.fill(0);\n      return out;\n    },\n    decrypt: (ciphertext: Uint8Array, ...argsDec: any[]) => {\n      const { nonceLength } = fn;\n      const nonce = ciphertext.subarray(0, nonceLength);\n      const data = ciphertext.subarray(nonceLength);\n      return (fn(key, nonce, ...args).decrypt as any)(data, ...argsDec);\n    },\n  })) as RemoveNonce<T>;\n}\n\n// Overridable\nexport const utils = {\n  async encrypt(key: Uint8Array, keyParams: any, cryptParams: any, plaintext: Uint8Array) {\n    const cr = getWebcryptoSubtle();\n    const iKey = await cr.importKey('raw', key, keyParams, true, ['encrypt']);\n    const ciphertext = await cr.encrypt(cryptParams, iKey, plaintext);\n    return new Uint8Array(ciphertext);\n  },\n  async decrypt(key: Uint8Array, keyParams: any, cryptParams: any, ciphertext: Uint8Array) {\n    const cr = getWebcryptoSubtle();\n    const iKey = await cr.importKey('raw', key, keyParams, true, ['decrypt']);\n    const plaintext = await cr.decrypt(cryptParams, iKey, ciphertext);\n    return new Uint8Array(plaintext);\n  },\n};\n\nconst mode = {\n  CBC: 'AES-CBC',\n  CTR: 'AES-CTR',\n  GCM: 'AES-GCM',\n} as const;\ntype BlockMode = (typeof mode)[keyof typeof mode];\n\nfunction getCryptParams(algo: BlockMode, nonce: Uint8Array, AAD?: Uint8Array) {\n  if (algo === mode.CBC) return { name: mode.CBC, iv: nonce };\n  if (algo === mode.CTR) return { name: mode.CTR, counter: nonce, length: 64 };\n  if (algo === mode.GCM) {\n    if (AAD) return { name: mode.GCM, iv: nonce, additionalData: AAD };\n    else return { name: mode.GCM, iv: nonce };\n  }\n\n  throw new Error('unknown aes block mode');\n}\n\nfunction generate(algo: BlockMode) {\n  return (key: Uint8Array, nonce: Uint8Array, AAD?: Uint8Array): AsyncCipher => {\n    abytes(key);\n    abytes(nonce);\n    const keyParams = { name: algo, length: key.length * 8 };\n    const cryptParams = getCryptParams(algo, nonce, AAD);\n    return {\n      // keyLength,\n      encrypt(plaintext: Uint8Array) {\n        abytes(plaintext);\n        return utils.encrypt(key, keyParams, cryptParams, plaintext);\n      },\n      decrypt(ciphertext: Uint8Array) {\n        abytes(ciphertext);\n        return utils.decrypt(key, keyParams, cryptParams, ciphertext);\n      },\n    };\n  };\n}\n\nexport const cbc = generate(mode.CBC);\nexport const ctr = generate(mode.CTR);\nexport const gcm = generate(mode.GCM);\n\n// // Type tests\n// import { siv, gcm, ctr, ecb, cbc } from '../aes.js';\n// import { xsalsa20poly1305 } from '../salsa.js';\n// import { chacha20poly1305, xchacha20poly1305 } from '../chacha.js';\n\n// const wsiv = managedNonce(siv);\n// const wgcm = managedNonce(gcm);\n// const wctr = managedNonce(ctr);\n// const wcbc = managedNonce(cbc);\n// const wsalsapoly = managedNonce(xsalsa20poly1305);\n// const wchacha = managedNonce(chacha20poly1305);\n// const wxchacha = managedNonce(xchacha20poly1305);\n\n// // should fail\n// const wcbc2 = managedNonce(managedNonce(cbc));\n// const wecb = managedNonce(ecb);\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nconst cr = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (cr && typeof cr.getRandomValues === 'function')\n    return cr.getRandomValues(new Uint8Array(bytesLength));\n  throw new Error('crypto.getRandomValues must be defined');\n}\n\nexport function getWebcryptoSubtle() {\n  if (cr && typeof cr.subtle === 'object' && cr.subtle != null) return cr.subtle;\n  throw new Error('crypto.subtle must be defined');\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\nexport type Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('hash must be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';\n\nimport { Encoder } from './encoder.js';\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\nimport { Secp256k1 } from './secp256k1.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nexport enum KeyDerivationScheme {\n  /**\n   * Key derivation using the `dataFormat` value for Flat-space records.\n   */\n  DataFormats = 'dataFormats',\n  ProtocolContext = 'protocolContext',\n  ProtocolPath = 'protocolPath',\n\n  /**\n   * Key derivation using the `schema` value for Flat-space records.\n   */\n  Schemas = 'schemas'\n}\n\nexport type DerivedPrivateJwk = {\n  rootKeyId: string,\n  derivationScheme: KeyDerivationScheme;\n  derivationPath?: string[];\n  derivedPrivateKey: PrivateJwk,\n};\n\n/**\n * Class containing hierarchical deterministic key related utility methods used by the DWN.\n */\nexport class HdKey {\n  /**\n   * Derives a descendant private key.\n   * NOTE: currently only supports SECP256K1 keys.\n   */\n  public static async derivePrivateKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<DerivedPrivateJwk> {\n    const ancestorPrivateKey = Secp256k1.privateJwkToBytes(ancestorKey.derivedPrivateKey);\n    const ancestorPrivateKeyDerivationPath = ancestorKey.derivationPath ?? [];\n    const derivedPrivateKeyBytes = await HdKey.derivePrivateKeyBytes(ancestorPrivateKey, subDerivationPath);\n    const derivedPrivateJwk = await Secp256k1.privateKeyToJwk(derivedPrivateKeyBytes);\n    const derivedDescendantPrivateKey: DerivedPrivateJwk = {\n      rootKeyId         : ancestorKey.rootKeyId,\n      derivationScheme  : ancestorKey.derivationScheme,\n      derivationPath    : [...ancestorPrivateKeyDerivationPath, ...subDerivationPath],\n      derivedPrivateKey : derivedPrivateJwk\n    };\n\n    return derivedDescendantPrivateKey;\n  }\n\n  /**\n   * Derives a descendant public key from an ancestor private key.\n   * NOTE: currently only supports SECP256K1 keys.\n   */\n  public static async derivePublicKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<PublicJwk> {\n    const derivedDescendantPrivateKey = await HdKey.derivePrivateKey(ancestorKey, subDerivationPath);\n    const derivedDescendantPublicKey = await Secp256k1.getPublicJwk(derivedDescendantPrivateKey.derivedPrivateKey);\n\n    return derivedDescendantPublicKey;\n  }\n\n  /**\n   * Derives a hardened hierarchical deterministic private key.\n   */\n  public static async derivePrivateKeyBytes(privateKey: Uint8Array, relativePath: string[]): Promise<Uint8Array> {\n    HdKey.validateKeyDerivationPath(relativePath);\n\n    let currentPrivateKey = privateKey;\n    for (const segment of relativePath) {\n      const segmentBytes = Encoder.stringToBytes(segment);\n      currentPrivateKey = await HdKey.deriveKeyUsingHkdf({\n        hashAlgorithm      : 'SHA-256',\n        initialKeyMaterial : currentPrivateKey,\n        info               : segmentBytes, // use the segment as the application specific info for key derivation\n        keyLengthInBytes   : 32 // 32 bytes = 256 bits\n      });\n    }\n\n    return currentPrivateKey;\n  }\n\n  /**\n   * Derives a key using  HMAC-based Extract-and-Expand Key Derivation Function (HKDF) as defined in RFC 5869.\n   * TODO: Consolidate HKDF implementation and usage with web5-js - https://github.com/TBD54566975/dwn-sdk-js/issues/742\n   */\n  public static async deriveKeyUsingHkdf(params: {\n    hashAlgorithm: 'SHA-256' | 'SHA-384' | 'SHA-512',\n    initialKeyMaterial: Uint8Array,\n    info: Uint8Array,\n    keyLengthInBytes: number\n  }): Promise<Uint8Array> {\n    const { hashAlgorithm, initialKeyMaterial, info, keyLengthInBytes } = params;\n\n    const webCrypto = getWebcryptoSubtle() as SubtleCrypto;\n\n    // Import the `initialKeyMaterial` into the Web Crypto API to use for the key derivation operation.\n    const webCryptoKey = await webCrypto.importKey('raw', initialKeyMaterial, { name: 'HKDF' }, false, ['deriveBits']);\n\n    // Derive the bytes using the Web Crypto API.\n    const derivedKeyBuffer = await crypto.subtle.deriveBits(\n      {\n        name : 'HKDF',\n        hash : hashAlgorithm,\n        salt : new Uint8Array(0), // `info` should be sufficient in our use case\n        info\n      },\n      webCryptoKey,\n      keyLengthInBytes * 8 // convert from bytes to bits\n    );\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const derivedKeyBytes = new Uint8Array(derivedKeyBuffer);\n    return derivedKeyBytes;\n  }\n\n  /**\n   * Validates that no empty strings exist within the derivation path segments array.\n   * @throws {DwnError} with `DwnErrorCode.HdKeyDerivationPathInvalid` if derivation path fails validation.\n   */\n  private static validateKeyDerivationPath(pathSegments: string[]): void {\n    if (pathSegments.includes('')) {\n      throw new DwnError(DwnErrorCode.HdKeyDerivationPathInvalid, `Invalid key derivation path: ${pathSegments}`);\n    }\n  }\n}", "/**\n * Compares two string given in lexicographical order.\n * @returns 1 if `a` is larger than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same message)\n */\nexport function lexicographicalCompare(a: string, b: string): number {\n  if (a > b) {\n    return 1;\n  } else if (a < b) {\n    return -1;\n  } else {\n    return 0;\n  }\n}\n", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof(obj) !== 'object') {\n    return false;\n  }\n\n  for (const _ in obj) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}\n", "import type { DataEncodedRecordsWriteMessage } from '../types/records-types.js';\nimport type { GeneralJws } from '../types/jws-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AuthorizationModel, Descriptor, GenericMessage, GenericSignaturePayload } from '../types/message-types.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { GeneralJwsBuilder } from '../jose/jws/general/builder.js';\nimport { Jws } from '../utils/jws.js';\nimport { lexicographicalCompare } from '../utils/string.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { validateJsonSchema } from '../schema-validator.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\n/**\n * A class containing utility methods for working with DWN messages.\n */\nexport class Message {\n\n  /**\n   * Gets the DID of the author of the given message.\n   */\n  public static getAuthor(message: GenericMessage): string | undefined {\n    if (message.authorization === undefined) {\n      return undefined;\n    }\n\n    let author;\n    if (message.authorization.authorDelegatedGrant !== undefined) {\n      author = Message.getSigner(message.authorization.authorDelegatedGrant);\n    } else {\n      author = Message.getSigner(message);\n    }\n\n    return author;\n  }\n\n  /**\n   * Validates the given message against the corresponding JSON schema.\n   * @throws {Error} if fails validation.\n   */\n  public static validateJsonSchema(rawMessage: any): void {\n    const dwnInterface = rawMessage.descriptor.interface;\n    const dwnMethod = rawMessage.descriptor.method;\n    const schemaLookupKey = dwnInterface + dwnMethod;\n\n    // throws an error if message is invalid\n    validateJsonSchema(schemaLookupKey, rawMessage);\n  };\n\n  /**\n   * Gets the DID of the signer of the given message, returns `undefined` if message is not signed.\n   */\n  public static getSigner(message: GenericMessage): string | undefined {\n    if (message.authorization === undefined) {\n      return undefined;\n    }\n\n    const signer = Jws.getSignerDid(message.authorization.signature.signatures[0]);\n    return signer;\n  }\n\n  /**\n   * Gets the CID of the given message.\n   */\n  public static async getCid(message: GenericMessage): Promise<string> {\n    // NOTE: we wrap the `computeCid()` here in case that\n    // the message will contain properties that should not be part of the CID computation\n    // and we need to strip them out (like `encodedData` that we historically had for a long time),\n    // but we can remove this method entirely if the code becomes stable and it is apparent that the wrapper is not needed\n\n    // ^--- seems like we might need to keep this around for now.\n    const rawMessage = { ...message } as any;\n    if (rawMessage.encodedData) {\n      delete rawMessage.encodedData;\n    }\n\n    const cid = await Cid.computeCid(rawMessage as GenericMessage);\n    return cid;\n  }\n\n  /**\n   * Compares message CID in lexicographical order according to the spec.\n   * @returns 1 if `a` is larger than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same message)\n   */\n  public static async compareCid(a: GenericMessage, b: GenericMessage): Promise<number> {\n    // the < and > operators compare strings in lexicographical order\n    const cidA = await Message.getCid(a);\n    const cidB = await Message.getCid(b);\n    return lexicographicalCompare(cidA, cidB);\n  }\n\n  /**\n   * Creates the `authorization` property to be included in a DWN message.\n   * @param signer Message signer.\n   * @returns {AuthorizationModel} used as an `authorization` property.\n   */\n  public static async createAuthorization(input: {\n    descriptor: Descriptor,\n    signer: Signer,\n    delegatedGrant?: DataEncodedRecordsWriteMessage,\n    permissionGrantId?: string,\n    protocolRole?: string\n  }): Promise<AuthorizationModel> {\n    const { descriptor, signer, delegatedGrant, permissionGrantId, protocolRole } = input;\n\n    let delegatedGrantId;\n    if (delegatedGrant !== undefined) {\n      delegatedGrantId = await Message.getCid(delegatedGrant);\n    }\n\n    const signature = await Message.createSignature(descriptor, signer, { delegatedGrantId, permissionGrantId, protocolRole });\n\n    const authorization: AuthorizationModel = {\n      signature\n    };\n\n    if (delegatedGrant !== undefined) {\n      authorization.authorDelegatedGrant = delegatedGrant;\n    }\n\n    return authorization;\n  }\n\n  /**\n   * Creates a generic signature from the given DWN message descriptor by including `descriptorCid` as the required property in the signature payload.\n   * NOTE: there is an opportunity to consolidate RecordsWrite.createSignerSignature() wth this method\n   */\n  public static async createSignature(\n    descriptor: Descriptor,\n    signer: Signer,\n    additionalPayloadProperties?: { delegatedGrantId?: string, permissionGrantId?: string, protocolRole?: string }\n  ): Promise<GeneralJws> {\n    const descriptorCid = await Cid.computeCid(descriptor);\n\n    const signaturePayload: GenericSignaturePayload = { descriptorCid, ...additionalPayloadProperties };\n    removeUndefinedProperties(signaturePayload);\n\n    const signaturePayloadBytes = Encoder.objectToBytes(signaturePayload);\n\n    const builder = await GeneralJwsBuilder.create(signaturePayloadBytes, [signer]);\n    const signature = builder.getJws();\n\n    return signature;\n  }\n\n  /**\n   * @returns newest message in the array. `undefined` if given array is empty.\n   */\n  public static async getNewestMessage(messages: GenericMessage[]): Promise<GenericMessage | undefined> {\n    let currentNewestMessage: GenericMessage | undefined = undefined;\n    for (const message of messages) {\n      if (currentNewestMessage === undefined || await Message.isNewer(message, currentNewestMessage)) {\n        currentNewestMessage = message;\n      }\n    }\n\n    return currentNewestMessage;\n  }\n\n  /**\n   * @returns oldest message in the array. `undefined` if given array is empty.\n   */\n  public static async getOldestMessage(messages: GenericMessage[]): Promise<GenericMessage | undefined> {\n    let currentOldestMessage: GenericMessage | undefined = undefined;\n    for (const message of messages) {\n      if (currentOldestMessage === undefined || await Message.isOlder(message, currentOldestMessage)) {\n        currentOldestMessage = message;\n      }\n    }\n\n    return currentOldestMessage;\n  }\n\n  /**\n   * Checks if first message is newer than second message.\n   * @returns `true` if `a` is newer than `b`; `false` otherwise\n   */\n  public static async isNewer(a: GenericMessage, b: GenericMessage): Promise<boolean> {\n    const aIsNewer = (await Message.compareMessageTimestamp(a, b) > 0);\n    return aIsNewer;\n  }\n\n  /**\n   * Checks if first message is older than second message.\n   * @returns `true` if `a` is older than `b`; `false` otherwise\n   */\n  public static async isOlder(a: GenericMessage, b: GenericMessage): Promise<boolean> {\n    const aIsOlder = (await Message.compareMessageTimestamp(a, b) < 0);\n    return aIsOlder;\n  }\n\n  /**\n   * See if the given message is signed by an author-delegate.\n   */\n  public static isSignedByAuthorDelegate(message: GenericMessage): boolean {\n    return message.authorization?.authorDelegatedGrant !== undefined;\n  }\n\n  /**\n   * See if the given message is signed by an owner-delegate.\n   */\n  public static isSignedByOwnerDelegate(message: GenericMessage): boolean {\n    return message.authorization?.ownerDelegatedGrant !== undefined;\n  }\n\n  /**\n   * Compares the `messageTimestamp` of the given messages with a fallback to message CID according to the spec.\n   * @returns 1 if `a` is larger/newer than `b`; -1 if `a` is smaller/older than `b`; 0 otherwise (same age)\n   */\n  public static async compareMessageTimestamp(a: GenericMessage, b: GenericMessage): Promise<number> {\n    if (a.descriptor.messageTimestamp > b.descriptor.messageTimestamp) {\n      return 1;\n    } else if (a.descriptor.messageTimestamp < b.descriptor.messageTimestamp) {\n      return -1;\n    }\n\n    // else `messageTimestamp` is the same between a and b\n    // compare the `dataCid` instead, the < and > operators compare strings in lexicographical order\n    return Message.compareCid(a, b);\n  }\n\n  /**\n   * Validates the structural integrity of the message signature given:\n   * 1. The message signature must contain exactly 1 signature\n   * 2. Passes JSON schema validation\n   * 3. The `descriptorCid` property matches the CID of the message descriptor\n   * NOTE: signature is NOT verified.\n   * @param payloadJsonSchemaKey The key to look up the JSON schema referenced in `compile-validators.js` and perform payload schema validation on.\n   * @returns the parsed JSON payload object if validation succeeds.\n   */\n  public static async validateSignatureStructure(\n    messageSignature: GeneralJws,\n    messageDescriptor: Descriptor,\n    payloadJsonSchemaKey: string = 'GenericSignaturePayload',\n  ): Promise<GenericSignaturePayload> {\n\n    if (messageSignature.signatures.length !== 1) {\n      throw new DwnError(DwnErrorCode.AuthenticationMoreThanOneSignatureNotSupported, 'expected no more than 1 signature for authorization purpose');\n    }\n\n    // validate payload integrity\n    const payloadJson = Jws.decodePlainObjectPayload(messageSignature);\n\n    validateJsonSchema(payloadJsonSchemaKey, payloadJson);\n\n    // `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message\n    const { descriptorCid } = payloadJson;\n    const expectedDescriptorCid = await Cid.computeCid(messageDescriptor);\n    if (descriptorCid !== expectedDescriptorCid) {\n      throw new DwnError(\n        DwnErrorCode.AuthenticateDescriptorCidMismatch,\n        `provided descriptorCid ${descriptorCid} does not match expected CID ${expectedDescriptorCid}`\n      );\n    }\n\n    return payloadJson;\n  }\n}", "import type { DataEncodedRecordsWriteMessage } from '../types/records-types.js';\nimport type { PermissionConditions, PermissionGrantData, PermissionScope } from '../types/permission-types.js';\n\nimport { Encoder } from '../utils/encoder.js';\nimport { Message } from '../core/message.js';\n\n\n/**\n * A class representing a Permission Grant for a more convenient abstraction.\n */\nexport class PermissionGrant {\n\n  /**\n   * The ID of the permission grant, which is the record ID DWN message.\n   */\n  public readonly id: string;\n\n  /**\n   * The grantor of the permission.\n   */\n  public readonly grantor: string;\n\n  /**\n   * The grantee of the permission.\n   */\n  public readonly grantee: string;\n\n  /**\n   * The date at which the grant was given.\n   */\n  public readonly dateGranted: string;\n\n  /**\n   * Optional string that communicates what the grant would be used for\n   */\n  public readonly description?: string;\n\n  /**\n   * Optional CID of a permission request. This is optional because grants may be given without being officially requested\n   */\n  public readonly requestId?: string;\n\n  /**\n   * Timestamp at which this grant will no longer be active.\n   */\n  public readonly dateExpires: string;\n\n  /**\n   * Whether this grant is delegated or not. If `true`, the `grantedTo` will be able to act as the `grantedTo` within the scope of this grant.\n   */\n  public readonly delegated?: boolean;\n\n  /**\n   * The scope of the allowed access.\n   */\n  public readonly scope: PermissionScope;\n\n  /**\n   * Optional conditions that must be met when the grant is used.\n   */\n  public readonly conditions?: PermissionConditions;\n\n  public static async parse(message: DataEncodedRecordsWriteMessage): Promise<PermissionGrant> {\n    const permissionGrant = new PermissionGrant(message);\n    return permissionGrant;\n  }\n\n  private constructor(message: DataEncodedRecordsWriteMessage) {\n    // properties derived from the generic DWN message properties\n    this.id = message.recordId;\n    this.grantor = Message.getSigner(message)!;\n    this.grantee = message.descriptor.recipient!;\n    this.dateGranted = message.descriptor.dateCreated;\n\n    // properties from the data payload itself.\n    const permissionGrantEncoded = message.encodedData;\n    const permissionGrant = Encoder.base64UrlToObject(permissionGrantEncoded) as PermissionGrantData;\n    this.dateExpires = permissionGrant.dateExpires;\n    this.delegated = permissionGrant.delegated;\n    this.description = permissionGrant.description;\n    this.requestId = permissionGrant.requestId;\n    this.scope = permissionGrant.scope;\n    this.conditions = permissionGrant.conditions;\n  }\n}\n\n", "import type { EncryptionAlgorithm } from '../utils/encryption.js';\nimport type { GeneralJws } from './jws-types.js';\nimport type { KeyDerivationScheme } from '../utils/hd-key.js';\nimport type { PublicJwk } from './jose-types.js';\nimport type { Readable } from 'readable-stream';\nimport type { AuthorizationModel, GenericMessage, GenericMessageReply, GenericSignaturePayload, MessageSubscription, Pagination } from './message-types.js';\nimport type { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport type { PaginationCursor, RangeCriterion, RangeFilter, StartsWithFilter } from './query-types.js';\n\nexport enum DateSort {\n  CreatedAscending = 'createdAscending',\n  CreatedDescending = 'createdDescending',\n  PublishedAscending = 'publishedAscending',\n  PublishedDescending = 'publishedDescending'\n}\n\nexport type RecordsWriteTagValue = string | number | boolean | string[] | number[];\nexport type RecordsWriteTags = {\n  [property: string]: RecordsWriteTagValue;\n};\n\nexport type RecordsWriteTagsFilter = StartsWithFilter | RangeFilter | string | number | boolean;\n\nexport type RecordsWriteDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Write;\n  protocol?: string;\n  protocolPath?: string;\n  recipient?: string;\n  schema?: string;\n  tags?: RecordsWriteTags;\n  parentId?: string;\n  dataCid: string;\n  dataSize: number;\n  dateCreated: string;\n  messageTimestamp: string;\n  published?: boolean;\n  datePublished?: string;\n  dataFormat: string;\n};\n\nexport type RecordsWriteMessageOptions = {\n  dataStream?: Readable;\n};\n\n/**\n * Internal RecordsWrite message representation that can be in an incomplete state.\n */\nexport type InternalRecordsWriteMessage = GenericMessage & {\n  recordId?: string,\n  contextId?: string;\n  descriptor: RecordsWriteDescriptor;\n  attestation?: GeneralJws;\n  encryption?: EncryptionProperty;\n};\n\nexport type RecordsWriteMessage = {\n  authorization: AuthorizationModel; // overriding `GenericMessage` with `authorization` being required\n  recordId: string,\n  contextId?: string;\n  descriptor: RecordsWriteDescriptor;\n  attestation?: GeneralJws;\n  encryption?: EncryptionProperty;\n};\n\nexport type EncryptionProperty = {\n  algorithm: EncryptionAlgorithm;\n  initializationVector: string;\n  keyEncryption: EncryptedKey[]\n};\n\nexport type EncryptedKey = {\n  /**\n   * The fully qualified key ID (e.g. did:example:abc#encryption-key-id) of the root public key used to encrypt the symmetric encryption key.\n   */\n  rootKeyId: string;\n\n  /**\n   * The actual derived public key.\n   */\n  derivedPublicKey?: PublicJwk;\n  derivationScheme: KeyDerivationScheme;\n  algorithm: EncryptionAlgorithm;\n  initializationVector: string;\n  ephemeralPublicKey: PublicJwk;\n  messageAuthenticationCode: string;\n  encryptedKey: string;\n};\n\n/**\n * Data structure returned in a `RecordsQuery` reply entry.\n * NOTE: the message structure is a modified version of the message received, the most notable differences are:\n * 1. May include an initial RecordsWrite message\n * 2. May include encoded data\n */\nexport type RecordsQueryReplyEntry = RecordsWriteMessage & {\n  /**\n   * The initial write of the record if the returned RecordsWrite message itself is not the initial write.\n   */\n  initialWrite?: RecordsWriteMessage;\n\n  /**\n   * The encoded data of the record if the data associated with the record is equal or smaller than `DwnConstant.maxDataSizeAllowedToBeEncoded`.\n   */\n  encodedData?: string;\n};\n\n/**\n * Represents a RecordsWrite message with encoded data attached.\n */\nexport type DataEncodedRecordsWriteMessage = RecordsWriteMessage & {\n  /**\n   * The encoded data of the record if the data associated with the record is equal or smaller than `DwnConstant.maxDataSizeAllowedToBeEncoded`.\n   */\n  encodedData: string;\n};\n\nexport type RecordsQueryDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Query;\n  messageTimestamp: string;\n  filter: RecordsFilter;\n  dateSort?: DateSort;\n  pagination?: Pagination;\n};\n\nexport type RecordsSubscribeDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Subscribe;\n  messageTimestamp: string;\n  filter: RecordsFilter;\n};\n\nexport type RecordsFilter = {\n  /**\n   * The logical author of the record\n   */\n  author?: string | string[];\n  attester?: string;\n  recipient?: string | string[];\n  protocol?: string;\n  protocolPath?: string;\n  published?: boolean;\n\n  /**\n   * When given all Records message under the context of the given `contextId` will be returned.\n   */\n  contextId?: string;\n  schema?: string;\n  tags?: { [property:string]: RecordsWriteTagsFilter }\n  recordId?: string;\n  parentId?: string;\n  dataFormat?: string;\n  dataSize?: RangeFilter;\n  dataCid?: string;\n  dateCreated?: RangeCriterion;\n  datePublished?: RangeCriterion;\n  dateUpdated?: RangeCriterion;\n};\n\nexport type RecordsWriteAttestationPayload = {\n  descriptorCid: string;\n};\n\nexport type RecordsWriteSignaturePayload = GenericSignaturePayload & {\n  recordId: string;\n  contextId?: string;\n  attestationCid?: string;\n  encryptionCid?: string;\n};\n\nexport type RecordsQueryMessage = GenericMessage & {\n  descriptor: RecordsQueryDescriptor;\n};\n\nexport type RecordsQueryReply = GenericMessageReply & {\n  entries?: RecordsQueryReplyEntry[];\n  cursor?: PaginationCursor;\n};\n\nexport type RecordEvent = {\n  message: RecordsWriteMessage | RecordsDeleteMessage\n  initialWrite?: RecordsWriteMessage;\n};\n\nexport type RecordSubscriptionHandler = (event: RecordEvent) => void;\n\nexport type RecordsSubscribeMessageOptions = {\n  subscriptionHandler: RecordSubscriptionHandler;\n};\n\nexport type RecordsSubscribeMessage = GenericMessage & {\n  descriptor: RecordsSubscribeDescriptor;\n};\n\nexport type RecordsSubscribeReply = GenericMessageReply & {\n  subscription?: MessageSubscription;\n};\n\nexport type RecordsReadMessage = {\n  authorization?: AuthorizationModel;\n  descriptor: RecordsReadDescriptor;\n};\n\n/**\n * The reply to a RecordsRead message.\n */\nexport type RecordsReadReply = GenericMessageReply & {\n  /**\n   * A container for the data returned from a `RecordsRead`.\n   * `undefined` if no data needs to be returned.\n   */\n  entry?: RecordsReadReplyEntry;\n};\n\n/**\n * The structure of the `entry` container property in `RecordsReadReplyEntry`.\n */\nexport type RecordsReadReplyEntry = {\n  /**\n   * The latest RecordsWrite message of the record if record exists (not deleted).\n   */\n  recordsWrite?: RecordsWriteMessage;\n\n  /**\n   * The RecordsDelete if the record is deleted.\n   */\n  recordsDelete?: RecordsDeleteMessage;\n\n  /**\n   * The initial write of the record if the returned RecordsWrite message itself is not the initial write or if a RecordsDelete is returned.\n   */\n  initialWrite?: RecordsWriteMessage;\n\n  /**\n   * The data stream associated with the record if the records exists (not deleted).\n   */\n  data?: Readable;\n};\n\nexport type RecordsReadDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Read;\n  filter: RecordsFilter;\n  messageTimestamp: string;\n};\n\nexport type RecordsDeleteMessage = GenericMessage & {\n  authorization: AuthorizationModel; // overriding `GenericMessage` with `authorization` being required\n  descriptor: RecordsDeleteDescriptor;\n};\n\nexport type RecordsDeleteDescriptor = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Delete;\n  messageTimestamp: string;\n  recordId: string;\n\n  /**\n   * Denotes if all the descendent records should be purged.\n   */\n  prune: boolean\n};", "import type { EqualFilter, Filter, FilterValue, KeyValues, OneOfFilter, RangeCriterion, RangeFilter, RangeValue } from '../types/query-types.js';\n\n/**\n * A Utility class to help match indexes against filters.\n */\nexport class FilterUtility {\n  /**\n   * Matches the given key values against an array of filters, if any of the filters match, returns true.\n   *\n   * @returns true if any of the filters match.\n   */\n  static matchAnyFilter(keyValues: KeyValues, orFilters: Filter[]): boolean {\n    if (orFilters.length === 0) {\n      return true;\n    }\n\n    for (const filter of orFilters) {\n      // if any of the filters match the indexed values, we return true as it's a match\n      if (this.matchFilter(keyValues, filter)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Evaluates the given filter against the indexed values.\n   *\n   * @param indexedValues the indexed values for an item.\n   * @param filter\n   * @returns true if all of the filter properties match.\n   */\n  public static matchFilter(indexedValues: KeyValues, filter: Filter): boolean {\n\n    // we loop through each of the filter properties to check against the indexed values.\n    // if any of them do not match we return false.\n    for (const filterProperty in filter) {\n      const filterValue = filter[filterProperty];\n      const indexValue = indexedValues[filterProperty];\n      if (indexValue === undefined) {\n        return false;\n      }\n\n      const matched = Array.isArray(indexValue) ?\n        this.matchAnyIndexValue(filterValue, indexValue) :\n        this.matchIndexValue(filterValue, indexValue);\n\n      if (!matched) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Returns true if any of the index values match the filter.\n   *\n   * @param filterValue the filter for a particular property.\n   * @param indexValues an array of values to match the filter against.\n   */\n  private static matchAnyIndexValue(filterValue: FilterValue, indexValues: string[] | number[] | boolean[]): boolean {\n    for (const indexValue of indexValues) {\n      if (this.matchIndexValue(filterValue, indexValue)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Returns true if the filter matches the given index value.\n   *\n   * @param filterValue the filter for a particular property.\n   * @param indexValue a single value to match the filter against.\n   */\n  private static matchIndexValue(filterValue: FilterValue, indexValue: string | number | boolean) : boolean {\n    if (typeof filterValue === 'object') {\n      if (Array.isArray(filterValue)) {\n        // if `filterValue` is an array, it is a OneOfFilter\n        // Support OR matches by querying for each values separately,\n        if (this.matchOneOf(filterValue, indexValue)) {\n          return true;\n        }\n      } else {\n        // `filterValue` is a `RangeFilter`\n        // range filters cannot range over booleans\n        if (this.matchRange(filterValue, indexValue as RangeValue)) {\n          return true;\n        }\n      }\n    } else {\n      // filterValue is an EqualFilter, meaning it is a non-object primitive type\n      if (indexValue === filterValue) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Evaluates a OneOfFilter given an indexedValue extracted from the index.\n   *\n   * @param filter An array of EqualFilters. Treated as an OR.\n   * @param indexedValue the indexed value being compared.\n   * @returns true if any of the given filters match the indexedValue\n   */\n  private static matchOneOf(filter: OneOfFilter, indexedValue: string | number | boolean): boolean {\n    for (const orFilterValue of filter) {\n      if (indexedValue === orFilterValue) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Evaluates if the given indexedValue is within the range given by the RangeFilter.\n   *\n   * @returns true if all of the range filter conditions are met.\n   */\n  private static matchRange(rangeFilter: RangeFilter, indexedValue: string | number): boolean {\n    if (rangeFilter.lt !== undefined && indexedValue >= rangeFilter.lt) {\n      return false;\n    }\n    if (rangeFilter.lte !== undefined && indexedValue > rangeFilter.lte) {\n      return false;\n    }\n    if (rangeFilter.gt !== undefined && indexedValue <= rangeFilter.gt) {\n      return false;\n    }\n    if (rangeFilter.gte !== undefined && indexedValue < rangeFilter.gte) {\n      return false;\n    }\n    return true;\n  }\n\n  static isEqualFilter(filter: FilterValue): filter is EqualFilter {\n    if (typeof filter !== 'object') {\n      return true;\n    }\n    return false;\n  }\n\n  static isRangeFilter(filter: FilterValue): filter is RangeFilter {\n    if (typeof filter === 'object' && !Array.isArray(filter)) {\n      return 'gt' in filter || 'lt' in filter || 'lte' in filter || 'gte' in filter;\n    };\n    return false;\n  }\n\n  static isOneOfFilter(filter: FilterValue): filter is OneOfFilter {\n    if (typeof filter === 'object' && Array.isArray(filter)) {\n      return true;\n    };\n    return false;\n  }\n\n  static convertRangeCriterion(inputFilter: RangeCriterion): RangeFilter | undefined {\n    let rangeFilter: RangeFilter | undefined;\n    if (inputFilter.to !== undefined && inputFilter.from !== undefined) {\n      rangeFilter = {\n        gte : inputFilter.from,\n        lt  : inputFilter.to,\n      };\n    } else if (inputFilter.to !== undefined) {\n      rangeFilter = {\n        lt: inputFilter.to,\n      };\n    } else if (inputFilter.from !== undefined) {\n      rangeFilter = {\n        gte: inputFilter.from,\n      };\n    }\n    return rangeFilter;\n  }\n\n  static constructPrefixFilterAsRangeFilter(prefix: string): RangeFilter {\n    return {\n      gte : prefix,\n      lt  : prefix + '\\uffff',\n    };\n  }\n\n}\n\nexport class FilterSelector {\n\n  /**\n   * Reduce Filter so that it is a filter that can be quickly executed against the DB.\n   */\n  static reduceFilter(filter: Filter): Filter {\n    // if there is only one or no property, we have no way to reduce it further\n    const filterProperties = Object.keys(filter);\n    if (filterProperties.length <= 1) {\n      return filter;\n    }\n\n    // else there is are least 2 filter properties, since zero property is not allowed\n\n    const { recordId, attester, parentId, recipient, contextId, author, protocolPath, schema, protocol, ...remainingProperties } = filter;\n\n    if (recordId !== undefined) {\n      return { recordId };\n    }\n\n    if (attester !== undefined) {\n      return { attester };\n    }\n\n    if (parentId !== undefined) {\n      return { parentId };\n    }\n\n    if (recipient !== undefined) {\n      return { recipient };\n    }\n\n    if (contextId !== undefined) {\n      return { contextId };\n    }\n\n    if (protocolPath !== undefined) {\n      return { protocolPath };\n    }\n\n    if (schema !== undefined) {\n      return { schema };\n    }\n\n    if (protocol !== undefined) {\n      return { protocol };\n    }\n\n    // else just return whatever property, we can optimize further later\n    const remainingPropertyNames = Object.keys(remainingProperties);\n    const firstRemainingProperty = remainingPropertyNames[0];\n    const singlePropertyFilter: Filter = {};\n    singlePropertyFilter[firstRemainingProperty] = filter[firstRemainingProperty];\n    return singlePropertyFilter;\n  }\n}", "export enum DwnInterfaceName {\n  Messages = 'Messages',\n  Protocols = 'Protocols',\n  Records = 'Records'\n}\n\nexport enum DwnMethodName {\n  Configure = 'Configure',\n  Query = 'Query',\n  Read = 'Read',\n  Write = 'Write',\n  Delete = 'Delete',\n  Subscribe = 'Subscribe'\n}\n", "import { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nexport function validateProtocolUrlNormalized(url: string): void {\n  let normalized: string | undefined;\n  try {\n    normalized = normalizeProtocolUrl(url);\n  } catch {\n    normalized = undefined;\n  }\n\n  if (url !== normalized) {\n    throw new DwnError(DwnErrorCode.UrlProtocolNotNormalized, `Protocol URI ${url} must be normalized.`);\n  }\n}\n\nexport function normalizeProtocolUrl(url: string): string {\n  // Keeping protocol normalization as a separate function in case\n  // protocol and schema normalization diverge in the future\n  return normalizeUrl(url);\n}\n\nexport function validateSchemaUrlNormalized(url: string): void {\n  let normalized: string | undefined;\n  try {\n    normalized = normalizeSchemaUrl(url);\n  } catch {\n    normalized = undefined;\n  }\n\n  if (url !== normalized) {\n    throw new DwnError(DwnErrorCode.UrlSchemaNotNormalized, `Schema URI ${url} must be normalized.`);\n  }\n}\n\nexport function normalizeSchemaUrl(url: string): string {\n  // Keeping schema normalization as a separate function in case\n  // protocol and schema normalization diverge in the future\n  return normalizeUrl(url);\n}\n\nfunction normalizeUrl(url: string): string {\n  let fullUrl: string;\n  if (/^[^:]+:(\\/{2})?[^\\/].*/.test(url)) {\n    fullUrl = url;\n  } else {\n    fullUrl = `http://${url}`;\n  }\n\n  try {\n    const result = new URL(fullUrl);\n    result.search = '';\n    result.hash = '';\n    return removeTrailingSlash(result.href);\n  } catch (e) {\n    throw new DwnError(DwnErrorCode.UrlProtocolNotNormalizable, 'Could not normalize protocol URI');\n  }\n}\n\nfunction removeTrailingSlash(str: string): string {\n  if (str.endsWith('/')) {\n    return str.slice(0, -1);\n  } else {\n    return str;\n  }\n}\n", "import type { DerivedPrivateJwk } from './hd-key.js';\nimport type { Readable } from 'readable-stream';\nimport type { Filter, KeyValues, StartsWithFilter } from '../types/query-types.js';\nimport type { GenericMessage, GenericSignaturePayload } from '../types/message-types.js';\nimport type { RecordsDeleteMessage, RecordsFilter, RecordsQueryMessage, RecordsReadMessage, RecordsSubscribeMessage, RecordsWriteDescriptor, RecordsWriteMessage, RecordsWriteTags, RecordsWriteTagsFilter } from '../types/records-types.js';\n\nimport { DateSort } from '../types/records-types.js';\nimport { Encoder } from './encoder.js';\nimport { Encryption } from './encryption.js';\nimport { FilterUtility } from './filter.js';\nimport { Jws } from './jws.js';\nimport { Message } from '../core/message.js';\nimport { PermissionGrant } from '../protocols/permission-grant.js';\nimport { removeUndefinedProperties } from './object.js';\nimport { Secp256k1 } from './secp256k1.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { HdKey, KeyDerivationScheme } from './hd-key.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl } from './url.js';\n\n/**\n * Class containing useful utilities related to the Records interface.\n */\nexport class Records {\n\n  /**\n   * Checks if the given message is a `RecordsWriteMessage`.\n   */\n  public static isRecordsWrite(message: GenericMessage): message is RecordsWriteMessage {\n    const isRecordsWrite =\n      message.descriptor.interface === DwnInterfaceName.Records &&\n      message.descriptor.method === DwnMethodName.Write;\n\n    return isRecordsWrite;\n  }\n\n  /**\n   * Decrypts the encrypted data in a message reply using the given ancestor private key.\n   * @param ancestorPrivateKey Any ancestor private key in the key derivation path.\n   */\n  public static async decrypt(\n    recordsWrite: RecordsWriteMessage,\n    ancestorPrivateKey: DerivedPrivateJwk,\n    cipherStream: Readable\n  ): Promise<Readable> {\n    const { encryption } = recordsWrite;\n\n    // look for an encrypted symmetric key that is encrypted by the public key corresponding to the given private key\n    const matchingEncryptedKey = encryption!.keyEncryption.find(key =>\n      key.rootKeyId === ancestorPrivateKey.rootKeyId &&\n      key.derivationScheme === ancestorPrivateKey.derivationScheme\n    );\n    if (matchingEncryptedKey === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsDecryptNoMatchingKeyEncryptedFound,\n        `Unable to find a symmetric key encrypted using key \\\n        with ID '${ancestorPrivateKey.rootKeyId}' and '${ancestorPrivateKey.derivationScheme}' derivation scheme.`\n      );\n    }\n\n    const fullDerivationPath = Records.constructKeyDerivationPath(matchingEncryptedKey.derivationScheme, recordsWrite);\n\n    // NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n    // so we will assume that's the algorithm without additional switch/if statements\n    const leafPrivateKey = await Records.derivePrivateKey(ancestorPrivateKey, fullDerivationPath);\n    const encryptedKeyBytes = Encoder.base64UrlToBytes(matchingEncryptedKey.encryptedKey);\n    const ephemeralPublicKey = Secp256k1.publicJwkToBytes(matchingEncryptedKey.ephemeralPublicKey);\n    const keyEncryptionInitializationVector = Encoder.base64UrlToBytes(matchingEncryptedKey.initializationVector);\n    const messageAuthenticationCode = Encoder.base64UrlToBytes(matchingEncryptedKey.messageAuthenticationCode);\n    const dataEncryptionKey = await Encryption.eciesSecp256k1Decrypt({\n      ciphertext           : encryptedKeyBytes,\n      ephemeralPublicKey,\n      initializationVector : keyEncryptionInitializationVector,\n      messageAuthenticationCode,\n      privateKey           : leafPrivateKey\n    });\n\n\n    // NOTE: right now only `A256CTR` algorithm is supported for symmetric encryption,\n    // so we will assume that's the algorithm without additional switch/if statements\n    const dataEncryptionInitializationVector = Encoder.base64UrlToBytes(encryption!.initializationVector);\n    const plaintextStream = await Encryption.aes256CtrDecrypt(dataEncryptionKey, dataEncryptionInitializationVector, cipherStream);\n\n    return plaintextStream;\n  }\n\n  /**\n   * Constructs full key derivation path using the specified scheme.\n   */\n  public static constructKeyDerivationPath(\n    keyDerivationScheme: KeyDerivationScheme,\n    recordsWriteMessage: RecordsWriteMessage\n  ): string[] {\n\n    const descriptor = recordsWriteMessage.descriptor;\n    const contextId = recordsWriteMessage.contextId;\n\n    let fullDerivationPath;\n    if (keyDerivationScheme === KeyDerivationScheme.DataFormats) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingDataFormatsScheme(descriptor.schema, descriptor.dataFormat);\n    } else if (keyDerivationScheme === KeyDerivationScheme.ProtocolPath) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolPathScheme(descriptor);\n    } else if (keyDerivationScheme === KeyDerivationScheme.ProtocolContext) {\n      fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolContextScheme(contextId);\n    } else {\n      // `schemas` scheme\n      fullDerivationPath = Records.constructKeyDerivationPathUsingSchemasScheme(descriptor.schema);\n    }\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `dataFormats` scheme.\n   */\n  public static constructKeyDerivationPathUsingDataFormatsScheme(schema: string | undefined, dataFormat: string ): string[] {\n    if (schema !== undefined) {\n      return [\n        KeyDerivationScheme.DataFormats,\n        schema, // this is as spec-ed on TP27, the intent is to support sharing the key for just a specific data type under a schema\n        dataFormat\n      ];\n    } else {\n      return [\n        KeyDerivationScheme.DataFormats,\n        dataFormat\n      ];\n    }\n  }\n\n  /**\n   * Constructs the full key derivation path using `protocolPath` scheme.\n   */\n  public static constructKeyDerivationPathUsingProtocolPathScheme(descriptor: RecordsWriteDescriptor): string[] {\n    // ensure `protocol` is defined\n    // NOTE: no need to check `protocolPath` and `contextId` because earlier code ensures that if `protocol` is defined, those are defined also\n    if (descriptor.protocol === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsProtocolPathDerivationSchemeMissingProtocol,\n        'Unable to construct key derivation path using `protocols` scheme because `protocol` is missing.'\n      );\n    }\n\n    const protocolPathSegments = descriptor.protocolPath!.split('/');\n    const fullDerivationPath = [\n      KeyDerivationScheme.ProtocolPath,\n      descriptor.protocol,\n      ...protocolPathSegments\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `protocolContext` scheme.\n   */\n  public static constructKeyDerivationPathUsingProtocolContextScheme(contextId: string | undefined): string[] {\n    if (contextId === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsProtocolContextDerivationSchemeMissingContextId,\n        'Unable to construct key derivation path using `protocolContext` scheme because `contextId` is missing.'\n      );\n    }\n\n    // TODO: issue #683 -Extend key derivation support to include the full contextId (https://github.com/TBD54566975/dwn-sdk-js/issues/683)\n    const firstContextSegment = contextId.split('/')[0];\n\n    const fullDerivationPath = [\n      KeyDerivationScheme.ProtocolContext,\n      firstContextSegment\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Constructs the full key derivation path using `schemas` scheme.\n   */\n  public static constructKeyDerivationPathUsingSchemasScheme( schema: string | undefined ): string[] {\n    if (schema === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsSchemasDerivationSchemeMissingSchema,\n        'Unable to construct key derivation path using `schemas` scheme because `schema` is missing.'\n      );\n    }\n\n    const fullDerivationPath = [\n      KeyDerivationScheme.Schemas,\n      schema\n    ];\n\n    return fullDerivationPath;\n  }\n\n  /**\n   * Derives a descendant private key given an ancestor private key and the full absolute derivation path.\n   * NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n   *       so we will only derive SECP256K1 key without additional conditional checks\n   */\n  public static async derivePrivateKey(ancestorPrivateKey: DerivedPrivateJwk, fullDescendantDerivationPath: string[]): Promise<Uint8Array> {\n    if (ancestorPrivateKey.derivedPrivateKey.crv !== 'secp256k1') {\n      throw new DwnError(\n        DwnErrorCode.RecordsDerivePrivateKeyUnSupportedCurve,\n        `Curve ${ancestorPrivateKey.derivedPrivateKey.crv} is not supported.`\n      );\n    }\n\n    const ancestorPrivateKeyDerivationPath = ancestorPrivateKey.derivationPath ?? [];\n\n    Records.validateAncestorKeyAndDescentKeyDerivationPathsMatch(ancestorPrivateKeyDerivationPath, fullDescendantDerivationPath);\n\n    const subDerivationPath = fullDescendantDerivationPath.slice(ancestorPrivateKeyDerivationPath.length);\n    const ancestorPrivateKeyBytes = Secp256k1.privateJwkToBytes(ancestorPrivateKey.derivedPrivateKey);\n    const leafPrivateKey = await HdKey.derivePrivateKeyBytes(ancestorPrivateKeyBytes, subDerivationPath);\n\n    return leafPrivateKey;\n  }\n\n  /**\n   * Validates that ancestor derivation path matches the descendant derivation path completely.\n   * @throws {DwnError} with `DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment` if fails validation.\n   */\n  public static validateAncestorKeyAndDescentKeyDerivationPathsMatch(\n    ancestorKeyDerivationPath: string[],\n    descendantKeyDerivationPath: string[]\n  ): void {\n    for (let i = 0; i < ancestorKeyDerivationPath.length; i++) {\n      const ancestorSegment = ancestorKeyDerivationPath[i];\n      const descendantSegment = descendantKeyDerivationPath[i];\n      if (ancestorSegment !== descendantSegment) {\n        throw new DwnError(\n          DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment,\n          `Ancestor key derivation segment '${ancestorSegment}' mismatches against the descendant key derivation segment '${descendantSegment}'.`);\n      }\n    }\n  }\n\n  /**\n   * Extracts the parent context ID from the given context ID.\n   */\n  public static getParentContextFromOfContextId(contextId: string | undefined): string | undefined {\n    if (contextId === undefined) {\n      return undefined;\n    }\n\n    // NOTE: assumes the given contextId is a valid contextId in the form of `a/b/c/d`.\n    // `/a/b/c/d` or `a/b/c/d/` is not supported.\n\n    const lastIndex = contextId.lastIndexOf('/');\n\n    // If '/' is not found, this means this is a root record, so return an empty string as the parent context ID.\n    if (lastIndex === -1) {\n      return '';\n    } else {\n      return contextId.substring(0, lastIndex);\n    }\n  }\n\n  /**\n   * Normalizes the protocol and schema URLs within a provided RecordsFilter and returns a copy of RecordsFilter with the modified values.\n   *\n   * @param filter incoming RecordsFilter to normalize.\n   * @returns {RecordsFilter} a copy of the incoming RecordsFilter with the normalized properties.\n   */\n  public static normalizeFilter(filter: RecordsFilter): RecordsFilter {\n    let protocol;\n    if (filter.protocol === undefined) {\n      protocol = undefined;\n    } else {\n      protocol = normalizeProtocolUrl(filter.protocol);\n    }\n\n    let schema;\n    if (filter.schema === undefined) {\n      schema = undefined;\n    } else {\n      schema = normalizeSchemaUrl(filter.schema);\n    }\n\n    const filterCopy = {\n      ...filter,\n      protocol,\n      schema,\n    };\n\n    removeUndefinedProperties(filterCopy);\n    return filterCopy;\n  }\n\n\n  public static isStartsWithFilter(filter: RecordsWriteTagsFilter): filter is StartsWithFilter {\n    return typeof filter === 'object' && ('startsWith' in filter && typeof filter.startsWith === 'string');\n  }\n\n  /**\n   * This will create individual keys for each of the tags that look like `tag.tag_property`\n   */\n  public static buildTagIndexes(tags: RecordsWriteTags): KeyValues {\n    const tagValues:KeyValues = {};\n    for (const property in tags) {\n      const value = tags[property];\n      tagValues[`tag.${property}`] = value;\n    }\n    return tagValues;\n  }\n\n  /**\n   * This will create individual keys for each of the tag filters that look like `tag.tag_filter_property`\n   */\n  public static convertTagsFilter( tags: { [property: string]: RecordsWriteTagsFilter}): Filter {\n    const tagValues:Filter = {};\n    for (const property in tags) {\n      const value = tags[property];\n      tagValues[`tag.${property}`] = this.isStartsWithFilter(value) ? FilterUtility.constructPrefixFilterAsRangeFilter(value.startsWith) : value;\n    }\n    return tagValues;\n  }\n\n  /**\n   *  Converts an incoming RecordsFilter into a Filter usable by MessageStore.\n   *\n   * @param filter A RecordsFilter\n   * @returns {Filter} a generic Filter able to be used with MessageStore.\n   */\n  public static convertFilter(filter: RecordsFilter, dateSort?: DateSort): Filter {\n    // we process tags separately from the remaining filters.\n    // this is because we prepend each field within the `tags` object with a `tag.` to avoid name clashing with first-class index keys.\n    // so `{ tags: { tag1: 'val1', tag2: [1,2] }}` would translate to `'tag.tag1':'val1'` and `'tag.tag2': [1,2]`\n    const { tags, ...remainingFilter } = filter;\n    let tagsFilter: Filter = {};\n    if (tags !== undefined) {\n      // this will namespace the tags so the properties are filtered as `tag.property_name`\n      tagsFilter = { ...this.convertTagsFilter(tags) };\n    }\n\n    const filterCopy = { ...remainingFilter, ...tagsFilter } as Filter;\n\n    // extract properties that needs conversion\n    const { dateCreated, datePublished, dateUpdated, contextId } = filter;\n\n    const dateCreatedFilter = dateCreated ? FilterUtility.convertRangeCriterion(dateCreated) : undefined;\n    if (dateCreatedFilter) {\n      filterCopy.dateCreated = dateCreatedFilter;\n    }\n\n    const datePublishedFilter = datePublished ? FilterUtility.convertRangeCriterion(datePublished): undefined;\n    if (datePublishedFilter) {\n      // only return published records when filtering with a datePublished range.\n      filterCopy.published = true;\n      filterCopy.datePublished = datePublishedFilter;\n    }\n\n    // if we sort by `PublishedAscending` or `PublishedDescending` we must filter for only published records.\n    if (filterCopy.published !== true && (dateSort === DateSort.PublishedAscending || dateSort === DateSort.PublishedDescending)) {\n      filterCopy.published = true;\n    }\n\n    const messageTimestampFilter = dateUpdated ? FilterUtility.convertRangeCriterion(dateUpdated) : undefined;\n    if (messageTimestampFilter) {\n      filterCopy.messageTimestamp = messageTimestampFilter;\n      delete filterCopy.dateUpdated;\n    }\n\n    // contextId conversion to prefix match\n    const contextIdPrefixFilter = contextId ? FilterUtility.constructPrefixFilterAsRangeFilter(contextId) : undefined;\n    if (contextIdPrefixFilter) {\n      filterCopy.contextId = contextIdPrefixFilter;\n    }\n\n    // if the author filter is an array and it's empty, we should remove it from the filter as it will always return no results.\n    if (Array.isArray(filterCopy.author) && filterCopy.author.length === 0) {\n      delete filterCopy.author;\n    }\n\n    // if the recipient filter is an array and it's empty, we should remove it from the filter as it will always return no results.\n    if (Array.isArray(filterCopy.recipient) && filterCopy.recipient.length === 0) {\n      delete filterCopy.recipient;\n    }\n\n    return filterCopy as Filter;\n  }\n\n  /**\n   * Validates the referential integrity of both author-delegated grant and owner-delegated grant.\n   * @param authorSignaturePayload Decoded payload of the author signature of the message. Pass `undefined` if message is not signed.\n   *                               Passed purely as a performance optimization so we don't have to decode the signature payload again.\n   * @param ownerSignaturePayload Decoded payload of the owner signature of the message. Pass `undefined` if no owner signature is present.\n   *                              Passed purely as a performance optimization so we don't have to decode the owner signature payload again.\n   */\n  public static async validateDelegatedGrantReferentialIntegrity(\n    message: RecordsReadMessage | RecordsQueryMessage | RecordsWriteMessage | RecordsDeleteMessage | RecordsSubscribeMessage,\n    authorSignaturePayload: GenericSignaturePayload | undefined,\n    ownerSignaturePayload?: GenericSignaturePayload | undefined\n  ): Promise<void> {\n    // `deletedGrantId` in the payload of the message signature and `authorDelegatedGrant` in `authorization` must both exist or be both undefined\n    const authorDelegatedGrantIdDefined = authorSignaturePayload?.delegatedGrantId !== undefined;\n    const authorDelegatedGrantDefined = message.authorization?.authorDelegatedGrant !== undefined;\n    if (authorDelegatedGrantIdDefined !== authorDelegatedGrantDefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsAuthorDelegatedGrantAndIdExistenceMismatch,\n        `delegatedGrantId in message (author) signature and authorDelegatedGrant must both exist or be undefined. \\\n         delegatedGrantId in message (author) signature defined: ${authorDelegatedGrantIdDefined}, \\\n         authorDelegatedGrant defined: ${authorDelegatedGrantDefined}`\n      );\n    }\n\n    if (authorDelegatedGrantDefined) {\n      const delegatedGrant = message.authorization!.authorDelegatedGrant!;\n\n      const permissionGrant = await PermissionGrant.parse(delegatedGrant);\n      if (permissionGrant.delegated !== true) {\n        throw new DwnError(\n          DwnErrorCode.RecordsAuthorDelegatedGrantNotADelegatedGrant,\n          `The owner delegated grant given is not a delegated grant.`\n        );\n      }\n\n      const grantedTo = delegatedGrant.descriptor.recipient;\n      const signer = Message.getSigner(message);\n      if (grantedTo !== signer) {\n        throw new DwnError(\n          DwnErrorCode.RecordsAuthorDelegatedGrantGrantedToAndOwnerSignatureMismatch,\n          `grantedTo ${grantedTo} in author delegated grant must be the same as the signer ${signer} of the message signature.`\n        );\n      }\n\n      const delegateGrantCid = await Message.getCid(delegatedGrant);\n      if (delegateGrantCid !== authorSignaturePayload!.delegatedGrantId) {\n        throw new DwnError(\n          DwnErrorCode.RecordsAuthorDelegatedGrantCidMismatch,\n          `CID of the author delegated grant ${delegateGrantCid} must be the same as \\\n          the delegatedGrantId ${authorSignaturePayload!.delegatedGrantId} in the message signature.`\n        );\n      }\n    }\n\n    // repeat the same checks for the owner signature below\n\n    // `deletedGrantId` in the payload of the owner signature and `ownerDelegatedGrant` in `authorization` must both exist or be both undefined\n    const ownerDelegatedGrantIdDefined = ownerSignaturePayload?.delegatedGrantId !== undefined;\n    const ownerDelegatedGrantDefined = message.authorization?.ownerDelegatedGrant !== undefined;\n    if (ownerDelegatedGrantIdDefined !== ownerDelegatedGrantDefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsOwnerDelegatedGrantAndIdExistenceMismatch,\n        `delegatedGrantId in owner signature and ownerDelegatedGrant must both exist or be undefined. \\\n         delegatedGrantId in owner signature defined: ${ownerDelegatedGrantIdDefined}, \\\n         ownerDelegatedGrant defined: ${ownerDelegatedGrantDefined}`\n      );\n    }\n\n    if (ownerDelegatedGrantDefined) {\n      const delegatedGrant = message.authorization!.ownerDelegatedGrant!;\n      const permissionGrant = await PermissionGrant.parse(delegatedGrant);\n\n      if (permissionGrant.delegated !== true) {\n        throw new DwnError(\n          DwnErrorCode.RecordsOwnerDelegatedGrantNotADelegatedGrant,\n          `The owner delegated grant given is not a delegated grant.`\n        );\n      }\n\n      const grantedTo = delegatedGrant.descriptor.recipient;\n      const signer = Jws.getSignerDid(message.authorization!.ownerSignature!.signatures[0]);\n      if (grantedTo !== signer) {\n        throw new DwnError(\n          DwnErrorCode.RecordsOwnerDelegatedGrantGrantedToAndOwnerSignatureMismatch,\n          `grantedTo ${grantedTo} in owner delegated grant must be the same as the signer ${signer} of the owner signature.`\n        );\n      }\n\n      const delegateGrantCid = await Message.getCid(delegatedGrant);\n      if (delegateGrantCid !== ownerSignaturePayload!.delegatedGrantId) {\n        throw new DwnError(\n          DwnErrorCode.RecordsOwnerDelegatedGrantCidMismatch,\n          `CID of the owner delegated grant ${delegateGrantCid} must be the same as \\\n          the delegatedGrantId ${ownerSignaturePayload!.delegatedGrantId} in the owner signature.`\n        );\n      }\n    }\n  }\n\n  /**\n   * Determines if signature payload contains a protocolRole and should be authorized as such.\n   */\n  public static shouldProtocolAuthorize(signaturePayload: GenericSignaturePayload): boolean {\n    return signaturePayload.protocolRole !== undefined;\n  }\n\n  /**\n   * Checks if the filter supports returning published records.\n   */\n  public static filterIncludesPublishedRecords(filter: RecordsFilter): boolean {\n    // NOTE: published records should still be returned when `published` and `datePublished` range are both undefined.\n    return filter.datePublished !== undefined || filter.published !== false;\n  }\n\n  /**\n   * Checks if the filter supports returning unpublished records.\n   */\n  public static filterIncludesUnpublishedRecords(filter: RecordsFilter): boolean {\n    // When `published` and `datePublished` range are both undefined, unpublished records can be returned.\n    if (filter.datePublished === undefined && filter.published === undefined) {\n      return true;\n    }\n    return filter.published === false;\n  }\n\n  /**\n   * Checks if the given RecordsDelete message can be performed against a record with the given newest existing state.\n   */\n  public static canPerformDeleteAgainstRecord(deleteToBePerformed: RecordsDeleteMessage, newestExistingMessage: GenericMessage | undefined): boolean {\n    if (newestExistingMessage === undefined) {\n      return false;\n    }\n\n    // can't perform delete if:\n    // attempting to delete on an already deleted record; or\n    // attempting to prune on an already pruned record;\n    if (newestExistingMessage.descriptor.method === DwnMethodName.Delete) {\n      if (deleteToBePerformed.descriptor.prune !== true) {\n        return false;\n      } else if ((newestExistingMessage as RecordsDeleteMessage).descriptor.prune === true) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Checks whether or not the incoming records query filter should build an unpublished recipient MessageStore filter.\n   *\n   * @param filter The incoming RecordsFilter to evaluate against.\n   * @param recipient The recipient to check against the filter, typically the query/subscribe message author.\n   * @returns {boolean} True if the filter contains the recipient, or if the recipient filter is undefined/empty.\n   */\n  static shouldBuildUnpublishedRecipientFilter(filter: RecordsFilter, recipient: string): boolean {\n    const { recipient: recipientFilter } = filter;\n\n    return Array.isArray(recipientFilter) ?\n      recipientFilter.length === 0 || recipientFilter.includes(recipient) :\n      recipientFilter === undefined || recipientFilter === recipient;\n  }\n\n  /**\n   * Checks whether or not the incoming records query filter should build an unpublished author MessageStore filter.\n   *\n   * @param filter The incoming RecordsFilter to evaluate against.\n   * @param author The author to check against the filter, typically the query/subscribe message author.\n   * @returns {boolean} True if the filter contains the author, or if the author filter is undefined/empty.\n   */\n  static shouldBuildUnpublishedAuthorFilter(filter: RecordsFilter, author: string): boolean {\n    const { author: authorFilter } = filter;\n\n    return Array.isArray(authorFilter) ?\n      authorFilter.length === 0 || authorFilter.includes(author) :\n      authorFilter === undefined || authorFilter === author;\n  }\n}\n", "import type { GenericMessage } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { PermissionGrant } from '../protocols/permission-grant.js';\n\nimport { Message } from './message.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\nexport class GrantAuthorization {\n\n  /**\n   * Performs base permissions-grant-based authorization against the given message:\n   * 1. Validates the `expectedGrantor` and `expectedGrantee` values against the actual values in given permission grant.\n   * 2. Verifies that the incoming message is within the allowed time frame of the grant, and the grant has not been revoked.\n   * 3. Verifies that the `interface` and `method` grant scopes match the incoming message.\n   *\n   * NOTE: Does not validate grant `conditions` or `scope` beyond `interface` and `method`\n   *\n   * @param messageStore Used to check if the grant has been revoked.\n   * @throws {DwnError} if validation fails\n   */\n  public static async performBaseValidation(input: {\n    incomingMessage: GenericMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n    }): Promise<void> {\n    const { incomingMessage, expectedGrantor, expectedGrantee, permissionGrant, messageStore } = input;\n\n    const incomingMessageDescriptor = incomingMessage.descriptor;\n\n    GrantAuthorization.verifyExpectedGrantorAndGrantee(expectedGrantor, expectedGrantee, permissionGrant);\n\n    // verify that grant is active during incomingMessage's timestamp\n    const grantedFor = expectedGrantor; // renaming for better readability now that we have verified the grantor above\n    await GrantAuthorization.verifyGrantActive(\n      grantedFor,\n      incomingMessageDescriptor.messageTimestamp,\n      permissionGrant,\n      messageStore\n    );\n\n    // Check grant scope for interface and method\n    await GrantAuthorization.verifyGrantScopeInterfaceAndMethod(\n      incomingMessageDescriptor.interface,\n      incomingMessageDescriptor.method,\n      permissionGrant,\n    );\n  }\n\n  /**\n   * Verifies the given `expectedGrantor` and `expectedGrantee` values against\n   * the actual signer and recipient in given permission grant.\n   * @throws {DwnError} if `expectedGrantor` or `expectedGrantee` do not match the actual values in the grant.\n   */\n  private static verifyExpectedGrantorAndGrantee(\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant\n  ): void {\n\n    const actualGrantee = permissionGrant.grantee;\n    if (expectedGrantee !== actualGrantee) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationNotGrantedToAuthor,\n        `Permission grant is granted to ${actualGrantee}, but need to be granted to ${expectedGrantee}`\n      );\n    }\n\n    const actualGrantor = permissionGrant.grantor;\n    if (expectedGrantor !== actualGrantor) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationNotGrantedForTenant,\n        `Permission grant is granted by ${actualGrantor}, but need to be granted by ${expectedGrantor}`\n      );\n    }\n  }\n\n  /**\n   * Verify that the incoming message is within the allowed time frame of the grant,\n   * and the grant has not been revoked.\n   * @param messageStore Used to check if the grant has been revoked.\n   * @throws {DwnError} if incomingMessage has timestamp for a time in which the grant is not active.\n   */\n  private static async verifyGrantActive(\n    grantedFor: string,\n    incomingMessageTimestamp: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // Check that incomingMessage is within the grant's time frame\n    if (incomingMessageTimestamp < permissionGrant.dateGranted) {\n      // grant is not yet active\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantNotYetActive,\n        `The message has a timestamp before the associated permission grant becomes active`,\n      );\n    }\n\n    if (incomingMessageTimestamp >= permissionGrant.dateExpires) {\n      // grant has expired\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantExpired,\n        `The message has timestamp after the expiry of the associated permission grant`,\n      );\n    }\n\n    // Check if grant has been revoked\n    const query = {\n      parentId          : permissionGrant.id,\n      protocolPath      : `grant/revocation`, // NOTE: this is optional, not referencing PermissionsProtocol.revocationPath due to circular dependency\n      isLatestBaseState : true\n    };\n    const { messages: revokes } = await messageStore.query(grantedFor, [query]);\n    const oldestExistingRevoke = await Message.getOldestMessage(revokes);\n\n    if (oldestExistingRevoke !== undefined && oldestExistingRevoke.descriptor.messageTimestamp <= incomingMessageTimestamp) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantRevoked,\n        `Permission grant with CID ${permissionGrant.id} has been revoked`,\n      );\n    }\n  }\n\n  /**\n   * Verify that the `interface` and `method` grant scopes match the incoming message\n   * @param permissionGrantId Purely being passed for logging purposes.\n   * @throws {DwnError} if the `interface` and `method` of the incoming message do not match the scope of the permission grant.\n   */\n  private static async verifyGrantScopeInterfaceAndMethod(\n    dwnInterface: string,\n    dwnMethod: string,\n    permissionGrant: PermissionGrant,\n  ): Promise<void> {\n\n    if (dwnInterface !== permissionGrant.scope.interface) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationInterfaceMismatch,\n        `DWN Interface of incoming message is outside the scope of permission grant with ID ${permissionGrant.id}`\n      );\n    } else if (dwnMethod !== permissionGrant.scope.method) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationMethodMismatch,\n        `DWN Method of incoming message is outside the scope of permission grant with ID ${permissionGrant.id}`\n      );\n    }\n  }\n}", "import type { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\n/**\n * Type for the data payload of a permission request message.\n */\nexport type PermissionRequestData = {\n\n  /**\n   * If the grant is a delegated grant or not. If `true`, the `grantedTo` will be able to act as the `grantedBy` within the scope of this grant.\n   */\n  delegated: boolean;\n\n  /**\n   * Optional string that communicates what the grant would be used for.\n   */\n  description?: string;\n\n  /**\n   * The scope of the allowed access.\n   */\n  scope: PermissionScope;\n\n  conditions?: PermissionConditions\n};\n\n/**\n * Type for the data payload of a permission grant message.\n */\nexport type PermissionGrantData = {\n  /**\n   * Optional string that communicates what the grant would be used for\n   */\n  description?: string;\n\n  /**\n   * Optional CID of a permission request. This is optional because grants may be given without being officially requested\n   * */\n  requestId?: string;\n\n  /**\n   * Timestamp at which this grant will no longer be active.\n   */\n  dateExpires: string;\n\n  /**\n   * Whether this grant is delegated or not. If `true`, the `grantedTo` will be able to act as the `grantedTo` within the scope of this grant.\n   */\n  delegated?: boolean;\n\n  /**\n   * The scope of the allowed access.\n   */\n  scope: PermissionScope;\n\n  conditions?: PermissionConditions\n};\n\n/**\n * Type for the data payload of a permission revocation message.\n */\nexport type PermissionRevocationData = {\n  /**\n   * Optional string that communicates the details of the revocation.\n   */\n  description?: string;\n};\n\n/**\n * The data model for a permission scope.\n */\nexport type PermissionScope = ProtocolPermissionScope | MessagesPermissionScope | RecordsPermissionScope;\n\nexport type ProtocolPermissionScope = {\n  interface: DwnInterfaceName.Protocols;\n  method: DwnMethodName.Configure | DwnMethodName.Query;\n  protocol?: string;\n};\n\nexport type MessagesPermissionScope = {\n  interface: DwnInterfaceName.Messages;\n  method: DwnMethodName.Query | DwnMethodName.Read | DwnMethodName.Subscribe;\n  protocol?: string;\n};\n\n/**\n * The data model for a permission scope that is specific to the Records interface.\n */\nexport type RecordsPermissionScope = {\n  interface: DwnInterfaceName.Records;\n  method: DwnMethodName.Read | DwnMethodName.Write | DwnMethodName.Query | DwnMethodName.Subscribe | DwnMethodName.Delete;\n  protocol: string;\n  /** May only be present when `protocol` is defined and `protocolPath` is undefined */\n  contextId?: string;\n  /** May only be present when `protocol` is defined and `contextId` is undefined */\n  protocolPath?: string;\n};\n\nexport enum PermissionConditionPublication {\n  Required = 'Required',\n  Prohibited = 'Prohibited',\n}\n\nexport type PermissionConditions = {\n  /**\n   * indicates whether a message written with the invocation of a permission must, may, or must not\n   * be marked as public.\n   * If `undefined`, it is optional to make the message public.\n   */\n  publication?: PermissionConditionPublication;\n};", "import type { MessageStore } from '../types/message-store.js';\nimport type { PermissionGrant } from '../protocols/permission-grant.js';\nimport type { PermissionConditions, RecordsPermissionScope } from '../types/permission-types.js';\nimport type { RecordsDeleteMessage, RecordsQueryMessage, RecordsReadMessage, RecordsSubscribeMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { GrantAuthorization } from './grant-authorization.js';\nimport { PermissionConditionPublication } from '../types/permission-types.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\nexport class RecordsGrantAuthorization {\n  /**\n   * Authorizes the given RecordsWrite in the scope of the DID given.\n   */\n  public static async authorizeWrite(input: {\n    recordsWriteMessage: RecordsWriteMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      recordsWriteMessage, expectedGrantor, expectedGrantee, permissionGrant, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: recordsWriteMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    // NOTE: validated the invoked permission is for Records in GrantAuthorization.performBaseValidation()\n    RecordsGrantAuthorization.verifyScope(recordsWriteMessage, permissionGrant.scope as RecordsPermissionScope);\n\n    RecordsGrantAuthorization.verifyConditions(recordsWriteMessage, permissionGrant.conditions);\n  }\n\n  /**\n   * Authorizes a RecordsReadMessage using the given permission grant.\n   * @param messageStore Used to check if the given grant has been revoked.\n   */\n  public static async authorizeRead(input: {\n    recordsReadMessage: RecordsReadMessage,\n    recordsWriteMessageToBeRead: RecordsWriteMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      recordsReadMessage, recordsWriteMessageToBeRead, expectedGrantor, expectedGrantee, permissionGrant, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: recordsReadMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    // NOTE: validated the invoked permission is for Records in GrantAuthorization.performBaseValidation()\n    RecordsGrantAuthorization.verifyScope(recordsWriteMessageToBeRead, permissionGrant.scope as RecordsPermissionScope);\n  }\n\n  /**\n   * Authorizes the scope of a permission grant for RecordsQuery or RecordsSubscribe.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public static async authorizeQueryOrSubscribe(input: {\n    incomingMessage: RecordsQueryMessage | RecordsSubscribeMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      incomingMessage, expectedGrantor, expectedGrantee, permissionGrant, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    // If the grant specifies a protocol, the subscribe or query must specify the same protocol.\n    // NOTE: validated the invoked permission is for Records in GrantAuthorization.performBaseValidation()\n    const permissionScope = permissionGrant.scope as RecordsPermissionScope;\n    const protocolInGrant = permissionScope.protocol;\n    const protocolInMessage = incomingMessage.descriptor.filter.protocol;\n    if (protocolInGrant !== undefined && protocolInMessage !== protocolInGrant) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationQueryOrSubscribeProtocolScopeMismatch,\n        `Grant protocol scope ${protocolInGrant} does not match protocol in message ${protocolInMessage}`\n      );\n    }\n  }\n\n  /**\n   * Authorizes the scope of a permission grant for RecordsDelete.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public static async authorizeDelete(input: {\n    recordsDeleteMessage: RecordsDeleteMessage,\n    recordsWriteToDelete: RecordsWriteMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      recordsDeleteMessage, recordsWriteToDelete, expectedGrantor, expectedGrantee, permissionGrant, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: recordsDeleteMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    // If the grant specifies a protocol, the delete must be deleting a record with the same protocol.\n    // NOTE: validated the invoked permission is for Records in GrantAuthorization.performBaseValidation()\n    const permissionScope = permissionGrant.scope as RecordsPermissionScope;\n    const protocolInGrant = permissionScope.protocol;\n    const protocolOfRecordToDelete = recordsWriteToDelete.descriptor.protocol;\n    if (protocolInGrant !== undefined && protocolOfRecordToDelete !== protocolInGrant) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationDeleteProtocolScopeMismatch,\n        `Grant protocol scope ${protocolInGrant} does not match protocol in record to delete ${protocolOfRecordToDelete}`\n      );\n    }\n  }\n\n  /**\n   * Verifies a record against the scope of the given grant.\n   */\n  private static verifyScope(\n    recordsWriteMessage: RecordsWriteMessage,\n    grantScope: RecordsPermissionScope\n  ): void {\n\n    // The record's protocol must match the protocol specified in the record\n    if (grantScope.protocol !== recordsWriteMessage.descriptor.protocol) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationScopeProtocolMismatch,\n        `Grant scope specifies different protocol than what appears in the record`\n      );\n    }\n\n    // If grant specifies a contextId, check that record falls under that contextId\n    if (grantScope.contextId !== undefined) {\n      if (recordsWriteMessage.contextId === undefined || !recordsWriteMessage.contextId.startsWith(grantScope.contextId)) {\n        throw new DwnError(\n          DwnErrorCode.RecordsGrantAuthorizationScopeContextIdMismatch,\n          `Grant scope specifies different contextId than what appears in the record`\n        );\n      }\n    }\n\n    // If grant specifies protocolPath, check that record is at that protocolPath\n    if (grantScope.protocolPath !== undefined && grantScope.protocolPath !== recordsWriteMessage.descriptor.protocolPath) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationScopeProtocolPathMismatch,\n        `Grant scope specifies different protocolPath than what appears in the record`\n      );\n    }\n  }\n\n  /**\n   * Verifies grant `conditions`.\n   * Currently the only condition is `published` which only applies to RecordsWrites\n   */\n  private static verifyConditions(recordsWriteMessage: RecordsWriteMessage, conditions: PermissionConditions | undefined): void {\n\n    // If conditions require publication, RecordsWrite must have `published` === true\n    if (conditions?.publication === PermissionConditionPublication.Required && !recordsWriteMessage.descriptor.published) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationConditionPublicationRequired,\n        'Permission grant requires message to be published'\n      );\n    }\n\n    // if conditions prohibit publication, RecordsWrite must have published === false or undefined\n    if (conditions?.publication === PermissionConditionPublication.Prohibited && recordsWriteMessage.descriptor.published) {\n      throw new DwnError(\n        DwnErrorCode.RecordsGrantAuthorizationConditionPublicationProhibited,\n        'Permission grant prohibits message from being published'\n      );\n    }\n  }\n}\n", "import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\n\nimport { DEBUG } from './debug';\n\ntype OmitConstructor<T> = { [P in keyof T as T[P] extends new (...args: any[]) => any ? P : never]: T[P] };\n\ntype TemporalIntrinsics = Omit<typeof Temporal, 'Now' | 'Instant' | 'ZonedDateTime'> & {\n  Instant: OmitConstructor<Temporal.Instant> &\n    (new (epochNanoseconds: JSBI) => Temporal.Instant) & { prototype: typeof Temporal.Instant.prototype };\n  ZonedDateTime: OmitConstructor<Temporal.ZonedDateTime> &\n    (new (\n      epochNanoseconds: JSBI,\n      timeZone: string | Temporal.TimeZoneProtocol,\n      calendar?: string | Temporal.CalendarProtocol\n    ) => Temporal.ZonedDateTime) & {\n      prototype: typeof Temporal.ZonedDateTime.prototype;\n      from: typeof Temporal.ZonedDateTime.from;\n      compare: typeof Temporal.ZonedDateTime.compare;\n    };\n};\ntype TemporalIntrinsicRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}`]: TemporalIntrinsics[key];\n};\ntype TemporalIntrinsicPrototypeRegistrations = {\n  [key in keyof TemporalIntrinsics as `Temporal.${key}.prototype`]: TemporalIntrinsics[key]['prototype'];\n};\ntype TemporalIntrinsicRegisteredKeys = {\n  [key in keyof TemporalIntrinsicRegistrations as `%${key}%`]: TemporalIntrinsicRegistrations[key];\n};\ntype TemporalIntrinsicPrototypeRegisteredKeys = {\n  [key in keyof TemporalIntrinsicPrototypeRegistrations as `%${key}%`]: TemporalIntrinsicPrototypeRegistrations[key];\n};\n\ntype CalendarPrototypeKeys = keyof Omit<Temporal.Calendar, typeof Symbol.toStringTag>;\ntype TemporalCalendarIntrinsicRegistrations = {\n  [key in CalendarPrototypeKeys as `Temporal.Calendar.prototype.${key}`]: Temporal.Calendar[key];\n} & {\n  'Temporal.Calendar.from': typeof Temporal.Calendar.from;\n};\ntype TemporalCalendarIntrinsicRegisteredKeys = {\n  [key in keyof TemporalCalendarIntrinsicRegistrations as `%${key}%`]: TemporalCalendarIntrinsicRegistrations[key];\n};\n\ntype TimeZonePrototypeKeys = 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor';\ntype TemporalTimeZoneIntrinsicRegistrations = {\n  [key in TimeZonePrototypeKeys as `Temporal.TimeZone.prototype.${key}`]: Temporal.TimeZone[key];\n} & {\n  'Temporal.TimeZone.from': typeof Temporal.TimeZone.from;\n};\ntype TemporalTimeZoneIntrinsicRegisteredKeys = {\n  [key in keyof TemporalTimeZoneIntrinsicRegistrations as `%${key}%`]: TemporalTimeZoneIntrinsicRegistrations[key];\n};\n\nconst INTRINSICS = {} as TemporalIntrinsicRegisteredKeys &\n  TemporalIntrinsicPrototypeRegisteredKeys &\n  TemporalTimeZoneIntrinsicRegisteredKeys &\n  TemporalCalendarIntrinsicRegisteredKeys;\n\ntype customFormatFunction<T> = (\n  this: T,\n  depth: number,\n  options: { stylize: (value: unknown, type: 'number' | 'special') => string }\n) => string;\nconst customUtilInspectFormatters: Partial<{\n  [key in keyof TemporalIntrinsicRegistrations]: customFormatFunction<\n    InstanceType<TemporalIntrinsicRegistrations[key]>\n  >;\n}> = {\n  ['Temporal.Duration'](depth, options) {\n    const descr = options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n    if (depth < 1) return descr;\n    const entries = [];\n    for (const prop of [\n      'years',\n      'months',\n      'weeks',\n      'days',\n      'hours',\n      'minutes',\n      'seconds',\n      'milliseconds',\n      'microseconds',\n      'nanoseconds'\n    ] as const) {\n      if (this[prop] !== 0) entries.push(`  ${prop}: ${options.stylize(this[prop], 'number')}`);\n    }\n    return descr + ' {\\n' + entries.join(',\\n') + '\\n}';\n  }\n};\n\ntype InspectFormatterOptions = { stylize: (str: string, styleType: string) => string };\nfunction defaultUtilInspectFormatter(this: any, depth: number, options: InspectFormatterOptions) {\n  return options.stylize(`${this[Symbol.toStringTag]} <${this}>`, 'special');\n}\n\nexport function MakeIntrinsicClass(\n  Class: TemporalIntrinsicRegistrations[typeof name],\n  name: keyof TemporalIntrinsicRegistrations\n) {\n  Object.defineProperty(Class.prototype, Symbol.toStringTag, {\n    value: name,\n    writable: false,\n    enumerable: false,\n    configurable: true\n  });\n  if (DEBUG) {\n    Object.defineProperty(Class.prototype, Symbol.for('nodejs.util.inspect.custom'), {\n      value: customUtilInspectFormatters[name] || defaultUtilInspectFormatter,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n  }\n  for (const prop of Object.getOwnPropertyNames(Class)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class, prop, desc);\n  }\n  for (const prop of Object.getOwnPropertyNames(Class.prototype)) {\n    // we know that `prop` is present, so the descriptor is never undefined\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const desc = Object.getOwnPropertyDescriptor(Class.prototype, prop)!;\n    if (!desc.configurable || !desc.enumerable) continue;\n    desc.enumerable = false;\n    Object.defineProperty(Class.prototype, prop, desc);\n  }\n\n  DefineIntrinsic(name, Class);\n  DefineIntrinsic(`${name}.prototype`, Class.prototype);\n}\n\ntype IntrinsicDefinitionKeys =\n  | keyof TemporalIntrinsicRegistrations\n  | keyof TemporalIntrinsicPrototypeRegistrations\n  | keyof TemporalCalendarIntrinsicRegistrations\n  | keyof TemporalTimeZoneIntrinsicRegistrations;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalIntrinsicPrototypeRegistrations>(\n  name: KeyT,\n  value: TemporalIntrinsicPrototypeRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalCalendarIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalCalendarIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT extends keyof TemporalTimeZoneIntrinsicRegistrations>(\n  name: KeyT,\n  value: TemporalTimeZoneIntrinsicRegistrations[KeyT]\n): void;\nexport function DefineIntrinsic<KeyT>(name: KeyT, value: never): void;\nexport function DefineIntrinsic<KeyT extends IntrinsicDefinitionKeys>(name: KeyT, value: unknown): void {\n  const key: `%${IntrinsicDefinitionKeys}%` = `%${name}%`;\n  if (INTRINSICS[key] !== undefined) throw new Error(`intrinsic ${name} already exists`);\n  INTRINSICS[key] = value;\n}\nexport function GetIntrinsic<KeyT extends keyof typeof INTRINSICS>(intrinsic: KeyT): typeof INTRINSICS[KeyT] {\n  return INTRINSICS[intrinsic];\n}\n", "import type JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { BuiltinCalendarId, AnyTemporalType, CalendarSlot, TimeZoneSlot } from './internaltypes';\n\n// Instant\nexport const EPOCHNANOSECONDS = 'slot-epochNanoSeconds';\n\n// TimeZone\nexport const TIMEZONE_ID = 'slot-timezone-identifier';\n\n// DateTime, Date, Time, YearMonth, MonthDay\nexport const ISO_YEAR = 'slot-year';\nexport const ISO_MONTH = 'slot-month';\nexport const ISO_DAY = 'slot-day';\nexport const ISO_HOUR = 'slot-hour';\nexport const ISO_MINUTE = 'slot-minute';\nexport const ISO_SECOND = 'slot-second';\nexport const ISO_MILLISECOND = 'slot-millisecond';\nexport const ISO_MICROSECOND = 'slot-microsecond';\nexport const ISO_NANOSECOND = 'slot-nanosecond';\nexport const CALENDAR = 'slot-calendar';\n// Date, YearMonth, and MonthDay all have the same slots, disambiguation needed:\nexport const DATE_BRAND = 'slot-date-brand';\nexport const YEAR_MONTH_BRAND = 'slot-year-month-brand';\nexport const MONTH_DAY_BRAND = 'slot-month-day-brand';\n\n// ZonedDateTime\nexport const INSTANT = 'slot-cached-instant';\nexport const TIME_ZONE = 'slot-time-zone';\n\n// Duration\nexport const YEARS = 'slot-years';\nexport const MONTHS = 'slot-months';\nexport const WEEKS = 'slot-weeks';\nexport const DAYS = 'slot-days';\nexport const HOURS = 'slot-hours';\nexport const MINUTES = 'slot-minutes';\nexport const SECONDS = 'slot-seconds';\nexport const MILLISECONDS = 'slot-milliseconds';\nexport const MICROSECONDS = 'slot-microseconds';\nexport const NANOSECONDS = 'slot-nanoseconds';\n\n// Calendar\nexport const CALENDAR_ID = 'slot-calendar-identifier';\n\ninterface SlotInfo<ValueType, UsedByType extends AnyTemporalType> {\n  value: ValueType;\n  usedBy: UsedByType;\n}\n\ninterface SlotInfoRecord {\n  [k: string]: SlotInfo<unknown, AnyTemporalType>;\n}\n\ninterface Slots extends SlotInfoRecord {\n  // Instant\n  [EPOCHNANOSECONDS]: SlotInfo<JSBI, Temporal.Instant | Temporal.ZonedDateTime>; // number? JSBI?\n\n  // TimeZone\n  [TIMEZONE_ID]: SlotInfo<string, Temporal.TimeZone>;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MONTH]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_DAY]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_HOUR]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MINUTE]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_SECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MILLISECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_MICROSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [ISO_NANOSECOND]: SlotInfo<number, TypesWithCalendarUnits>;\n  [CALENDAR]: SlotInfo<CalendarSlot, TypesWithCalendarUnits>;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: SlotInfo<true, Temporal.PlainDate>;\n  [YEAR_MONTH_BRAND]: SlotInfo<true, Temporal.PlainYearMonth>;\n  [MONTH_DAY_BRAND]: SlotInfo<true, Temporal.PlainMonthDay>;\n\n  // ZonedDateTime\n  [INSTANT]: SlotInfo<Temporal.Instant, Temporal.ZonedDateTime>;\n  [TIME_ZONE]: SlotInfo<TimeZoneSlot, Temporal.ZonedDateTime>;\n\n  // Duration\n  [YEARS]: SlotInfo<number, Temporal.Duration>;\n  [MONTHS]: SlotInfo<number, Temporal.Duration>;\n  [WEEKS]: SlotInfo<number, Temporal.Duration>;\n  [DAYS]: SlotInfo<number, Temporal.Duration>;\n  [HOURS]: SlotInfo<number, Temporal.Duration>;\n  [MINUTES]: SlotInfo<number, Temporal.Duration>;\n  [SECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MILLISECONDS]: SlotInfo<number, Temporal.Duration>;\n  [MICROSECONDS]: SlotInfo<number, Temporal.Duration>;\n  [NANOSECONDS]: SlotInfo<number, Temporal.Duration>;\n\n  // Calendar\n  [CALENDAR_ID]: SlotInfo<BuiltinCalendarId, Temporal.Calendar>;\n}\n\ntype TypesWithCalendarUnits =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime;\n\ninterface SlotsToTypes {\n  // Instant\n  [EPOCHNANOSECONDS]: Temporal.Instant;\n\n  // TimeZone\n  [TIMEZONE_ID]: Temporal.TimeZone;\n\n  // DateTime, Date, Time, YearMonth, MonthDay\n  [ISO_YEAR]: TypesWithCalendarUnits;\n  [ISO_MONTH]: TypesWithCalendarUnits;\n  [ISO_DAY]: TypesWithCalendarUnits;\n  [ISO_HOUR]: TypesWithCalendarUnits;\n  [ISO_MINUTE]: TypesWithCalendarUnits;\n  [ISO_SECOND]: TypesWithCalendarUnits;\n  [ISO_MILLISECOND]: TypesWithCalendarUnits;\n  [ISO_MICROSECOND]: TypesWithCalendarUnits;\n  [ISO_NANOSECOND]: TypesWithCalendarUnits;\n  [CALENDAR]: TypesWithCalendarUnits;\n\n  // Date, YearMonth, MonthDay common slots\n  [DATE_BRAND]: Temporal.PlainDate;\n  [YEAR_MONTH_BRAND]: Temporal.PlainYearMonth;\n  [MONTH_DAY_BRAND]: Temporal.PlainMonthDay;\n\n  // ZonedDateTime\n  [INSTANT]: Temporal.ZonedDateTime;\n  [TIME_ZONE]: Temporal.ZonedDateTime;\n\n  // Duration\n  [YEARS]: Temporal.Duration;\n  [MONTHS]: Temporal.Duration;\n  [WEEKS]: Temporal.Duration;\n  [DAYS]: Temporal.Duration;\n  [HOURS]: Temporal.Duration;\n  [MINUTES]: Temporal.Duration;\n  [SECONDS]: Temporal.Duration;\n  [MILLISECONDS]: Temporal.Duration;\n  [MICROSECONDS]: Temporal.Duration;\n  [NANOSECONDS]: Temporal.Duration;\n\n  // Calendar\n  [CALENDAR_ID]: Temporal.Calendar;\n}\n\ntype SlotKey = keyof SlotsToTypes;\n\nconst globalSlots = new WeakMap<Slots[keyof Slots]['usedBy'], Record<keyof Slots, Slots[keyof Slots]['value']>>();\n\nfunction _GetSlots(container: Slots[keyof Slots]['usedBy']) {\n  return globalSlots.get(container);\n}\n\nconst GetSlotsSymbol = Symbol.for('@@Temporal__GetSlots');\n\n// expose GetSlots to avoid dual package hazards\n(globalThis as any)[GetSlotsSymbol] ||= _GetSlots;\n\nconst GetSlots = (globalThis as any)[GetSlotsSymbol] as typeof _GetSlots;\n\nfunction _CreateSlots(container: Slots[keyof Slots]['usedBy']): void {\n  globalSlots.set(container, Object.create(null));\n}\n\nconst CreateSlotsSymbol = Symbol.for('@@Temporal__CreateSlots');\n\n// expose CreateSlots to avoid dual package hazards\n(globalThis as any)[CreateSlotsSymbol] ||= _CreateSlots;\n\nexport const CreateSlots = (globalThis as any)[CreateSlotsSymbol] as typeof _CreateSlots;\n\n// TODO: is there a better way than 9 overloads to make HasSlot into a type\n// guard that takes a variable number of parameters?\nexport function HasSlot<ID1 extends SlotKey>(container: unknown, id1: ID1): container is Slots[ID1]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3\n): container is Slots[ID1]['usedBy'] | Slots[ID2]['usedBy'] | Slots[ID3]['usedBy'];\nexport function HasSlot<ID1 extends SlotKey, ID2 extends SlotKey, ID3 extends SlotKey, ID4 extends SlotKey>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4\n): container is Slots[ID1 | ID2 | ID3 | ID4]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8]['usedBy'];\nexport function HasSlot<\n  ID1 extends SlotKey,\n  ID2 extends SlotKey,\n  ID3 extends SlotKey,\n  ID4 extends SlotKey,\n  ID5 extends SlotKey,\n  ID6 extends SlotKey,\n  ID7 extends SlotKey,\n  ID8 extends SlotKey,\n  ID9 extends SlotKey\n>(\n  container: unknown,\n  id1: ID1,\n  id2: ID2,\n  id3: ID3,\n  id4: ID4,\n  id5: ID5,\n  id6: ID6,\n  id7: ID7,\n  id8: ID8,\n  id9: ID9\n): container is Slots[ID1 | ID2 | ID3 | ID4 | ID5 | ID6 | ID7 | ID8 | ID9]['usedBy'];\nexport function HasSlot(container: unknown, ...ids: (keyof Slots)[]): boolean {\n  if (!container || 'object' !== typeof container) return false;\n  const myslots = GetSlots(container as AnyTemporalType);\n  return !!myslots && ids.every((id) => id in myslots);\n}\nexport function GetSlot<KeyT extends keyof Slots>(\n  container: Slots[typeof id]['usedBy'],\n  id: KeyT\n): Slots[KeyT]['value'] {\n  const value = GetSlots(container)?.[id];\n  if (value === undefined) throw new TypeError(`Missing internal slot ${id}`);\n  return value;\n}\nexport function SetSlot<KeyT extends SlotKey>(\n  container: Slots[KeyT]['usedBy'],\n  id: KeyT,\n  value: Slots[KeyT]['value']\n): void {\n  const slots = GetSlots(container);\n\n  if (slots === undefined) throw new TypeError('Missing slots for the given container');\n\n  const existingSlot = slots[id];\n\n  if (existingSlot) throw new TypeError(`${id} already has set`);\n\n  slots[id] = value;\n}\n", "const tzComponent = /\\.[-A-Za-z_]|\\.\\.[-A-Za-z._]{1,12}|\\.[-A-Za-z_][-A-Za-z._]{0,12}|[A-Za-z_][-A-Za-z._]{0,13}/;\nconst offsetNoCapture = /(?:[+\\u2212-][0-2][0-9](?::?[0-5][0-9](?::?[0-5][0-9](?:[.,]\\d{1,9})?)?)?)/;\nexport const timeZoneID = new RegExp(\n  '(?:' +\n    [\n      `(?:${tzComponent.source})(?:\\\\/(?:${tzComponent.source}))*`,\n      'Etc/GMT(?:0|[-+]\\\\d{1,2})',\n      'GMT[-+]?0',\n      'EST5EDT',\n      'CST6CDT',\n      'MST7MDT',\n      'PST8PDT',\n      offsetNoCapture.source\n    ].join('|') +\n    ')'\n);\n\nconst yearpart = /(?:[+\\u2212-]\\d{6}|\\d{4})/;\nconst monthpart = /(?:0[1-9]|1[0-2])/;\nconst daypart = /(?:0[1-9]|[12]\\d|3[01])/;\nconst datesplit = new RegExp(\n  `(${yearpart.source})(?:-(${monthpart.source})-(${daypart.source})|(${monthpart.source})(${daypart.source}))`\n);\nconst timesplit = /(\\d{2})(?::(\\d{2})(?::(\\d{2})(?:[.,](\\d{1,9}))?)?|(\\d{2})(?:(\\d{2})(?:[.,](\\d{1,9}))?)?)?/;\nexport const offset = /([+\\u2212-])([01][0-9]|2[0-3])(?::?([0-5][0-9])(?::?([0-5][0-9])(?:[.,](\\d{1,9}))?)?)?/;\nconst offsetpart = new RegExp(`([zZ])|${offset.source}?`);\nexport const annotation = /\\[(!)?([a-z_][a-z0-9_-]*)=([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\\]/g;\n\nexport const zoneddatetime = new RegExp(\n  [\n    `^${datesplit.source}`,\n    `(?:(?:T|\\\\s+)${timesplit.source}(?:${offsetpart.source})?)?`,\n    `(?:\\\\[!?(${timeZoneID.source})\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\nexport const time = new RegExp(\n  [\n    `^T?${timesplit.source}`,\n    `(?:${offsetpart.source})?`,\n    `(?:\\\\[!?${timeZoneID.source}\\\\])?`,\n    `((?:${annotation.source})*)$`\n  ].join(''),\n  'i'\n);\n\n// The short forms of YearMonth and MonthDay are only for the ISO calendar, but\n// annotations are still allowed, and will throw if the calendar annotation is\n// not ISO.\n// Non-ISO calendar YearMonth and MonthDay have to parse as a Temporal.PlainDate,\n// with the reference fields.\n// YYYYMM forbidden by ISO 8601 because ambiguous with YYMMDD, but allowed by\n// RFC 3339 and we don't allow 2-digit years, so we allow it.\n// Not ambiguous with HHMMSS because that requires a 'T' prefix\n// UTC offsets are not allowed, because they are not allowed with any date-only\n// format; also, YYYY-MM-UU is ambiguous with YYYY-MM-DD\nexport const yearmonth = new RegExp(\n  `^(${yearpart.source})-?(${monthpart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\nexport const monthday = new RegExp(\n  `^(?:--)?(${monthpart.source})-?(${daypart.source})(?:\\\\[!?${timeZoneID.source}\\\\])?((?:${annotation.source})*)$`\n);\n\nconst fraction = /(\\d+)(?:[.,](\\d{1,9}))?/;\n\nconst durationDate = /(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?/;\nconst durationTime = new RegExp(`(?:${fraction.source}H)?(?:${fraction.source}M)?(?:${fraction.source}S)?`);\nexport const duration = new RegExp(`^([+\\u2212-])?P${durationDate.source}(?:T(?!$)${durationTime.source})?$`, 'i');\n", "const ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst MathMin = Math.min;\nconst MathMax = Math.max;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst MathSign = Math.sign;\nconst MathTrunc = Math.trunc;\nconst NumberIsNaN = Number.isNaN;\nconst NumberIsFinite = Number.isFinite;\nconst NumberCtor = Number;\nconst StringCtor = String;\nconst NumberMaxSafeInteger = Number.MAX_SAFE_INTEGER;\nconst ObjectCreate = Object.create;\nconst ObjectDefineProperty = Object.defineProperty;\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nconst ReflectApply = Reflect.apply;\nconst ReflectOwnKeys = Reflect.ownKeys;\n\nimport { DEBUG } from './debug';\nimport JSBI from 'jsbi';\n\nimport type { Temporal } from '..';\nimport type {\n  AnyTemporalLikeType,\n  UnitSmallerThanOrEqualTo,\n  CalendarProtocolParams,\n  TimeZoneProtocolParams,\n  InstantParams,\n  PlainMonthDayParams,\n  ZonedDateTimeParams,\n  CalendarParams,\n  TimeZoneParams,\n  PlainDateParams,\n  PlainTimeParams,\n  DurationParams,\n  PlainDateTimeParams,\n  PlainYearMonthParams,\n  PrimitiveFieldsOf,\n  BuiltinCalendarId,\n  Keys,\n  AnyTemporalKey,\n  CalendarSlot,\n  TimeZoneSlot\n} from './internaltypes';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot,\n  EPOCHNANOSECONDS,\n  TIMEZONE_ID,\n  CALENDAR_ID,\n  INSTANT,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  DATE_BRAND,\n  YEAR_MONTH_BRAND,\n  MONTH_DAY_BRAND,\n  TIME_ZONE,\n  CALENDAR,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS\n} from './slots';\n\nexport const ZERO = JSBI.BigInt(0);\nconst ONE = JSBI.BigInt(1);\nconst SIXTY = JSBI.BigInt(60);\nconst TWENTY_FOUR = JSBI.BigInt(24);\nexport const THOUSAND = JSBI.BigInt(1e3);\nexport const MILLION = JSBI.BigInt(1e6);\nexport const BILLION = JSBI.BigInt(1e9);\nconst NEGATIVE_ONE = JSBI.BigInt(-1);\nconst HOUR_SECONDS = 3600;\nexport const HOUR_NANOS = JSBI.multiply(JSBI.BigInt(HOUR_SECONDS), BILLION);\nconst MINUTE_NANOS = JSBI.multiply(SIXTY, BILLION);\nconst DAY_NANOS = JSBI.multiply(HOUR_NANOS, TWENTY_FOUR);\nconst NS_MIN = JSBI.multiply(JSBI.BigInt(-86400), JSBI.BigInt(1e17));\nconst NS_MAX = JSBI.multiply(JSBI.BigInt(86400), JSBI.BigInt(1e17));\nconst YEAR_MIN = -271821;\nconst YEAR_MAX = 275760;\nconst BEFORE_FIRST_OFFSET_TRANSITION = JSBI.multiply(JSBI.BigInt(-388152), JSBI.BigInt(1e13)); // 1847-01-01T00:00:00Z\nconst ABOUT_TEN_YEARS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 10));\nconst ABOUT_ONE_YEAR_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(366 * 1));\nconst TWO_WEEKS_NANOS = JSBI.multiply(DAY_NANOS, JSBI.BigInt(2 * 7));\n\nconst BUILTIN_CALENDAR_IDS = [\n  'iso8601',\n  'hebrew',\n  'islamic',\n  'islamic-umalqura',\n  'islamic-tbla',\n  'islamic-civil',\n  'islamic-rgsa',\n  'islamicc',\n  'persian',\n  'ethiopic',\n  'ethioaa',\n  'coptic',\n  'chinese',\n  'dangi',\n  'roc',\n  'indian',\n  'buddhist',\n  'japanese',\n  'gregory'\n];\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n/**\n * uncheckedAssertNarrowedType forces TypeScript to change the type of the argument to the one given in\n * the type parameter. This should only be used to help TS understand when variables change types,\n * but TS can't or won't infer this automatically. They should be used sparingly, because\n * if used incorrectly can lead to difficult-to-diagnose problems.\n * */\nexport function uncheckedAssertNarrowedType<T = unknown>(\n  arg: unknown,\n  justification: string\n): asserts arg is T extends typeof arg ? T : never {}\n/* eslint-enable */\n\ntype ArrayElement<ArrayType> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\ntype ArrayWithNewKeys<T, Keys> = Array<ArrayElement<T> | Keys>;\n\n/**\n * In debug builds, this function verifies that the given argument \"exists\" (is not\n * null or undefined). This function becomes a no-op in the final bundles distributed via NPM.\n * @param arg\n */\nexport function assertExists<A>(arg: A): asserts arg is NonNullable<A> {\n  if (DEBUG) {\n    if (arg != null) {\n      throw new Error('Expected arg to be set.');\n    }\n  }\n}\n\nfunction isZero(value: JSBI): boolean {\n  return JSBI.equal(value, ZERO);\n}\n\ntype Stringless<T> = Exclude<T, string>;\n\nfunction GetMethod<T extends { [s in M]?: (...args: any[]) => unknown }, M extends string & keyof T>(\n  obj: T,\n  methodName: M\n): T[M];\nfunction GetMethod<\n  T extends string | { [s in M]?: (...args: any[]) => unknown },\n  M extends string & keyof Stringless<T>\n>(obj: T, methodName: M): Stringless<T>[M] | undefined;\nfunction GetMethod<\n  T extends string | { [s in M]?: undefined | ((...args: any[]) => unknown) },\n  M extends string & keyof T\n>(obj: T, methodName: M): T[M] | undefined {\n  const result = obj[methodName];\n  if (result === undefined) return undefined;\n  if (DEBUG) {\n    if (typeof result !== 'function') throw new TypeError(`'${methodName}' must be a function`);\n  }\n  return result;\n}\n\nexport function Call<T, A extends readonly any[], R>(\n  target: (this: T, ...args: A) => R,\n  thisArgument: T,\n  argumentsList: Readonly<A>\n): R {\n  const args = arguments.length > 2 ? argumentsList : [];\n  if (DEBUG) {\n    if (!Array.isArray(argumentsList)) {\n      throw new TypeError('Assertion failed: optional `argumentsList`, if provided, must be an array');\n    }\n  }\n  return ReflectApply(target, thisArgument, args);\n}\n\n// For unknown values, this narrows the result to a Record. But for union types\n// like `Temporal.DurationLike | string`, it'll strip the primitive types while\n// leaving the object type(s) unchanged.\nexport function IsObject<T>(\n  value: T\n): value is Exclude<T, string | null | undefined | number | bigint | symbol | boolean>;\nexport function IsObject(value: unknown): value is Record<string | number | symbol, unknown> {\n  return (typeof value === 'object' && value !== null) || typeof value === 'function';\n}\n\nexport function ToNumber(value: unknown): number {\n  // ES 2022's es-abstract made minor changes to ToNumber, but polyfilling these\n  // changes adds zero benefit to Temporal and brings in a lot of extra code. So\n  // we'll leave ToNumber as-is.\n  // See https://github.com/ljharb/es-abstract/blob/main/2022/ToNumber.js\n  if (typeof value === 'bigint') throw new TypeError('Cannot convert BigInt to number');\n  return NumberCtor(value);\n}\n\nfunction ToIntegerOrInfinity(value: unknown) {\n  const number = ToNumber(value);\n  if (NumberIsNaN(number) || number === 0) {\n    return 0;\n  }\n  if (!NumberIsFinite(number)) {\n    return number;\n  }\n  const integer = MathFloor(MathAbs(number));\n  if (integer === 0) {\n    return 0;\n  }\n  return MathSign(number) * integer;\n}\n\nfunction IsIntegralNumber(argument: unknown) {\n  if (typeof argument !== 'number' || NumberIsNaN(argument) || !NumberIsFinite(argument)) {\n    return false;\n  }\n  const absValue = MathAbs(argument);\n  return MathFloor(absValue) === absValue;\n}\n\nexport function ToString(value: unknown): string {\n  if (typeof value === 'symbol') {\n    throw new TypeError('Cannot convert a Symbol value to a String');\n  }\n  return StringCtor(value);\n}\n\nexport function ToIntegerWithTruncation(value: unknown): number {\n  const number = ToNumber(value);\n  if (number === 0) return 0;\n  if (NumberIsNaN(number) || !NumberIsFinite(number)) {\n    throw new RangeError('invalid number value');\n  }\n  const integer = MathTrunc(number);\n  if (integer === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return integer;\n}\n\nfunction ToPositiveIntegerWithTruncation(valueParam: unknown, property?: string): number {\n  const integer = ToIntegerWithTruncation(valueParam);\n  if (integer <= 0) {\n    if (property !== undefined) {\n      throw new RangeError(`property '${property}' cannot be a a number less than one`);\n    }\n    throw new RangeError('Cannot convert a number less than one to a positive integer');\n  }\n  return integer;\n}\n\nexport function ToIntegerIfIntegral(valueParam: unknown): number {\n  const number = ToNumber(valueParam);\n  if (!NumberIsFinite(number)) throw new RangeError('infinity is out of range');\n  if (!IsIntegralNumber(number)) throw new RangeError(`unsupported fractional value ${valueParam}`);\n  if (number === 0) return 0; // ℝ(value) in spec text; converts -0 to 0\n  return number;\n}\n\nfunction divmod(x: JSBI, y: JSBI): { quotient: JSBI; remainder: JSBI } {\n  const quotient = JSBI.divide(x, y);\n  const remainder = JSBI.remainder(x, y);\n  return { quotient, remainder };\n}\n\nfunction isNegativeJSBI(value: JSBI): boolean {\n  return JSBI.lessThan(value, ZERO);\n}\n\nfunction signJSBI(value: JSBI): 1 | 0 | -1 {\n  if (isZero(value)) return 0;\n  if (isNegativeJSBI(value)) return -1;\n  return 1;\n}\nfunction abs(x: JSBI): JSBI {\n  if (JSBI.lessThan(x, ZERO)) return JSBI.multiply(x, NEGATIVE_ONE);\n  return x;\n}\n\ntype BuiltinCastFunction = (v: unknown) => string | number;\nconst BUILTIN_CASTS = new Map<AnyTemporalKey, BuiltinCastFunction>([\n  ['year', ToIntegerWithTruncation],\n  ['month', ToPositiveIntegerWithTruncation],\n  ['monthCode', ToString],\n  ['day', ToPositiveIntegerWithTruncation],\n  ['hour', ToIntegerWithTruncation],\n  ['minute', ToIntegerWithTruncation],\n  ['second', ToIntegerWithTruncation],\n  ['millisecond', ToIntegerWithTruncation],\n  ['microsecond', ToIntegerWithTruncation],\n  ['nanosecond', ToIntegerWithTruncation],\n  ['years', ToIntegerIfIntegral],\n  ['months', ToIntegerIfIntegral],\n  ['weeks', ToIntegerIfIntegral],\n  ['days', ToIntegerIfIntegral],\n  ['hours', ToIntegerIfIntegral],\n  ['minutes', ToIntegerIfIntegral],\n  ['seconds', ToIntegerIfIntegral],\n  ['milliseconds', ToIntegerIfIntegral],\n  ['microseconds', ToIntegerIfIntegral],\n  ['nanoseconds', ToIntegerIfIntegral],\n  ['era', ToString],\n  ['eraYear', ToIntegerOrInfinity],\n  ['offset', ToString]\n]);\n\nconst BUILTIN_DEFAULTS = new Map([\n  ['hour', 0],\n  ['minute', 0],\n  ['second', 0],\n  ['millisecond', 0],\n  ['microsecond', 0],\n  ['nanosecond', 0]\n]);\n\n// each item is [plural, singular, category]\nconst SINGULAR_PLURAL_UNITS = [\n  ['years', 'year', 'date'],\n  ['months', 'month', 'date'],\n  ['weeks', 'week', 'date'],\n  ['days', 'day', 'date'],\n  ['hours', 'hour', 'time'],\n  ['minutes', 'minute', 'time'],\n  ['seconds', 'second', 'time'],\n  ['milliseconds', 'millisecond', 'time'],\n  ['microseconds', 'microsecond', 'time'],\n  ['nanoseconds', 'nanosecond', 'time']\n] as const;\nconst SINGULAR_FOR = new Map(SINGULAR_PLURAL_UNITS.map((e) => [e[0], e[1]] as const));\nconst PLURAL_FOR = new Map(SINGULAR_PLURAL_UNITS.map(([p, s]) => [s, p]));\nconst UNITS_DESCENDING = SINGULAR_PLURAL_UNITS.map(([, s]) => s);\n\nconst DURATION_FIELDS = Array.from(SINGULAR_FOR.keys()).sort();\n\nimport * as PARSE from './regex';\n\nconst IntlDateTimeFormatEnUsCache = new Map<string, Intl.DateTimeFormat>();\n\nfunction getIntlDateTimeFormatEnUsForTimeZone(timeZoneIdentifier: string) {\n  let instance = IntlDateTimeFormatEnUsCache.get(timeZoneIdentifier);\n  if (instance === undefined) {\n    instance = new IntlDateTimeFormat('en-us', {\n      timeZone: StringCtor(timeZoneIdentifier),\n      hour12: false,\n      era: 'short',\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n    IntlDateTimeFormatEnUsCache.set(timeZoneIdentifier, instance);\n  }\n  return instance;\n}\n\nexport function ToObject<T>(value: T): T extends Record<string, unknown> ? T : object {\n  if (typeof value === 'undefined' || value === null) {\n    throw new TypeError(`Expected object not ${value}`);\n  }\n  return Object(value);\n}\n\n// Adapted from https://github.com/ljharb/es-abstract/blob/main/2022/CopyDataProperties.js\n// but simplified (e.g. removed assertions) for this polyfill to reduce bundle size.\nexport function CopyDataProperties<K extends string | symbol, T extends Record<K, unknown>>(\n  target: T,\n  source: T | undefined,\n  excludedKeys: K[],\n  excludedValues?: unknown[]\n) {\n  if (typeof source === 'undefined' || source === null) return;\n\n  const keys = ReflectOwnKeys(source) as (keyof T)[];\n  for (const nextKey of keys) {\n    if (excludedKeys.some((e) => Object.is(e, nextKey))) continue;\n    if (Object.prototype.propertyIsEnumerable.call(source, nextKey)) {\n      const propValue = source[nextKey];\n      if (excludedValues && excludedValues.some((e) => Object.is(e, propValue))) continue;\n\n      target[nextKey] = propValue;\n    }\n  }\n}\n\nexport function IsTemporalInstant(item: unknown): item is Temporal.Instant {\n  return HasSlot(item, EPOCHNANOSECONDS) && !HasSlot(item, TIME_ZONE, CALENDAR);\n}\n\nexport function IsTemporalTimeZone(item: unknown): item is Temporal.TimeZone {\n  return HasSlot(item, TIMEZONE_ID);\n}\nexport function IsTemporalCalendar(item: unknown): item is Temporal.Calendar {\n  return HasSlot(item, CALENDAR_ID);\n}\nexport function IsTemporalDuration(item: unknown): item is Temporal.Duration {\n  return HasSlot(item, YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS);\n}\nexport function IsTemporalDate(item: unknown): item is Temporal.PlainDate {\n  return HasSlot(item, DATE_BRAND);\n}\nexport function IsTemporalTime(item: unknown): item is Temporal.PlainTime {\n  return (\n    HasSlot(item, ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND) &&\n    !HasSlot(item, ISO_YEAR, ISO_MONTH, ISO_DAY)\n  );\n}\nexport function IsTemporalDateTime(item: unknown): item is Temporal.PlainDateTime {\n  return HasSlot(\n    item,\n    ISO_YEAR,\n    ISO_MONTH,\n    ISO_DAY,\n    ISO_HOUR,\n    ISO_MINUTE,\n    ISO_SECOND,\n    ISO_MILLISECOND,\n    ISO_MICROSECOND,\n    ISO_NANOSECOND\n  );\n}\nexport function IsTemporalYearMonth(item: unknown): item is Temporal.PlainYearMonth {\n  return HasSlot(item, YEAR_MONTH_BRAND);\n}\nexport function IsTemporalMonthDay(item: unknown): item is Temporal.PlainMonthDay {\n  return HasSlot(item, MONTH_DAY_BRAND);\n}\nexport function IsTemporalZonedDateTime(item: unknown): item is Temporal.ZonedDateTime {\n  return HasSlot(item, EPOCHNANOSECONDS, TIME_ZONE, CALENDAR);\n}\nexport function RejectTemporalLikeObject(item: AnyTemporalLikeType) {\n  if (HasSlot(item, CALENDAR) || HasSlot(item, TIME_ZONE)) {\n    throw new TypeError('with() does not support a calendar or timeZone property');\n  }\n  if (IsTemporalTime(item)) {\n    throw new TypeError('with() does not accept Temporal.PlainTime, use withPlainTime() instead');\n  }\n  if ((item as { calendar: unknown }).calendar !== undefined) {\n    throw new TypeError('with() does not support a calendar property');\n  }\n  if ((item as { timeZone: unknown }).timeZone !== undefined) {\n    throw new TypeError('with() does not support a timeZone property');\n  }\n}\nfunction ParseTemporalTimeZone(stringIdent: string) {\n  const { ianaName, offset, z } = ParseTemporalTimeZoneString(stringIdent);\n  if (ianaName) return GetCanonicalTimeZoneIdentifier(ianaName);\n  if (z) return 'UTC';\n  // if !ianaName && !z then offset must be present\n  assertExists(offset);\n  const offsetNs = ParseTimeZoneOffsetString(offset);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nfunction MaybeFormatCalendarAnnotation(\n  calendar: CalendarSlot,\n  showCalendar: Temporal.ShowCalendarOption['calendarName']\n): string {\n  if (showCalendar === 'never') return '';\n  return FormatCalendarAnnotation(ToTemporalCalendarIdentifier(calendar), showCalendar);\n}\n\nfunction FormatCalendarAnnotation(id: string, showCalendar: Temporal.ShowCalendarOption['calendarName']) {\n  if (showCalendar === 'never') return '';\n  if (showCalendar === 'auto' && id === 'iso8601') return '';\n  const flag = showCalendar === 'critical' ? '!' : '';\n  return `[${flag}u-ca=${id}]`;\n}\n\nfunction ParseISODateTime(isoString: string) {\n  // ZDT is the superset of fields for every other Temporal type\n  const match = PARSE.zoneddatetime.exec(isoString);\n  if (!match) throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  let yearString = match[1];\n  if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n  if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n  const year = ToIntegerOrInfinity(yearString);\n  const month = ToIntegerOrInfinity(match[2] || match[4]);\n  const day = ToIntegerOrInfinity(match[3] || match[5]);\n  const hour = ToIntegerOrInfinity(match[6]);\n  const hasTime = match[6] !== undefined;\n  const minute = ToIntegerOrInfinity(match[7] || match[10]);\n  let second = ToIntegerOrInfinity(match[8] || match[11]);\n  if (second === 60) second = 59;\n  const fraction = (match[9] || match[12]) + '000000000';\n  const millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n  const microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n  const nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n  let offset;\n  let z = false;\n  if (match[13]) {\n    offset = undefined;\n    z = true;\n  } else if (match[14] && match[15]) {\n    const offsetSign = match[14] === '-' || match[14] === '\\u2212' ? '-' : '+';\n    const offsetHours = match[15] || '00';\n    const offsetMinutes = match[16] || '00';\n    const offsetSeconds = match[17] || '00';\n    let offsetFraction = match[18] || '0';\n    offset = `${offsetSign}${offsetHours}:${offsetMinutes}`;\n    if (+offsetFraction) {\n      while (offsetFraction.endsWith('0')) offsetFraction = offsetFraction.slice(0, -1);\n      offset += `:${offsetSeconds}.${offsetFraction}`;\n    } else if (+offsetSeconds) {\n      offset += `:${offsetSeconds}`;\n    }\n    if (offset === '-00:00') offset = '+00:00';\n  }\n  const ianaName = match[19];\n  const annotations = match[20];\n  let calendar;\n  for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n    if (key === 'u-ca') {\n      if (calendar === undefined) calendar = value;\n    } else if (critical === '!') {\n      throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n    }\n  }\n  RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  return {\n    year,\n    month,\n    day,\n    hasTime,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    ianaName,\n    offset,\n    z,\n    calendar\n  };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstantString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.z && !result.offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalZonedDateTimeString(isoString: string) {\n  const result = ParseISODateTime(isoString);\n  if (!result.ianaName) throw new RangeError('Temporal.ZonedDateTime requires a time zone ID in brackets');\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateTimeString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDateString(isoString: string) {\n  return ParseISODateTime(isoString);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeString(isoString: string) {\n  const match = PARSE.time.exec(isoString);\n  let hour, minute, second, millisecond, microsecond, nanosecond, annotations;\n  if (match) {\n    hour = ToIntegerOrInfinity(match[1]);\n    minute = ToIntegerOrInfinity(match[2] || match[5]);\n    second = ToIntegerOrInfinity(match[3] || match[6]);\n    if (second === 60) second = 59;\n    const fraction = (match[4] || match[7]) + '000000000';\n    millisecond = ToIntegerOrInfinity(fraction.slice(0, 3));\n    microsecond = ToIntegerOrInfinity(fraction.slice(3, 6));\n    nanosecond = ToIntegerOrInfinity(fraction.slice(6, 9));\n    annotations = match[14];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key !== 'u-ca' && critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (match[8]) throw new RangeError('Z designator not supported for PlainTime');\n  } else {\n    let z, hasTime;\n    ({ hasTime, hour, minute, second, millisecond, microsecond, nanosecond, z } = ParseISODateTime(isoString));\n    if (!hasTime) throw new RangeError(`time is missing in string: ${isoString}`);\n    if (z) throw new RangeError('Z designator not supported for PlainTime');\n  }\n  // if it's a date-time string, OK\n  if (/[tT ][0-9][0-9]/.test(isoString)) {\n    return { hour, minute, second, millisecond, microsecond, nanosecond };\n  }\n  try {\n    const { month, day } = ParseTemporalMonthDayString(isoString);\n    RejectISODate(1972, month, day);\n  } catch {\n    try {\n      const { year, month } = ParseTemporalYearMonthString(isoString);\n      RejectISODate(year, month, 1);\n    } catch {\n      return { hour, minute, second, millisecond, microsecond, nanosecond };\n    }\n  }\n  throw new RangeError(`invalid ISO 8601 time-only string ${isoString}; may need a T prefix`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalYearMonthString(isoString: string) {\n  const match = PARSE.yearmonth.exec(isoString);\n  let year, month, calendar, referenceISODay;\n  if (match) {\n    let yearString = match[1];\n    if (yearString[0] === '\\u2212') yearString = `-${yearString.slice(1)}`;\n    if (yearString === '-000000') throw new RangeError(`invalid ISO 8601 string: ${isoString}`);\n    year = ToIntegerOrInfinity(yearString);\n    month = ToIntegerOrInfinity(match[2]);\n    const annotations = match[3];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key === 'u-ca') {\n        if (calendar === undefined) calendar = value;\n      } else if (critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('YYYY-MM format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ year, month, calendar, day: referenceISODay, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainYearMonth');\n  }\n  return { year, month, calendar, referenceISODay };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalMonthDayString(isoString: string) {\n  const match = PARSE.monthday.exec(isoString);\n  let month, day, calendar, referenceISOYear;\n  if (match) {\n    month = ToIntegerOrInfinity(match[1]);\n    day = ToIntegerOrInfinity(match[2]);\n    const annotations = match[3];\n    for (const [, critical, key, value] of annotations.matchAll(PARSE.annotation)) {\n      if (key === 'u-ca') {\n        if (calendar === undefined) calendar = value;\n      } else if (critical === '!') {\n        throw new RangeError(`Unrecognized annotation: !${key}=${value}`);\n      }\n    }\n    if (calendar !== undefined && calendar !== 'iso8601') {\n      throw new RangeError('MM-DD format is only valid with iso8601 calendar');\n    }\n  } else {\n    let z;\n    ({ month, day, calendar, year: referenceISOYear, z } = ParseISODateTime(isoString));\n    if (z) throw new RangeError('Z designator not supported for PlainMonthDay');\n  }\n  return { month, day, calendar, referenceISOYear };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalTimeZoneString(stringIdent: string): Partial<{\n  ianaName: string | undefined;\n  offset: string | undefined;\n  z: boolean | undefined;\n}> {\n  const bareID = new RegExp(`^${PARSE.timeZoneID.source}$`, 'i');\n  if (bareID.test(stringIdent)) return { ianaName: stringIdent };\n  try {\n    // Try parsing ISO string instead\n    const result = ParseISODateTime(stringIdent);\n    if (result.z || result.offset || result.ianaName) {\n      return result;\n    }\n  } catch {\n    // fall through\n  }\n  throw new RangeError(`Invalid time zone: ${stringIdent}`);\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalDurationString(isoString: string) {\n  const match = PARSE.duration.exec(isoString);\n  if (!match) throw new RangeError(`invalid duration: ${isoString}`);\n  if (match.slice(2).every((element) => element === undefined)) {\n    throw new RangeError(`invalid duration: ${isoString}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : 1;\n  const years = match[2] === undefined ? 0 : ToIntegerWithTruncation(match[2]) * sign;\n  const months = match[3] === undefined ? 0 : ToIntegerWithTruncation(match[3]) * sign;\n  const weeks = match[4] === undefined ? 0 : ToIntegerWithTruncation(match[4]) * sign;\n  const days = match[5] === undefined ? 0 : ToIntegerWithTruncation(match[5]) * sign;\n  const hours = match[6] === undefined ? 0 : ToIntegerWithTruncation(match[6]) * sign;\n  const fHours = match[7];\n  const minutesStr = match[8];\n  const fMinutes = match[9];\n  const secondsStr = match[10];\n  const fSeconds = match[11];\n  let minutes = 0;\n  let seconds = 0;\n  // fractional hours, minutes, or seconds, expressed in whole nanoseconds:\n  let excessNanoseconds = 0;\n\n  if (fHours !== undefined) {\n    if (minutesStr ?? fMinutes ?? secondsStr ?? fSeconds ?? false) {\n      throw new RangeError('only the smallest unit can be fractional');\n    }\n    excessNanoseconds = ToIntegerOrInfinity((fHours + '000000000').slice(0, 9)) * 3600 * sign;\n  } else {\n    minutes = minutesStr === undefined ? 0 : ToIntegerWithTruncation(minutesStr) * sign;\n    if (fMinutes !== undefined) {\n      if (secondsStr ?? fSeconds ?? false) {\n        throw new RangeError('only the smallest unit can be fractional');\n      }\n      excessNanoseconds = ToIntegerOrInfinity((fMinutes + '000000000').slice(0, 9)) * 60 * sign;\n    } else {\n      seconds = secondsStr === undefined ? 0 : ToIntegerWithTruncation(secondsStr) * sign;\n      if (fSeconds !== undefined) {\n        excessNanoseconds = ToIntegerOrInfinity((fSeconds + '000000000').slice(0, 9)) * sign;\n      }\n    }\n  }\n\n  const nanoseconds = excessNanoseconds % 1000;\n  const microseconds = MathTrunc(excessNanoseconds / 1000) % 1000;\n  const milliseconds = MathTrunc(excessNanoseconds / 1e6) % 1000;\n  seconds += MathTrunc(excessNanoseconds / 1e9) % 60;\n  minutes += MathTrunc(excessNanoseconds / 6e10);\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\n// ts-prune-ignore-next TODO: remove if test/validStrings is converted to TS.\nexport function ParseTemporalInstant(isoString: string) {\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, offset, z } =\n    ParseTemporalInstantString(isoString);\n\n  if (!z && !offset) throw new RangeError('Temporal.Instant requires a time zone offset');\n  // At least one of z or offset is defined, but TS doesn't seem to understand\n  // that we only use offset if z is not defined (and thus offset must be defined).\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unnecessary-type-assertion\n  const offsetNs = z ? 0 : ParseTimeZoneOffsetString(offset!);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond - offsetNs\n  ));\n\n  const epochNs = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n  return epochNs;\n}\n\nexport function RegulateISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, day);\n      break;\n    case 'constrain':\n      ({ year, month, day } = ConstrainISODate(year, month, day));\n      break;\n  }\n  return { year, month, day };\n}\n\nexport function RegulateTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  switch (overflow) {\n    case 'reject':\n      RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n      break;\n    case 'constrain':\n      ({ hour, minute, second, millisecond, microsecond, nanosecond } = ConstrainTime(\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond\n      ));\n      break;\n  }\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RegulateISOYearMonth(\n  yearParam: number,\n  monthParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  const referenceISODay = 1;\n  switch (overflow) {\n    case 'reject':\n      RejectISODate(year, month, referenceISODay);\n      break;\n    case 'constrain':\n      ({ year, month } = ConstrainISODate(year, month));\n      break;\n  }\n  return { year, month };\n}\n\nfunction ToTemporalDurationRecord(item: Temporal.DurationLike | string) {\n  if (!IsObject(item)) {\n    return ParseTemporalDurationString(ToString(item));\n  }\n  if (IsTemporalDuration(item)) {\n    return {\n      years: GetSlot(item, YEARS),\n      months: GetSlot(item, MONTHS),\n      weeks: GetSlot(item, WEEKS),\n      days: GetSlot(item, DAYS),\n      hours: GetSlot(item, HOURS),\n      minutes: GetSlot(item, MINUTES),\n      seconds: GetSlot(item, SECONDS),\n      milliseconds: GetSlot(item, MILLISECONDS),\n      microseconds: GetSlot(item, MICROSECONDS),\n      nanoseconds: GetSlot(item, NANOSECONDS)\n    };\n  }\n  const result = {\n    years: 0,\n    months: 0,\n    weeks: 0,\n    days: 0,\n    hours: 0,\n    minutes: 0,\n    seconds: 0,\n    milliseconds: 0,\n    microseconds: 0,\n    nanoseconds: 0\n  };\n  let partial = ToTemporalPartialDurationRecord(item);\n  for (const property of DURATION_FIELDS) {\n    const value = partial[property];\n    if (value !== undefined) {\n      result[property] = value;\n    }\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = result;\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction ToTemporalPartialDurationRecord(temporalDurationLike: Temporal.DurationLike | string) {\n  if (!IsObject(temporalDurationLike)) {\n    throw new TypeError('invalid duration-like');\n  }\n  const result: Record<typeof DURATION_FIELDS[number], number | undefined> = {\n    years: undefined,\n    months: undefined,\n    weeks: undefined,\n    days: undefined,\n    hours: undefined,\n    minutes: undefined,\n    seconds: undefined,\n    milliseconds: undefined,\n    microseconds: undefined,\n    nanoseconds: undefined\n  };\n  let any = false;\n  for (const property of DURATION_FIELDS) {\n    const value = temporalDurationLike[property];\n    if (value !== undefined) {\n      any = true;\n      result[property] = ToIntegerIfIntegral(value);\n    }\n  }\n  if (!any) {\n    throw new TypeError('invalid duration-like');\n  }\n  return result;\n}\n\nfunction ToLimitedTemporalDuration(\n  item: Temporal.DurationLike | string,\n  disallowedProperties: (keyof Temporal.DurationLike)[]\n) {\n  let record = ToTemporalDurationRecord(item);\n  for (const property of disallowedProperties) {\n    if (record[property] !== 0) {\n      throw new RangeError(\n        `Duration field ${property} not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.`\n      );\n    }\n  }\n  return record;\n}\n\nexport function ToTemporalOverflow(options: Temporal.AssignmentOptions | undefined) {\n  if (options === undefined) return 'constrain';\n  return GetOption(options, 'overflow', ['constrain', 'reject'], 'constrain');\n}\n\nexport function ToTemporalDisambiguation(options: Temporal.ToInstantOptions | undefined) {\n  if (options === undefined) return 'compatible';\n  return GetOption(options, 'disambiguation', ['compatible', 'earlier', 'later', 'reject'], 'compatible');\n}\n\nexport function ToTemporalRoundingMode(\n  options: { roundingMode?: Temporal.RoundingMode },\n  fallback: Temporal.RoundingMode\n) {\n  return GetOption(\n    options,\n    'roundingMode',\n    ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'],\n    fallback\n  );\n}\n\nfunction NegateTemporalRoundingMode(roundingMode: Temporal.RoundingMode) {\n  switch (roundingMode) {\n    case 'ceil':\n      return 'floor';\n    case 'floor':\n      return 'ceil';\n    case 'halfCeil':\n      return 'halfFloor';\n    case 'halfFloor':\n      return 'halfCeil';\n    default:\n      return roundingMode;\n  }\n}\n\nexport function ToTemporalOffset(\n  options: Temporal.OffsetDisambiguationOptions | undefined,\n  fallback: Required<Temporal.OffsetDisambiguationOptions>['offset']\n) {\n  if (options === undefined) return fallback;\n  return GetOption(options, 'offset', ['prefer', 'use', 'ignore', 'reject'], fallback);\n}\n\nexport function ToCalendarNameOption(options: Temporal.ShowCalendarOption) {\n  return GetOption(options, 'calendarName', ['auto', 'always', 'never', 'critical'], 'auto');\n}\n\nexport function ToTimeZoneNameOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'timeZoneName', ['auto', 'never', 'critical'], 'auto');\n}\n\nexport function ToShowOffsetOption(options: Temporal.ZonedDateTimeToStringOptions) {\n  return GetOption(options, 'offset', ['auto', 'never'], 'auto');\n}\n\nexport function ToTemporalRoundingIncrement(options: { roundingIncrement?: number }) {\n  let increment = options.roundingIncrement;\n  if (increment === undefined) return 1;\n  increment = ToNumber(increment);\n  if (!NumberIsFinite(increment)) {\n    throw new RangeError('roundingIncrement must be finite');\n  }\n  const integerIncrement = MathTrunc(increment);\n  if (integerIncrement < 1 || integerIncrement > 1e9) {\n    throw new RangeError(`roundingIncrement must be at least 1 and at most 1e9, not ${increment}`);\n  }\n  return integerIncrement;\n}\nexport function ValidateTemporalRoundingIncrement(increment: number, dividend: number, inclusive: boolean) {\n  const maximum = inclusive ? dividend : dividend - 1;\n  if (increment > maximum) {\n    throw new RangeError(`roundingIncrement must be at least 1 and less than ${maximum}, not ${increment}`);\n  }\n  if (dividend % increment !== 0) {\n    throw new RangeError(`Rounding increment must divide evenly into ${dividend}`);\n  }\n}\n\nexport function ToFractionalSecondDigits(\n  normalizedOptions: Temporal.ToStringPrecisionOptions\n): Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] {\n  const digitsValue = normalizedOptions.fractionalSecondDigits;\n  if (digitsValue === undefined) return 'auto';\n  if (typeof digitsValue !== 'number') {\n    if (ToString(digitsValue) !== 'auto') {\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n    }\n    return 'auto';\n  }\n  const digitCount = MathFloor(digitsValue);\n  if (!NumberIsFinite(digitCount) || digitCount < 0 || digitCount > 9) {\n    throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${digitsValue}`);\n  }\n  return digitCount as Exclude<Temporal.ToStringPrecisionOptions['fractionalSecondDigits'], 'auto'>;\n}\n\nexport function ToSecondsStringPrecisionRecord(\n  smallestUnit: Temporal.ToStringPrecisionOptions['smallestUnit'],\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits']\n): {\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] | 'minute';\n  unit: UnitSmallerThanOrEqualTo<'minute'>;\n  increment: number;\n} {\n  switch (smallestUnit) {\n    case 'minute':\n      return { precision: 'minute', unit: 'minute', increment: 1 };\n    case 'second':\n      return { precision: 0, unit: 'second', increment: 1 };\n    case 'millisecond':\n      return { precision: 3, unit: 'millisecond', increment: 1 };\n    case 'microsecond':\n      return { precision: 6, unit: 'microsecond', increment: 1 };\n    case 'nanosecond':\n      return { precision: 9, unit: 'nanosecond', increment: 1 };\n    default: // fall through if option not given\n  }\n  switch (precision) {\n    case 'auto':\n      return { precision, unit: 'nanosecond', increment: 1 };\n    case 0:\n      return { precision, unit: 'second', increment: 1 };\n    case 1:\n    case 2:\n    case 3:\n      return { precision, unit: 'millisecond', increment: 10 ** (3 - precision) };\n    case 4:\n    case 5:\n    case 6:\n      return { precision, unit: 'microsecond', increment: 10 ** (6 - precision) };\n    case 7:\n    case 8:\n    case 9:\n      return { precision, unit: 'nanosecond', increment: 10 ** (9 - precision) };\n    default:\n      throw new RangeError(`fractionalSecondDigits must be 'auto' or 0 through 9, not ${precision}`);\n  }\n}\n\nexport const REQUIRED = Symbol('~required~');\n\ninterface TemporalUnitOptionsBag {\n  smallestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n  largestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit | 'auto';\n  unit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;\n}\ntype UnitTypeMapping = {\n  date: Temporal.DateUnit;\n  time: Temporal.TimeUnit;\n  datetime: Temporal.DateTimeUnit;\n};\n// This type specifies the allowed defaults for each unit key type.\ntype AllowedGetTemporalUnitDefaultValues = {\n  smallestUnit: undefined;\n  largestUnit: 'auto' | undefined;\n  unit: undefined;\n};\n\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  R extends Exclude<D, typeof REQUIRED> | UnitTypeMapping[T]\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D): R;\nexport function GetTemporalUnit<\n  U extends keyof TemporalUnitOptionsBag,\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D, extraValues: ReadonlyArray<E>): R;\n// This signature of the function is NOT used in type-checking, so restricting\n// the default value via generic binding like the other overloads isn't\n// necessary.\nexport function GetTemporalUnit<\n  T extends keyof UnitTypeMapping,\n  D extends typeof REQUIRED | UnitTypeMapping[T] | 'auto' | undefined,\n  E extends 'auto' | Temporal.DateTimeUnit,\n  R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E\n>(\n  options: TemporalUnitOptionsBag,\n  key: keyof typeof options,\n  unitGroup: T,\n  requiredOrDefault: D,\n  extraValues: ReadonlyArray<E> | never[] = []\n): R {\n  const allowedSingular: Array<Temporal.DateTimeUnit | 'auto'> = [];\n  for (const [, singular, category] of SINGULAR_PLURAL_UNITS) {\n    if (unitGroup === 'datetime' || unitGroup === category) {\n      allowedSingular.push(singular);\n    }\n  }\n  allowedSingular.push(...extraValues);\n  let defaultVal: typeof REQUIRED | Temporal.DateTimeUnit | 'auto' | undefined = requiredOrDefault;\n  if (defaultVal === REQUIRED) {\n    defaultVal = undefined;\n  } else if (defaultVal !== undefined) {\n    allowedSingular.push(defaultVal);\n  }\n  const allowedValues: Array<Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit> | 'auto'> = [\n    ...allowedSingular\n  ];\n  for (const singular of allowedSingular) {\n    const plural = PLURAL_FOR.get(singular as Parameters<typeof PLURAL_FOR.get>[0]);\n    if (plural !== undefined) allowedValues.push(plural);\n  }\n  let retval = GetOption(options, key, allowedValues, defaultVal);\n  if (retval === undefined && requiredOrDefault === REQUIRED) {\n    throw new RangeError(`${key} is required`);\n  }\n  // Coerce any plural units into their singular form\n  if (SINGULAR_FOR.has(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)) {\n    // We just has-checked this, but tsc doesn't understand that.\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return SINGULAR_FOR.get(retval as Temporal.PluralUnit<Temporal.DateTimeUnit>)! as R;\n  }\n  return retval as R;\n}\n\nexport function ToRelativeTemporalObject(options: {\n  relativeTo?:\n    | Temporal.ZonedDateTime\n    | Temporal.PlainDateTime\n    | Temporal.ZonedDateTimeLike\n    | Temporal.PlainDateTimeLike\n    | string\n    | undefined;\n}): Temporal.ZonedDateTime | Temporal.PlainDate | undefined {\n  const relativeTo = options.relativeTo;\n  if (relativeTo === undefined) return relativeTo;\n\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  let matchMinutes = false;\n  let year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, timeZone, offset;\n  if (IsObject(relativeTo)) {\n    if (IsTemporalZonedDateTime(relativeTo) || IsTemporalDate(relativeTo)) return relativeTo;\n    if (IsTemporalDateTime(relativeTo)) return TemporalDateTimeToDate(relativeTo);\n    calendar = GetTemporalCalendarSlotValueWithISODefault(relativeTo);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    type FieldNamesWithTimeZoneAndOffset = ArrayWithNewKeys<typeof fieldNames, 'timeZone' | 'offset'>;\n    (fieldNames as FieldNamesWithTimeZoneAndOffset).push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(relativeTo, fieldNames, []);\n    const dateOptions = ObjectCreate(null) as Temporal.AssignmentOptions;\n    dateOptions.overflow = 'constrain';\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      dateOptions\n    ));\n    offset = fields.offset;\n    if (offset === undefined) offsetBehaviour = 'wall';\n    timeZone = fields.timeZone;\n    if (timeZone !== undefined) timeZone = ToTemporalTimeZoneSlotValue(timeZone);\n  } else {\n    let ianaName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, ianaName, offset, z } =\n      ParseISODateTime(ToString(relativeTo)));\n    if (ianaName) {\n      timeZone = ToTemporalTimeZoneSlotValue(ianaName);\n      if (z) {\n        offsetBehaviour = 'exact';\n      } else if (!offset) {\n        offsetBehaviour = 'wall';\n      }\n      matchMinutes = true;\n    } else if (z) {\n      throw new RangeError(\n        'Z designator not supported for PlainDate relativeTo; either remove the Z or add a bracketed time zone'\n      );\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  if (timeZone === undefined) return CreateTemporalDate(year, month, day, calendar);\n  // If offset is missing here, then offsetBehavior will never be be 'option'.\n  assertExists(offset);\n  const offsetNs = offsetBehaviour === 'option' ? ParseTimeZoneOffsetString(offset) : 0;\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    'compatible',\n    'reject',\n    matchMinutes\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function DefaultTemporalLargestUnit(\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n): Temporal.DateTimeUnit {\n  for (const [prop, v] of [\n    ['years', years],\n    ['months', months],\n    ['weeks', weeks],\n    ['days', days],\n    ['hours', hours],\n    ['minutes', minutes],\n    ['seconds', seconds],\n    ['milliseconds', milliseconds],\n    ['microseconds', microseconds],\n    ['nanoseconds', nanoseconds]\n  ] as const) {\n    if (v !== 0) {\n      // All the above keys are definitely in SINGULAR_FOR\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return SINGULAR_FOR.get(prop)!;\n    }\n  }\n  return 'nanosecond';\n}\n\nexport function LargerOfTwoTemporalUnits<T1 extends Temporal.DateTimeUnit, T2 extends Temporal.DateTimeUnit>(\n  unit1: T1,\n  unit2: T2\n) {\n  if (UNITS_DESCENDING.indexOf(unit1) > UNITS_DESCENDING.indexOf(unit2)) return unit2;\n  return unit1;\n}\n\ntype FieldCompleteness = 'complete' | 'partial';\ninterface FieldPrepareOptions {\n  emptySourceErrorMessage: string;\n}\n\n// Returns all potential owners from all Temporal Like-types for a given union\n// of keys in K.\n// e.g.\n// Owner<'nanosecond'> => PlainDateTimeLike | ZonedDateTimeLike | PlainDateTimeLike | ZonedDateTimeLike\n// Owner<'nanoseconds'> => Duration (the only type with plural keys)\ntype Owner<K extends AnyTemporalKey> =\n  // Conditional typing maps over all of the types given in AnyTemporalLikeType\n  // union\n  K extends unknown ? OwnerOf<K, AnyTemporalLikeType> : 'ThisShouldNeverHappen';\n\n// Returns T iff T has K as all of the key(s) (even if those keys are optional\n// in T), never otherwise. This is a private type for use only in the Owner type\n// above.\ntype OwnerOf<K extends AnyTemporalKey, T> =\n  // Distribute the union before passing to Required\n  // Without distributing, this is\n  // Required<ZonedDateTimeLike | DurationLike> extends Record\n  // vs (with distribution)\n  // Required<ZonedDateTimeLike> extends Record<....> | Required<DurationLike> extends Record<....>\n  T extends unknown\n    ? // All the keys in the Like-types are optional, so in order for them to\n      // 'extend Record<K,...>', where K indicates the required fields, we pass T\n      // through Required to make all the keys non-optional.\n      // Note this doesn't work the other way around: using Partial<Record<K, ..>>\n      // will always be extended by any object (as all the keys are optional).\n      Required<T> extends Record<K, unknown>\n      ? T\n      : // never is the 'identity' type for unions - nothing will be added or\n        // removed from the union.\n        never\n    : 'ThisShouldNeverHappen';\n\ntype Prop<T, K> = T extends unknown ? (K extends keyof T ? T[K] : undefined) : 'ThisShouldNeverHappen';\n\n// Resolve copies the keys and values of a given object type so that TS will\n// stop using type names in error messages / autocomplete. Generally, those\n// names can be more useful, but sometimes having the primitive object shape is\n// significantly easier to reason about (e.g. deeply-nested types).\n// Resolve is an identity function for function types.\ntype Resolve<T> =\n  // Re-mapping doesn't work very well for functions, so exclude them\n  T extends (...args: never[]) => unknown\n    ? T\n    : // Re-map all the keys in T to the same value. This forces TS into no longer\n      // using type aliases, etc.\n      { [K in keyof T]: T[K] };\n\ntype FieldObjectFromOwners<OwnerT, FieldKeys extends AnyTemporalKey> = Resolve<\n  // The resulting object type contains:\n  // - All keys in FieldKeys, which are required properties and their values\n  //   don't include undefined.\n  // - All the other keys in OwnerT that aren't in FieldKeys, which are optional\n  //   properties and their value types explicitly include undefined.\n  {\n    -readonly [k in FieldKeys]: Exclude<Prop<OwnerT, k>, undefined>;\n  } & {\n    -readonly [k in Exclude<Keys<OwnerT>, FieldKeys>]?: Prop<OwnerT, k> | undefined;\n  }\n>;\n\ntype PrepareTemporalFieldsReturn<\n  FieldKeys extends AnyTemporalKey,\n  RequiredFieldsOpt extends ReadonlyArray<FieldKeys> | FieldCompleteness,\n  OwnerT extends Owner<FieldKeys>\n> = RequiredFieldsOpt extends 'partial' ? Partial<OwnerT> : FieldObjectFromOwners<OwnerT, FieldKeys>;\nexport function PrepareTemporalFields<\n  FieldKeys extends AnyTemporalKey,\n  // Constrains the Required keys to be a subset of the given field keys\n  // This could have been written directly into the parameter type, but that\n  // causes an unintended effect where the required fields are added to the list\n  // of field keys, even if that key isn't present in 'fields'.\n  // RequiredFieldKeys extends FieldKeys,\n  RequiredFields extends ReadonlyArray<FieldKeys> | FieldCompleteness\n>(\n  bag: Partial<Record<FieldKeys, unknown>>,\n  fields: Array<FieldKeys>,\n  requiredFields: RequiredFields,\n  { emptySourceErrorMessage }: FieldPrepareOptions = { emptySourceErrorMessage: 'no supported properties found' }\n): PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>> {\n  const result: Partial<Record<AnyTemporalKey, unknown>> = ObjectCreate(null);\n  let any = false;\n  fields.sort();\n  for (const property of fields) {\n    let value = bag[property];\n    if (value !== undefined) {\n      any = true;\n      if (BUILTIN_CASTS.has(property)) {\n        // We just has-checked this map access, so there will definitely be a\n        // value.\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        value = BUILTIN_CASTS.get(property)!(value);\n      }\n      result[property] = value;\n    } else if (requiredFields !== 'partial') {\n      // TODO: using .call in this way is not correctly type-checked by tsc.\n      // We might need a type-safe Call wrapper?\n      if (ArrayIncludes.call(requiredFields, property)) {\n        throw new TypeError(`required property '${property}' missing or undefined`);\n      }\n      value = BUILTIN_DEFAULTS.get(property);\n      result[property] = value;\n    }\n  }\n  if (requiredFields === 'partial' && !any) {\n    throw new TypeError(emptySourceErrorMessage);\n  }\n  return result as unknown as PrepareTemporalFieldsReturn<FieldKeys, RequiredFields, Owner<FieldKeys>>;\n}\n\ninterface TimeRecord {\n  hour?: number;\n  minute?: number;\n  second?: number;\n  microsecond?: number;\n  millisecond?: number;\n  nanosecond?: number;\n}\nexport function ToTemporalTimeRecord(bag: Partial<Record<keyof TimeRecord, string | number>>): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: 'partial'\n): Partial<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number>>,\n  completeness: 'complete'\n): Required<TimeRecord>;\nexport function ToTemporalTimeRecord(\n  bag: Partial<Record<keyof TimeRecord, string | number | undefined>>,\n  completeness: FieldCompleteness = 'complete'\n): Partial<TimeRecord> {\n  // NOTE: Field order is sorted to make the sort in PrepareTemporalFields more efficient.\n  const fields: (keyof TimeRecord)[] = ['hour', 'microsecond', 'millisecond', 'minute', 'nanosecond', 'second'];\n  const partial = PrepareTemporalFields(bag, fields, 'partial', { emptySourceErrorMessage: 'invalid time-like' });\n  const result: Partial<TimeRecord> = {};\n  for (const field of fields) {\n    const valueDesc = ObjectGetOwnPropertyDescriptor(partial, field);\n    if (valueDesc !== undefined) {\n      result[field] = valueDesc.value;\n    } else if (completeness === 'complete') {\n      result[field] = 0;\n    }\n  }\n  return result;\n}\n\nexport function ToTemporalDate(\n  itemParam: PlainDateParams['from'][0],\n  options?: PlainDateParams['from'][1]\n): Temporal.PlainDate {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalDate(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarDateFromFields(calendar, fields, options);\n  }\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, day, calendar, z } = ParseTemporalDateString(ToString(item));\n  if (z) throw new RangeError('Z designator not supported for PlainDate');\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n  return CreateTemporalDate(year, month, day, calendar);\n}\n\nexport function InterpretTemporalDateTimeFields(\n  calendar: CalendarSlot,\n  fields: PrimitiveFieldsOf<Temporal.PlainDateTimeLike> & Parameters<typeof CalendarDateFromFields>[1],\n  options?: Temporal.AssignmentOptions\n) {\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(fields);\n  const overflow = ToTemporalOverflow(options);\n  const date = CalendarDateFromFields(calendar, fields, options);\n  const year = GetSlot(date, ISO_YEAR);\n  const month = GetSlot(date, ISO_MONTH);\n  const day = GetSlot(date, ISO_DAY);\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    overflow\n  ));\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function ToTemporalDateTime(item: PlainDateTimeParams['from'][0], options?: PlainDateTimeParams['from'][1]) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    calendar;\n  if (IsObject(item)) {\n    if (IsTemporalDateTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDate(item)) {\n      ToTemporalOverflow(options); // validate and ignore\n      return CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        GetSlot(item, CALENDAR)\n      );\n    }\n\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    ToTemporalOverflow(options); // validate and ignore\n    let z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar, z } =\n      ParseTemporalDateTimeString(ToString(item)));\n    if (z) throw new RangeError('Z designator not supported for PlainDateTime');\n    RejectDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n  }\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function ToTemporalDuration(item: DurationParams['from'][0]) {\n  if (IsTemporalDuration(item)) return item;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(item);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n}\n\nexport function ToTemporalInstant(item: InstantParams['from'][0]) {\n  if (IsTemporalInstant(item)) return item;\n  if (IsTemporalZonedDateTime(item)) {\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(item, EPOCHNANOSECONDS));\n  }\n  const ns = ParseTemporalInstant(ToString(item));\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  return new TemporalInstant(ns);\n}\n\nexport function ToTemporalMonthDay(\n  itemParam: PlainMonthDayParams['from'][0],\n  options?: PlainMonthDayParams['from'][1]\n) {\n  let item = itemParam;\n  if (IsObject(item)) {\n    if (IsTemporalMonthDay(item)) return item;\n    let calendar: CalendarSlot, calendarAbsent: boolean;\n    if (HasSlot(item, CALENDAR)) {\n      calendar = GetSlot(item, CALENDAR);\n      calendarAbsent = false;\n    } else {\n      let calendarFromItem = item.calendar;\n      calendarAbsent = calendarFromItem === undefined;\n      if (calendarFromItem === undefined) calendarFromItem = 'iso8601';\n      calendar = ToTemporalCalendarSlotValue(calendarFromItem);\n    }\n    // HasSlot above adjusts the type of 'item' to include\n    // TypesWithCalendarUnits, which causes type-inference failures below.\n    // This is probably indicative of problems with HasSlot's typing.\n    const fieldNames = CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    // Callers who omit the calendar are not writing calendar-independent\n    // code. In that case, `monthCode`/`year` can be omitted; `month` and\n    // `day` are sufficient. Add a `year` to satisfy calendar validation.\n    if (calendarAbsent && fields.month !== undefined && fields.monthCode === undefined && fields.year === undefined) {\n      fields.year = 1972;\n    }\n    return CalendarMonthDayFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { month, day, referenceISOYear, calendar } = ParseTemporalMonthDayString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISOYear === undefined) {\n    RejectISODate(1972, month, day);\n    return CreateTemporalMonthDay(month, day, calendar);\n  }\n  const result = CreateTemporalMonthDay(month, day, calendar, referenceISOYear);\n  return CalendarMonthDayFromFields(calendar, result);\n}\n\nexport function ToTemporalTime(\n  itemParam: PlainTimeParams['from'][0],\n  overflow: NonNullable<PlainTimeParams['from'][1]>['overflow'] = 'constrain'\n) {\n  let item = itemParam;\n  let hour, minute, second, millisecond, microsecond, nanosecond;\n  if (IsObject(item)) {\n    if (IsTemporalTime(item)) return item;\n    if (IsTemporalZonedDateTime(item)) {\n      item = GetPlainDateTimeFor(GetSlot(item, TIME_ZONE), GetSlot(item, INSTANT), GetSlot(item, CALENDAR));\n    }\n    if (IsTemporalDateTime(item)) {\n      const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n      return new TemporalPlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ToTemporalTimeRecord(item));\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n  } else {\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ParseTemporalTimeString(ToString(item)));\n    RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  const TemporalPlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new TemporalPlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function ToTemporalYearMonth(\n  item: PlainYearMonthParams['from'][0],\n  options?: PlainYearMonthParams['from'][1]\n): Temporal.PlainYearMonth {\n  if (IsObject(item)) {\n    if (IsTemporalYearMonth(item)) return item;\n    const calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames = CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    const fields = PrepareTemporalFields(item, fieldNames, []);\n    return CalendarYearMonthFromFields(calendar, fields, options);\n  }\n\n  ToTemporalOverflow(options); // validate and ignore\n  let { year, month, referenceISODay, calendar } = ParseTemporalYearMonthString(ToString(item));\n  if (calendar === undefined) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  calendar = ASCIILowercase(calendar);\n\n  if (referenceISODay === undefined) {\n    RejectISODate(year, month, 1);\n    return CreateTemporalYearMonth(year, month, calendar);\n  }\n  const result = CreateTemporalYearMonth(year, month, calendar, referenceISODay);\n  return CalendarYearMonthFromFields(calendar, result);\n}\n\ntype OffsetBehaviour = 'wall' | 'exact' | 'option';\n\nexport function InterpretISODateTimeOffset(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  offsetBehaviour: OffsetBehaviour,\n  offsetNs: number,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>,\n  offsetOpt: Temporal.OffsetDisambiguationOptions['offset'],\n  matchMinute: boolean\n) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const dt = new DateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n\n  if (offsetBehaviour === 'wall' || offsetOpt === 'ignore') {\n    // Simple case: ISO string without a TZ offset (or caller wants to ignore\n    // the offset), so just convert DateTime to Instant in the given time zone\n    const instant = GetInstantFor(timeZone, dt, disambiguation);\n    return GetSlot(instant, EPOCHNANOSECONDS);\n  }\n\n  // The caller wants the offset to always win ('use') OR the caller is OK\n  // with the offset winning ('prefer' or 'reject') as long as it's valid\n  // for this timezone and date/time.\n  if (offsetBehaviour === 'exact' || offsetOpt === 'use') {\n    // Calculate the instant for the input's date/time and offset\n    const epochNs = GetUTCEpochNanoseconds(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond\n    );\n    if (epochNs === null) throw new RangeError('ZonedDateTime outside of supported range');\n    return JSBI.subtract(epochNs, JSBI.BigInt(offsetNs));\n  }\n\n  // \"prefer\" or \"reject\"\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dt);\n  for (const candidate of possibleInstants) {\n    const candidateOffset = GetOffsetNanosecondsFor(timeZone, candidate);\n    const roundedCandidateOffset = JSBI.toNumber(\n      RoundNumberToIncrement(JSBI.BigInt(candidateOffset), MINUTE_NANOS, 'halfExpand')\n    );\n    if (candidateOffset === offsetNs || (matchMinute && roundedCandidateOffset === offsetNs)) {\n      return GetSlot(candidate, EPOCHNANOSECONDS);\n    }\n  }\n\n  // the user-provided offset doesn't match any instants for this time\n  // zone and date/time.\n  if (offsetOpt === 'reject') {\n    const offsetStr = FormatTimeZoneOffsetString(offsetNs);\n    const timeZoneString = IsTemporalTimeZone(timeZone) ? GetSlot(timeZone, TIMEZONE_ID) : 'time zone';\n    // The tsc emit for this line rewrites to invoke the PlainDateTime's valueOf method, NOT\n    // toString (which is invoked by Node when using template literals directly).\n    // See https://github.com/microsoft/TypeScript/issues/39744 for the proposed fix in tsc emit\n    throw new RangeError(`Offset ${offsetStr} is invalid for ${dt.toString()} in ${timeZoneString}`);\n  }\n  // fall through: offsetOpt === 'prefer', but the offset doesn't match\n  // so fall back to use the time zone instead.\n  const instant = DisambiguatePossibleInstants(possibleInstants, timeZone, dt, disambiguation);\n  return GetSlot(instant, EPOCHNANOSECONDS);\n}\n\nexport function ToTemporalZonedDateTime(\n  item: ZonedDateTimeParams['from'][0],\n  options?: ZonedDateTimeParams['from'][1]\n) {\n  let year: number,\n    month: number,\n    day: number,\n    hour: number,\n    minute: number,\n    second: number,\n    millisecond: number,\n    microsecond: number,\n    nanosecond: number,\n    timeZone,\n    offset: string | undefined,\n    calendar: string | Temporal.CalendarProtocol | undefined;\n  let disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>;\n  let offsetOpt: NonNullable<Temporal.OffsetDisambiguationOptions['offset']>;\n  let matchMinute = false;\n  let offsetBehaviour: OffsetBehaviour = 'option';\n  if (IsObject(item)) {\n    if (IsTemporalZonedDateTime(item)) return item;\n    calendar = GetTemporalCalendarSlotValueWithISODefault(item);\n    const fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('timeZone', 'offset');\n    const fields = PrepareTemporalFields(item, fieldNames, ['timeZone']);\n    timeZone = ToTemporalTimeZoneSlotValue(fields.timeZone);\n    offset = fields.offset;\n    if (offset === undefined) {\n      offsetBehaviour = 'wall';\n    }\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = InterpretTemporalDateTimeFields(\n      calendar,\n      fields,\n      options\n    ));\n  } else {\n    let ianaName, z;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, ianaName, offset, z, calendar } =\n      ParseTemporalZonedDateTimeString(ToString(item)));\n    timeZone = ToTemporalTimeZoneSlotValue(ianaName);\n    if (z) {\n      offsetBehaviour = 'exact';\n    } else if (!offset) {\n      offsetBehaviour = 'wall';\n    }\n    if (!calendar) calendar = 'iso8601';\n    if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n    calendar = ASCIILowercase(calendar);\n    matchMinute = true; // ISO strings may specify offset with less precision\n    disambiguation = ToTemporalDisambiguation(options);\n    offsetOpt = ToTemporalOffset(options, 'reject');\n    ToTemporalOverflow(options); // validate and ignore\n  }\n  let offsetNs = 0;\n  // The code above guarantees that if offsetBehaviour === 'option', then\n  // `offset` is not undefined.\n  if (offsetBehaviour === 'option') offsetNs = ParseTimeZoneOffsetString(offset as string);\n  const epochNanoseconds = InterpretISODateTimeOffset(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    offsetBehaviour,\n    offsetNs,\n    timeZone,\n    disambiguation,\n    offsetOpt,\n    matchMinute\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nexport function CreateTemporalDateSlots(\n  result: Temporal.PlainDate,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot\n) {\n  RejectISODate(isoYear, isoMonth, isoDay);\n  RejectDateRange(isoYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, DATE_BRAND, true);\n\n  if (DEBUG) {\n    ObjectDefineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDate(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDate = GetIntrinsic('%Temporal.PlainDate%');\n  const result = ObjectCreate(TemporalPlainDate.prototype);\n  CreateTemporalDateSlots(result, isoYear, isoMonth, isoDay, calendar);\n  return result;\n}\n\nexport function CreateTemporalDateTimeSlots(\n  result: Temporal.PlainDateTime,\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot\n) {\n  RejectDateTime(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n  RejectDateTimeRange(isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_HOUR, h);\n  SetSlot(result, ISO_MINUTE, min);\n  SetSlot(result, ISO_SECOND, s);\n  SetSlot(result, ISO_MILLISECOND, ms);\n  SetSlot(result, ISO_MICROSECOND, µs);\n  SetSlot(result, ISO_NANOSECOND, ns);\n  SetSlot(result, CALENDAR, calendar);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalDateTime(\n  isoYear: number,\n  isoMonth: number,\n  isoDay: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalPlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n  const result = ObjectCreate(TemporalPlainDateTime.prototype);\n  CreateTemporalDateTimeSlots(result, isoYear, isoMonth, isoDay, h, min, s, ms, µs, ns, calendar);\n  return result as Temporal.PlainDateTime;\n}\n\nexport function CreateTemporalMonthDaySlots(\n  result: Temporal.PlainMonthDay,\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot,\n  referenceISOYear: number\n) {\n  RejectISODate(referenceISOYear, isoMonth, isoDay);\n  RejectDateRange(referenceISOYear, isoMonth, isoDay);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, isoDay);\n  SetSlot(result, ISO_YEAR, referenceISOYear);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, MONTH_DAY_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalMonthDayToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalMonthDay(\n  isoMonth: number,\n  isoDay: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISOYear = 1972\n) {\n  const TemporalPlainMonthDay = GetIntrinsic('%Temporal.PlainMonthDay%');\n  const result = ObjectCreate(TemporalPlainMonthDay.prototype);\n  CreateTemporalMonthDaySlots(result, isoMonth, isoDay, calendar, referenceISOYear);\n  return result;\n}\n\nexport function CreateTemporalYearMonthSlots(\n  result: Temporal.PlainYearMonth,\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot,\n  referenceISODay: number\n) {\n  RejectISODate(isoYear, isoMonth, referenceISODay);\n  RejectYearMonthRange(isoYear, isoMonth);\n\n  CreateSlots(result);\n  SetSlot(result, ISO_YEAR, isoYear);\n  SetSlot(result, ISO_MONTH, isoMonth);\n  SetSlot(result, ISO_DAY, referenceISODay);\n  SetSlot(result, CALENDAR, calendar);\n  SetSlot(result, YEAR_MONTH_BRAND, true);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalYearMonthToString(result)}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalYearMonth(\n  isoYear: number,\n  isoMonth: number,\n  calendar: CalendarSlot = 'iso8601',\n  referenceISODay = 1\n) {\n  const TemporalPlainYearMonth = GetIntrinsic('%Temporal.PlainYearMonth%');\n  const result = ObjectCreate(TemporalPlainYearMonth.prototype);\n  CreateTemporalYearMonthSlots(result, isoYear, isoMonth, calendar, referenceISODay);\n  return result;\n}\n\nexport function CreateTemporalZonedDateTimeSlots(\n  result: Temporal.ZonedDateTime,\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot\n) {\n  ValidateEpochNanoseconds(epochNanoseconds);\n\n  CreateSlots(result);\n  SetSlot(result, EPOCHNANOSECONDS, epochNanoseconds);\n  SetSlot(result, TIME_ZONE, timeZone);\n  SetSlot(result, CALENDAR, calendar);\n\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const instant = new TemporalInstant(GetSlot(result, EPOCHNANOSECONDS));\n  SetSlot(result, INSTANT, instant);\n\n  if (DEBUG) {\n    Object.defineProperty(result, '_repr_', {\n      value: `${result[Symbol.toStringTag]} <${TemporalZonedDateTimeToString(result, 'auto')}>`,\n      writable: false,\n      enumerable: false,\n      configurable: false\n    });\n  }\n}\n\nexport function CreateTemporalZonedDateTime(\n  epochNanoseconds: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot = 'iso8601'\n) {\n  const TemporalZonedDateTime = GetIntrinsic('%Temporal.ZonedDateTime%');\n  const result = ObjectCreate(TemporalZonedDateTime.prototype);\n  CreateTemporalZonedDateTimeSlots(result, epochNanoseconds, timeZone, calendar);\n  return result;\n}\n\n// TODO: should (can?) we make this generic so the field names are checked\n// against the type that the calendar is a property of?\nexport function CalendarFields<K extends AnyTemporalKey>(calendar: CalendarSlot, fieldNamesParam: ReadonlyArray<K>) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.fields%'), calendarObj, [fieldNamesParam]) as K[];\n  }\n  const fields = GetMethod(calendar, 'fields');\n  const fieldNames = Call(fields, calendar, [fieldNamesParam]);\n  const result: K[] = [];\n  for (const name of fieldNames) {\n    if (typeof name !== 'string') throw new TypeError('bad return from calendar.fields()');\n    ArrayPrototypePush.call(result, name);\n  }\n  return result;\n}\n\nexport function CalendarMergeFields<Base extends Record<string, unknown>, ToAdd extends Record<string, unknown>>(\n  calendar: CalendarSlot,\n  fields: Base,\n  additionalFields: ToAdd\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.mergeFields%'), calendarObj, [\n      fields,\n      additionalFields\n    ]) as Base & ToAdd;\n  }\n  const mergeFields = GetMethod(calendar, 'mergeFields');\n  const result = Call(mergeFields, calendar, [fields, additionalFields]);\n  if (!IsObject(result)) throw new TypeError('bad return from calendar.mergeFields()');\n  return result as Base & ToAdd;\n}\n\nexport function CalendarDateAdd(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateAdd'][0],\n  duration: CalendarProtocolParams['dateAdd'][1],\n  options: CalendarProtocolParams['dateAdd'][2],\n  dateAddParam?: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  let dateAdd = dateAddParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateAdd%'), calendarObj, [date, duration, options]);\n  }\n  if (dateAdd === undefined) {\n    dateAdd = GetMethod(calendar, 'dateAdd');\n  }\n  const result = ReflectApply(dateAdd, calendar, [date, duration, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nfunction CalendarDateUntil(\n  calendar: CalendarSlot,\n  date: CalendarProtocolParams['dateUntil'][0],\n  otherDate: CalendarProtocolParams['dateUntil'][1],\n  options: CalendarProtocolParams['dateUntil'][2],\n  dateUntilParam?: Temporal.CalendarProtocol['dateUntil'] | undefined\n) {\n  let dateUntil = dateUntilParam;\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateUntil%'), calendarObj, [date, otherDate, options]);\n  }\n  if (dateUntil === undefined) {\n    dateUntil = GetMethod(calendar, 'dateUntil');\n  }\n  const result = ReflectApply(dateUntil, calendar, [date, otherDate, options]);\n  if (!IsTemporalDuration(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['year'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.year%'), calendarObj, [dateLike]);\n  }\n  const year = GetMethod(calendar, 'year');\n  let result = Call(year, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar year result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar year result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['month'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.month%'), calendarObj, [dateLike]);\n  }\n  const month = GetMethod(calendar, 'month');\n  let result = Call(month, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar month result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar month result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthCode(calendar: CalendarSlot, dateLike: CalendarProtocolParams['monthCode'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthCode%'), calendarObj, [dateLike]);\n  }\n  const monthCode = GetMethod(calendar, 'monthCode');\n  let result = Call(monthCode, calendar, [dateLike]);\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar monthCode result must be a string');\n  }\n  return result;\n}\n\nexport function CalendarDay(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.day%'), calendarObj, [dateLike]);\n  }\n  const day = GetMethod(calendar, 'day');\n  const result = Call(day, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar day result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar day result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarEra(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.era%'), calendarObj, [dateLike]);\n  }\n  const era = GetMethod(calendar, 'era');\n  let result = Call(era, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'string') {\n    throw new TypeError('calendar era result must be a string or undefined');\n  }\n  return result;\n}\n\nexport function CalendarEraYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.eraYear%'), calendarObj, [dateLike]);\n  }\n  const eraYear = GetMethod(calendar, 'eraYear');\n  let result = Call(eraYear, calendar, [dateLike]);\n  if (result === undefined) {\n    return result;\n  }\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar eraYear result must be an integer or undefined');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar eraYear result must be an integer or undefined');\n  }\n  return result;\n}\n\nexport function CalendarDayOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfWeek%'), calendarObj, [dateLike]);\n  }\n  const dayOfWeek = GetMethod(calendar, 'dayOfWeek');\n  const result = Call(dayOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDayOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dayOfYear%'), calendarObj, [dateLike]);\n  }\n  const dayOfYear = GetMethod(calendar, 'dayOfYear');\n  const result = Call(dayOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar dayOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar dayOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarWeekOfYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.weekOfYear%'), calendarObj, [dateLike]);\n  }\n  const weekOfYear = GetMethod(calendar, 'weekOfYear');\n  const result = Call(weekOfYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar weekOfYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar weekOfYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarYearOfWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearOfWeek%'), calendarObj, [dateLike]);\n  }\n  const yearOfWeek = GetMethod(calendar, 'yearOfWeek');\n  const result = Call(yearOfWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar yearOfWeek result must be an integer');\n  }\n  if (!IsIntegralNumber(result)) {\n    throw new RangeError('calendar yearOfWeek result must be an integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInWeek(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInWeek%'), calendarObj, [dateLike]);\n  }\n  const daysInWeek = GetMethod(calendar, 'daysInWeek');\n  const result = Call(daysInWeek, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInWeek result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInWeek result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInMonth(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInMonth%'), calendarObj, [dateLike]);\n  }\n  const daysInMonth = GetMethod(calendar, 'daysInMonth');\n  const result = Call(daysInMonth, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInMonth result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInMonth result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarDaysInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.daysInYear%'), calendarObj, [dateLike]);\n  }\n  const daysInYear = GetMethod(calendar, 'daysInYear');\n  const result = Call(daysInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar daysInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar daysInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarMonthsInYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthsInYear%'), calendarObj, [dateLike]);\n  }\n  const monthsInYear = GetMethod(calendar, 'monthsInYear');\n  const result = Call(monthsInYear, calendar, [dateLike]);\n  if (typeof result !== 'number') {\n    throw new TypeError('calendar monthsInYear result must be a positive integer');\n  }\n  if (!IsIntegralNumber(result) || result < 1) {\n    throw new RangeError('calendar monthsInYear result must be a positive integer');\n  }\n  return result;\n}\n\nexport function CalendarInLeapYear(calendar: CalendarSlot, dateLike: CalendarProtocolParams['era'][0]) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.inLeapYear%'), calendarObj, [dateLike]);\n  }\n  const inLeapYear = GetMethod(calendar, 'inLeapYear');\n  const result = Call(inLeapYear, calendar, [dateLike]);\n  if (typeof result !== 'boolean') {\n    throw new TypeError('calendar inLeapYear result must be a boolean');\n  }\n  return result;\n}\n\ntype MaybeCalendarProtocol = Partial<Omit<Temporal.CalendarProtocol, 'toString' | 'toJSON'>>;\nfunction ObjectImplementsTemporalCalendarProtocol(object: MaybeCalendarProtocol) {\n  if (IsTemporalCalendar(object)) return true;\n  return (\n    'dateAdd' in object &&\n    'dateFromFields' in object &&\n    'dateUntil' in object &&\n    'day' in object &&\n    'dayOfWeek' in object &&\n    'dayOfYear' in object &&\n    'daysInMonth' in object &&\n    'daysInWeek' in object &&\n    'daysInYear' in object &&\n    'fields' in object &&\n    'id' in object &&\n    'inLeapYear' in object &&\n    'mergeFields' in object &&\n    'month' in object &&\n    'monthCode' in object &&\n    'monthDayFromFields' in object &&\n    'monthsInYear' in object &&\n    'weekOfYear' in object &&\n    'year' in object &&\n    'yearMonthFromFields' in object &&\n    'yearOfWeek' in object\n  );\n}\n\nexport function ToTemporalCalendarSlotValue(calendarLike: string): string;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarProtocol): Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: Temporal.CalendarLike): string | Temporal.CalendarProtocol;\nexport function ToTemporalCalendarSlotValue(calendarLike: CalendarParams['from'][0]) {\n  if (IsObject(calendarLike)) {\n    if (HasSlot(calendarLike, CALENDAR)) return GetSlot(calendarLike, CALENDAR);\n    if (!ObjectImplementsTemporalCalendarProtocol(calendarLike)) {\n      throw new TypeError('expected a Temporal.Calendar or object implementing the Temporal.Calendar protocol');\n    }\n    return calendarLike;\n  }\n  const identifier = ToString(calendarLike);\n  if (IsBuiltinCalendar(identifier)) return ASCIILowercase(identifier);\n  let calendar;\n  try {\n    ({ calendar } = ParseISODateTime(identifier));\n  } catch {\n    try {\n      ({ calendar } = ParseTemporalYearMonthString(identifier));\n    } catch {\n      ({ calendar } = ParseTemporalMonthDayString(identifier));\n    }\n  }\n  if (!calendar) calendar = 'iso8601';\n  if (!IsBuiltinCalendar(calendar)) throw new RangeError(`invalid calendar identifier ${calendar}`);\n  return ASCIILowercase(calendar);\n}\n\nfunction GetTemporalCalendarSlotValueWithISODefault(item: { calendar?: Temporal.CalendarLike }): CalendarSlot {\n  if (HasSlot(item, CALENDAR)) return GetSlot(item, CALENDAR);\n  const { calendar } = item;\n  if (calendar === undefined) return 'iso8601';\n  return ToTemporalCalendarSlotValue(calendar);\n}\n\nexport function ToTemporalCalendarIdentifier(slotValue: CalendarSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('calendar.id should be a string');\n  return result;\n}\n\nexport function ToTemporalCalendarObject(slotValue: CalendarSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n  return new TemporalCalendar(slotValue);\n}\n\nexport function CalendarEquals(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return true;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  return cal1 === cal2;\n}\n\n// This operation is not in the spec, it implements the following:\n// \"If ? CalendarEquals(one, two) is false, throw a RangeError exception.\"\n// This is so that we can build an informative error message without\n// re-getting the .id properties.\nfunction ThrowIfCalendarsNotEqual(one: CalendarSlot, two: CalendarSlot, errorMessageAction: string) {\n  if (one === two) return;\n  const cal1 = ToTemporalCalendarIdentifier(one);\n  const cal2 = ToTemporalCalendarIdentifier(two);\n  if (cal1 !== cal2) {\n    throw new RangeError(`cannot ${errorMessageAction} of ${cal1} and ${cal2} calendars`);\n  }\n}\n\nexport function ConsolidateCalendars(one: CalendarSlot, two: CalendarSlot) {\n  if (one === two) return two;\n  const sOne = ToTemporalCalendarIdentifier(one);\n  const sTwo = ToTemporalCalendarIdentifier(two);\n  if (sOne === sTwo || sOne === 'iso8601') {\n    return two;\n  } else if (sTwo === 'iso8601') {\n    return one;\n  } else {\n    throw new RangeError('irreconcilable calendars');\n  }\n}\n\nexport function CalendarDateFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['dateFromFields'][0],\n  options?: Partial<CalendarProtocolParams['dateFromFields'][1]>,\n  dateFromFieldsParam?: Temporal.CalendarProtocol['dateFromFields']\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.dateFromFields%'), calendarObj, [fields, options]);\n  }\n  const dateFromFields = dateFromFieldsParam ?? GetMethod(calendar, 'dateFromFields');\n  const result = Call(dateFromFields, calendar, [fields, options]);\n  if (!IsTemporalDate(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarYearMonthFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['yearMonthFromFields'][0],\n  options?: CalendarProtocolParams['yearMonthFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.yearMonthFromFields%'), calendarObj, [fields, options]);\n  }\n  const yearMonthFromFields = GetMethod(calendar, 'yearMonthFromFields');\n  let result = Call(yearMonthFromFields, calendar, [fields, options]);\n  if (!IsTemporalYearMonth(result)) throw new TypeError('invalid result');\n  return result;\n}\n\nexport function CalendarMonthDayFromFields(\n  calendar: CalendarSlot,\n  fields: CalendarProtocolParams['monthDayFromFields'][0],\n  options?: CalendarProtocolParams['monthDayFromFields'][1]\n) {\n  if (typeof calendar === 'string') {\n    const TemporalCalendar = GetIntrinsic('%Temporal.Calendar%');\n    const calendarObj = new TemporalCalendar(calendar);\n    return Call(GetIntrinsic('%Temporal.Calendar.prototype.monthDayFromFields%'), calendarObj, [fields, options]);\n  }\n  const monthDayFromFields = GetMethod(calendar, 'monthDayFromFields');\n  let result = Call(monthDayFromFields, calendar, [fields, options]);\n  if (!IsTemporalMonthDay(result)) throw new TypeError('invalid result');\n  return result;\n}\n\ntype MaybeTimeZoneProtocol = Partial<\n  Pick<Temporal.TimeZoneProtocol, 'getOffsetNanosecondsFor' | 'getPossibleInstantsFor'>\n>;\nfunction ObjectImplementsTemporalTimeZoneProtocol(object: MaybeTimeZoneProtocol) {\n  if (IsTemporalTimeZone(object)) return true;\n  return 'getOffsetNanosecondsFor' in object && 'getPossibleInstantsFor' in object && 'id' in object;\n}\n\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: string): string;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: Temporal.TimeZoneProtocol): Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(\n  temporalTimeZoneLike: Temporal.TimeZoneLike\n): string | Temporal.TimeZoneProtocol;\nexport function ToTemporalTimeZoneSlotValue(temporalTimeZoneLike: TimeZoneParams['from'][0]) {\n  if (IsObject(temporalTimeZoneLike)) {\n    if (IsTemporalZonedDateTime(temporalTimeZoneLike)) return GetSlot(temporalTimeZoneLike, TIME_ZONE);\n    if (!ObjectImplementsTemporalTimeZoneProtocol(temporalTimeZoneLike)) {\n      throw new TypeError('expected a Temporal.TimeZone or object implementing the Temporal.TimeZone protocol');\n    }\n    return temporalTimeZoneLike;\n  }\n  const identifier = ToString(temporalTimeZoneLike);\n  return ParseTemporalTimeZone(identifier);\n}\n\nexport function ToTemporalTimeZoneIdentifier(slotValue: TimeZoneSlot) {\n  if (typeof slotValue === 'string') return slotValue;\n  const result = slotValue.id;\n  if (typeof result !== 'string') throw new TypeError('timeZone.id should be a string');\n  return result;\n}\n\nexport function ToTemporalTimeZoneObject(slotValue: TimeZoneSlot) {\n  if (IsObject(slotValue)) return slotValue;\n  const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n  return new TemporalTimeZone(slotValue);\n}\n\nexport function TimeZoneEquals(one: string | Temporal.TimeZoneProtocol, two: string | Temporal.TimeZoneProtocol) {\n  if (one === two) return true;\n  const tz1 = ToTemporalTimeZoneIdentifier(one);\n  const tz2 = ToTemporalTimeZoneIdentifier(two);\n  return tz1 === tz2;\n}\n\nexport function TemporalDateTimeToDate(dateTime: Temporal.PlainDateTime) {\n  return CreateTemporalDate(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, CALENDAR)\n  );\n}\n\nexport function TemporalDateTimeToTime(dateTime: Temporal.PlainDateTime) {\n  const Time = GetIntrinsic('%Temporal.PlainTime%');\n  return new Time(\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND)\n  );\n}\n\nexport function GetOffsetNanosecondsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: TimeZoneProtocolParams['getOffsetNanosecondsFor'][0],\n  getOffsetNanosecondsForParam?: Temporal.TimeZoneProtocol['getOffsetNanosecondsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getOffsetNanosecondsFor%'), timeZoneObject, [instant]);\n  }\n  const getOffsetNanosecondsFor = getOffsetNanosecondsForParam ?? GetMethod(timeZone, 'getOffsetNanosecondsFor');\n  const offsetNs = Call(getOffsetNanosecondsFor, timeZone, [instant]);\n  if (typeof offsetNs !== 'number') {\n    throw new TypeError('bad return from getOffsetNanosecondsFor');\n  }\n  if (!IsIntegralNumber(offsetNs) || MathAbs(offsetNs) >= 86400e9) {\n    throw new RangeError('out-of-range return from getOffsetNanosecondsFor');\n  }\n  return offsetNs;\n}\n\nexport function GetOffsetStringFor(timeZone: string | Temporal.TimeZoneProtocol, instant: Temporal.Instant) {\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  return FormatTimeZoneOffsetString(offsetNs);\n}\n\nexport function GetPlainDateTimeFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  instant: Temporal.Instant,\n  calendar: CalendarSlot\n) {\n  const ns = GetSlot(instant, EPOCHNANOSECONDS);\n  const offsetNs = GetOffsetNanosecondsFor(timeZone, instant);\n  let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(ns);\n  ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceISODateTime(\n    year,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond + offsetNs\n  ));\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function GetInstantFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const possibleInstants = GetPossibleInstantsFor(timeZone, dateTime);\n  return DisambiguatePossibleInstants(possibleInstants, timeZone, dateTime, disambiguation);\n}\n\nfunction DisambiguatePossibleInstants(\n  possibleInstants: Temporal.Instant[],\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: Temporal.PlainDateTime,\n  disambiguation: NonNullable<Temporal.ToInstantOptions['disambiguation']>\n) {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  const numInstants = possibleInstants.length;\n\n  if (numInstants === 1) return possibleInstants[0];\n  if (numInstants) {\n    switch (disambiguation) {\n      case 'compatible':\n      // fall through because 'compatible' means 'earlier' for \"fall back\" transitions\n      case 'earlier':\n        return possibleInstants[0];\n      case 'later':\n        return possibleInstants[numInstants - 1];\n      case 'reject': {\n        throw new RangeError('multiple instants found');\n      }\n    }\n  }\n\n  const year = GetSlot(dateTime, ISO_YEAR);\n  const month = GetSlot(dateTime, ISO_MONTH);\n  const day = GetSlot(dateTime, ISO_DAY);\n  const hour = GetSlot(dateTime, ISO_HOUR);\n  const minute = GetSlot(dateTime, ISO_MINUTE);\n  const second = GetSlot(dateTime, ISO_SECOND);\n  const millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  const microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  const nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n  const utcns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (utcns === null) throw new RangeError('DateTime outside of supported range');\n  const dayBefore = new Instant(JSBI.subtract(utcns, DAY_NANOS));\n  const dayAfter = new Instant(JSBI.add(utcns, DAY_NANOS));\n  const offsetBefore = GetOffsetNanosecondsFor(timeZone, dayBefore);\n  const offsetAfter = GetOffsetNanosecondsFor(timeZone, dayAfter);\n  const nanoseconds = offsetAfter - offsetBefore;\n  switch (disambiguation) {\n    case 'earlier': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const earlier = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        -nanoseconds,\n        undefined\n      );\n      const earlierPlainDateTime = new PlainDateTime(\n        earlier.year,\n        earlier.month,\n        earlier.day,\n        earlier.hour,\n        earlier.minute,\n        earlier.second,\n        earlier.millisecond,\n        earlier.microsecond,\n        earlier.nanosecond,\n        calendar\n      );\n      return GetPossibleInstantsFor(timeZone, earlierPlainDateTime)[0];\n    }\n    case 'compatible':\n    // fall through because 'compatible' means 'later' for \"spring forward\" transitions\n    case 'later': {\n      const calendar = GetSlot(dateTime, CALENDAR);\n      const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n      const later = AddDateTime(\n        year,\n        month,\n        day,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        calendar,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        nanoseconds,\n        undefined\n      );\n      const laterPlainDateTime = new PlainDateTime(\n        later.year,\n        later.month,\n        later.day,\n        later.hour,\n        later.minute,\n        later.second,\n        later.millisecond,\n        later.microsecond,\n        later.nanosecond,\n        calendar\n      );\n      const possible = GetPossibleInstantsFor(timeZone, laterPlainDateTime);\n      return possible[possible.length - 1];\n    }\n    case 'reject': {\n      throw new RangeError('no such instant found');\n    }\n  }\n}\n\nfunction GetPossibleInstantsFor(\n  timeZone: string | Temporal.TimeZoneProtocol,\n  dateTime: TimeZoneProtocolParams['getPossibleInstantsFor'][0],\n  getPossibleInstantsForParam?: Temporal.TimeZoneProtocol['getPossibleInstantsFor']\n) {\n  if (typeof timeZone === 'string') {\n    const TemporalTimeZone = GetIntrinsic('%Temporal.TimeZone%');\n    const timeZoneObject = new TemporalTimeZone(timeZone);\n    return Call(GetIntrinsic('%Temporal.TimeZone.prototype.getPossibleInstantsFor%'), timeZoneObject, [dateTime]);\n  }\n  const getPossibleInstantsFor = getPossibleInstantsForParam ?? GetMethod(timeZone, 'getPossibleInstantsFor');\n  const possibleInstants = Call(getPossibleInstantsFor, timeZone, [dateTime]);\n  const result: Temporal.Instant[] = [];\n  for (const instant of possibleInstants) {\n    if (!IsTemporalInstant(instant)) {\n      throw new TypeError('bad return from getPossibleInstantsFor');\n    }\n    ArrayPrototypePush.call(result, instant);\n  }\n  return result;\n}\n\nexport function ISOYearString(year: number) {\n  let yearString;\n  if (year < 0 || year > 9999) {\n    const sign = year < 0 ? '-' : '+';\n    const yearNumber = MathAbs(year);\n    yearString = sign + `000000${yearNumber}`.slice(-6);\n  } else {\n    yearString = `0000${year}`.slice(-4);\n  }\n  return yearString;\n}\n\nexport function ISODateTimePartString(part: number) {\n  return `00${part}`.slice(-2);\n}\nexport function FormatSecondsStringPart(\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  if (precision === 'minute') return '';\n\n  const secs = `:${ISODateTimePartString(second)}`;\n  let fractionNumber = millisecond * 1e6 + microsecond * 1e3 + nanosecond;\n  let fraction: string;\n\n  if (precision === 'auto') {\n    if (fractionNumber === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n  } else {\n    if (precision === 0) return secs;\n    fraction = `${fractionNumber}`.padStart(9, '0').slice(0, precision);\n  }\n  return `${secs}.${fraction}`;\n}\n\nexport function TemporalInstantToString(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol | undefined,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision']\n) {\n  let outputTimeZone = timeZone;\n  if (outputTimeZone === undefined) outputTimeZone = 'UTC';\n  const dateTime = GetPlainDateTimeFor(outputTimeZone, instant, 'iso8601');\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let timeZoneString = 'Z';\n  if (timeZone !== undefined) {\n    const offsetNs = GetOffsetNanosecondsFor(outputTimeZone, instant);\n    timeZoneString = FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  return `${year}-${month}-${day}T${hour}:${minute}${seconds}${timeZoneString}`;\n}\n\ninterface ToStringOptions {\n  unit: ReturnType<typeof ToSecondsStringPrecisionRecord>['unit'];\n  increment: number;\n  roundingMode: ReturnType<typeof ToTemporalRoundingMode>;\n}\n\nexport function TemporalDurationToString(\n  duration: Temporal.Duration,\n  precision: Temporal.ToStringPrecisionOptions['fractionalSecondDigits'] = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  function formatNumber(num: number) {\n    if (num <= NumberMaxSafeInteger) return num.toString(10);\n    return JSBI.BigInt(num).toString(10);\n  }\n\n  const years = GetSlot(duration, YEARS);\n  const months = GetSlot(duration, MONTHS);\n  const weeks = GetSlot(duration, WEEKS);\n  const days = GetSlot(duration, DAYS);\n  const hours = GetSlot(duration, HOURS);\n  const minutes = GetSlot(duration, MINUTES);\n  let seconds = GetSlot(duration, SECONDS);\n  let ms = GetSlot(duration, MILLISECONDS);\n  let µs = GetSlot(duration, MICROSECONDS);\n  let ns = GetSlot(duration, NANOSECONDS);\n  const sign = DurationSign(years, months, weeks, days, hours, minutes, seconds, ms, µs, ns);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({\n      seconds,\n      milliseconds: ms,\n      microseconds: µs,\n      nanoseconds: ns\n    } = RoundDuration(0, 0, 0, 0, 0, 0, seconds, ms, µs, ns, increment, unit, roundingMode));\n  }\n\n  const dateParts: string[] = [];\n  if (years) dateParts.push(`${formatNumber(MathAbs(years))}Y`);\n  if (months) dateParts.push(`${formatNumber(MathAbs(months))}M`);\n  if (weeks) dateParts.push(`${formatNumber(MathAbs(weeks))}W`);\n  if (days) dateParts.push(`${formatNumber(MathAbs(days))}D`);\n\n  const timeParts: string[] = [];\n  if (hours) timeParts.push(`${formatNumber(MathAbs(hours))}H`);\n  if (minutes) timeParts.push(`${formatNumber(MathAbs(minutes))}M`);\n\n  const secondParts: string[] = [];\n  let total = TotalDurationNanoseconds(0, 0, 0, seconds, ms, µs, ns, 0);\n  let nsBigInt: JSBI, µsBigInt: JSBI, msBigInt: JSBI, secondsBigInt: JSBI;\n  ({ quotient: total, remainder: nsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: total, remainder: µsBigInt } = divmod(total, THOUSAND));\n  ({ quotient: secondsBigInt, remainder: msBigInt } = divmod(total, THOUSAND));\n  const fraction =\n    MathAbs(JSBI.toNumber(msBigInt)) * 1e6 + MathAbs(JSBI.toNumber(µsBigInt)) * 1e3 + MathAbs(JSBI.toNumber(nsBigInt));\n  let decimalPart;\n  if (precision === 'auto') {\n    if (fraction !== 0) {\n      decimalPart = `${fraction}`.padStart(9, '0');\n      while (decimalPart[decimalPart.length - 1] === '0') {\n        decimalPart = decimalPart.slice(0, -1);\n      }\n    }\n  } else if (precision !== 0) {\n    decimalPart = `${fraction}`.padStart(9, '0').slice(0, precision);\n  }\n  if (decimalPart) secondParts.unshift('.', decimalPart);\n  if (!JSBI.equal(secondsBigInt, ZERO) || secondParts.length || precision !== 'auto') {\n    secondParts.unshift(abs(secondsBigInt).toString());\n  }\n  if (secondParts.length) timeParts.push(`${secondParts.join('')}S`);\n  if (timeParts.length) timeParts.unshift('T');\n  if (!dateParts.length && !timeParts.length) return 'PT0S';\n  return `${sign < 0 ? '-' : ''}P${dateParts.join('')}${timeParts.join('')}`;\n}\n\nexport function TemporalDateToString(\n  date: Temporal.PlainDate,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(date, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(date, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(date, ISO_DAY));\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(date, CALENDAR), showCalendar);\n  return `${year}-${month}-${day}${calendar}`;\n}\n\nexport function TemporalDateTimeToString(\n  dateTime: Temporal.PlainDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let year = GetSlot(dateTime, ISO_YEAR);\n  let month = GetSlot(dateTime, ISO_MONTH);\n  let day = GetSlot(dateTime, ISO_DAY);\n  let hour = GetSlot(dateTime, ISO_HOUR);\n  let minute = GetSlot(dateTime, ISO_MINUTE);\n  let second = GetSlot(dateTime, ISO_SECOND);\n  let millisecond = GetSlot(dateTime, ISO_MILLISECOND);\n  let microsecond = GetSlot(dateTime, ISO_MICROSECOND);\n  let nanosecond = GetSlot(dateTime, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const yearString = ISOYearString(year);\n  const monthString = ISODateTimePartString(month);\n  const dayString = ISODateTimePartString(day);\n  const hourString = ISODateTimePartString(hour);\n  const minuteString = ISODateTimePartString(minute);\n  const secondsString = FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  const calendar = MaybeFormatCalendarAnnotation(GetSlot(dateTime, CALENDAR), showCalendar);\n  return `${yearString}-${monthString}-${dayString}T${hourString}:${minuteString}${secondsString}${calendar}`;\n}\n\nexport function TemporalMonthDayToString(\n  monthDay: Temporal.PlainMonthDay,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const month = ISODateTimePartString(GetSlot(monthDay, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(monthDay, ISO_DAY));\n  let resultString = `${month}-${day}`;\n  const calendar = GetSlot(monthDay, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const year = ISOYearString(GetSlot(monthDay, ISO_YEAR));\n    resultString = `${year}-${resultString}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalYearMonthToString(\n  yearMonth: Temporal.PlainYearMonth,\n  showCalendar: Temporal.ShowCalendarOption['calendarName'] = 'auto'\n) {\n  const year = ISOYearString(GetSlot(yearMonth, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(yearMonth, ISO_MONTH));\n  let resultString = `${year}-${month}`;\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const calendarID = ToTemporalCalendarIdentifier(calendar);\n  if (showCalendar === 'always' || showCalendar === 'critical' || calendarID !== 'iso8601') {\n    const day = ISODateTimePartString(GetSlot(yearMonth, ISO_DAY));\n    resultString += `-${day}`;\n  }\n  const calendarString = FormatCalendarAnnotation(calendarID, showCalendar);\n  if (calendarString) resultString += calendarString;\n  return resultString;\n}\n\nexport function TemporalZonedDateTimeToString(\n  zdt: Temporal.ZonedDateTime,\n  precision: ReturnType<typeof ToSecondsStringPrecisionRecord>['precision'],\n  showCalendar: ReturnType<typeof ToCalendarNameOption> = 'auto',\n  showTimeZone: ReturnType<typeof ToTimeZoneNameOption> = 'auto',\n  showOffset: ReturnType<typeof ToShowOffsetOption> = 'auto',\n  options: ToStringOptions | undefined = undefined\n) {\n  let instant = GetSlot(zdt, INSTANT);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    const ns = RoundInstant(GetSlot(zdt, EPOCHNANOSECONDS), increment, unit, roundingMode);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    instant = new TemporalInstant(ns);\n  }\n\n  const tz = GetSlot(zdt, TIME_ZONE);\n  const dateTime = GetPlainDateTimeFor(tz, instant, 'iso8601');\n\n  const year = ISOYearString(GetSlot(dateTime, ISO_YEAR));\n  const month = ISODateTimePartString(GetSlot(dateTime, ISO_MONTH));\n  const day = ISODateTimePartString(GetSlot(dateTime, ISO_DAY));\n  const hour = ISODateTimePartString(GetSlot(dateTime, ISO_HOUR));\n  const minute = ISODateTimePartString(GetSlot(dateTime, ISO_MINUTE));\n  const seconds = FormatSecondsStringPart(\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    precision\n  );\n  let result = `${year}-${month}-${day}T${hour}:${minute}${seconds}`;\n  if (showOffset !== 'never') {\n    const offsetNs = GetOffsetNanosecondsFor(tz, instant);\n    result += FormatISOTimeZoneOffsetString(offsetNs);\n  }\n  if (showTimeZone !== 'never') {\n    const identifier = ToTemporalTimeZoneIdentifier(tz);\n    const flag = showTimeZone === 'critical' ? '!' : '';\n    result += `[${flag}${identifier}]`;\n  }\n  result += MaybeFormatCalendarAnnotation(GetSlot(zdt, CALENDAR), showCalendar);\n  return result;\n}\n\nexport function IsTimeZoneOffsetString(string: string) {\n  return OFFSET.test(StringCtor(string));\n}\n\nexport function ParseTimeZoneOffsetString(string: string): number {\n  const match = OFFSET.exec(StringCtor(string));\n  if (!match) {\n    throw new RangeError(`invalid time zone offset: ${string}`);\n  }\n  const sign = match[1] === '-' || match[1] === '\\u2212' ? -1 : +1;\n  const hours = +match[2];\n  const minutes = +(match[3] || 0);\n  const seconds = +(match[4] || 0);\n  const nanoseconds = +((match[5] || 0) + '000000000').slice(0, 9);\n  return sign * (((hours * 60 + minutes) * 60 + seconds) * 1e9 + nanoseconds);\n}\n\nexport function GetCanonicalTimeZoneIdentifier(timeZoneIdentifier: string): string {\n  if (IsTimeZoneOffsetString(timeZoneIdentifier)) {\n    const offsetNs = ParseTimeZoneOffsetString(timeZoneIdentifier);\n    return FormatTimeZoneOffsetString(offsetNs);\n  }\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(StringCtor(timeZoneIdentifier));\n  return formatter.resolvedOptions().timeZone;\n}\n\nexport function GetNamedTimeZoneOffsetNanoseconds(id: string, epochNanoseconds: JSBI) {\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n    GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. To avoid overflowing at the edges of the range, we reduce the year\n  // to the remainder after dividing by 400, and then add back all the\n  // nanoseconds from the multiples of 400 years at the end.\n  const reducedYear = year % 400;\n  const yearCycles = (year - reducedYear) / 400;\n  const nsIn400YearCycle = JSBI.multiply(JSBI.BigInt(400 * 365 + 97), DAY_NANOS);\n\n  const reducedUTC = GetUTCEpochNanoseconds(\n    reducedYear,\n    month,\n    day,\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  );\n  assertExists(reducedUTC);\n  const utc = JSBI.add(reducedUTC, JSBI.multiply(nsIn400YearCycle, JSBI.BigInt(yearCycles)));\n  return JSBI.toNumber(JSBI.subtract(utc, epochNanoseconds));\n}\n\nfunction FormatTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  const sign = offsetNanosecondsParam < 0 ? '-' : '+';\n  const offsetNanoseconds = MathAbs(offsetNanosecondsParam);\n  const nanoseconds = offsetNanoseconds % 1e9;\n  const seconds = MathFloor(offsetNanoseconds / 1e9) % 60;\n  const minutes = MathFloor(offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  const secondString = ISODateTimePartString(seconds);\n  let post = '';\n  if (nanoseconds) {\n    let fraction = `${nanoseconds}`.padStart(9, '0');\n    while (fraction[fraction.length - 1] === '0') fraction = fraction.slice(0, -1);\n    post = `:${secondString}.${fraction}`;\n  } else if (seconds) {\n    post = `:${secondString}`;\n  }\n  return `${sign}${hourString}:${minuteString}${post}`;\n}\n\nfunction FormatISOTimeZoneOffsetString(offsetNanosecondsParam: number): string {\n  let offsetNanoseconds = JSBI.toNumber(\n    RoundNumberToIncrement(JSBI.BigInt(offsetNanosecondsParam), MINUTE_NANOS, 'halfExpand')\n  );\n  const sign = offsetNanoseconds < 0 ? '-' : '+';\n  offsetNanoseconds = MathAbs(offsetNanoseconds);\n  const minutes = (offsetNanoseconds / 60e9) % 60;\n  const hours = MathFloor(offsetNanoseconds / 3600e9);\n\n  const hourString = ISODateTimePartString(hours);\n  const minuteString = ISODateTimePartString(minutes);\n  return `${sign}${hourString}:${minuteString}`;\n}\nexport function GetUTCEpochNanoseconds(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  // Note: Date.UTC() interprets one and two-digit years as being in the\n  // 20th century, so don't use it\n  const legacyDate = new Date();\n  legacyDate.setUTCHours(hour, minute, second, millisecond);\n  legacyDate.setUTCFullYear(year, month - 1, day);\n  const ms = legacyDate.getTime();\n  if (NumberIsNaN(ms)) return null;\n  let ns = JSBI.multiply(JSBI.BigInt(ms), MILLION);\n  ns = JSBI.add(ns, JSBI.multiply(JSBI.BigInt(microsecond), THOUSAND));\n  ns = JSBI.add(ns, JSBI.BigInt(nanosecond));\n  if (JSBI.lessThan(ns, NS_MIN) || JSBI.greaterThan(ns, NS_MAX)) return null;\n  return ns;\n}\n\nfunction GetISOPartsFromEpoch(epochNanoseconds: JSBI) {\n  const { quotient, remainder } = divmod(epochNanoseconds, MILLION);\n  let epochMilliseconds = JSBI.toNumber(quotient);\n  let nanos = JSBI.toNumber(remainder);\n  if (nanos < 0) {\n    nanos += 1e6;\n    epochMilliseconds -= 1;\n  }\n  const microsecond = MathFloor(nanos / 1e3) % 1e3;\n  const nanosecond = nanos % 1e3;\n\n  const item = new Date(epochMilliseconds);\n  const year = item.getUTCFullYear();\n  const month = item.getUTCMonth() + 1;\n  const day = item.getUTCDate();\n  const hour = item.getUTCHours();\n  const minute = item.getUTCMinutes();\n  const second = item.getUTCSeconds();\n  const millisecond = item.getUTCMilliseconds();\n\n  return { epochMilliseconds, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetNamedTimeZoneDateTimeParts(id: string, epochNanoseconds: JSBI) {\n  const { epochMilliseconds, millisecond, microsecond, nanosecond } = GetISOPartsFromEpoch(epochNanoseconds);\n  const { year, month, day, hour, minute, second } = GetFormatterParts(id, epochMilliseconds);\n  return BalanceISODateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction maxJSBI(one: JSBI, two: JSBI) {\n  return JSBI.lessThan(one, two) ? two : one;\n}\n\n/**\n * Our best guess at how far in advance new rules will be put into the TZDB for\n * future offset transitions. We'll pick 10 years but can always revise it if\n * we find that countries are being unusually proactive in their announcing\n * of offset changes.\n */\nfunction afterLatestPossibleTzdbRuleChange() {\n  return JSBI.add(SystemUTCEpochNanoSeconds(), ABOUT_TEN_YEARS_NANOS);\n}\n\nexport function GetNamedTimeZoneNextTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  if (JSBI.lessThan(epochNanoseconds, BEFORE_FIRST_OFFSET_TRANSITION)) {\n    return GetNamedTimeZoneNextTransition(id, BEFORE_FIRST_OFFSET_TRANSITION);\n  }\n  // Decide how far in the future after `epochNanoseconds` we'll look for an\n  // offset change. There are two cases:\n  // 1. If it's a past date (or a date in the near future) then it's possible\n  //    that the time zone may have newly added DST in the next few years. So\n  //    we'll have to look from the provided time until a few years after the\n  //    current system time. (Changes to DST policy are usually announced a few\n  //    years in the future.) Note that the first DST anywhere started in 1847,\n  //    so we'll start checks in 1847 instead of wasting cycles on years where\n  //    there will never be transitions.\n  // 2. If it's a future date beyond the next few years, then we'll just assume\n  //    that the latest DST policy in TZDB will still be in effect.  In this\n  //    case, we only need to look one year in the future to see if there are\n  //    any DST transitions.  We actually only need to look 9-10 months because\n  //    DST has two transitions per year, but we'll use a year just to be safe.\n  const oneYearLater = JSBI.add(epochNanoseconds, ABOUT_ONE_YEAR_NANOS);\n  const uppercap = maxJSBI(afterLatestPossibleTzdbRuleChange(), oneYearLater);\n  // The first transition (in any timezone) recorded in the TZDB was in 1847, so\n  // start there if an earlier date is supplied.\n  let leftNanos = maxJSBI(BEFORE_FIRST_OFFSET_TRANSITION, epochNanoseconds);\n  const leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n  let rightNanos = leftNanos;\n  let rightOffsetNs = leftOffsetNs;\n  while (leftOffsetNs === rightOffsetNs && JSBI.lessThan(JSBI.BigInt(leftNanos), uppercap)) {\n    rightNanos = JSBI.add(leftNanos, TWO_WEEKS_NANOS);\n    if (JSBI.greaterThan(rightNanos, NS_MAX)) return null;\n    rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n    if (leftOffsetNs === rightOffsetNs) {\n      leftNanos = rightNanos;\n    }\n  }\n  if (leftOffsetNs === rightOffsetNs) return null;\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\nexport function GetNamedTimeZonePreviousTransition(id: string, epochNanoseconds: JSBI): JSBI | null {\n  // If a time zone uses DST (at the time of `epochNanoseconds`), then we only\n  // have to look back one year to find a transition. But if it doesn't use DST,\n  // then we need to look all the way back to 1847 (the earliest rule in the\n  // TZDB) to see if it had other offset transitions in the past. Looping back\n  // from a far-future date to 1847 is very slow (minutes of 100% CPU!), and is\n  // also unnecessary because DST rules aren't put into the TZDB more than a few\n  // years in the future because the political changes in time zones happen with\n  // only a few years' warning. Therefore, if a far-future date is provided,\n  // then we'll run the check in two parts:\n  // 1. First, we'll look back for up to one year to see if the latest TZDB\n  //    rules have DST.\n  // 2. If not, then we'll \"fast-reverse\" back to a few years later than the\n  //    current system time, and then look back to 1847. This reduces the\n  //    worst-case loop from 273K years to 175 years, for a ~1500x improvement\n  //    in worst-case perf.\n  const afterLatestRule = afterLatestPossibleTzdbRuleChange();\n  const isFarFuture = JSBI.greaterThan(epochNanoseconds, afterLatestRule);\n  const lowercap = isFarFuture ? JSBI.subtract(epochNanoseconds, ABOUT_ONE_YEAR_NANOS) : BEFORE_FIRST_OFFSET_TRANSITION;\n\n  // TODO: proposal-temporal polyfill has different code for very similar\n  // optimizations as above, as well as in GetNamedTimeZonePreviousTransition.\n  // We should figure out if we should change one polyfill to match the other.\n\n  // We assume most time zones either have regular DST rules that extend\n  // indefinitely into the future, or they have no DST transitions between now\n  // and next year. Africa/Casablanca and Africa/El_Aaiun are unique cases\n  // that fit neither of these. Their irregular DST transitions are\n  // precomputed until 2087 in the current time zone database, so requesting\n  // the previous transition for an instant far in the future may take an\n  // extremely long time as it loops backward 2 weeks at a time.\n  if (id === 'Africa/Casablanca' || id === 'Africa/El_Aaiun') {\n    const lastPrecomputed = GetSlot(ToTemporalInstant('2088-01-01T00Z'), EPOCHNANOSECONDS);\n    if (JSBI.lessThan(lastPrecomputed, epochNanoseconds)) {\n      return GetNamedTimeZonePreviousTransition(id, lastPrecomputed);\n    }\n  }\n\n  let rightNanos = JSBI.subtract(epochNanoseconds, ONE);\n  if (JSBI.lessThan(rightNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n  const rightOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, rightNanos);\n  let leftNanos = rightNanos;\n  let leftOffsetNs = rightOffsetNs;\n  while (rightOffsetNs === leftOffsetNs && JSBI.greaterThan(rightNanos, lowercap)) {\n    leftNanos = JSBI.subtract(rightNanos, TWO_WEEKS_NANOS);\n    if (JSBI.lessThan(leftNanos, BEFORE_FIRST_OFFSET_TRANSITION)) return null;\n    leftOffsetNs = GetNamedTimeZoneOffsetNanoseconds(id, leftNanos);\n    if (rightOffsetNs === leftOffsetNs) {\n      rightNanos = leftNanos;\n    }\n  }\n  if (rightOffsetNs === leftOffsetNs) {\n    if (isFarFuture) {\n      // There was no DST after looking back one year, which means that the most\n      // recent TZDB rules don't have any recurring transitions. To check for\n      // transitions in older rules, back up to a few years after the current\n      // date and then look all the way back to 1847. Note that we move back one\n      // day from the latest possible rule so that when the recursion runs it\n      // won't consider the new time to be \"far future\" because the system clock\n      // has advanced in the meantime.\n      const newTimeToCheck = JSBI.subtract(afterLatestRule, DAY_NANOS);\n      return GetNamedTimeZonePreviousTransition(id, newTimeToCheck);\n    }\n    return null;\n  }\n  const result = bisect(\n    (epochNs: JSBI) => GetNamedTimeZoneOffsetNanoseconds(id, epochNs),\n    leftNanos,\n    rightNanos,\n    leftOffsetNs,\n    rightOffsetNs\n  );\n  return result;\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function parseFromEnUsFormat(datetime: string) {\n  const parts = datetime.split(/[^\\w]+/);\n\n  if (parts.length !== 7) {\n    throw new RangeError(`expected 7 parts in \"${datetime}`);\n  }\n\n  const month = +parts[0];\n  const day = +parts[1];\n  let year = +parts[2];\n  const era = parts[3].toUpperCase();\n  if (era === 'B' || era === 'BC') {\n    year = -year + 1;\n  } else if (era !== 'A' && era !== 'AD') {\n    throw new RangeError(`Unknown era ${era} in \"${datetime}`);\n  }\n  let hour = +parts[4];\n  if (hour === 24) {\n    // bugs.chromium.org/p/chromium/issues/detail?id=1045791\n    hour = 0;\n  }\n  const minute = +parts[5];\n  const second = +parts[6];\n\n  if (\n    !NumberIsFinite(year) ||\n    !NumberIsFinite(month) ||\n    !NumberIsFinite(day) ||\n    !NumberIsFinite(hour) ||\n    !NumberIsFinite(minute) ||\n    !NumberIsFinite(second)\n  ) {\n    throw new RangeError(`Invalid number in \"${datetime}`);\n  }\n\n  return { year, month, day, hour, minute, second };\n}\n\n// ts-prune-ignore-next TODO: remove this after tests are converted to TS\nexport function GetFormatterParts(timeZone: string, epochMilliseconds: number) {\n  const formatter = getIntlDateTimeFormatEnUsForTimeZone(timeZone);\n  // Using `format` instead of `formatToParts` for compatibility with older clients\n  const datetime = formatter.format(new Date(epochMilliseconds));\n  return parseFromEnUsFormat(datetime);\n}\n\nexport function GetNamedTimeZoneEpochNanoseconds(\n  id: string,\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  const ns = GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond);\n  if (ns === null) throw new RangeError('DateTime outside of supported range');\n  let nsEarlier = JSBI.subtract(ns, DAY_NANOS);\n  if (JSBI.lessThan(nsEarlier, NS_MIN)) nsEarlier = ns;\n  let nsLater = JSBI.add(ns, DAY_NANOS);\n  if (JSBI.greaterThan(nsLater, NS_MAX)) nsLater = ns;\n  const earliest = GetNamedTimeZoneOffsetNanoseconds(id, nsEarlier);\n  const latest = GetNamedTimeZoneOffsetNanoseconds(id, nsLater);\n  const found = earliest === latest ? [earliest] : [earliest, latest];\n  return found\n    .map((offsetNanoseconds) => {\n      const epochNanoseconds = JSBI.subtract(ns, JSBI.BigInt(offsetNanoseconds));\n      const parts = GetNamedTimeZoneDateTimeParts(id, epochNanoseconds);\n      if (\n        year !== parts.year ||\n        month !== parts.month ||\n        day !== parts.day ||\n        hour !== parts.hour ||\n        minute !== parts.minute ||\n        second !== parts.second ||\n        millisecond !== parts.millisecond ||\n        microsecond !== parts.microsecond ||\n        nanosecond !== parts.nanosecond\n      ) {\n        return undefined;\n      }\n      return epochNanoseconds;\n    })\n    .filter((x) => x !== undefined) as JSBI[];\n}\n\nexport function LeapYear(year: number) {\n  if (undefined === year) return false;\n  const isDiv4 = year % 4 === 0;\n  const isDiv100 = year % 100 === 0;\n  const isDiv400 = year % 400 === 0;\n  return isDiv4 && (!isDiv100 || isDiv400);\n}\n\nexport function ISODaysInMonth(year: number, month: number) {\n  const DoM = {\n    standard: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    leapyear: [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n  };\n  return DoM[LeapYear(year) ? 'leapyear' : 'standard'][month - 1];\n}\n\nexport function DayOfWeek(year: number, month: number, day: number) {\n  const m = month + (month < 3 ? 10 : -2);\n  const Y = year - (month < 3 ? 1 : 0);\n\n  const c = MathFloor(Y / 100);\n  const y = Y - c * 100;\n  const d = day;\n\n  const pD = d;\n  const pM = MathFloor(2.6 * m - 0.2);\n  const pY = y + MathFloor(y / 4);\n  const pC = MathFloor(c / 4) - 2 * c;\n\n  const dow = (pD + pM + pY + pC) % 7;\n\n  return dow + (dow <= 0 ? 7 : 0);\n}\n\nexport function DayOfYear(year: number, month: number, day: number) {\n  let days = day;\n  for (let m = month - 1; m > 0; m--) {\n    days += ISODaysInMonth(year, m);\n  }\n  return days;\n}\n\nexport function WeekOfYear(year: number, month: number, day: number) {\n  const doy = DayOfYear(year, month, day);\n  const dow = DayOfWeek(year, month, day) || 7;\n  const doj = DayOfWeek(year, 1, 1);\n\n  const week = MathFloor((doy - dow + 10) / 7);\n\n  if (week < 1) {\n    if (doj === 5 || (doj === 6 && LeapYear(year - 1))) {\n      return { week: 53, year: year - 1 };\n    } else {\n      return { week: 52, year: year - 1 };\n    }\n  }\n  if (week === 53) {\n    if ((LeapYear(year) ? 366 : 365) - doy < 4 - dow) {\n      return { week: 1, year: year + 1 };\n    }\n  }\n\n  return { week, year };\n}\n\nexport function DurationSign(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (prop !== 0) return prop < 0 ? -1 : 1;\n  }\n  return 0;\n}\n\nfunction BalanceISOYearMonth(yearParam: number, monthParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  if (!NumberIsFinite(year) || !NumberIsFinite(month)) throw new RangeError('infinity is out of range');\n  month -= 1;\n  year += MathFloor(month / 12);\n  month %= 12;\n  if (month < 0) month += 12;\n  month += 1;\n  return { year, month };\n}\n\nfunction BalanceISODate(yearParam: number, monthParam: number, dayParam: number) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  if (!NumberIsFinite(day)) throw new RangeError('infinity is out of range');\n  ({ year, month } = BalanceISOYearMonth(year, month));\n\n  // The pattern of leap years in the ISO 8601 calendar repeats every 400\n  // years. So if we have more than 400 years in days, there's no need to\n  // convert days to a year 400 times. We can convert a multiple of 400 all at\n  // once.\n  const daysIn400YearCycle = 400 * 365 + 97;\n  if (MathAbs(day) > daysIn400YearCycle) {\n    const nCycles = MathTrunc(day / daysIn400YearCycle);\n    year += 400 * nCycles;\n    day -= nCycles * daysIn400YearCycle;\n  }\n\n  let daysInYear = 0;\n  let testYear = month > 2 ? year : year - 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day < -daysInYear)) {\n    year -= 1;\n    testYear -= 1;\n    day += daysInYear;\n  }\n  testYear += 1;\n  while (((daysInYear = LeapYear(testYear) ? 366 : 365), day > daysInYear)) {\n    year += 1;\n    testYear += 1;\n    day -= daysInYear;\n  }\n\n  while (day < 1) {\n    ({ year, month } = BalanceISOYearMonth(year, month - 1));\n    day += ISODaysInMonth(year, month);\n  }\n  while (day > ISODaysInMonth(year, month)) {\n    day -= ISODaysInMonth(year, month);\n    ({ year, month } = BalanceISOYearMonth(year, month + 1));\n  }\n\n  return { year, month, day };\n}\n\nfunction BalanceISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction BalanceTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  let hour = JSBI.BigInt(hourParam);\n  let minute = JSBI.BigInt(minuteParam);\n  let second = JSBI.BigInt(secondParam);\n  let millisecond = JSBI.BigInt(millisecondParam);\n  let microsecond = JSBI.BigInt(microsecondParam);\n  let nanosecond = JSBI.BigInt(nanosecondParam);\n  let quotient;\n\n  ({ quotient, remainder: nanosecond } = NonNegativeBigIntDivmod(nanosecond, THOUSAND));\n  microsecond = JSBI.add(microsecond, quotient);\n\n  ({ quotient, remainder: microsecond } = NonNegativeBigIntDivmod(microsecond, THOUSAND));\n  millisecond = JSBI.add(millisecond, quotient);\n\n  ({ quotient, remainder: millisecond } = NonNegativeBigIntDivmod(millisecond, THOUSAND));\n  second = JSBI.add(second, quotient);\n\n  ({ quotient, remainder: second } = NonNegativeBigIntDivmod(second, SIXTY));\n  minute = JSBI.add(minute, quotient);\n\n  ({ quotient, remainder: minute } = NonNegativeBigIntDivmod(minute, SIXTY));\n  hour = JSBI.add(hour, quotient);\n\n  ({ quotient, remainder: hour } = NonNegativeBigIntDivmod(hour, TWENTY_FOUR));\n\n  return {\n    deltaDays: JSBI.toNumber(quotient),\n    hour: JSBI.toNumber(hour),\n    minute: JSBI.toNumber(minute),\n    second: JSBI.toNumber(second),\n    millisecond: JSBI.toNumber(millisecond),\n    microsecond: JSBI.toNumber(microsecond),\n    nanosecond: JSBI.toNumber(nanosecond)\n  };\n}\n\nexport function TotalDurationNanoseconds(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  offsetShift: number\n) {\n  const days: JSBI = JSBI.BigInt(daysParam);\n  let nanoseconds: JSBI = JSBI.BigInt(nanosecondsParam);\n  if (daysParam !== 0) nanoseconds = JSBI.subtract(JSBI.BigInt(nanosecondsParam), JSBI.BigInt(offsetShift));\n  const hours = JSBI.add(JSBI.BigInt(hoursParam), JSBI.multiply(days, JSBI.BigInt(24)));\n  const minutes = JSBI.add(JSBI.BigInt(minutesParam), JSBI.multiply(hours, SIXTY));\n  const seconds = JSBI.add(JSBI.BigInt(secondsParam), JSBI.multiply(minutes, SIXTY));\n  const milliseconds = JSBI.add(JSBI.BigInt(millisecondsParam), JSBI.multiply(seconds, THOUSAND));\n  const microseconds = JSBI.add(JSBI.BigInt(microsecondsParam), JSBI.multiply(milliseconds, THOUSAND));\n  return JSBI.add(JSBI.BigInt(nanoseconds), JSBI.multiply(microseconds, THOUSAND));\n}\n\nfunction NanosecondsToDays(nanosecondsParam: JSBI, relativeTo: ReturnType<typeof ToRelativeTemporalObject>) {\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const sign = MathSign(JSBI.toNumber(nanosecondsParam));\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  let dayLengthNs = 86400e9;\n  if (sign === 0) return { days: 0, nanoseconds: ZERO, dayLengthNs };\n  if (!IsTemporalZonedDateTime(relativeTo)) {\n    let days: JSBI;\n    ({ quotient: days, remainder: nanoseconds } = divmod(nanoseconds, JSBI.BigInt(dayLengthNs)));\n    return { days: JSBI.toNumber(days), nanoseconds, dayLengthNs };\n  }\n\n  const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n  const start = GetSlot(relativeTo, INSTANT);\n  const endNs = JSBI.add(startNs, nanoseconds);\n  const end = new TemporalInstant(endNs);\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n\n  // Find the difference in days only.\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { days: daysNumber } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    'day',\n    ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n  );\n  let intermediateNs = AddZonedDateTime(start, timeZone, calendar, 0, 0, 0, daysNumber, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n\n  // If clock time after addition was in the middle of a skipped period, the\n  // endpoint was disambiguated to a later clock time. So it's possible that\n  // the resulting disambiguated result is later than endNs. If so, then back\n  // up one day and try again. Repeat if necessary (some transitions are\n  // > 24 hours) until either there's zero days left or the date duration is\n  // back inside the period where it belongs. Note that this case only can\n  // happen for positive durations because the only direction that\n  // `disambiguation: 'compatible'` can change clock time is forwards.\n  let daysBigInt = JSBI.BigInt(daysNumber);\n  if (sign === 1) {\n    while (JSBI.greaterThan(daysBigInt, ZERO) && JSBI.greaterThan(intermediateNs, endNs)) {\n      daysBigInt = JSBI.subtract(daysBigInt, ONE);\n      intermediateNs = AddZonedDateTime(\n        start,\n        timeZone,\n        calendar,\n        0,\n        0,\n        0,\n        JSBI.toNumber(daysBigInt),\n        0,\n        0,\n        0,\n        0,\n        0,\n        0\n      );\n      // may do disambiguation\n    }\n  }\n  nanoseconds = JSBI.subtract(endNs, intermediateNs);\n\n  let isOverflow = false;\n  let relativeInstant = new TemporalInstant(intermediateNs);\n  do {\n    // calculate length of the next day (day that contains the time remainder)\n    const oneDayFartherNs = AddZonedDateTime(relativeInstant, timeZone, calendar, 0, 0, 0, sign, 0, 0, 0, 0, 0, 0);\n    const relativeNs = GetSlot(relativeInstant, EPOCHNANOSECONDS);\n    dayLengthNs = JSBI.toNumber(JSBI.subtract(oneDayFartherNs, relativeNs));\n    isOverflow = JSBI.greaterThanOrEqual(\n      JSBI.multiply(JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs)), JSBI.BigInt(sign)),\n      ZERO\n    );\n    if (isOverflow) {\n      nanoseconds = JSBI.subtract(nanoseconds, JSBI.BigInt(dayLengthNs));\n      relativeInstant = new TemporalInstant(oneDayFartherNs);\n      daysBigInt = JSBI.add(daysBigInt, JSBI.BigInt(sign));\n    }\n  } while (isOverflow);\n  if (!isZero(daysBigInt) && signJSBI(daysBigInt) !== sign) {\n    throw new RangeError('Time zone or calendar converted nanoseconds into a number of days with the opposite sign');\n  }\n  if (!isZero(nanoseconds) && signJSBI(nanoseconds) !== sign) {\n    if (isNegativeJSBI(nanoseconds) && sign === 1) {\n      throw new Error('assert not reached');\n    }\n    throw new RangeError('Time zone or calendar ended up with a remainder of nanoseconds with the opposite sign');\n  }\n  if (JSBI.greaterThanOrEqual(abs(nanoseconds), abs(JSBI.BigInt(dayLengthNs)))) {\n    throw new Error('assert not reached');\n  }\n  return { days: JSBI.toNumber(daysBigInt), nanoseconds, dayLengthNs: MathAbs(dayLengthNs) };\n}\n\nexport function BalanceDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let result = BalancePossiblyInfiniteDuration(\n    daysParam,\n    hoursParam,\n    minutesParam,\n    secondsParam,\n    millisecondsParam,\n    microsecondsParam,\n    nanosecondsParam,\n    largestUnit,\n    relativeTo\n  );\n  if (result === 'positive overflow' || result === 'negative overflow') {\n    throw new RangeError('Duration out of range');\n  } else {\n    return result;\n  }\n}\n\nexport function BalancePossiblyInfiniteDuration(\n  daysParam: number,\n  hoursParam: number | JSBI,\n  minutesParam: number | JSBI,\n  secondsParam: number | JSBI,\n  millisecondsParam: number | JSBI,\n  microsecondsParam: number | JSBI,\n  nanosecondsParam: number | JSBI,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let days = daysParam;\n  let nanosecondsBigInt: JSBI,\n    microsecondsBigInt: JSBI,\n    millisecondsBigInt: JSBI,\n    secondsBigInt: JSBI,\n    minutesBigInt: JSBI,\n    hoursBigInt: JSBI;\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const endNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      GetSlot(relativeTo, TIME_ZONE),\n      GetSlot(relativeTo, CALENDAR),\n      0,\n      0,\n      0,\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam\n    );\n    const startNs = GetSlot(relativeTo, EPOCHNANOSECONDS);\n    nanosecondsBigInt = JSBI.subtract(endNs, startNs);\n  } else {\n    nanosecondsBigInt = TotalDurationNanoseconds(\n      days,\n      hoursParam,\n      minutesParam,\n      secondsParam,\n      millisecondsParam,\n      microsecondsParam,\n      nanosecondsParam,\n      0\n    );\n  }\n  if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week' || largestUnit === 'day') {\n    ({ days, nanoseconds: nanosecondsBigInt } = NanosecondsToDays(nanosecondsBigInt, relativeTo));\n  } else {\n    days = 0;\n  }\n\n  const sign = JSBI.lessThan(nanosecondsBigInt, ZERO) ? -1 : 1;\n  nanosecondsBigInt = abs(nanosecondsBigInt);\n  microsecondsBigInt = millisecondsBigInt = secondsBigInt = minutesBigInt = hoursBigInt = ZERO;\n\n  switch (largestUnit) {\n    case 'year':\n    case 'month':\n    case 'week':\n    case 'day':\n    case 'hour':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      ({ quotient: hoursBigInt, remainder: minutesBigInt } = divmod(minutesBigInt, SIXTY));\n      break;\n    case 'minute':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      ({ quotient: minutesBigInt, remainder: secondsBigInt } = divmod(secondsBigInt, SIXTY));\n      break;\n    case 'second':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      ({ quotient: secondsBigInt, remainder: millisecondsBigInt } = divmod(millisecondsBigInt, THOUSAND));\n      break;\n    case 'millisecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      ({ quotient: millisecondsBigInt, remainder: microsecondsBigInt } = divmod(microsecondsBigInt, THOUSAND));\n      break;\n    case 'microsecond':\n      ({ quotient: microsecondsBigInt, remainder: nanosecondsBigInt } = divmod(nanosecondsBigInt, THOUSAND));\n      break;\n    case 'nanosecond':\n      break;\n    default:\n      throw new Error('assert not reached');\n  }\n\n  const hours = JSBI.toNumber(hoursBigInt) * sign;\n  const minutes = JSBI.toNumber(minutesBigInt) * sign;\n  const seconds = JSBI.toNumber(secondsBigInt) * sign;\n  const milliseconds = JSBI.toNumber(millisecondsBigInt) * sign;\n  const microseconds = JSBI.toNumber(microsecondsBigInt) * sign;\n  const nanoseconds = JSBI.toNumber(nanosecondsBigInt) * sign;\n\n  for (const prop of [days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds]) {\n    if (!NumberIsFinite(prop)) {\n      if (sign === 1) {\n        return 'positive overflow' as const;\n      } else {\n        return 'negative overflow' as const;\n      }\n    }\n  }\n\n  return { days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function UnbalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year':\n      // no-op\n      break;\n    case 'month':\n      {\n        if (!calendar) throw new RangeError('a starting point is required for months balancing');\n        assertExists(relativeTo);\n        // balance years down to months\n        let dateAdd, dateUntil;\n        if (typeof calendar !== 'string') {\n          dateAdd = GetMethod(calendar, 'dateAdd');\n          dateUntil = GetMethod(calendar, 'dateUntil');\n        }\n        while (!isZero(years)) {\n          const newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n          const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof largestUnit>;\n          untilOptions.largestUnit = 'month';\n          const untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n          const oneYearMonths = JSBI.BigInt(GetSlot(untilResult, MONTHS));\n          relativeTo = newRelativeTo;\n          months = JSBI.add(months, oneYearMonths);\n          years = JSBI.subtract(years, signBI);\n        }\n      }\n      break;\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance years down to days\n      while (!isZero(years)) {\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n      break;\n    }\n    default: {\n      // balance years down to days\n      if (isZero(years) && isZero(months) && isZero(weeks)) break;\n      if (!calendar) throw new RangeError('a starting point is required for balancing calendar units');\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      while (!isZero(years)) {\n        assertExists(relativeTo);\n        let oneYearDays;\n        ({ relativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.subtract(years, signBI);\n      }\n\n      // balance months down to days\n      while (!isZero(months)) {\n        assertExists(relativeTo);\n        let oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.subtract(months, signBI);\n      }\n\n      // balance weeks down to days\n      while (!isZero(weeks)) {\n        assertExists(relativeTo);\n        let oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n        days = JSBI.add(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.subtract(weeks, signBI);\n      }\n      break;\n    }\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function BalanceDurationRelative(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  largestUnit: Temporal.DateTimeUnit,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject>\n): {\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n} {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const sign = DurationSign(yearsParam, monthsParam, weeksParam, daysParam, 0, 0, 0, 0, 0, 0);\n  if (sign === 0) return { years: yearsParam, months: monthsParam, weeks: weeksParam, days: daysParam };\n  const signBI = JSBI.BigInt(sign);\n\n  let years = JSBI.BigInt(yearsParam);\n  let months = JSBI.BigInt(monthsParam);\n  let weeks = JSBI.BigInt(weeksParam);\n  let days = JSBI.BigInt(daysParam);\n\n  let calendar;\n  let relativeTo: Temporal.PlainDate | undefined;\n  if (relativeToParam) {\n    relativeTo = ToTemporalDate(relativeToParam);\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  const oneYear = new TemporalDuration(sign);\n  const oneMonth = new TemporalDuration(0, sign);\n  const oneWeek = new TemporalDuration(0, 0, sign);\n\n  switch (largestUnit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('a starting point is required for years balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to years\n      let newRelativeTo, oneYearDays;\n      ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneYearDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneYearDays));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd));\n      }\n\n      // balance days up to months\n      let oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n\n      // balance months up to years\n      newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n      const dateUntil = typeof calendar !== 'string' ? GetMethod(calendar, 'dateUntil') : undefined;\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n      untilOptions.largestUnit = 'month';\n      let untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n      let oneYearMonths = GetSlot(untilResult, MONTHS);\n      while (JSBI.greaterThanOrEqual(abs(months), JSBI.BigInt(MathAbs(oneYearMonths)))) {\n        months = JSBI.subtract(months, JSBI.BigInt(oneYearMonths));\n        years = JSBI.add(years, signBI);\n        relativeTo = newRelativeTo;\n        newRelativeTo = CalendarDateAdd(calendar, relativeTo, oneYear, undefined, dateAdd);\n        const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<'month'>;\n        untilOptions.largestUnit = 'month';\n        untilResult = CalendarDateUntil(calendar, relativeTo, newRelativeTo, untilOptions, dateUntil);\n        oneYearMonths = GetSlot(untilResult, MONTHS);\n      }\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('a starting point is required for months balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to months\n      let newRelativeTo, oneMonthDays;\n      ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneMonthDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneMonthDays));\n        months = JSBI.add(months, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('a starting point is required for weeks balancing');\n      assertExists(relativeTo);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      // balance days up to weeks\n      let newRelativeTo, oneWeekDays;\n      ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (JSBI.greaterThanOrEqual(abs(days), JSBI.BigInt(MathAbs(oneWeekDays)))) {\n        days = JSBI.subtract(days, JSBI.BigInt(oneWeekDays));\n        weeks = JSBI.add(weeks, signBI);\n        relativeTo = newRelativeTo;\n        ({ relativeTo: newRelativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      break;\n    }\n    default:\n      // no-op\n      break;\n  }\n\n  return {\n    years: JSBI.toNumber(years),\n    months: JSBI.toNumber(months),\n    weeks: JSBI.toNumber(weeks),\n    days: JSBI.toNumber(days)\n  };\n}\n\nexport function CalculateOffsetShift(\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>,\n  y: number,\n  mon: number,\n  w: number,\n  d: number\n) {\n  if (IsTemporalZonedDateTime(relativeTo)) {\n    const instant = GetSlot(relativeTo, INSTANT);\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const offsetBefore = GetOffsetNanosecondsFor(timeZone, instant);\n    const after = AddZonedDateTime(instant, timeZone, calendar, y, mon, w, d, 0, 0, 0, 0, 0, 0);\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const instantAfter = new TemporalInstant(after);\n    const offsetAfter = GetOffsetNanosecondsFor(timeZone, instantAfter);\n    return offsetAfter - offsetBefore;\n  }\n  return 0;\n}\n\nexport function CreateNegatedTemporalDuration(duration: Temporal.Duration) {\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  return new TemporalDuration(\n    -GetSlot(duration, YEARS),\n    -GetSlot(duration, MONTHS),\n    -GetSlot(duration, WEEKS),\n    -GetSlot(duration, DAYS),\n    -GetSlot(duration, HOURS),\n    -GetSlot(duration, MINUTES),\n    -GetSlot(duration, SECONDS),\n    -GetSlot(duration, MILLISECONDS),\n    -GetSlot(duration, MICROSECONDS),\n    -GetSlot(duration, NANOSECONDS)\n  );\n}\n\nexport function ConstrainToRange(value: number | undefined, min: number, max: number) {\n  // Math.Max accepts undefined values and returns NaN. Undefined values are\n  // used for optional params in the method below.\n  return MathMin(max, MathMax(min, value as number));\n}\nfunction ConstrainISODate(year: number, monthParam: number, dayParam?: number) {\n  const month = ConstrainToRange(monthParam, 1, 12);\n  const day = ConstrainToRange(dayParam, 1, ISODaysInMonth(year, month));\n  return { year, month, day };\n}\n\nfunction ConstrainTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number\n) {\n  const hour = ConstrainToRange(hourParam, 0, 23);\n  const minute = ConstrainToRange(minuteParam, 0, 59);\n  const second = ConstrainToRange(secondParam, 0, 59);\n  const millisecond = ConstrainToRange(millisecondParam, 0, 999);\n  const microsecond = ConstrainToRange(microsecondParam, 0, 999);\n  const nanosecond = ConstrainToRange(nanosecondParam, 0, 999);\n  return { hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RejectToRange(value: number, min: number, max: number) {\n  if (value < min || value > max) throw new RangeError(`value out of range: ${min} <= ${value} <= ${max}`);\n}\n\nfunction RejectISODate(year: number, month: number, day: number) {\n  RejectToRange(month, 1, 12);\n  RejectToRange(day, 1, ISODaysInMonth(year, month));\n}\n\nfunction RejectDateRange(year: number, month: number, day: number) {\n  // Noon avoids trouble at edges of DateTime range (excludes midnight)\n  RejectDateTimeRange(year, month, day, 12, 0, 0, 0, 0, 0);\n}\n\nexport function RejectTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(hour, 0, 23);\n  RejectToRange(minute, 0, 59);\n  RejectToRange(second, 0, 59);\n  RejectToRange(millisecond, 0, 999);\n  RejectToRange(microsecond, 0, 999);\n  RejectToRange(nanosecond, 0, 999);\n}\n\nfunction RejectDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectISODate(year, month, day);\n  RejectTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nfunction RejectDateTimeRange(\n  year: number,\n  month: number,\n  day: number,\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number\n) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  // Reject any DateTime 24 hours or more outside the Instant range\n  if (\n    (year === YEAR_MIN &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day + 1, hour, minute, second, millisecond, microsecond, nanosecond - 1)) ||\n    (year === YEAR_MAX &&\n      null ==\n        GetUTCEpochNanoseconds(year, month, day - 1, hour, minute, second, millisecond, microsecond, nanosecond + 1))\n  ) {\n    throw new RangeError('DateTime outside of supported range');\n  }\n}\n\nexport function ValidateEpochNanoseconds(epochNanoseconds: JSBI) {\n  if (JSBI.lessThan(epochNanoseconds, NS_MIN) || JSBI.greaterThan(epochNanoseconds, NS_MAX)) {\n    throw new RangeError('Instant outside of supported range');\n  }\n}\n\nfunction RejectYearMonthRange(year: number, month: number) {\n  RejectToRange(year, YEAR_MIN, YEAR_MAX);\n  if (year === YEAR_MIN) {\n    RejectToRange(month, 4, 12);\n  } else if (year === YEAR_MAX) {\n    RejectToRange(month, 1, 9);\n  }\n}\n\nexport function RejectDuration(\n  y: number,\n  mon: number,\n  w: number,\n  d: number,\n  h: number,\n  min: number,\n  s: number,\n  ms: number,\n  µs: number,\n  ns: number\n) {\n  const sign = DurationSign(y, mon, w, d, h, min, s, ms, µs, ns);\n  for (const prop of [y, mon, w, d, h, min, s, ms, µs, ns]) {\n    if (!NumberIsFinite(prop)) throw new RangeError('infinite values not allowed as duration fields');\n    const propSign = MathSign(prop);\n    if (propSign !== 0 && propSign !== sign) throw new RangeError('mixed-sign values not allowed as duration fields');\n  }\n}\n\nexport function DifferenceISODate<Allowed extends Temporal.DateTimeUnit>(\n  y1: number,\n  m1: number,\n  d1: number,\n  y2: number,\n  m2: number,\n  d2: number,\n  largestUnit: Allowed\n) {\n  switch (largestUnit) {\n    case 'year':\n    case 'month': {\n      const sign = -CompareISODate(y1, m1, d1, y2, m2, d2);\n      if (sign === 0) return { years: 0, months: 0, weeks: 0, days: 0 };\n\n      const start = { year: y1, month: m1, day: d1 };\n      const end = { year: y2, month: m2, day: d2 };\n\n      let years = end.year - start.year;\n      let mid = AddISODate(y1, m1, d1, years, 0, 0, 0, 'constrain');\n      let midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months: 0, weeks: 0, days: 0 }\n          : { years: 0, months: years * 12, weeks: 0, days: 0 };\n      }\n      let months = end.month - start.month;\n      if (midSign !== sign) {\n        years -= sign;\n        months += sign * 12;\n      }\n      mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      midSign = -CompareISODate(mid.year, mid.month, mid.day, y2, m2, d2);\n      if (midSign === 0) {\n        return largestUnit === 'year'\n          ? { years, months, weeks: 0, days: 0 }\n          : { years: 0, months: months + years * 12, weeks: 0, days: 0 };\n      }\n      if (midSign !== sign) {\n        // The end date is later in the month than mid date (or earlier for\n        // negative durations). Back up one month.\n        months -= sign;\n        if (months === -sign) {\n          years -= sign;\n          months = 11 * sign;\n        }\n        mid = AddISODate(y1, m1, d1, years, months, 0, 0, 'constrain');\n      }\n\n      let days = 0;\n      // If we get here, months and years are correct (no overflow), and `mid`\n      // is within the range from `start` to `end`. To count the days between\n      // `mid` and `end`, there are 3 cases:\n      // 1) same month: use simple subtraction\n      // 2) end is previous month from intermediate (negative duration)\n      // 3) end is next month from intermediate (positive duration)\n      if (mid.month === end.month) {\n        // 1) same month: use simple subtraction\n        days = end.day - mid.day;\n      } else if (sign < 0) {\n        // 2) end is previous month from intermediate (negative duration)\n        // Example: intermediate: Feb 1, end: Jan 30, DaysInMonth = 31, days = -2\n        days = -mid.day - (ISODaysInMonth(end.year, end.month) - end.day);\n      } else {\n        // 3) end is next month from intermediate (positive duration)\n        // Example: intermediate: Jan 29, end: Feb 1, DaysInMonth = 31, days = 3\n        days = end.day + (ISODaysInMonth(mid.year, mid.month) - mid.day);\n      }\n\n      if (largestUnit === 'month') {\n        months += years * 12;\n        years = 0;\n      }\n      return { years, months, weeks: 0, days };\n    }\n    case 'week':\n    case 'day': {\n      let larger, smaller, sign;\n      if (CompareISODate(y1, m1, d1, y2, m2, d2) < 0) {\n        smaller = { year: y1, month: m1, day: d1 };\n        larger = { year: y2, month: m2, day: d2 };\n        sign = 1;\n      } else {\n        smaller = { year: y2, month: m2, day: d2 };\n        larger = { year: y1, month: m1, day: d1 };\n        sign = -1;\n      }\n      let days = DayOfYear(larger.year, larger.month, larger.day) - DayOfYear(smaller.year, smaller.month, smaller.day);\n      for (let year = smaller.year; year < larger.year; ++year) {\n        days += LeapYear(year) ? 366 : 365;\n      }\n      let weeks = 0;\n      if (largestUnit === 'week') {\n        weeks = MathFloor(days / 7);\n        days %= 7;\n      }\n      weeks *= sign;\n      days *= sign;\n      return { years: 0, months: 0, weeks, days };\n    }\n    default:\n      throw new Error('assert not reached');\n  }\n}\n\nfunction DifferenceTime(\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number\n) {\n  let hours = h2 - h1;\n  let minutes = min2 - min1;\n  let seconds = s2 - s1;\n  let milliseconds = ms2 - ms1;\n  let microseconds = µs2 - µs1;\n  let nanoseconds = ns2 - ns1;\n\n  const sign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  let deltaDays = 0;\n  ({\n    deltaDays,\n    hour: hours,\n    minute: minutes,\n    second: seconds,\n    millisecond: milliseconds,\n    microsecond: microseconds,\n    nanosecond: nanoseconds\n  } = BalanceTime(hours, minutes, seconds, milliseconds, microseconds, nanoseconds));\n\n  if (deltaDays != 0) throw new Error('assertion failure in DifferenceTime: _bt_.[[Days]] should be 0');\n  hours *= sign;\n  minutes *= sign;\n  seconds *= sign;\n  milliseconds *= sign;\n  microseconds *= sign;\n  nanoseconds *= sign;\n\n  return { hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceInstant(\n  ns1: JSBI,\n  ns2: JSBI,\n  increment: number,\n  smallestUnit: keyof typeof nsPerTimeUnit,\n  largestUnit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  const diff = JSBI.subtract(ns2, ns1);\n\n  let hours = 0;\n  let minutes = 0;\n  let nanoseconds = JSBI.toNumber(JSBI.remainder(diff, THOUSAND));\n  let microseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, THOUSAND), THOUSAND));\n  let milliseconds = JSBI.toNumber(JSBI.remainder(JSBI.divide(diff, MILLION), THOUSAND));\n  let seconds = JSBI.toNumber(JSBI.divide(diff, BILLION));\n\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    increment,\n    smallestUnit,\n    roundingMode\n  ));\n  return BalanceDuration(0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, largestUnit);\n}\n\nfunction DifferenceISODateTime(\n  y1Param: number,\n  mon1Param: number,\n  d1Param: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit> | undefined\n) {\n  let y1 = y1Param;\n  let mon1 = mon1Param;\n  let d1 = d1Param;\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    h1,\n    min1,\n    s1,\n    ms1,\n    µs1,\n    ns1,\n    h2,\n    min2,\n    s2,\n    ms2,\n    µs2,\n    ns2\n  );\n\n  const timeSign = DurationSign(0, 0, 0, 0, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  const dateSign = CompareISODate(y2, mon2, d2, y1, mon1, d1);\n  if (dateSign === -timeSign) {\n    ({ year: y1, month: mon1, day: d1 } = BalanceISODate(y1, mon1, d1 - timeSign));\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      -timeSign,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit\n    ));\n  }\n\n  const date1 = CreateTemporalDate(y1, mon1, d1, calendar);\n  const date2 = CreateTemporalDate(y2, mon2, d2, calendar);\n  const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit);\n  const untilOptions = CopyOptions(options);\n  untilOptions.largestUnit = dateLargestUnit;\n  // TODO untilOptions doesn't want to compile as it seems that smallestUnit is not clamped?\n  // Type 'SmallestUnit<DateTimeUnit> | undefined' is not assignable to type\n  //      'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.\n  // Type '\"hour\"' is not assignable to type\n  //      'SmallestUnit<\"year\" | \"month\" | \"day\" | \"week\"> | undefined'.ts(2345)\n  let { years, months, weeks, days } = CalendarDateUntil(calendar, date1, date2, untilOptions as any);\n  // Signs of date part and time part may not agree; balance them together\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    largestUnit\n  ));\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction DifferenceZonedDateTime(\n  ns1: JSBI,\n  ns2: JSBI,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  largestUnit: Temporal.DateTimeUnit,\n  options: Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n) {\n  const nsDiff = JSBI.subtract(ns2, ns1);\n  if (JSBI.equal(nsDiff, ZERO)) {\n    return {\n      years: 0,\n      months: 0,\n      weeks: 0,\n      days: 0,\n      hours: 0,\n      minutes: 0,\n      seconds: 0,\n      milliseconds: 0,\n      microseconds: 0,\n      nanoseconds: 0\n    };\n  }\n\n  // Find the difference in dates only.\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const start = new TemporalInstant(ns1);\n  const end = new TemporalInstant(ns2);\n  const dtStart = GetPlainDateTimeFor(timeZone, start, calendar);\n  const dtEnd = GetPlainDateTimeFor(timeZone, end, calendar);\n  let { years, months, weeks, days } = DifferenceISODateTime(\n    GetSlot(dtStart, ISO_YEAR),\n    GetSlot(dtStart, ISO_MONTH),\n    GetSlot(dtStart, ISO_DAY),\n    GetSlot(dtStart, ISO_HOUR),\n    GetSlot(dtStart, ISO_MINUTE),\n    GetSlot(dtStart, ISO_SECOND),\n    GetSlot(dtStart, ISO_MILLISECOND),\n    GetSlot(dtStart, ISO_MICROSECOND),\n    GetSlot(dtStart, ISO_NANOSECOND),\n    GetSlot(dtEnd, ISO_YEAR),\n    GetSlot(dtEnd, ISO_MONTH),\n    GetSlot(dtEnd, ISO_DAY),\n    GetSlot(dtEnd, ISO_HOUR),\n    GetSlot(dtEnd, ISO_MINUTE),\n    GetSlot(dtEnd, ISO_SECOND),\n    GetSlot(dtEnd, ISO_MILLISECOND),\n    GetSlot(dtEnd, ISO_MICROSECOND),\n    GetSlot(dtEnd, ISO_NANOSECOND),\n    calendar,\n    largestUnit,\n    options\n  );\n  const intermediateNs = AddZonedDateTime(start, timeZone, calendar, years, months, weeks, 0, 0, 0, 0, 0, 0, 0);\n  // may disambiguate\n  let timeRemainderNs = JSBI.subtract(ns2, intermediateNs);\n  const intermediate = CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n  ({ nanoseconds: timeRemainderNs, days } = NanosecondsToDays(timeRemainderNs, intermediate));\n\n  // Finally, merge the date and time durations and return the merged result.\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    JSBI.toNumber(timeRemainderNs),\n    'hour'\n  );\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\ntype DifferenceOperation = 'since' | 'until';\n\nfunction GetDifferenceSettings<T extends Temporal.DateTimeUnit>(\n  op: DifferenceOperation,\n  options: Temporal.DifferenceOptions<T>,\n  group: 'datetime' | 'date' | 'time',\n  disallowed: (Temporal.DateTimeUnit | 'auto')[],\n  fallbackSmallest: T,\n  smallestLargestDefaultUnit: T\n) {\n  const ALLOWED_UNITS = SINGULAR_PLURAL_UNITS.reduce((allowed, unitInfo) => {\n    const p = unitInfo[0];\n    const s = unitInfo[1];\n    const c = unitInfo[2];\n    if ((group === 'datetime' || c === group) && !disallowed.includes(s)) {\n      allowed.push(s, p);\n    }\n    return allowed;\n  }, [] as (Temporal.DateTimeUnit | Temporal.PluralUnit<Temporal.DateTimeUnit>)[]);\n\n  let largestUnit = GetTemporalUnit(options, 'largestUnit', group, 'auto');\n  if (disallowed.includes(largestUnit)) {\n    throw new RangeError(`largestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${largestUnit}`);\n  }\n\n  const roundingIncrement = ToTemporalRoundingIncrement(options);\n\n  let roundingMode = ToTemporalRoundingMode(options, 'trunc');\n  if (op === 'since') roundingMode = NegateTemporalRoundingMode(roundingMode);\n\n  const smallestUnit = GetTemporalUnit(options, 'smallestUnit', group, fallbackSmallest);\n  if (disallowed.includes(smallestUnit)) {\n    throw new RangeError(`smallestUnit must be one of ${ALLOWED_UNITS.join(', ')}, not ${smallestUnit}`);\n  }\n\n  const defaultLargestUnit = LargerOfTwoTemporalUnits(smallestLargestDefaultUnit, smallestUnit);\n  if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n  if (LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n    throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n  }\n  const MAX_DIFFERENCE_INCREMENTS: { [k in Temporal.DateTimeUnit]?: number } = {\n    hour: 24,\n    minute: 60,\n    second: 60,\n    millisecond: 1000,\n    microsecond: 1000,\n    nanosecond: 1000\n  };\n  const maximum = MAX_DIFFERENCE_INCREMENTS[smallestUnit];\n  if (maximum !== undefined) ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n  return { largestUnit: largestUnit as T, roundingIncrement, roundingMode, smallestUnit: smallestUnit as T };\n}\n\nexport function DifferenceTemporalInstant(\n  operation: DifferenceOperation,\n  instant: Temporal.Instant,\n  otherParam: InstantParams['until'][0],\n  options: InstantParams['until'][1] | undefined\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalInstant(otherParam);\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'second');\n\n  const onens = GetSlot(instant, EPOCHNANOSECONDS);\n  const twons = GetSlot(other, EPOCHNANOSECONDS);\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n    onens,\n    twons,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.largestUnit,\n    settings.roundingMode\n  );\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainDate(\n  operation: DifferenceOperation,\n  plainDate: Temporal.PlainDate,\n  otherParam: PlainDateParams['until'][0],\n  options: PlainDateParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDate(otherParam);\n  const calendar = GetSlot(plainDate, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', [], 'day', 'day');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  let { years, months, weeks, days } = CalendarDateUntil(calendar, plainDate, other, resolvedOptions);\n\n  if (settings.smallestUnit !== 'day' || settings.roundingIncrement !== 1) {\n    ({ years, months, weeks, days } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      plainDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, sign * weeks, sign * days, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalPlainDateTime(\n  operation: DifferenceOperation,\n  plainDateTime: Temporal.PlainDateTime,\n  otherParam: PlainDateTimeParams['until'][0],\n  options: PlainDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalDateTime(otherParam);\n  const calendar = GetSlot(plainDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'day');\n\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    DifferenceISODateTime(\n      GetSlot(plainDateTime, ISO_YEAR),\n      GetSlot(plainDateTime, ISO_MONTH),\n      GetSlot(plainDateTime, ISO_DAY),\n      GetSlot(plainDateTime, ISO_HOUR),\n      GetSlot(plainDateTime, ISO_MINUTE),\n      GetSlot(plainDateTime, ISO_SECOND),\n      GetSlot(plainDateTime, ISO_MILLISECOND),\n      GetSlot(plainDateTime, ISO_MICROSECOND),\n      GetSlot(plainDateTime, ISO_NANOSECOND),\n      GetSlot(other, ISO_YEAR),\n      GetSlot(other, ISO_MONTH),\n      GetSlot(other, ISO_DAY),\n      GetSlot(other, ISO_HOUR),\n      GetSlot(other, ISO_MINUTE),\n      GetSlot(other, ISO_SECOND),\n      GetSlot(other, ISO_MILLISECOND),\n      GetSlot(other, ISO_MICROSECOND),\n      GetSlot(other, ISO_NANOSECOND),\n      calendar,\n      settings.largestUnit,\n      resolvedOptions\n    );\n\n  const relativeTo = TemporalDateTimeToDate(plainDateTime);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode,\n    relativeTo\n  ));\n  ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainTime(\n  operation: DifferenceOperation,\n  plainTime: Temporal.PlainTime,\n  otherParam: PlainTimeParams['until'][0],\n  options: PlainTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalTime(otherParam);\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'time', [], 'nanosecond', 'hour');\n\n  let { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceTime(\n    GetSlot(plainTime, ISO_HOUR),\n    GetSlot(plainTime, ISO_MINUTE),\n    GetSlot(plainTime, ISO_SECOND),\n    GetSlot(plainTime, ISO_MILLISECOND),\n    GetSlot(plainTime, ISO_MICROSECOND),\n    GetSlot(plainTime, ISO_NANOSECOND),\n    GetSlot(other, ISO_HOUR),\n    GetSlot(other, ISO_MINUTE),\n    GetSlot(other, ISO_SECOND),\n    GetSlot(other, ISO_MILLISECOND),\n    GetSlot(other, ISO_MICROSECOND),\n    GetSlot(other, ISO_NANOSECOND)\n  );\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n    0,\n    0,\n    0,\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.roundingIncrement,\n    settings.smallestUnit,\n    settings.roundingMode\n  ));\n  ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    settings.largestUnit\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    0,\n    0,\n    0,\n    0,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function DifferenceTemporalPlainYearMonth(\n  operation: DifferenceOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  otherParam: PlainYearMonthParams['until'][0],\n  options: PlainYearMonthParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalYearMonth(otherParam);\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between months');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'date', ['week', 'day'], 'month', 'year');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year']) as AnyTemporalKey[];\n  const thisFields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  thisFields.day = 1;\n  const thisDate = CalendarDateFromFields(calendar, thisFields);\n  const otherFields = PrepareTemporalFields(other, fieldNames, []);\n  otherFields.day = 1;\n  const otherDate = CalendarDateFromFields(calendar, otherFields);\n\n  let { years, months } = CalendarDateUntil(calendar, thisDate, otherDate, resolvedOptions);\n\n  if (settings.smallestUnit !== 'month' || settings.roundingIncrement !== 1) {\n    ({ years, months } = RoundDuration(\n      years,\n      months,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      thisDate\n    ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(sign * years, sign * months, 0, 0, 0, 0, 0, 0, 0, 0);\n}\n\nexport function DifferenceTemporalZonedDateTime(\n  operation: DifferenceOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  otherParam: ZonedDateTimeParams['until'][0],\n  options: ZonedDateTimeParams['until'][1]\n): Temporal.Duration {\n  const sign = operation === 'since' ? -1 : 1;\n  const other = ToTemporalZonedDateTime(otherParam);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const otherCalendar = GetSlot(other, CALENDAR);\n  ThrowIfCalendarsNotEqual(calendar, otherCalendar, 'compute difference between dates');\n\n  const resolvedOptions = CopyOptions(options);\n  const settings = GetDifferenceSettings(operation, resolvedOptions, 'datetime', [], 'nanosecond', 'hour');\n  resolvedOptions.largestUnit = settings.largestUnit;\n\n  const ns1 = GetSlot(zonedDateTime, EPOCHNANOSECONDS);\n  const ns2 = GetSlot(other, EPOCHNANOSECONDS);\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (\n    settings.largestUnit !== 'year' &&\n    settings.largestUnit !== 'month' &&\n    settings.largestUnit !== 'week' &&\n    settings.largestUnit !== 'day'\n  ) {\n    // The user is only asking for a time difference, so return difference of instants.\n    years = 0;\n    months = 0;\n    weeks = 0;\n    days = 0;\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n      ns1,\n      ns2,\n      settings.roundingIncrement,\n      settings.smallestUnit as Temporal.TimeUnit,\n      settings.largestUnit as Temporal.TimeUnit,\n      settings.roundingMode\n    ));\n  } else {\n    const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n    if (!TimeZoneEquals(timeZone, GetSlot(other, TIME_ZONE))) {\n      throw new RangeError(\n        \"When calculating difference between time zones, largestUnit must be 'hours' \" +\n          'or smaller because day lengths can vary between time zones due to DST or time zone offset changes.'\n      );\n    }\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, settings.largestUnit, resolvedOptions));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      settings.roundingIncrement,\n      settings.smallestUnit,\n      settings.roundingMode,\n      zonedDateTime\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        settings.roundingIncrement,\n        settings.smallestUnit,\n        settings.roundingMode,\n        zonedDateTime\n      ));\n  }\n\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n}\n\nexport function AddISODate(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  overflow: Temporal.ArithmeticOptions['overflow']\n) {\n  let year = yearParam;\n  let month = monthParam;\n  let day = dayParam;\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n\n  year += years;\n  month += months;\n  ({ year, month } = BalanceISOYearMonth(year, month));\n  ({ year, month, day } = RegulateISODate(year, month, day, overflow));\n  days += 7 * weeks;\n  day += days;\n  ({ year, month, day } = BalanceISODate(year, month, day));\n  return { year, month, day };\n}\n\nfunction AddTime(\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number\n) {\n  let hour = hourParam;\n  let minute = minuteParam;\n  let second = secondParam;\n  let millisecond = millisecondParam;\n  let microsecond = microsecondParam;\n  let nanosecond = nanosecondParam;\n\n  hour += hours;\n  minute += minutes;\n  second += seconds;\n  millisecond += milliseconds;\n  microsecond += microseconds;\n  nanosecond += nanoseconds;\n  let deltaDays = 0;\n  ({ deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = BalanceTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  ));\n  return { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nfunction AddDuration(\n  y1: number,\n  mon1: number,\n  w1: number,\n  d1: number,\n  h1: number,\n  min1: number,\n  s1: number,\n  ms1: number,\n  µs1: number,\n  ns1: number,\n  y2: number,\n  mon2: number,\n  w2: number,\n  d2: number,\n  h2: number,\n  min2: number,\n  s2: number,\n  ms2: number,\n  µs2: number,\n  ns2: number,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  const largestUnit1 = DefaultTemporalLargestUnit(y1, mon1, w1, d1, h1, min1, s1, ms1, µs1, ns1);\n  const largestUnit2 = DefaultTemporalLargestUnit(y2, mon2, w2, d2, h2, min2, s2, ms2, µs2, ns2);\n  const largestUnit = LargerOfTwoTemporalUnits(largestUnit1, largestUnit2);\n\n  let years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds;\n  if (!relativeTo) {\n    if (largestUnit === 'year' || largestUnit === 'month' || largestUnit === 'week') {\n      throw new RangeError('relativeTo is required for years, months, or weeks arithmetic');\n    }\n    years = months = weeks = 0;\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      d1 + d2,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else if (IsTemporalDate(relativeTo)) {\n    const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n    const calendar = GetSlot(relativeTo, CALENDAR);\n\n    const dateDuration1 = new TemporalDuration(y1, mon1, w1, d1, 0, 0, 0, 0, 0, 0);\n    const dateDuration2 = new TemporalDuration(y2, mon2, w2, d2, 0, 0, 0, 0, 0, 0);\n    const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n    const intermediate = CalendarDateAdd(calendar, relativeTo, dateDuration1, undefined, dateAdd);\n    const end = CalendarDateAdd(calendar, intermediate, dateDuration2, undefined, dateAdd);\n\n    const dateLargestUnit = LargerOfTwoTemporalUnits('day', largestUnit) as Temporal.DateUnit;\n    const differenceOptions = ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateUnit>;\n    differenceOptions.largestUnit = dateLargestUnit;\n    ({ years, months, weeks, days } = CalendarDateUntil(calendar, relativeTo, end, differenceOptions));\n    // Signs of date part and time part may not agree; balance them together\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      days,\n      JSBI.add(JSBI.BigInt(h1), JSBI.BigInt(h2)),\n      JSBI.add(JSBI.BigInt(min1), JSBI.BigInt(min2)),\n      JSBI.add(JSBI.BigInt(s1), JSBI.BigInt(s2)),\n      JSBI.add(JSBI.BigInt(ms1), JSBI.BigInt(ms2)),\n      JSBI.add(JSBI.BigInt(µs1), JSBI.BigInt(µs2)),\n      JSBI.add(JSBI.BigInt(ns1), JSBI.BigInt(ns2)),\n      largestUnit\n    ));\n  } else {\n    // relativeTo is a ZonedDateTime\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    const timeZone = GetSlot(relativeTo, TIME_ZONE);\n    const calendar = GetSlot(relativeTo, CALENDAR);\n    const intermediateNs = AddZonedDateTime(\n      GetSlot(relativeTo, INSTANT),\n      timeZone,\n      calendar,\n      y1,\n      mon1,\n      w1,\n      d1,\n      h1,\n      min1,\n      s1,\n      ms1,\n      µs1,\n      ns1\n    );\n    const endNs = AddZonedDateTime(\n      new TemporalInstant(intermediateNs),\n      timeZone,\n      calendar,\n      y2,\n      mon2,\n      w2,\n      d2,\n      h2,\n      min2,\n      s2,\n      ms2,\n      µs2,\n      ns2\n    );\n    if (largestUnit !== 'year' && largestUnit !== 'month' && largestUnit !== 'week' && largestUnit !== 'day') {\n      // The user is only asking for a time difference, so return difference of instants.\n      years = 0;\n      months = 0;\n      weeks = 0;\n      days = 0;\n      ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = DifferenceInstant(\n        GetSlot(relativeTo, EPOCHNANOSECONDS),\n        endNs,\n        1,\n        'nanosecond',\n        largestUnit,\n        'halfExpand'\n      ));\n    } else {\n      ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n        DifferenceZonedDateTime(\n          GetSlot(relativeTo, EPOCHNANOSECONDS),\n          endNs,\n          timeZone,\n          calendar,\n          largestUnit,\n          ObjectCreate(null) as Temporal.DifferenceOptions<Temporal.DateTimeUnit>\n        ));\n    }\n  }\n\n  RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nfunction AddInstant(\n  epochNanoseconds: JSBI,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI\n) {\n  let sum = ZERO;\n  sum = JSBI.add(sum, JSBI.BigInt(ns));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(µs), THOUSAND));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(ms), MILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(s), BILLION));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(min), JSBI.BigInt(60 * 1e9)));\n  sum = JSBI.add(sum, JSBI.multiply(JSBI.BigInt(h), JSBI.BigInt(60 * 60 * 1e9)));\n\n  const result = JSBI.add(epochNanoseconds, sum);\n  ValidateEpochNanoseconds(result);\n  return result;\n}\n\nfunction AddDateTime(\n  year: number,\n  month: number,\n  day: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  daysParam: number,\n  hours: number,\n  minutes: number,\n  seconds: number,\n  milliseconds: number,\n  microseconds: number,\n  nanoseconds: number,\n  options?: Temporal.ArithmeticOptions\n) {\n  let days = daysParam;\n  // Add the time part\n  let { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds\n  );\n  days += deltaDays;\n\n  // Delegate the date part addition to the calendar\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  const datePart = CreateTemporalDate(year, month, day, calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n\n  return {\n    year: GetSlot(addedDate, ISO_YEAR),\n    month: GetSlot(addedDate, ISO_MONTH),\n    day: GetSlot(addedDate, ISO_DAY),\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond\n  };\n}\n\nexport function AddZonedDateTime(\n  instant: Temporal.Instant,\n  timeZone: string | Temporal.TimeZoneProtocol,\n  calendar: CalendarSlot,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number,\n  h: number | JSBI,\n  min: number | JSBI,\n  s: number | JSBI,\n  ms: number | JSBI,\n  µs: number | JSBI,\n  ns: number | JSBI,\n  options?: Temporal.ArithmeticOptions\n) {\n  // If only time is to be added, then use Instant math. It's not OK to fall\n  // through to the date/time code below because compatible disambiguation in\n  // the PlainDateTime=>Instant conversion will change the offset of any\n  // ZonedDateTime in the repeated clock time after a backwards transition.\n  // When adding/subtracting time units and not dates, this disambiguation is\n  // not expected and so is avoided below via a fast path for time-only\n  // arithmetic.\n  // BTW, this behavior is similar in spirit to offset: 'prefer' in `with`.\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  if (DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0) === 0) {\n    return AddInstant(GetSlot(instant, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n  }\n\n  // RFC 5545 requires the date portion to be added in calendar days and the\n  // time portion to be added in exact time.\n  const dt = GetPlainDateTimeFor(timeZone, instant, calendar);\n  const datePart = CreateTemporalDate(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), calendar);\n  const dateDuration = new TemporalDuration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const addedDate = CalendarDateAdd(calendar, datePart, dateDuration, options);\n  const dtIntermediate = CreateTemporalDateTime(\n    GetSlot(addedDate, ISO_YEAR),\n    GetSlot(addedDate, ISO_MONTH),\n    GetSlot(addedDate, ISO_DAY),\n    GetSlot(dt, ISO_HOUR),\n    GetSlot(dt, ISO_MINUTE),\n    GetSlot(dt, ISO_SECOND),\n    GetSlot(dt, ISO_MILLISECOND),\n    GetSlot(dt, ISO_MICROSECOND),\n    GetSlot(dt, ISO_NANOSECOND),\n    calendar\n  );\n\n  // Note that 'compatible' is used below because this disambiguation behavior\n  // is required by RFC 5545.\n  const instantIntermediate = GetInstantFor(timeZone, dtIntermediate, 'compatible');\n  return AddInstant(GetSlot(instantIntermediate, EPOCHNANOSECONDS), h, min, s, ms, µs, ns);\n}\n\ntype AddSubtractOperation = 'add' | 'subtract';\n\nexport function AddDurationToOrSubtractDurationFromDuration(\n  operation: AddSubtractOperation,\n  duration: Temporal.Duration,\n  other: DurationParams['add'][0],\n  optionsParam: DurationParams['add'][1]\n): Temporal.Duration {\n  const sign = operation === 'subtract' ? -1 : 1;\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(other);\n  const options = GetOptionsObject(optionsParam);\n  const relativeTo = ToRelativeTemporalObject(options);\n  ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = AddDuration(\n    GetSlot(duration, YEARS),\n    GetSlot(duration, MONTHS),\n    GetSlot(duration, WEEKS),\n    GetSlot(duration, DAYS),\n    GetSlot(duration, HOURS),\n    GetSlot(duration, MINUTES),\n    GetSlot(duration, SECONDS),\n    GetSlot(duration, MILLISECONDS),\n    GetSlot(duration, MICROSECONDS),\n    GetSlot(duration, NANOSECONDS),\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    relativeTo\n  ));\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n}\n\nexport function AddDurationToOrSubtractDurationFromInstant(\n  operation: AddSubtractOperation,\n  instant: Temporal.Instant,\n  durationLike: InstantParams['add'][0]\n): Temporal.Instant {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToLimitedTemporalDuration(durationLike, [\n    'years',\n    'months',\n    'weeks',\n    'days'\n  ]);\n  const ns = AddInstant(\n    GetSlot(instant, EPOCHNANOSECONDS),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ns);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainDateTime(\n  operation: AddSubtractOperation,\n  dateTime: Temporal.PlainDateTime,\n  durationLike: PlainDateTimeParams['add'][0],\n  optionsParam: PlainDateTimeParams['add'][1]\n): Temporal.PlainDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const calendar = GetSlot(dateTime, CALENDAR);\n  const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = AddDateTime(\n    GetSlot(dateTime, ISO_YEAR),\n    GetSlot(dateTime, ISO_MONTH),\n    GetSlot(dateTime, ISO_DAY),\n    GetSlot(dateTime, ISO_HOUR),\n    GetSlot(dateTime, ISO_MINUTE),\n    GetSlot(dateTime, ISO_SECOND),\n    GetSlot(dateTime, ISO_MILLISECOND),\n    GetSlot(dateTime, ISO_MICROSECOND),\n    GetSlot(dateTime, ISO_NANOSECOND),\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalDateTime(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond, calendar);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainTime(\n  operation: AddSubtractOperation,\n  temporalTime: Temporal.PlainTime,\n  durationLike: PlainTimeParams['add'][0]\n): Temporal.PlainTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ToTemporalDurationRecord(durationLike);\n  let { hour, minute, second, millisecond, microsecond, nanosecond } = AddTime(\n    GetSlot(temporalTime, ISO_HOUR),\n    GetSlot(temporalTime, ISO_MINUTE),\n    GetSlot(temporalTime, ISO_SECOND),\n    GetSlot(temporalTime, ISO_MILLISECOND),\n    GetSlot(temporalTime, ISO_MICROSECOND),\n    GetSlot(temporalTime, ISO_NANOSECOND),\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds\n  );\n  ({ hour, minute, second, millisecond, microsecond, nanosecond } = RegulateTime(\n    hour,\n    minute,\n    second,\n    millisecond,\n    microsecond,\n    nanosecond,\n    'reject'\n  ));\n  const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n  return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n}\n\nexport function AddDurationToOrSubtractDurationFromPlainYearMonth(\n  operation: AddSubtractOperation,\n  yearMonth: Temporal.PlainYearMonth,\n  durationLike: PlainYearMonthParams['add'][0],\n  optionsParam: PlainYearMonthParams['add'][1]\n): Temporal.PlainYearMonth {\n  let duration = ToTemporalDurationRecord(durationLike);\n  if (operation === 'subtract') {\n    duration = {\n      years: -duration.years,\n      months: -duration.months,\n      weeks: -duration.weeks,\n      days: -duration.days,\n      hours: -duration.hours,\n      minutes: -duration.minutes,\n      seconds: -duration.seconds,\n      milliseconds: -duration.milliseconds,\n      microseconds: -duration.microseconds,\n      nanoseconds: -duration.nanoseconds\n    };\n  }\n  let { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = duration;\n  ({ days } = BalanceDuration(days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds, 'day'));\n\n  const options = GetOptionsObject(optionsParam);\n\n  const calendar = GetSlot(yearMonth, CALENDAR);\n  const fieldNames = CalendarFields(calendar, ['monthCode', 'year'] as const);\n  const fields = PrepareTemporalFields(yearMonth, fieldNames, []);\n  const fieldsCopy = ObjectCreate(null);\n  CopyDataProperties(fieldsCopy, fields, []);\n  fields.day = 1;\n  // PrepareTemporalFields returns a type where 'day' is potentially undefined,\n  // but TS doesn't narrow the type as a result of the assignment above.\n  uncheckedAssertNarrowedType<typeof fields & { day: number }>(fields, '`day` is guaranteed to be non-undefined');\n  let startDate = CalendarDateFromFields(calendar, fields);\n  const sign = DurationSign(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const dateAdd = GetMethod(calendar, 'dateAdd');\n  const Duration = GetIntrinsic('%Temporal.Duration%');\n  if (sign < 0) {\n    const oneMonthDuration = new Duration(0, 1, 0, 0, 0, 0, 0, 0, 0, 0);\n    const nextMonth = CalendarDateAdd(calendar, startDate, oneMonthDuration, undefined, dateAdd);\n    const minusDayDuration = new Duration(0, 0, 0, -1, 0, 0, 0, 0, 0, 0);\n    const endOfMonth = CalendarDateAdd(calendar, nextMonth, minusDayDuration, undefined, dateAdd);\n    fieldsCopy.day = CalendarDay(calendar, endOfMonth);\n    startDate = CalendarDateFromFields(calendar, fieldsCopy);\n  }\n  const durationToAdd = new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  const optionsCopy = CopyOptions(options);\n  const addedDate = CalendarDateAdd(calendar, startDate, durationToAdd, options, dateAdd);\n  const addedDateFields = PrepareTemporalFields(addedDate, fieldNames, []);\n\n  return CalendarYearMonthFromFields(calendar, addedDateFields, optionsCopy);\n}\n\nexport function AddDurationToOrSubtractDurationFromZonedDateTime(\n  operation: AddSubtractOperation,\n  zonedDateTime: Temporal.ZonedDateTime,\n  durationLike: ZonedDateTimeParams['add'][0],\n  optionsParam: ZonedDateTimeParams['add'][1]\n): Temporal.ZonedDateTime {\n  const sign = operation === 'subtract' ? -1 : 1;\n  const { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n    ToTemporalDurationRecord(durationLike);\n  const options = GetOptionsObject(optionsParam);\n  const timeZone = GetSlot(zonedDateTime, TIME_ZONE);\n  const calendar = GetSlot(zonedDateTime, CALENDAR);\n  const epochNanoseconds = AddZonedDateTime(\n    GetSlot(zonedDateTime, INSTANT),\n    timeZone,\n    calendar,\n    sign * years,\n    sign * months,\n    sign * weeks,\n    sign * days,\n    sign * hours,\n    sign * minutes,\n    sign * seconds,\n    sign * milliseconds,\n    sign * microseconds,\n    sign * nanoseconds,\n    options\n  );\n  return CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n}\n\nfunction RoundNumberToIncrement(quantity: JSBI, increment: JSBI, mode: Temporal.RoundingMode) {\n  if (JSBI.equal(increment, ONE)) return quantity;\n  let { quotient, remainder } = divmod(quantity, increment);\n  if (JSBI.equal(remainder, ZERO)) return quantity;\n  const sign = JSBI.lessThan(remainder, ZERO) ? -1 : 1;\n  const tiebreaker = abs(JSBI.multiply(remainder, JSBI.BigInt(2)));\n  const tie = JSBI.equal(tiebreaker, increment);\n  const expandIsNearer = JSBI.greaterThan(tiebreaker, increment);\n  switch (mode) {\n    case 'ceil':\n      if (sign > 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'floor':\n      if (sign < 0) quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'expand':\n      // always expand if there is a remainder\n      quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      break;\n    case 'trunc':\n      // no change needed, because divmod is a truncation\n      break;\n    case 'halfCeil':\n      if (expandIsNearer || (tie && sign > 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfFloor':\n      if (expandIsNearer || (tie && sign < 0)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfExpand':\n      // \"half up away from zero\"\n      if (expandIsNearer || tie) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfTrunc':\n      if (expandIsNearer) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n    case 'halfEven':\n      if (expandIsNearer || (tie && JSBI.toNumber(JSBI.remainder(abs(quotient), JSBI.BigInt(2))) === 1)) {\n        quotient = JSBI.add(quotient, JSBI.BigInt(sign));\n      }\n      break;\n  }\n  return JSBI.multiply(quotient, increment);\n}\n\nexport function RoundInstant(\n  epochNs: JSBI,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit,\n  roundingMode: Temporal.RoundingMode\n) {\n  let { remainder } = NonNegativeBigIntDivmod(epochNs, DAY_NANOS);\n  const wholeDays = JSBI.subtract(epochNs, remainder);\n  const roundedRemainder = RoundNumberToIncrement(\n    remainder,\n    JSBI.BigInt(nsPerTimeUnit[unit] * increment),\n    roundingMode\n  );\n  return JSBI.add(wholeDays, roundedRemainder);\n}\n\nexport function RoundISODateTime(\n  yearParam: number,\n  monthParam: number,\n  dayParam: number,\n  hourParam: number,\n  minuteParam: number,\n  secondParam: number,\n  millisecondParam: number,\n  microsecondParam: number,\n  nanosecondParam: number,\n  increment: number,\n  unit: UnitSmallerThanOrEqualTo<'day'>,\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  const { deltaDays, hour, minute, second, millisecond, microsecond, nanosecond } = RoundTime(\n    hourParam,\n    minuteParam,\n    secondParam,\n    millisecondParam,\n    microsecondParam,\n    nanosecondParam,\n    increment,\n    unit,\n    roundingMode,\n    dayLengthNs\n  );\n  const { year, month, day } = BalanceISODate(yearParam, monthParam, dayParam + deltaDays);\n  return { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond };\n}\n\nexport function RoundTime(\n  hour: number,\n  minute: number,\n  second: number,\n  millisecond: number,\n  microsecond: number,\n  nanosecond: number,\n  increment: number,\n  unit: keyof typeof nsPerTimeUnit | 'day',\n  roundingMode: Temporal.RoundingMode,\n  dayLengthNs = 86400e9\n) {\n  let quantity = ZERO;\n  switch (unit) {\n    case 'day':\n    case 'hour':\n      quantity = JSBI.BigInt(hour);\n    // fall through\n    case 'minute':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(minute));\n    // fall through\n    case 'second':\n      quantity = JSBI.add(JSBI.multiply(quantity, SIXTY), JSBI.BigInt(second));\n    // fall through\n    case 'millisecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(millisecond));\n    // fall through\n    case 'microsecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(microsecond));\n    // fall through\n    case 'nanosecond':\n      quantity = JSBI.add(JSBI.multiply(quantity, THOUSAND), JSBI.BigInt(nanosecond));\n  }\n  const nsPerUnit = unit === 'day' ? dayLengthNs : nsPerTimeUnit[unit];\n  const rounded = RoundNumberToIncrement(quantity, JSBI.BigInt(nsPerUnit * increment), roundingMode);\n  const result = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(nsPerUnit)));\n  switch (unit) {\n    case 'day':\n      return { deltaDays: result, hour: 0, minute: 0, second: 0, millisecond: 0, microsecond: 0, nanosecond: 0 };\n    case 'hour':\n      return BalanceTime(result, 0, 0, 0, 0, 0);\n    case 'minute':\n      return BalanceTime(hour, result, 0, 0, 0, 0);\n    case 'second':\n      return BalanceTime(hour, minute, result, 0, 0, 0);\n    case 'millisecond':\n      return BalanceTime(hour, minute, second, result, 0, 0);\n    case 'microsecond':\n      return BalanceTime(hour, minute, second, millisecond, result, 0);\n    case 'nanosecond':\n      return BalanceTime(hour, minute, second, millisecond, microsecond, result);\n    default:\n      throw new Error(`Invalid unit ${unit}`);\n  }\n}\n\nfunction DaysUntil(\n  earlier: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime,\n  later: Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime\n) {\n  return DifferenceISODate(\n    GetSlot(earlier, ISO_YEAR),\n    GetSlot(earlier, ISO_MONTH),\n    GetSlot(earlier, ISO_DAY),\n    GetSlot(later, ISO_YEAR),\n    GetSlot(later, ISO_MONTH),\n    GetSlot(later, ISO_DAY),\n    'day'\n  ).days;\n}\n\nfunction MoveRelativeDate(\n  calendar: CalendarSlot,\n  relativeToParam: NonNullable<ReturnType<typeof ToRelativeTemporalObject>>,\n  duration: Temporal.Duration,\n  dateAdd: Temporal.CalendarProtocol['dateAdd'] | undefined\n) {\n  const later = CalendarDateAdd(calendar, relativeToParam, duration, undefined, dateAdd);\n  const days = DaysUntil(relativeToParam, later);\n  return { relativeTo: later, days };\n}\n\nexport function MoveRelativeZonedDateTime(\n  relativeTo: Temporal.ZonedDateTime,\n  years: number,\n  months: number,\n  weeks: number,\n  days: number\n) {\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const intermediateNs = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  return CreateTemporalZonedDateTime(intermediateNs, timeZone, calendar);\n}\n\nexport function AdjustRoundedDurationDays(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeTo: ReturnType<typeof ToRelativeTemporalObject>\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = nanosecondsParam;\n  if (\n    !IsTemporalZonedDateTime(relativeTo) ||\n    unit === 'year' ||\n    unit === 'month' ||\n    unit === 'week' ||\n    unit === 'day' ||\n    (unit === 'nanosecond' && increment === 1)\n  ) {\n    return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n  }\n\n  // There's one more round of rounding possible: if relativeTo is a\n  // ZonedDateTime, the time units could have rounded up into enough hours\n  // to exceed the day length. If this happens, grow the date part by a\n  // single day and re-run exact time rounding on the smaller remainder. DO\n  // NOT RECURSE, because once the extra hours are sucked up into the date\n  // duration, there's no way for another full day to come from the next\n  // round of rounding. And if it were possible (e.g. contrived calendar\n  // with 30-minute-long \"days\") then it'd risk an infinite loop.\n  let timeRemainderNs = TotalDurationNanoseconds(\n    0,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds,\n    0\n  );\n  const direction = MathSign(JSBI.toNumber(timeRemainderNs));\n\n  const timeZone = GetSlot(relativeTo, TIME_ZONE);\n  const calendar = GetSlot(relativeTo, CALENDAR);\n  const dayStart = AddZonedDateTime(\n    GetSlot(relativeTo, INSTANT),\n    timeZone,\n    calendar,\n    years,\n    months,\n    weeks,\n    days,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n  const dayEnd = AddZonedDateTime(\n    new TemporalInstant(dayStart),\n    timeZone,\n    calendar,\n    0,\n    0,\n    0,\n    direction,\n    0,\n    0,\n    0,\n    0,\n    0,\n    0\n  );\n  const dayLengthNs = JSBI.subtract(dayEnd, dayStart);\n\n  if (\n    JSBI.greaterThanOrEqual(JSBI.multiply(JSBI.subtract(timeRemainderNs, dayLengthNs), JSBI.BigInt(direction)), ZERO)\n  ) {\n    ({ years, months, weeks, days } = AddDuration(\n      years,\n      months,\n      weeks,\n      days,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      direction,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      relativeTo\n    ));\n    timeRemainderNs = RoundInstant(JSBI.subtract(timeRemainderNs, dayLengthNs), increment, unit, roundingMode);\n    ({ hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = BalanceDuration(\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      JSBI.toNumber(timeRemainderNs),\n      'hour'\n    ));\n  }\n  return { years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds };\n}\n\nexport function RoundDuration(\n  yearsParam: number,\n  monthsParam: number,\n  weeksParam: number,\n  daysParam: number,\n  hoursParam: number,\n  minutesParam: number,\n  secondsParam: number,\n  millisecondsParam: number,\n  microsecondsParam: number,\n  nanosecondsParam: number,\n  increment: number,\n  unit: Temporal.DateTimeUnit,\n  roundingMode: Temporal.RoundingMode,\n  relativeToParam: ReturnType<typeof ToRelativeTemporalObject> = undefined\n) {\n  let years = yearsParam;\n  let months = monthsParam;\n  let weeks = weeksParam;\n  let days = daysParam;\n  let hours = hoursParam;\n  let minutes = minutesParam;\n  let seconds = secondsParam;\n  let milliseconds = millisecondsParam;\n  let microseconds = microsecondsParam;\n  let nanoseconds = JSBI.BigInt(nanosecondsParam);\n  const TemporalDuration = GetIntrinsic('%Temporal.Duration%');\n  let calendar, zdtRelative;\n  // A cast is used below because relativeTo will be either PlainDate or\n  // undefined for the rest of this long method (after any ZDT=>PlainDate\n  // conversion below), and TS isn't smart enough to know that the type has\n  // changed. See https://github.com/microsoft/TypeScript/issues/27706.\n  let relativeTo = relativeToParam as Temporal.PlainDate | undefined;\n  if (relativeTo) {\n    if (IsTemporalZonedDateTime(relativeTo)) {\n      zdtRelative = relativeTo;\n      relativeTo = ToTemporalDate(relativeTo);\n    } else if (!IsTemporalDate(relativeTo)) {\n      throw new TypeError('starting point must be PlainDate or ZonedDateTime');\n    }\n    calendar = GetSlot(relativeTo, CALENDAR);\n  }\n\n  // First convert time units up to days, if rounding to days or higher units.\n  // If rounding relative to a ZonedDateTime, then some days may not be 24h.\n  // TS doesn't know that `dayLengthNs` is only used if the unit is day or\n  // larger. We'll cast away `undefined` when it's used lower down below.\n  let dayLengthNs: JSBI | undefined;\n  if (unit === 'year' || unit === 'month' || unit === 'week' || unit === 'day') {\n    nanoseconds = TotalDurationNanoseconds(0, hours, minutes, seconds, milliseconds, microseconds, nanosecondsParam, 0);\n    let intermediate;\n    if (zdtRelative) {\n      intermediate = MoveRelativeZonedDateTime(zdtRelative, years, months, weeks, days);\n    }\n    let deltaDays;\n    let dayLength: number;\n    ({ days: deltaDays, nanoseconds, dayLengthNs: dayLength } = NanosecondsToDays(nanoseconds, intermediate));\n    dayLengthNs = JSBI.BigInt(dayLength);\n    days += deltaDays;\n    hours = minutes = seconds = milliseconds = microseconds = 0;\n  }\n\n  let total: number;\n  switch (unit) {\n    case 'year': {\n      if (!calendar) throw new RangeError('A starting point is required for years rounding');\n      assertExists(relativeTo);\n\n      // convert months and weeks to days by calculating difference(\n      // relativeTo + years, relativeTo + { years, months, weeks })\n      const yearsDuration = new TemporalDuration(years);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsLater = CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const monthsWeeksInDays = DaysUntil(yearsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsLater;\n      days += monthsWeeksInDays;\n\n      const wholeDays = new TemporalDuration(0, 0, 0, days);\n      const wholeDaysLater = CalendarDateAdd(calendar, relativeTo, wholeDays, undefined, dateAdd);\n      const untilOptions = ObjectCreate(null) as Temporal.DifferenceOptions<typeof unit>;\n      untilOptions.largestUnit = 'year';\n      const yearsPassed = CalendarDateUntil(calendar, relativeTo, wholeDaysLater, untilOptions).years;\n      years += yearsPassed;\n      const oldRelativeTo = relativeTo;\n      const yearsPassedDuration = new TemporalDuration(yearsPassed);\n      relativeTo = CalendarDateAdd(calendar, relativeTo, yearsPassedDuration, undefined, dateAdd);\n      const daysPassed = DaysUntil(oldRelativeTo, relativeTo);\n      days -= daysPassed;\n      const oneYear = new TemporalDuration(days < 0 ? -1 : 1);\n      let { days: oneYearDays } = MoveRelativeDate(calendar, relativeTo, oneYear, dateAdd);\n\n      // Note that `nanoseconds` below (here and in similar code for months,\n      // weeks, and days further below) isn't actually nanoseconds for the\n      // full date range.  Instead, it's a BigInt representation of total\n      // days multiplied by the number of nanoseconds in the last day of\n      // the duration. This lets us do days-or-larger rounding using BigInt\n      // math which reduces precision loss.\n      oneYearDays = MathAbs(oneYearDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneYearDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(years)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      years = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      months = weeks = days = 0;\n      break;\n    }\n    case 'month': {\n      if (!calendar) throw new RangeError('A starting point is required for months rounding');\n      assertExists(relativeTo);\n\n      // convert weeks to days by calculating difference(relativeTo +\n      //   { years, months }, relativeTo + { years, months, weeks })\n      const yearsMonths = new TemporalDuration(years, months);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      const yearsMonthsLater = CalendarDateAdd(calendar, relativeTo, yearsMonths, undefined, dateAdd);\n      const yearsMonthsWeeks = new TemporalDuration(years, months, weeks);\n      const yearsMonthsWeeksLater = CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd);\n      const weeksInDays = DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater);\n      relativeTo = yearsMonthsLater;\n      days += weeksInDays;\n\n      // Months may be different lengths of days depending on the calendar,\n      // convert days to months in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneMonth = new TemporalDuration(0, days < 0 ? -1 : 1);\n      let oneMonthDays: number;\n      ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneMonthDays)) {\n        months += sign;\n        days -= oneMonthDays;\n        ({ relativeTo, days: oneMonthDays } = MoveRelativeDate(calendar, relativeTo, oneMonth, dateAdd));\n      }\n      oneMonthDays = MathAbs(oneMonthDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneMonthDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(months)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      months = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      weeks = days = 0;\n      break;\n    }\n    case 'week': {\n      if (!calendar) throw new RangeError('A starting point is required for weeks rounding');\n      assertExists(relativeTo);\n\n      // Weeks may be different lengths of days depending on the calendar,\n      // convert days to weeks in a loop as described above under 'years'.\n      const sign = MathSign(days);\n      const oneWeek = new TemporalDuration(0, 0, days < 0 ? -1 : 1);\n      const dateAdd = typeof calendar !== 'string' ? GetMethod(calendar, 'dateAdd') : undefined;\n      let oneWeekDays;\n      ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      while (MathAbs(days) >= MathAbs(oneWeekDays)) {\n        weeks += sign;\n        days -= oneWeekDays;\n        ({ relativeTo, days: oneWeekDays } = MoveRelativeDate(calendar, relativeTo, oneWeek, dateAdd));\n      }\n      oneWeekDays = MathAbs(oneWeekDays);\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = JSBI.multiply(JSBI.BigInt(oneWeekDays), dayLengthNs);\n      nanoseconds = JSBI.add(\n        JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(weeks)), JSBI.multiply(JSBI.BigInt(days), dayLengthNs)),\n        nanoseconds\n      );\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      weeks = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      days = 0;\n      break;\n    }\n    case 'day': {\n      // dayLengthNs is never undefined if unit is `day` or larger.\n      assertExists(dayLengthNs);\n      const divisor = dayLengthNs;\n      nanoseconds = JSBI.add(JSBI.multiply(divisor, JSBI.BigInt(days)), nanoseconds);\n      const rounded = RoundNumberToIncrement(nanoseconds, JSBI.multiply(divisor, JSBI.BigInt(increment)), roundingMode);\n      total = BigIntDivideToNumber(nanoseconds, divisor);\n      days = JSBI.toNumber(JSBI.divide(rounded, divisor));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'hour': {\n      const divisor = 3600e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(hours), JSBI.BigInt(3600e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9)));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      hours = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      minutes = seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'minute': {\n      const divisor = 60e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(minutes), JSBI.BigInt(60e9));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(seconds), BILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      minutes = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      seconds = milliseconds = microseconds = 0;\n      break;\n    }\n    case 'second': {\n      const divisor = 1e9;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(seconds), BILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(milliseconds), MILLION));\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      seconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      milliseconds = microseconds = 0;\n      break;\n    }\n    case 'millisecond': {\n      const divisor = 1e6;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(milliseconds), MILLION);\n      allNanoseconds = JSBI.add(allNanoseconds, JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND));\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      milliseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      microseconds = 0;\n      break;\n    }\n    case 'microsecond': {\n      const divisor = 1e3;\n      let allNanoseconds = JSBI.multiply(JSBI.BigInt(microseconds), THOUSAND);\n      allNanoseconds = JSBI.add(allNanoseconds, nanoseconds);\n      total = BigIntDivideToNumber(allNanoseconds, JSBI.BigInt(divisor));\n      const rounded = RoundNumberToIncrement(allNanoseconds, JSBI.BigInt(divisor * increment), roundingMode);\n      microseconds = JSBI.toNumber(JSBI.divide(rounded, JSBI.BigInt(divisor)));\n      nanoseconds = ZERO;\n      break;\n    }\n    case 'nanosecond': {\n      total = JSBI.toNumber(nanoseconds);\n      nanoseconds = RoundNumberToIncrement(JSBI.BigInt(nanoseconds), JSBI.BigInt(increment), roundingMode);\n      break;\n    }\n  }\n  return {\n    years,\n    months,\n    weeks,\n    days,\n    hours,\n    minutes,\n    seconds,\n    milliseconds,\n    microseconds,\n    nanoseconds: JSBI.toNumber(nanoseconds),\n    total\n  };\n}\n\nexport function CompareISODate(y1: number, m1: number, d1: number, y2: number, m2: number, d2: number) {\n  for (const [x, y] of [\n    [y1, y2],\n    [m1, m2],\n    [d1, d2]\n  ]) {\n    if (x !== y) return ComparisonResult(x - y);\n  }\n  return 0;\n}\n\n// Not abstract operations from the spec\n\nfunction NonNegativeBigIntDivmod(x: JSBI, y: JSBI) {\n  let { quotient, remainder } = divmod(x, y);\n  if (JSBI.lessThan(remainder, ZERO)) {\n    quotient = JSBI.subtract(quotient, ONE);\n    remainder = JSBI.add(remainder, y);\n  }\n  return { quotient, remainder };\n}\n\nexport function BigIntFloorDiv(left: JSBI, right: JSBI) {\n  const { quotient, remainder } = divmod(left, right);\n  if (!isZero(remainder) && !isNegativeJSBI(left) != !isNegativeJSBI(right)) {\n    return JSBI.subtract(quotient, ONE);\n  }\n  return quotient;\n}\n\n/** Divide two JSBIs, and return the result as a Number, including the remainder. */\nexport function BigIntDivideToNumber(dividend: JSBI, divisor: JSBI) {\n  const { quotient, remainder } = divmod(dividend, divisor);\n  const result = JSBI.toNumber(quotient) + JSBI.toNumber(remainder) / JSBI.toNumber(divisor);\n  return result;\n}\n\n// Defaults to native bigint, or something \"native bigint-like\".\n// For users of Temporal that are running in environments without native BigInt,\n// the only guarantee we should give is that the returned object's toString will\n// return a string containing an accurate base 10 value of this bigint. This\n// form factor should correctly interop with other bigint compat libraries\n// easily.\ntype ExternalBigInt = bigint;\n\nexport function ToBigIntExternal(arg: unknown): ExternalBigInt {\n  const jsbiBI = ToBigInt(arg);\n  if (typeof (globalThis as any).BigInt !== 'undefined') return (globalThis as any).BigInt(jsbiBI.toString(10));\n  return jsbiBI as unknown as ExternalBigInt;\n}\n\nexport function ToBigInt(arg: unknown): JSBI {\n  let prim = arg;\n  if (typeof arg === 'object') {\n    const toPrimFn = (arg as { [Symbol.toPrimitive]: unknown })[Symbol.toPrimitive];\n    if (toPrimFn && typeof toPrimFn === 'function') {\n      prim = ReflectApply(toPrimFn, arg, ['number']);\n    }\n  }\n\n  // The AO ToBigInt throws on numbers because it does not allow implicit\n  // conversion between number and bigint (unlike the bigint constructor).\n  if (typeof prim === 'number') {\n    throw new TypeError('cannot convert number to bigint');\n  }\n  if (typeof prim === 'bigint') {\n    // JSBI doesn't know anything about the bigint type, and intentionally\n    // assumes it doesn't exist. Passing one to the BigInt function will throw\n    // an error.\n    return JSBI.BigInt(prim.toString(10));\n  }\n  // JSBI will properly coerce types into a BigInt the same as the native BigInt\n  // constructor will, with the exception of native bigint which is handled\n  // above.\n  // As of 2023-04-07, the only runtime type that neither of those can handle is\n  // 'symbol', and both native bigint and the JSBI.BigInt function will throw an\n  // error if they are given a Symbol.\n  return JSBI.BigInt(prim as string | boolean | object);\n}\n\n// Note: This method returns values with bogus nanoseconds based on the previous iteration's\n// milliseconds. That way there is a guarantee that the full nanoseconds are always going to be\n// increasing at least and that the microsecond and nanosecond fields are likely to be non-zero.\nexport const SystemUTCEpochNanoSeconds: () => JSBI = (() => {\n  let ns = JSBI.BigInt(Date.now() % 1e6);\n  return () => {\n    const ms = JSBI.BigInt(Date.now());\n    const result = JSBI.add(JSBI.multiply(ms, MILLION), ns);\n    ns = JSBI.remainder(ms, MILLION);\n    if (JSBI.greaterThan(result, NS_MAX)) return NS_MAX;\n    if (JSBI.lessThan(result, NS_MIN)) return NS_MIN;\n    return result;\n  };\n})();\n\nexport function DefaultTimeZone() {\n  return new IntlDateTimeFormat().resolvedOptions().timeZone;\n}\n\nexport function ComparisonResult(value: number) {\n  return value < 0 ? -1 : value > 0 ? 1 : (value as 0);\n}\n\nexport function GetOptionsObject<T>(options: T) {\n  if (options === undefined) return ObjectCreate(null) as NonNullable<T>;\n  if (IsObject(options) && options !== null) return options;\n  throw new TypeError(`Options parameter must be an object, not ${options === null ? 'null' : `${typeof options}`}`);\n}\n\nexport function CreateOnePropObject<K extends string, V>(propName: K, propValue: V): { [k in K]: V } {\n  const o = ObjectCreate(null);\n  o[propName] = propValue;\n  return o;\n}\n\nfunction CopyOptions<T extends { [s in K]?: unknown }, K extends string & keyof T>(options: T | undefined) {\n  const optionsCopy = ObjectCreate(null) as T;\n  CopyDataProperties(optionsCopy, GetOptionsObject(options), []);\n  return optionsCopy;\n}\n\ntype StringlyTypedKeys<T> = Exclude<keyof T, symbol | number>;\nfunction GetOption<P extends StringlyTypedKeys<O>, O extends Partial<Record<P, unknown>>>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: undefined\n): O[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: Fallback\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P];\nfunction GetOption<\n  P extends StringlyTypedKeys<O>,\n  O extends Partial<Record<P, unknown>>,\n  Fallback extends Required<O>[P] | undefined\n>(\n  options: O,\n  property: P,\n  allowedValues: ReadonlyArray<O[P]>,\n  fallback: O[P]\n): Fallback extends undefined ? O[P] | undefined : Required<O>[P] {\n  let value = options[property];\n  if (value !== undefined) {\n    value = ToString(value) as O[P];\n    if (!allowedValues.includes(value)) {\n      throw new RangeError(`${property} must be one of ${allowedValues.join(', ')}, not ${value}`);\n    }\n    return value;\n  }\n  return fallback;\n}\n\nexport function IsBuiltinCalendar(id: string): id is BuiltinCalendarId {\n  return BUILTIN_CALENDAR_IDS.includes(ASCIILowercase(id));\n}\n\nexport function ASCIILowercase<T extends string>(str: T): T {\n  // The spec defines this operation distinct from String.prototype.lowercase,\n  // so we'll follow the spec here. Note that nasty security issues that can\n  // happen for some use cases if you're comparing case-modified non-ASCII\n  // values. For example, Turkish's \"I\" character was the source of a security\n  // issue involving \"file://\" URLs. See\n  // https://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx/.\n  return str.replace(/[A-Z]/g, (l) => {\n    const code = l.charCodeAt(0);\n    return String.fromCharCode(code + 0x20);\n  }) as T;\n}\n\nconst OFFSET = new RegExp(`^${PARSE.offset.source}$`);\n\nfunction bisect(\n  getState: (epochNs: JSBI) => number,\n  leftParam: JSBI,\n  rightParam: JSBI,\n  lstateParam: number = getState(leftParam),\n  rstateParam: number = getState(rightParam)\n) {\n  // This doesn't make much sense - why do these get converted unnecessarily?\n  let left = JSBI.BigInt(leftParam);\n  let right = JSBI.BigInt(rightParam);\n  let lstate = lstateParam;\n  let rstate = rstateParam;\n  while (JSBI.greaterThan(JSBI.subtract(right, left), ONE)) {\n    const middle = JSBI.divide(JSBI.add(left, right), JSBI.BigInt(2));\n    const mstate = getState(middle);\n    if (mstate === lstate) {\n      left = middle;\n      lstate = mstate;\n    } else if (mstate === rstate) {\n      right = middle;\n      rstate = mstate;\n    } else {\n      throw new Error(`invalid state in bisection ${lstate} - ${mstate} - ${rstate}`);\n    }\n  }\n  return right;\n}\n\nconst nsPerTimeUnit = {\n  hour: 3600e9,\n  minute: 60e9,\n  second: 1e9,\n  millisecond: 1e6,\n  microsecond: 1e3,\n  nanosecond: 1\n};\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport {\n  GetSlot,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR\n} from './slots';\nimport type { Temporal, Intl } from '..';\nimport type { DateTimeFormatParams as Params, DateTimeFormatReturn as Return } from './internaltypes';\n\nconst DATE = Symbol('date');\nconst YM = Symbol('ym');\nconst MD = Symbol('md');\nconst TIME = Symbol('time');\nconst DATETIME = Symbol('datetime');\nconst INST = Symbol('instant');\nconst ORIGINAL = Symbol('original');\nconst TZ_RESOLVED = Symbol('timezone');\nconst CAL_ID = Symbol('calendar-id');\nconst LOCALE = Symbol('locale');\nconst OPTIONS = Symbol('options');\n\nconst descriptor = <T extends (...args: any[]) => any>(value: T) => {\n  return {\n    value,\n    enumerable: true,\n    writable: false,\n    configurable: true\n  };\n};\n\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ObjectAssign = Object.assign;\nconst ObjectHasOwnProperty = Object.prototype.hasOwnProperty;\nconst ReflectApply = Reflect.apply;\n\ninterface CustomFormatters {\n  [DATE]: typeof dateAmend | globalThis.Intl.DateTimeFormat;\n  [YM]: typeof yearMonthAmend | typeof globalThis.Intl.DateTimeFormat;\n  [MD]: typeof monthDayAmend | typeof globalThis.Intl.DateTimeFormat;\n  [TIME]: typeof timeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [DATETIME]: typeof datetimeAmend | typeof globalThis.Intl.DateTimeFormat;\n  [INST]: typeof instantAmend | typeof globalThis.Intl.DateTimeFormat;\n}\n\ninterface PrivateProps extends CustomFormatters {\n  [ORIGINAL]: globalThis.Intl.DateTimeFormat;\n  [TZ_RESOLVED]: string | Temporal.TimeZoneProtocol;\n  [CAL_ID]: globalThis.Intl.ResolvedDateTimeFormatOptions['calendar'];\n  [LOCALE]: globalThis.Intl.ResolvedDateTimeFormatOptions['locale'];\n  [OPTIONS]: Intl.DateTimeFormatOptions;\n}\n\ntype OptionsAmenderFunction = (options: Intl.DateTimeFormatOptions) => globalThis.Intl.DateTimeFormatOptions;\ntype FormatterOrAmender = globalThis.Intl.DateTimeFormat | OptionsAmenderFunction;\n\n// Construction of built-in Intl.DateTimeFormat objects is sloooooow,\n// so we'll only create those instances when we need them.\n// See https://bugs.chromium.org/p/v8/issues/detail?id=6528\nfunction getPropLazy<T extends PrivateProps, P extends keyof CustomFormatters>(\n  obj: T,\n  prop: P\n): globalThis.Intl.DateTimeFormat {\n  let val = obj[prop] as FormatterOrAmender;\n  if (typeof val === 'function') {\n    // If we get here, `val` is an \"amender function\". It will take the user's\n    // options and transform them into suitable options to be passed into the\n    // built-in (non-polyfill) Intl.DateTimeFormat constructor. These options\n    // will vary depending on the Temporal type, so that's why we store separate\n    // formatters in separate props on the polyfill's DateTimeFormat instances.\n    // The efficiency happens because we don't create an (expensive) formatter\n    // until the user calls toLocaleString for that Temporal type.\n    val = new IntlDateTimeFormat(obj[LOCALE], val(obj[OPTIONS]));\n    // TODO: can this be typed more cleanly?\n    (obj[prop] as globalThis.Intl.DateTimeFormat) = val;\n  }\n  return val;\n}\n\ntype DateTimeFormatImpl = Intl.DateTimeFormat & PrivateProps;\n\nfunction DateTimeFormatImpl(\n  this: Intl.DateTimeFormat & PrivateProps,\n  locale: Params['constructor'][0] = undefined,\n  optionsParam: Params['constructor'][1] = {}\n) {\n  if (!(this instanceof DateTimeFormatImpl)) {\n    type Construct = new (\n      locale: Params['constructor'][0],\n      optionsParam: Params['constructor'][1]\n    ) => Intl.DateTimeFormat;\n    return new (DateTimeFormatImpl as unknown as Construct)(locale, optionsParam);\n  }\n  const hasOptions = typeof optionsParam !== 'undefined';\n  const options = hasOptions ? ObjectAssign({}, optionsParam) : {};\n  // TODO: remove type assertion after Temporal types land in TS lib types\n  const original = new IntlDateTimeFormat(locale, options as globalThis.Intl.DateTimeFormatOptions);\n  const ro = original.resolvedOptions();\n\n  // DateTimeFormat instances are very expensive to create. Therefore, they will\n  // be lazily created only when needed, using the locale and options provided.\n  // But it's possible for callers to mutate those inputs before lazy creation\n  // happens. For this reason, we clone the inputs instead of caching the\n  // original objects. To avoid the complexity of deep cloning any inputs that\n  // are themselves objects (e.g. the locales array, or options property values\n  // that will be coerced to strings), we rely on `resolvedOptions()` to do the\n  // coercion and cloning for us. Unfortunately, we can't just use the resolved\n  // options as-is because our options-amending logic adds additional fields if\n  // the user doesn't supply any unit fields like year, month, day, hour, etc.\n  // Therefore, we limit the properties in the clone to properties that were\n  // present in the original input.\n  if (hasOptions) {\n    const clonedResolved = ObjectAssign({}, ro);\n    for (const prop in clonedResolved) {\n      if (!ReflectApply(ObjectHasOwnProperty, options, [prop])) {\n        delete clonedResolved[prop as keyof typeof clonedResolved];\n      }\n    }\n    this[OPTIONS] = clonedResolved as Intl.DateTimeFormatOptions;\n  } else {\n    this[OPTIONS] = options;\n  }\n\n  this[LOCALE] = ro.locale;\n  this[ORIGINAL] = original;\n  this[TZ_RESOLVED] = ro.timeZone;\n  this[CAL_ID] = ro.calendar;\n  this[DATE] = dateAmend;\n  this[YM] = yearMonthAmend;\n  this[MD] = monthDayAmend;\n  this[TIME] = timeAmend;\n  this[DATETIME] = datetimeAmend;\n  this[INST] = instantAmend;\n  return undefined; // TODO: I couldn't satisfy TS without adding this. Is there another way?\n}\n\nObject.defineProperty(DateTimeFormatImpl, 'name', {\n  writable: true,\n  value: 'DateTimeFormat'\n});\n\nDateTimeFormatImpl.supportedLocalesOf = function (\n  locales: Params['supportedLocalesOf'][0],\n  options: Params['supportedLocalesOf'][1]\n) {\n  return IntlDateTimeFormat.supportedLocalesOf(locales, options as globalThis.Intl.DateTimeFormatOptions);\n};\n\nconst propertyDescriptors: Partial<Record<keyof Intl.DateTimeFormat, PropertyDescriptor>> = {\n  resolvedOptions: descriptor(resolvedOptions),\n  format: descriptor(format),\n  formatRange: descriptor(formatRange)\n};\n\nif ('formatToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatToParts = descriptor(formatToParts);\n}\n\nif ('formatRangeToParts' in IntlDateTimeFormat.prototype) {\n  propertyDescriptors.formatRangeToParts = descriptor(formatRangeToParts);\n}\n\nDateTimeFormatImpl.prototype = Object.create(IntlDateTimeFormat.prototype, propertyDescriptors);\n\n// Ensure that the prototype isn't writeable.\nObject.defineProperty(DateTimeFormatImpl, 'prototype', {\n  writable: false,\n  enumerable: false,\n  configurable: false\n});\n\nexport const DateTimeFormat = DateTimeFormatImpl as unknown as typeof Intl.DateTimeFormat;\n\nfunction resolvedOptions(this: DateTimeFormatImpl): Return['resolvedOptions'] {\n  return this[ORIGINAL].resolvedOptions();\n}\n\n// TODO: investigate why there's a rest parameter here. Does this function really need to accept extra params?\n// And if so, why doesn't formatRange also accept extra params?\nfunction format<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['format'][0],\n  ...rest: P\n): Return['format'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.format(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (datetime: Parameters<Intl.DateTimeFormat['format']>[0], ...rest: P) => Return['format'];\n  return (this[ORIGINAL].format as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatToParts<P extends readonly unknown[]>(\n  this: DateTimeFormatImpl,\n  datetime: Params['formatToParts'][0],\n  ...rest: P\n): Return['formatToParts'] {\n  let { instant, formatter } = extractOverrides(datetime, this);\n  if (instant && formatter) {\n    return formatter.formatToParts(instant.epochMilliseconds);\n  }\n  // Support spreading additional args for future expansion of this Intl method\n  type AllowExtraParams = (\n    datetime: Parameters<Intl.DateTimeFormat['formatToParts']>[0],\n    ...rest: P\n  ) => Return['formatToParts'];\n  return (this[ORIGINAL].formatToParts as unknown as AllowExtraParams)(datetime, ...rest);\n}\n\nfunction formatRange(this: DateTimeFormatImpl, a: Params['formatRange'][0], b: Params['formatRange'][1]) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a as unknown as TypesWithToLocaleString, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b as unknown as TypesWithToLocaleString, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRange(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRange(a, b);\n}\n\nfunction formatRangeToParts(\n  this: DateTimeFormatImpl,\n  a: Params['formatRangeToParts'][0],\n  b: Params['formatRangeToParts'][1]\n) {\n  if (isTemporalObject(a) || isTemporalObject(b)) {\n    if (!sameTemporalType(a, b)) {\n      throw new TypeError('Intl.DateTimeFormat.formatRangeToParts accepts two values of the same type');\n    }\n    const { instant: aa, formatter: aformatter } = extractOverrides(a, this);\n    const { instant: bb, formatter: bformatter } = extractOverrides(b, this);\n    if (aa && bb && aformatter && bformatter && aformatter === bformatter) {\n      // TODO: Remove type assertion after this method lands in TS lib types\n      return (aformatter as Intl.DateTimeFormat).formatRangeToParts(aa.epochMilliseconds, bb.epochMilliseconds);\n    }\n  }\n  // TODO: Remove type assertion after this method lands in TS lib types\n  return (this[ORIGINAL] as Intl.DateTimeFormat).formatRangeToParts(a, b);\n}\n\n// \"false\" is a signal to delete this option\ntype MaybeFalseOptions = {\n  [K in keyof Intl.DateTimeFormatOptions]?: Intl.DateTimeFormatOptions[K] | false;\n};\n\nfunction amend(optionsParam: Intl.DateTimeFormatOptions = {}, amended: MaybeFalseOptions = {}) {\n  const options = ObjectAssign({}, optionsParam);\n  for (const opt of [\n    'year',\n    'month',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'weekday',\n    'dayPeriod',\n    'timeZoneName',\n    'dateStyle',\n    'timeStyle'\n  ] as const) {\n    // TODO: can this be typed more cleanly?\n    type OptionMaybeFalse = typeof options[typeof opt] | false;\n    (options[opt] as OptionMaybeFalse) = opt in amended ? amended[opt] : options[opt];\n    if ((options[opt] as OptionMaybeFalse) === false || options[opt] === undefined) delete options[opt];\n  }\n  return options as globalThis.Intl.DateTimeFormatOptions;\n}\n\ntype OptionsType<T extends TypesWithToLocaleString> = NonNullable<Parameters<T['toLocaleString']>[1]>;\n\nfunction timeAmend(optionsParam: OptionsType<Temporal.PlainTime>) {\n  let options = amend(optionsParam, {\n    year: false,\n    month: false,\n    day: false,\n    weekday: false,\n    timeZoneName: false,\n    dateStyle: false\n  });\n  if (!hasTimeOptions(options)) {\n    options = ObjectAssign({}, options, {\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction yearMonthAmend(optionsParam: OptionsType<Temporal.PlainYearMonth>) {\n  let options = amend(optionsParam, {\n    day: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('year' in options || 'month' in options)) {\n    options = ObjectAssign(options, { year: 'numeric', month: 'numeric' });\n  }\n  return options;\n}\n\nfunction monthDayAmend(optionsParam: OptionsType<Temporal.PlainMonthDay>) {\n  let options = amend(optionsParam, {\n    year: false,\n    hour: false,\n    minute: false,\n    second: false,\n    weekday: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    dateStyle: false,\n    timeStyle: false\n  });\n  if (!('month' in options || 'day' in options)) {\n    options = ObjectAssign({}, options, { month: 'numeric', day: 'numeric' });\n  }\n  return options;\n}\n\nfunction dateAmend(optionsParam: OptionsType<Temporal.PlainDate>) {\n  let options = amend(optionsParam, {\n    hour: false,\n    minute: false,\n    second: false,\n    dayPeriod: false,\n    timeZoneName: false,\n    timeStyle: false\n  });\n  if (!hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction datetimeAmend(optionsParam: OptionsType<Temporal.PlainDateTime>) {\n  let options = amend(optionsParam, { timeZoneName: false });\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction instantAmend(optionsParam: OptionsType<Temporal.Instant>) {\n  let options = optionsParam;\n  if (!hasTimeOptions(options) && !hasDateOptions(options)) {\n    options = ObjectAssign({}, options, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n      second: 'numeric'\n    });\n  }\n  return options;\n}\n\nfunction hasDateOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return 'year' in options || 'month' in options || 'day' in options || 'weekday' in options || 'dateStyle' in options;\n}\n\nfunction hasTimeOptions(options: OptionsType<TypesWithToLocaleString>) {\n  return (\n    'hour' in options || 'minute' in options || 'second' in options || 'timeStyle' in options || 'dayPeriod' in options\n  );\n}\n\nfunction isTemporalObject(\n  obj: unknown\n): obj is\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainDateTime\n  | Temporal.ZonedDateTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.Instant {\n  return (\n    ES.IsTemporalDate(obj) ||\n    ES.IsTemporalTime(obj) ||\n    ES.IsTemporalDateTime(obj) ||\n    ES.IsTemporalZonedDateTime(obj) ||\n    ES.IsTemporalYearMonth(obj) ||\n    ES.IsTemporalMonthDay(obj) ||\n    ES.IsTemporalInstant(obj)\n  );\n}\n\nfunction sameTemporalType(x: unknown, y: unknown) {\n  if (!isTemporalObject(x) || !isTemporalObject(y)) return false;\n  if (ES.IsTemporalTime(x) && !ES.IsTemporalTime(y)) return false;\n  if (ES.IsTemporalDate(x) && !ES.IsTemporalDate(y)) return false;\n  if (ES.IsTemporalDateTime(x) && !ES.IsTemporalDateTime(y)) return false;\n  if (ES.IsTemporalZonedDateTime(x) && !ES.IsTemporalZonedDateTime(y)) return false;\n  if (ES.IsTemporalYearMonth(x) && !ES.IsTemporalYearMonth(y)) return false;\n  if (ES.IsTemporalMonthDay(x) && !ES.IsTemporalMonthDay(y)) return false;\n  if (ES.IsTemporalInstant(x) && !ES.IsTemporalInstant(y)) return false;\n  return true;\n}\n\ntype TypesWithToLocaleString =\n  | Temporal.PlainDateTime\n  | Temporal.PlainDate\n  | Temporal.PlainTime\n  | Temporal.PlainYearMonth\n  | Temporal.PlainMonthDay\n  | Temporal.ZonedDateTime\n  | Temporal.Instant;\n\nfunction extractOverrides(temporalObj: Params['format'][0], main: DateTimeFormatImpl) {\n  const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n\n  if (ES.IsTemporalTime(temporalObj)) {\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const datetime = new DateTime(1970, 1, 1, hour, minute, second, millisecond, microsecond, nanosecond, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, TIME)\n    };\n  }\n\n  if (ES.IsTemporalYearMonth(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const referenceISODay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainYearMonth with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(isoYear, isoMonth, referenceISODay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, YM)\n    };\n  }\n\n  if (ES.IsTemporalMonthDay(temporalObj)) {\n    const referenceISOYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainMonthDay with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    const datetime = new DateTime(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, calendar);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, MD)\n    };\n  }\n\n  if (ES.IsTemporalDate(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(`cannot format PlainDate with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`);\n    }\n    const datetime = new DateTime(isoYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0, main[CAL_ID]);\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATE)\n    };\n  }\n\n  if (ES.IsTemporalDateTime(temporalObj)) {\n    const isoYear = GetSlot(temporalObj, ISO_YEAR);\n    const isoMonth = GetSlot(temporalObj, ISO_MONTH);\n    const isoDay = GetSlot(temporalObj, ISO_DAY);\n    const hour = GetSlot(temporalObj, ISO_HOUR);\n    const minute = GetSlot(temporalObj, ISO_MINUTE);\n    const second = GetSlot(temporalObj, ISO_SECOND);\n    const millisecond = GetSlot(temporalObj, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalObj, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalObj, ISO_NANOSECOND);\n    const calendar = ES.ToTemporalCalendarIdentifier(GetSlot(temporalObj, CALENDAR));\n    if (calendar !== 'iso8601' && calendar !== main[CAL_ID]) {\n      throw new RangeError(\n        `cannot format PlainDateTime with calendar ${calendar} in locale with calendar ${main[CAL_ID]}`\n      );\n    }\n    let datetime = temporalObj;\n    if (calendar === 'iso8601') {\n      datetime = new DateTime(\n        isoYear,\n        isoMonth,\n        isoDay,\n        hour,\n        minute,\n        second,\n        millisecond,\n        microsecond,\n        nanosecond,\n        main[CAL_ID]\n      );\n    }\n    return {\n      instant: ES.GetInstantFor(main[TZ_RESOLVED], datetime, 'compatible'),\n      formatter: getPropLazy(main, DATETIME)\n    };\n  }\n\n  if (ES.IsTemporalZonedDateTime(temporalObj)) {\n    throw new TypeError(\n      'Temporal.ZonedDateTime not supported in DateTimeFormat methods. Use toLocaleString() instead.'\n    );\n  }\n\n  if (ES.IsTemporalInstant(temporalObj)) {\n    return {\n      instant: temporalObj,\n      formatter: getPropLazy(main, INST)\n    };\n  }\n\n  return {};\n}\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { EPOCHNANOSECONDS, CreateSlots, GetSlot, SetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { InstantParams as Params, InstantReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND } from './ecmascript';\n\nexport class Instant implements Temporal.Instant {\n  constructor(epochNanoseconds: bigint | JSBI) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n\n    const ns = ES.ToBigInt(epochNanoseconds);\n    ES.ValidateEpochNanoseconds(ns);\n    CreateSlots(this);\n    SetSlot(this, EPOCHNANOSECONDS, ns);\n\n    if (DEBUG) {\n      const repr = ES.TemporalInstantToString(this, undefined, 'auto');\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${repr}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const value = JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS));\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(JSBI.BigInt(GetSlot(this, EPOCHNANOSECONDS)));\n  }\n\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromInstant('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalInstant('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const maximumIncrements = {\n      hour: 24,\n      minute: 1440,\n      second: 86400,\n      millisecond: 86400e3,\n      microsecond: 86400e6,\n      nanosecond: 86400e9\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximumIncrements[smallestUnit], true);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, roundingIncrement, smallestUnit, roundingMode);\n    return new Instant(roundedNs);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalInstant(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    return JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    let timeZone = options.timeZone;\n    if (timeZone !== undefined) timeZone = ES.ToTemporalTimeZoneSlotValue(timeZone);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    const ns = GetSlot(this, EPOCHNANOSECONDS);\n    const roundedNs = ES.RoundInstant(ns, increment, unit, roundingMode);\n    const roundedInstant = new Instant(roundedNs);\n    return ES.TemporalInstantToString(roundedInstant, timeZone as Temporal.TimeZoneProtocol, precision);\n  }\n  toJSON(): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalInstantToString(this, undefined, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.Instant');\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument in toZonedDateTime');\n    }\n    const calendarLike = item.calendar;\n    if (calendarLike === undefined) {\n      throw new TypeError('missing calendar property in toZonedDateTime');\n    }\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n    const temporalTimeZoneLike = item.timeZone;\n    if (temporalTimeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property in toZonedDateTime');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toZonedDateTimeISO(timeZoneParam: Params['toZonedDateTimeISO'][0]): Return['toZonedDateTimeISO'] {\n    if (!ES.IsTemporalInstant(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, 'iso8601');\n  }\n\n  static fromEpochSeconds(epochSecondsParam: Params['fromEpochSeconds'][0]): Return['fromEpochSeconds'] {\n    const epochSeconds = ES.ToNumber(epochSecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochSeconds), BILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMilliseconds(\n    epochMillisecondsParam: Params['fromEpochMilliseconds'][0]\n  ): Return['fromEpochMilliseconds'] {\n    const epochMilliseconds = ES.ToNumber(epochMillisecondsParam);\n    const epochNanoseconds = JSBI.multiply(JSBI.BigInt(epochMilliseconds), MILLION);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochMicroseconds(\n    epochMicrosecondsParam: Params['fromEpochMicroseconds'][0]\n  ): Return['fromEpochMicroseconds'] {\n    const epochMicroseconds = ES.ToBigInt(epochMicrosecondsParam);\n    const epochNanoseconds = JSBI.multiply(epochMicroseconds, THOUSAND);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static fromEpochNanoseconds(\n    epochNanosecondsParam: Params['fromEpochNanoseconds'][0]\n  ): Return['fromEpochNanoseconds'] {\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    ES.ValidateEpochNanoseconds(epochNanoseconds);\n    return new Instant(epochNanoseconds);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalInstant(item)) {\n      return new Instant(GetSlot(item, EPOCHNANOSECONDS));\n    }\n    return ES.ToTemporalInstant(item);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalInstant(oneParam);\n    const two = ES.ToTemporalInstant(twoParam);\n    const oneNs = GetSlot(one, EPOCHNANOSECONDS);\n    const twoNs = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(oneNs, twoNs)) return -1;\n    if (JSBI.greaterThan(oneNs, twoNs)) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.Instant';\n}\n\nMakeIntrinsicClass(Instant, 'Temporal.Instant');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass, DefineIntrinsic } from './intrinsicclass';\nimport {\n  CALENDAR_ID,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  HasSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type {\n  BuiltinCalendarId,\n  CalendarParams as Params,\n  CalendarReturn as Return,\n  AnyTemporalKey,\n  CalendarSlot\n} from './internaltypes';\n\nconst ArrayIncludes = Array.prototype.includes;\nconst ArrayPrototypePush = Array.prototype.push;\nconst IntlDateTimeFormat = globalThis.Intl.DateTimeFormat;\nconst ArraySort = Array.prototype.sort;\nconst MathAbs = Math.abs;\nconst MathFloor = Math.floor;\nconst ObjectCreate = Object.create;\nconst ObjectEntries = Object.entries;\nconst OriginalSet = Set;\nconst ReflectOwnKeys = Reflect.ownKeys;\nconst SetPrototypeAdd = Set.prototype.add;\nconst SetPrototypeValues = Set.prototype.values;\n\n/**\n * Shape of internal implementation of each built-in calendar. Note that\n * parameter types are simpler than CalendarProtocol because the `Calendar`\n * class performs validation and parameter normalization before handing control\n * over to CalendarImpl.\n *\n * There are two instances of this interface: one for the ISO calendar and\n * another that handles logic that's the same across all non-ISO calendars. The\n * latter is cloned for each non-ISO calendar at the end of this file.\n */\ninterface CalendarImpl {\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number;\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string;\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number;\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined;\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined;\n  dayOfWeek(date: Temporal.PlainDate): number;\n  dayOfYear(date: Temporal.PlainDate): number;\n  weekOfYear(date: Temporal.PlainDate): number;\n  yearOfWeek(date: Temporal.PlainDate): number;\n  daysInWeek(date: Temporal.PlainDate): number;\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  daysInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number;\n  inLeapYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): boolean;\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainDate;\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainYearMonth;\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendar: string\n  ): Temporal.PlainMonthDay;\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendar: string\n  ): Temporal.PlainDate;\n  dateUntil(\n    one: Temporal.PlainDate,\n    two: Temporal.PlainDate,\n    largestUnit: 'year' | 'month' | 'week' | 'day'\n  ): { years: number; months: number; weeks: number; days: number };\n  fields(fields: string[]): string[];\n  fieldKeysToIgnore(keys: string[]): string[];\n}\n\ntype CalendarImplementations = {\n  [k in BuiltinCalendarId]: CalendarImpl;\n};\n\n/**\n * Implementations for each calendar.\n * Registration for each of these calendars happens throughout this file. The ISO and non-ISO calendars are registered\n * separately - look for 'iso8601' for the ISO calendar registration, and all non-ISO calendar registrations happens\n * at the bottom of the file.\n */\nconst impl: CalendarImplementations = {} as unknown as CalendarImplementations;\n\n/**\n * Thin wrapper around the implementation of each built-in calendar. This\n * class's methods follow a similar pattern:\n * 1. Validate parameters\n * 2. Fill in default options (for methods where options are present)\n * 3. Simplify and/or normalize parameters. For example, some methods accept\n *    PlainDate, PlainDateTime, ZonedDateTime, etc. and these are normalized to\n *    PlainDate.\n * 4. Look up the ID of the built-in calendar\n * 5. Fetch the implementation object for that ID.\n * 6. Call the corresponding method in the implementation object.\n */\nexport class Calendar implements Temporal.Calendar {\n  constructor(idParam: Params['constructor'][0]) {\n    // Note: if the argument is not passed, IsBuiltinCalendar(\"undefined\") will fail. This check\n    //       exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: id is required');\n    }\n\n    const id = ES.ToString(idParam);\n    if (!ES.IsBuiltinCalendar(id)) throw new RangeError(`invalid calendar identifier ${id}`);\n    CreateSlots(this);\n    SetSlot(this, CALENDAR_ID, ES.ASCIILowercase(id));\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${id}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  dateFromFields(\n    fields: Params['dateFromFields'][0],\n    optionsParam: Params['dateFromFields'][1] = undefined\n  ): Return['dateFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateFromFields(fields, options, id);\n  }\n  yearMonthFromFields(\n    fields: Params['yearMonthFromFields'][0],\n    optionsParam: Params['yearMonthFromFields'][1] = undefined\n  ): Return['yearMonthFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].yearMonthFromFields(fields, options, id);\n  }\n  monthDayFromFields(\n    fields: Params['monthDayFromFields'][0],\n    optionsParam: Params['monthDayFromFields'][1] = undefined\n  ): Return['monthDayFromFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(fields)) throw new TypeError('invalid fields');\n    const options = ES.GetOptionsObject(optionsParam);\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].monthDayFromFields(fields, options, id);\n  }\n  fields(fields: Params['fields'][0]): Return['fields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fieldsArray = [] as string[];\n    const allowed = new Set([\n      'year',\n      'month',\n      'monthCode',\n      'day',\n      'hour',\n      'minute',\n      'second',\n      'millisecond',\n      'microsecond',\n      'nanosecond'\n    ]);\n    for (const name of fields) {\n      if (typeof name !== 'string') throw new TypeError('invalid fields');\n      if (!allowed.has(name)) throw new RangeError(`invalid field name ${name}`);\n      allowed.delete(name);\n      ArrayPrototypePush.call(fieldsArray, name);\n    }\n    return impl[GetSlot(this, CALENDAR_ID)].fields(fieldsArray);\n  }\n  mergeFields(\n    fieldsParam: Params['mergeFields'][0],\n    additionalFieldsParam: Params['mergeFields'][1]\n  ): Return['mergeFields'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const fields = ES.ToObject(fieldsParam);\n    const fieldsCopy = ObjectCreate(null);\n    ES.CopyDataProperties(fieldsCopy, fields, [], [undefined]);\n    const additionalFields = ES.ToObject(additionalFieldsParam);\n    const additionalFieldsCopy = ObjectCreate(null);\n    ES.CopyDataProperties(additionalFieldsCopy, additionalFields, [], [undefined]);\n    const additionalKeys = ReflectOwnKeys(additionalFieldsCopy) as (keyof typeof additionalFields)[];\n    const overriddenKeys = impl[GetSlot(this, CALENDAR_ID)].fieldKeysToIgnore(additionalKeys);\n    const merged = ObjectCreate(null);\n    const fieldsKeys = ReflectOwnKeys(fieldsCopy);\n    for (const key of fieldsKeys) {\n      let propValue = undefined;\n      if (ES.Call(ArrayIncludes, overriddenKeys, [key])) propValue = additionalFieldsCopy[key];\n      else propValue = fieldsCopy[key];\n      if (propValue !== undefined) merged[key] = propValue;\n    }\n    ES.CopyDataProperties(merged, additionalFieldsCopy, []);\n    return merged;\n  }\n  dateAdd(\n    dateParam: Params['dateAdd'][0],\n    durationParam: Params['dateAdd'][1],\n    optionsParam: Params['dateAdd'][2] = undefined\n  ): Return['dateAdd'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    const duration = ES.ToTemporalDuration(durationParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { days } = ES.BalanceDuration(\n      GetSlot(duration, DAYS),\n      GetSlot(duration, HOURS),\n      GetSlot(duration, MINUTES),\n      GetSlot(duration, SECONDS),\n      GetSlot(duration, MILLISECONDS),\n      GetSlot(duration, MICROSECONDS),\n      GetSlot(duration, NANOSECONDS),\n      'day'\n    );\n    const id = GetSlot(this, CALENDAR_ID);\n    return impl[id].dateAdd(\n      date,\n      GetSlot(duration, YEARS),\n      GetSlot(duration, MONTHS),\n      GetSlot(duration, WEEKS),\n      days,\n      overflow,\n      id\n    );\n  }\n  dateUntil(\n    oneParam: Params['dateUntil'][0],\n    twoParam: Params['dateUntil'][1],\n    optionsParam: Params['dateUntil'][2] = undefined\n  ): Return['dateUntil'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    let largestUnit = ES.GetTemporalUnit(options, 'largestUnit', 'date', 'auto');\n    if (largestUnit === 'auto') largestUnit = 'day';\n    const { years, months, weeks, days } = impl[GetSlot(this, CALENDAR_ID)].dateUntil(one, two, largestUnit);\n    const Duration = GetIntrinsic('%Temporal.Duration%');\n    return new Duration(years, months, weeks, days, 0, 0, 0, 0, 0, 0);\n  }\n  year(dateParam: Params['year'][0]): Return['year'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].year(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  month(dateParam: Params['month'][0]): Return['month'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (ES.IsTemporalMonthDay(date)) throw new TypeError('use monthCode on PlainMonthDay instead');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].month(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthCode(dateParam: Params['monthCode'][0]): Return['monthCode'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date) && !ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthCode(\n      date as Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth\n    );\n  }\n  day(dateParam: Params['day'][0]): Return['day'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalMonthDay(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].day(date as Temporal.PlainDate | Temporal.PlainMonthDay);\n  }\n  era(dateParam: Params['era'][0]): Return['era'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].era(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  eraYear(dateParam: Params['eraYear'][0]): Return['eraYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].eraYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  dayOfWeek(dateParam: Params['dayOfWeek'][0]): Return['dayOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfWeek(date);\n  }\n  dayOfYear(dateParam: Params['dayOfYear'][0]): Return['dayOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].dayOfYear(date);\n  }\n  weekOfYear(dateParam: Params['weekOfYear'][0]): Return['weekOfYear'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].weekOfYear(date);\n  }\n  yearOfWeek(dateParam: Params['yearOfWeek'][0]): Return['yearOfWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].yearOfWeek(date);\n  }\n  daysInWeek(dateParam: Params['daysInWeek'][0]): Return['daysInWeek'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    const date = ES.ToTemporalDate(dateParam);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInWeek(date);\n  }\n  daysInMonth(dateParam: Params['daysInMonth'][0]): Return['daysInMonth'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInMonth(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  daysInYear(dateParam: Params['daysInYear'][0]): Return['daysInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].daysInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  monthsInYear(dateParam: Params['monthsInYear'][0]): Return['monthsInYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].monthsInYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  inLeapYear(dateParam: Params['inLeapYear'][0]): Return['inLeapYear'] {\n    let date = dateParam;\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsTemporalYearMonth(date)) date = ES.ToTemporalDate(date);\n    return impl[GetSlot(this, CALENDAR_ID)].inLeapYear(date as Temporal.PlainDate | Temporal.PlainYearMonth);\n  }\n  toString(): string {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalCalendar(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, CALENDAR_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const calendarSlotValue = ES.ToTemporalCalendarSlotValue(item);\n    return ES.ToTemporalCalendarObject(calendarSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.Calendar';\n}\n\nMakeIntrinsicClass(Calendar, 'Temporal.Calendar');\nDefineIntrinsic('Temporal.Calendar.from', Calendar.from);\nDefineIntrinsic('Temporal.Calendar.prototype.dateAdd', Calendar.prototype.dateAdd);\nDefineIntrinsic('Temporal.Calendar.prototype.dateFromFields', Calendar.prototype.dateFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.dateUntil', Calendar.prototype.dateUntil);\nDefineIntrinsic('Temporal.Calendar.prototype.day', Calendar.prototype.day);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfWeek', Calendar.prototype.dayOfWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.dayOfYear', Calendar.prototype.dayOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInMonth', Calendar.prototype.daysInMonth);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInWeek', Calendar.prototype.daysInWeek);\nDefineIntrinsic('Temporal.Calendar.prototype.daysInYear', Calendar.prototype.daysInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.era', Calendar.prototype.era);\nDefineIntrinsic('Temporal.Calendar.prototype.eraYear', Calendar.prototype.eraYear);\nDefineIntrinsic('Temporal.Calendar.prototype.fields', Calendar.prototype.fields);\nDefineIntrinsic('Temporal.Calendar.prototype.inLeapYear', Calendar.prototype.inLeapYear);\nDefineIntrinsic('Temporal.Calendar.prototype.mergeFields', Calendar.prototype.mergeFields);\nDefineIntrinsic('Temporal.Calendar.prototype.month', Calendar.prototype.month);\nDefineIntrinsic('Temporal.Calendar.prototype.monthCode', Calendar.prototype.monthCode);\nDefineIntrinsic('Temporal.Calendar.prototype.monthDayFromFields', Calendar.prototype.monthDayFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.monthsInYear', Calendar.prototype.monthsInYear);\nDefineIntrinsic('Temporal.Calendar.prototype.weekOfYear', Calendar.prototype.weekOfYear);\nDefineIntrinsic('Temporal.Calendar.prototype.year', Calendar.prototype.year);\nDefineIntrinsic('Temporal.Calendar.prototype.yearMonthFromFields', Calendar.prototype.yearMonthFromFields);\nDefineIntrinsic('Temporal.Calendar.prototype.yearOfWeek', Calendar.prototype.yearOfWeek);\n\n/**\n * Implementation for the ISO 8601 calendar. This is the only calendar that's\n * guaranteed to be supported by all ECMAScript implementations, including those\n * without Intl (ECMA-402) support.\n */\nimpl['iso8601'] = {\n  dateFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['year', 'day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month, day } = fields;\n    ({ year, month, day } = ES.RegulateISODate(year, month, day, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  yearMonthFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['month', 'monthCode', 'year'], ['year']);\n    const overflow = ES.ToTemporalOverflow(options);\n    fields = resolveNonLunisolarMonth(fields);\n    let { year, month } = fields;\n    ({ year, month } = ES.RegulateISOYearMonth(year, month, overflow));\n    return ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ 1);\n  },\n  monthDayFromFields(fieldsParam, options, calendarSlotValue) {\n    let fields = ES.PrepareTemporalFields(fieldsParam, ['day', 'month', 'monthCode', 'year'], ['day']);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (fields.month !== undefined && fields.year === undefined && fields.monthCode === undefined) {\n      throw new TypeError('either year or monthCode required with month');\n    }\n    const useYear = fields.monthCode === undefined;\n    const referenceISOYear = 1972;\n    fields = resolveNonLunisolarMonth(fields);\n    let { month, day, year } = fields;\n    ({ month, day } = ES.RegulateISODate(useYear ? year : referenceISOYear, month, day, overflow));\n    return ES.CreateTemporalMonthDay(month, day, calendarSlotValue, referenceISOYear);\n  },\n  fields(fields) {\n    return fields;\n  },\n  fieldKeysToIgnore(keys) {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      if (key === 'month') {\n        ES.Call(SetPrototypeAdd, result, ['monthCode']);\n      } else if (key === 'monthCode') {\n        ES.Call(SetPrototypeAdd, result, ['month']);\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  },\n  dateAdd(date, years, months, weeks, days, overflow, calendarSlotValue) {\n    let year = GetSlot(date, ISO_YEAR);\n    let month = GetSlot(date, ISO_MONTH);\n    let day = GetSlot(date, ISO_DAY);\n    ({ year, month, day } = ES.AddISODate(year, month, day, years, months, weeks, days, overflow));\n    return ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n  },\n  dateUntil(one, two, largestUnit) {\n    return ES.DifferenceISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY),\n      largestUnit\n    );\n  },\n  year(date) {\n    return GetSlot(date, ISO_YEAR);\n  },\n  era() {\n    return undefined;\n  },\n  eraYear() {\n    return undefined;\n  },\n  month(date) {\n    return GetSlot(date, ISO_MONTH);\n  },\n  monthCode(date) {\n    return buildMonthCode(GetSlot(date, ISO_MONTH));\n  },\n  day(date) {\n    return GetSlot(date, ISO_DAY);\n  },\n  dayOfWeek(date) {\n    return ES.DayOfWeek(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  dayOfYear(date) {\n    return ES.DayOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY));\n  },\n  weekOfYear(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).week;\n  },\n  yearOfWeek(date) {\n    return ES.WeekOfYear(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH), GetSlot(date, ISO_DAY)).year;\n  },\n  daysInWeek() {\n    return 7;\n  },\n  daysInMonth(date) {\n    return ES.ISODaysInMonth(GetSlot(date, ISO_YEAR), GetSlot(date, ISO_MONTH));\n  },\n  daysInYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR)) ? 366 : 365;\n  },\n  monthsInYear() {\n    return 12;\n  },\n  inLeapYear(dateParam) {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    return ES.LeapYear(GetSlot(date, ISO_YEAR));\n  }\n};\n\n// Note: Built-in calendars other than iso8601 are not part of the Temporal\n// proposal for ECMA-262. These calendars will be standardized as part of\n// ECMA-402. Code below here includes an implementation of these calendars to\n// validate the Temporal API and to get feedback. However, native non-ISO\n// calendar behavior is at least somewhat implementation-defined, so may not\n// match this polyfill's output exactly.\n//\n// Some ES implementations don't include ECMA-402. For this reason, it's helpful\n// to ensure a clean separation between the ISO calendar implementation which is\n// a part of ECMA-262 and the non-ISO calendar implementation which requires\n// ECMA-402.\n//\n// To ensure this separation, the implementation is split. A `CalendarImpl`\n// interface defines the common operations between both ISO and non-ISO\n// calendars.\n\n/**\n * This type is passed through from Calendar#dateFromFields().\n * `monthExtra` is additional information used internally to identify lunisolar leap months.\n */\ntype CalendarDateFields = Params['dateFromFields'][0] & { monthExtra?: string };\n\n/**\n * This is a \"fully populated\" calendar date record. It's only lacking\n * `era`/`eraYear` (which may not be present in all calendars) and `monthExtra`\n * which is only used in some cases.\n */\ntype FullCalendarDate = {\n  era?: string;\n  eraYear?: number;\n  year: number;\n  month: number;\n  monthCode: string;\n  day: number;\n  monthExtra?: string;\n};\n\n// The types below are various subsets of calendar dates\ntype CalendarYMD = { year: number; month: number; day: number };\ntype CalendarYM = { year: number; month: number };\ntype CalendarYearOnly = { year: number };\ntype EraAndEraYear = { era: string; eraYear: number };\n\n/** Record representing YMD of an ISO calendar date */\ntype IsoYMD = { year: number; month: number; day: number };\n\ntype Overflow = NonNullable<Temporal.AssignmentOptions['overflow']>;\n\nfunction monthCodeNumberPart(monthCode: string) {\n  if (!monthCode.startsWith('M')) {\n    throw new RangeError(`Invalid month code: ${monthCode}.  Month codes must start with M.`);\n  }\n  const month = +monthCode.slice(1);\n  if (isNaN(month)) throw new RangeError(`Invalid month code: ${monthCode}`);\n  return month;\n}\n\nfunction buildMonthCode(month: number | string, leap = false) {\n  return `M${month.toString().padStart(2, '0')}${leap ? 'L' : ''}`;\n}\n\n/**\n * Safely merge a month, monthCode pair into an integer month.\n * If both are present, make sure they match.\n * This logic doesn't work for lunisolar calendars!\n * */\nfunction resolveNonLunisolarMonth<T extends { monthCode?: string; month?: number }>(\n  calendarDate: T,\n  overflow: Overflow | undefined = undefined,\n  monthsPerYear = 12\n) {\n  let { month, monthCode } = calendarDate;\n  if (monthCode === undefined) {\n    if (month === undefined) throw new TypeError('Either month or monthCode are required');\n    // The ISO calendar uses the default (undefined) value because it does\n    // constrain/reject after this method returns. Non-ISO calendars, however,\n    // rely on this function to constrain/reject out-of-range `month` values.\n    if (overflow === 'reject') ES.RejectToRange(month, 1, monthsPerYear);\n    if (overflow === 'constrain') month = ES.ConstrainToRange(month, 1, monthsPerYear);\n    monthCode = buildMonthCode(month);\n  } else {\n    const numberPart = monthCodeNumberPart(monthCode);\n    if (month !== undefined && month !== numberPart) {\n      throw new RangeError(`monthCode ${monthCode} and month ${month} must match if both are present`);\n    }\n    if (monthCode !== buildMonthCode(numberPart)) {\n      throw new RangeError(`Invalid month code: ${monthCode}`);\n    }\n    month = numberPart;\n    if (month < 1 || month > monthsPerYear) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n  }\n  return { ...calendarDate, month, monthCode };\n}\n\ntype CachedTypes = Temporal.PlainYearMonth | Temporal.PlainDate | Temporal.PlainMonthDay;\n\n/**\n * This prototype implementation of non-ISO calendars makes many repeated calls\n * to Intl APIs which may be slow (e.g. >0.2ms). This trivial cache will speed\n * up these repeat accesses. Each cache instance is associated (via a WeakMap)\n * to a specific Temporal object, which speeds up multiple calendar calls on the\n * same Temporal object instance.  No invalidation or pruning is necessary\n * because each object's cache is thrown away when the object is GC-ed.\n */\nclass OneObjectCache {\n  map = new Map();\n  calls = 0;\n  now: number;\n  hits = 0;\n  misses = 0;\n  constructor(cacheToClone?: OneObjectCache) {\n    this.now = globalThis.performance ? globalThis.performance.now() : Date.now();\n    if (cacheToClone !== undefined) {\n      let i = 0;\n      for (const entry of cacheToClone.map.entries()) {\n        if (++i > OneObjectCache.MAX_CACHE_ENTRIES) break;\n        this.map.set(...entry);\n      }\n    }\n  }\n  get(key: string) {\n    const result = this.map.get(key);\n    if (result) {\n      this.hits++;\n      this.report();\n    }\n    this.calls++;\n    return result;\n  }\n  set(key: string, value: unknown) {\n    this.map.set(key, value);\n    this.misses++;\n    this.report();\n  }\n  report() {\n    /*\n    if (this.calls === 0) return;\n    const ms = (globalThis.performance ? globalThis.performance.now() : Date.now()) - this.now;\n    const hitRate = ((100 * this.hits) / this.calls).toFixed(0);\n    console.log(`${this.calls} calls in ${ms.toFixed(2)}ms. Hits: ${this.hits} (${hitRate}%). Misses: ${this.misses}.`);\n    */\n  }\n  setObject(obj: CachedTypes) {\n    if (OneObjectCache.objectMap.get(obj)) throw new RangeError('object already cached');\n    OneObjectCache.objectMap.set(obj, this);\n    this.report();\n  }\n\n  static objectMap = new WeakMap();\n  static MAX_CACHE_ENTRIES = 1000;\n\n  /**\n   * Returns a WeakMap-backed cache that's used to store expensive results\n   * that are associated with a particular Temporal object instance.\n   *\n   * @param obj - object to associate with the cache\n   */\n  static getCacheForObject(obj: CachedTypes) {\n    let cache = OneObjectCache.objectMap.get(obj);\n    if (!cache) {\n      cache = new OneObjectCache();\n      OneObjectCache.objectMap.set(obj, cache);\n    }\n    return cache;\n  }\n}\n\nfunction toUtcIsoDateString({ isoYear, isoMonth, isoDay }: { isoYear: number; isoMonth: number; isoDay: number }) {\n  const yearString = ES.ISOYearString(isoYear);\n  const monthString = ES.ISODateTimePartString(isoMonth);\n  const dayString = ES.ISODateTimePartString(isoDay);\n  return `${yearString}-${monthString}-${dayString}T00:00Z`;\n}\n\nfunction simpleDateDiff(one: CalendarYMD, two: CalendarYMD) {\n  return {\n    years: one.year - two.year,\n    months: one.month - two.month,\n    days: one.day - two.day\n  };\n}\n\n/**\n * Implementation helper that's common to all non-ISO calendars\n */\nabstract class HelperBase {\n  abstract id: BuiltinCalendarId;\n  abstract monthsInYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): number;\n  abstract maximumMonthLength(calendarDate?: CalendarYM): number;\n  abstract minimumMonthLength(calendarDate?: CalendarYM): number;\n  abstract estimateIsoDate(calendarDate: CalendarYMD): IsoYMD;\n  abstract inLeapYear(calendarDate: CalendarYearOnly, cache?: OneObjectCache): boolean;\n  abstract calendarType: 'solar' | 'lunar' | 'lunisolar';\n  reviseIntlEra?<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T;\n  constantEra?: string;\n  checkIcuBugs?(isoDate: IsoYMD): void;\n  private formatter?: globalThis.Intl.DateTimeFormat;\n  getFormatter() {\n    // `new Intl.DateTimeFormat()` is amazingly slow and chews up RAM. Per\n    // https://bugs.chromium.org/p/v8/issues/detail?id=6528#c4, we cache one\n    // DateTimeFormat instance per calendar. Caching is lazy so we only pay for\n    // calendars that are used. Note that the nonIsoHelperBase object is spread\n    // into each each calendar's implementation before any cache is created, so\n    // each calendar gets its own separate cached formatter.\n    if (typeof this.formatter === 'undefined') {\n      this.formatter = new IntlDateTimeFormat(`en-US-u-ca-${this.id}`, {\n        day: 'numeric',\n        month: 'numeric',\n        year: 'numeric',\n        era: this.eraLength,\n        timeZone: 'UTC'\n      });\n    }\n    return this.formatter;\n  }\n  isoToCalendarDate(isoDate: IsoYMD, cache: OneObjectCache): FullCalendarDate {\n    const { year: isoYear, month: isoMonth, day: isoDay } = isoDate;\n    const key = JSON.stringify({ func: 'isoToCalendarDate', isoYear, isoMonth, isoDay, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n\n    const dateTimeFormat = this.getFormatter();\n    let parts, isoString;\n    try {\n      isoString = toUtcIsoDateString({ isoYear, isoMonth, isoDay });\n      parts = dateTimeFormat.formatToParts(new Date(isoString));\n    } catch (e: unknown) {\n      throw new RangeError(`Invalid ISO date: ${JSON.stringify({ isoYear, isoMonth, isoDay })}`);\n    }\n    const result: Partial<FullCalendarDate> = {};\n    for (let { type, value } of parts) {\n      if (type === 'year') result.eraYear = +value;\n      // TODO: remove this type annotation when `relatedYear` gets into TS lib types\n      if (type === ('relatedYear' as Intl.DateTimeFormatPartTypes)) result.eraYear = +value;\n      if (type === 'month') {\n        const matches = /^([0-9]*)(.*?)$/.exec(value);\n        if (!matches || matches.length != 3 || (!matches[1] && !matches[2])) {\n          throw new RangeError(`Unexpected month: ${value}`);\n        }\n        // If the month has no numeric part (should only see this for the Hebrew\n        // calendar with newer FF / Chromium versions; see\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1751833) then set a\n        // placeholder month index of `1` and rely on the derived class to\n        // calculate the correct month index from the month name stored in\n        // `monthExtra`.\n        result.month = matches[1] ? +matches[1] : 1;\n        if (result.month < 1) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10527)'\n          );\n        }\n        if (result.month > 13) {\n          throw new RangeError(\n            `Invalid month ${value} from ${isoString}[u-ca-${this.id}]` +\n              ' (probably due to https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n          );\n        }\n\n        // The ICU formats for the Hebrew calendar no longer support a numeric\n        // month format. So we'll rely on the derived class to interpret it.\n        // `monthExtra` is also used on the Chinese calendar to handle a suffix\n        // \"bis\" indicating a leap month.\n        if (matches[2]) result.monthExtra = matches[2];\n      }\n      if (type === 'day') result.day = +value;\n      if (this.hasEra && type === 'era' && value != null && value !== '') {\n        // The convention for Temporal era values is lowercase, so following\n        // that convention in this prototype. Punctuation is removed, accented\n        // letters are normalized, and spaces are replaced with dashes.\n        // E.g.: \"ERA0\" => \"era0\", \"Before R.O.C.\" => \"before-roc\", \"En’ō\" => \"eno\"\n        // The call to normalize() and the replacement regex deals with era\n        // names that contain non-ASCII characters like Japanese eras. Also\n        // ignore extra content in parentheses like JPN era date ranges.\n        value = value.split(' (')[0];\n        result.era = value\n          .normalize('NFD')\n          .replace(/[^-0-9 \\p{L}]/gu, '')\n          .replace(' ', '-')\n          .toLowerCase();\n      }\n    }\n    if (result.eraYear === undefined) {\n      // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n      // output of Intl.DateTimeFormat.formatToParts.\n      throw new RangeError(\n        `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n      );\n    }\n    // Translate eras that may be handled differently by Temporal vs. by Intl\n    // (e.g. Japanese pre-Meiji eras). See https://github.com/tc39/proposal-temporal/issues/526.\n    if (this.reviseIntlEra) {\n      const { era, eraYear } = this.reviseIntlEra(result, isoDate);\n      result.era = era;\n      result.eraYear = eraYear;\n    }\n    if (this.checkIcuBugs) this.checkIcuBugs(isoDate);\n\n    const calendarDate = this.adjustCalendarDate(result, cache, 'constrain', true);\n    if (calendarDate.year === undefined) throw new RangeError(`Missing year converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.month === undefined) throw new RangeError(`Missing month converting ${JSON.stringify(isoDate)}`);\n    if (calendarDate.day === undefined) throw new RangeError(`Missing day converting ${JSON.stringify(isoDate)}`);\n    cache.set(key, calendarDate);\n    // Also cache the reverse mapping\n    ['constrain', 'reject'].forEach((overflow) => {\n      const keyReverse = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: calendarDate.year,\n        month: calendarDate.month,\n        day: calendarDate.day,\n        overflow,\n        id: this.id\n      });\n      cache.set(keyReverse, isoDate);\n    });\n    return calendarDate;\n  }\n  validateCalendarDate(calendarDate: Partial<FullCalendarDate>): asserts calendarDate is FullCalendarDate {\n    const { era, month, year, day, eraYear, monthCode, monthExtra } = calendarDate;\n    // When there's a suffix (e.g. \"5bis\" for a leap month in Chinese calendar)\n    // the derived class must deal with it.\n    if (monthExtra !== undefined) throw new RangeError('Unexpected `monthExtra` value');\n    if (year === undefined && eraYear === undefined) throw new TypeError('year or eraYear is required');\n    if (month === undefined && monthCode === undefined) throw new TypeError('month or monthCode is required');\n    if (day === undefined) throw new RangeError('Missing day');\n    if (monthCode !== undefined) {\n      if (typeof monthCode !== 'string') {\n        throw new RangeError(`monthCode must be a string, not ${typeof monthCode}`);\n      }\n      if (!/^M([01]?\\d)(L?)$/.test(monthCode)) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n    }\n    if (this.constantEra) {\n      if (era !== undefined && era !== this.constantEra) {\n        throw new RangeError(`era must be ${this.constantEra}, not ${era}`);\n      }\n      if (eraYear !== undefined && year !== undefined && eraYear !== year) {\n        throw new RangeError(`eraYear ${eraYear} does not match year ${year}`);\n      }\n    }\n    if (this.hasEra) {\n      if ((calendarDate['era'] === undefined) !== (calendarDate['eraYear'] === undefined)) {\n        throw new RangeError(\"properties 'era' and 'eraYear' must be provided together\");\n      }\n    }\n  }\n  /**\n   * Allows derived calendars to add additional fields and/or to make\n   * adjustments e.g. to set the era based on the date or to revise the month\n   * number in lunisolar calendars per\n   * https://github.com/tc39/proposal-temporal/issues/1203.\n   *\n   * The base implementation fills in missing values by assuming the simplest\n   * possible calendar:\n   * - no eras or a constant era defined in `.constantEra`\n   * - non-lunisolar calendar (no leap months)\n   * */\n  adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache: OneObjectCache | undefined = undefined,\n    overflow: Overflow = 'constrain',\n    // This param is only used by derived classes\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    if (this.calendarType === 'lunisolar') throw new RangeError('Override required for lunisolar calendars');\n    let calendarDate = calendarDateParam;\n    this.validateCalendarDate(calendarDate);\n    // For calendars that always use the same era, set it here so that derived\n    // calendars won't need to implement this method simply to set the era.\n    if (this.constantEra) {\n      // year and eraYear always match when there's only one possible era\n      const { year, eraYear } = calendarDate;\n      calendarDate = {\n        ...calendarDate,\n        era: this.constantEra,\n        year: year !== undefined ? year : eraYear,\n        eraYear: eraYear !== undefined ? eraYear : year\n      };\n    }\n\n    const largestMonth = this.monthsInYear(calendarDate as CalendarYearOnly, cache);\n    let { month, monthCode } = calendarDate;\n\n    ({ month, monthCode } = resolveNonLunisolarMonth(calendarDate, overflow, largestMonth));\n    return { ...(calendarDate as typeof calendarDate & CalendarYMD), month, monthCode };\n  }\n  regulateMonthDayNaive(calendarDate: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): FullCalendarDate {\n    const largestMonth = this.monthsInYear(calendarDate, cache);\n    let { month, day } = calendarDate;\n    if (overflow === 'reject') {\n      ES.RejectToRange(month, 1, largestMonth);\n      ES.RejectToRange(day, 1, this.maximumMonthLength(calendarDate));\n    } else {\n      month = ES.ConstrainToRange(month, 1, largestMonth);\n      day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ ...calendarDate, month }));\n    }\n    return { ...calendarDate, month, day };\n  }\n  calendarToIsoDate(dateParam: CalendarDateFields, overflow: Overflow = 'constrain', cache: OneObjectCache): IsoYMD {\n    const originalDate = dateParam as Partial<FullCalendarDate>;\n    // First, normalize the calendar date to ensure that (year, month, day)\n    // are all present, converting monthCode and eraYear if needed.\n    let date = this.adjustCalendarDate(dateParam, cache, overflow, false);\n\n    // Fix obviously out-of-bounds values. Values that are valid generally, but\n    // not in this particular year, may not be caught here for some calendars.\n    // If so, these will be handled lower below.\n    date = this.regulateMonthDayNaive(date, overflow, cache);\n\n    const { year, month, day } = date;\n    const key = JSON.stringify({ func: 'calendarToIsoDate', year, month, day, overflow, id: this.id });\n    let cached = cache.get(key);\n    if (cached) return cached;\n    // If YMD are present in the input but the input has been constrained\n    // already, then cache both the original value and the constrained value.\n    let keyOriginal;\n    if (\n      originalDate.year !== undefined &&\n      originalDate.month !== undefined &&\n      originalDate.day !== undefined &&\n      (originalDate.year !== date.year || originalDate.month !== date.month || originalDate.day !== date.day)\n    ) {\n      keyOriginal = JSON.stringify({\n        func: 'calendarToIsoDate',\n        year: originalDate.year,\n        month: originalDate.month,\n        day: originalDate.day,\n        overflow,\n        id: this.id\n      });\n      cached = cache.get(keyOriginal);\n      if (cached) return cached;\n    }\n\n    // First, try to roughly guess the result\n    let isoEstimate = this.estimateIsoDate({ year, month, day });\n    const calculateSameMonthResult = (diffDays: number) => {\n      // If the estimate is in the same year & month as the target, then we can\n      // calculate the result exactly and short-circuit any additional logic.\n      // This optimization assumes that months are continuous. It would break if\n      // a calendar skipped days, like the Julian->Gregorian switchover. But the\n      // only ICU calendars that currently skip days (japanese/roc/buddhist) is\n      // a bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n      // that's currently detected by `checkIcuBugs()` which will throw. So\n      // this optimization should be safe for all ICU calendars.\n      let testIsoEstimate = this.addDaysIso(isoEstimate, diffDays);\n      if (date.day > this.minimumMonthLength(date)) {\n        // There's a chance that the calendar date is out of range. Throw or\n        // constrain if so.\n        let testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        while (testCalendarDate.month !== month || testCalendarDate.year !== year) {\n          if (overflow === 'reject') {\n            throw new RangeError(`day ${day} does not exist in month ${month} of year ${year}`);\n          }\n          // Back up a day at a time until we're not hanging over the month end\n          testIsoEstimate = this.addDaysIso(testIsoEstimate, -1);\n          testCalendarDate = this.isoToCalendarDate(testIsoEstimate, cache);\n        }\n      }\n      return testIsoEstimate;\n    };\n    let sign = 0;\n    let roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n    let diff = simpleDateDiff(date, roundtripEstimate);\n    if (diff.years !== 0 || diff.months !== 0 || diff.days !== 0) {\n      const diffTotalDaysEstimate = diff.years * 365 + diff.months * 30 + diff.days;\n      isoEstimate = this.addDaysIso(isoEstimate, diffTotalDaysEstimate);\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      diff = simpleDateDiff(date, roundtripEstimate);\n      if (diff.years === 0 && diff.months === 0) {\n        isoEstimate = calculateSameMonthResult(diff.days);\n      } else {\n        sign = this.compareCalendarDates(date, roundtripEstimate);\n      }\n    }\n    // If the initial guess is not in the same month, then then bisect the\n    // distance to the target, starting with 8 days per step.\n    let increment = 8;\n    while (sign) {\n      isoEstimate = this.addDaysIso(isoEstimate, sign * increment);\n      const oldRoundtripEstimate = roundtripEstimate;\n      roundtripEstimate = this.isoToCalendarDate(isoEstimate, cache);\n      const oldSign = sign;\n      sign = this.compareCalendarDates(date, roundtripEstimate);\n      if (sign) {\n        diff = simpleDateDiff(date, roundtripEstimate);\n        if (diff.years === 0 && diff.months === 0) {\n          isoEstimate = calculateSameMonthResult(diff.days);\n          // Signal the loop condition that there's a match.\n          sign = 0;\n        } else if (oldSign && sign !== oldSign) {\n          if (increment > 1) {\n            // If the estimate overshot the target, try again with a smaller increment\n            // in the reverse direction.\n            increment /= 2;\n          } else {\n            // Increment is 1, and neither the previous estimate nor the new\n            // estimate is correct. The only way that can happen is if the\n            // original date was an invalid value that will be constrained or\n            // rejected here.\n            if (overflow === 'reject') {\n              throw new RangeError(`Can't find ISO date from calendar date: ${JSON.stringify({ ...originalDate })}`);\n            } else {\n              // To constrain, pick the earliest value\n              const order = this.compareCalendarDates(roundtripEstimate, oldRoundtripEstimate);\n              // If current value is larger, then back up to the previous value.\n              if (order > 0) isoEstimate = this.addDaysIso(isoEstimate, -1);\n              sign = 0;\n            }\n          }\n        }\n      }\n    }\n    cache.set(key, isoEstimate);\n    if (keyOriginal) cache.set(keyOriginal, isoEstimate);\n    if (\n      date.year === undefined ||\n      date.month === undefined ||\n      date.day === undefined ||\n      date.monthCode === undefined ||\n      (this.hasEra && (date.era === undefined || date.eraYear === undefined))\n    ) {\n      throw new RangeError('Unexpected missing property');\n    }\n    return isoEstimate;\n  }\n  temporalToCalendarDate(\n    date: Temporal.PlainDate | Temporal.PlainMonthDay | Temporal.PlainYearMonth,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const isoDate = { year: GetSlot(date, ISO_YEAR), month: GetSlot(date, ISO_MONTH), day: GetSlot(date, ISO_DAY) };\n    const result = this.isoToCalendarDate(isoDate, cache);\n    return result;\n  }\n  compareCalendarDates(date1Param: Partial<CalendarYMD>, date2Param: Partial<CalendarYMD>): 0 | 1 | -1 {\n    // `date1` and `date2` are already records. The calls below simply validate\n    // that all three required fields are present.\n    const date1 = ES.PrepareTemporalFields(date1Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    const date2 = ES.PrepareTemporalFields(date2Param, ['day', 'month', 'year'], ['day', 'month', 'year']);\n    if (date1.year !== date2.year) return ES.ComparisonResult(date1.year - date2.year);\n    if (date1.month !== date2.month) return ES.ComparisonResult(date1.month - date2.month);\n    if (date1.day !== date2.day) return ES.ComparisonResult(date1.day - date2.day);\n    return 0;\n  }\n  /** Ensure that a calendar date actually exists. If not, return the closest earlier date. */\n  regulateDate(calendarDate: CalendarYMD, overflow: Overflow = 'constrain', cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, overflow, cache);\n    return this.isoToCalendarDate(isoDate, cache);\n  }\n  addDaysIso(isoDate: IsoYMD, days: number): IsoYMD {\n    const added = ES.AddISODate(isoDate.year, isoDate.month, isoDate.day, 0, 0, 0, days, 'constrain');\n    return added;\n  }\n  addDaysCalendar(calendarDate: CalendarYMD, days: number, cache: OneObjectCache): FullCalendarDate {\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIso = this.addDaysIso(isoDate, days);\n    const addedCalendar = this.isoToCalendarDate(addedIso, cache);\n    return addedCalendar;\n  }\n  addMonthsCalendar(\n    calendarDateParam: CalendarYMD,\n    months: number,\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): CalendarYMD {\n    let calendarDate = calendarDateParam;\n    const { day } = calendarDate;\n    for (let i = 0, absMonths = MathAbs(months); i < absMonths; i++) {\n      const { month } = calendarDate;\n      const oldCalendarDate = calendarDate;\n      const days =\n        months < 0\n          ? -Math.max(day, this.daysInPreviousMonth(calendarDate, cache))\n          : this.daysInMonth(calendarDate, cache);\n      const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n      let addedIso = this.addDaysIso(isoDate, days);\n      calendarDate = this.isoToCalendarDate(addedIso, cache);\n\n      // Normally, we can advance one month by adding the number of days in the\n      // current month. However, if we're at the end of the current month and\n      // the next month has fewer days, then we rolled over to the after-next\n      // month. Below we detect this condition and back up until we're back in\n      // the desired month.\n      if (months > 0) {\n        const monthsInOldYear = this.monthsInYear(oldCalendarDate, cache);\n        while (calendarDate.month - 1 !== month % monthsInOldYear) {\n          addedIso = this.addDaysIso(addedIso, -1);\n          calendarDate = this.isoToCalendarDate(addedIso, cache);\n        }\n      }\n\n      if (calendarDate.day !== day) {\n        // try to retain the original day-of-month, if possible\n        calendarDate = this.regulateDate({ ...calendarDate, day }, 'constrain', cache);\n      }\n    }\n    if (overflow === 'reject' && calendarDate.day !== day) {\n      throw new RangeError(`Day ${day} does not exist in resulting calendar month`);\n    }\n    return calendarDate;\n  }\n  addCalendar(\n    calendarDate: CalendarYMD & { monthCode: string },\n    { years = 0, months = 0, weeks = 0, days = 0 },\n    overflow: Overflow,\n    cache: OneObjectCache\n  ): FullCalendarDate {\n    const { year, day, monthCode } = calendarDate;\n    const addedYears = this.adjustCalendarDate({ year: year + years, monthCode, day }, cache);\n    const addedMonths = this.addMonthsCalendar(addedYears, months, overflow, cache);\n    const initialDays = days + weeks * 7;\n    const addedDays = this.addDaysCalendar(addedMonths, initialDays, cache);\n    return addedDays;\n  }\n  untilCalendar(\n    calendarOne: FullCalendarDate,\n    calendarTwo: FullCalendarDate,\n    largestUnit: Temporal.DateUnit,\n    cache: OneObjectCache\n  ): { years: number; months: number; weeks: number; days: number } {\n    let days = 0;\n    let weeks = 0;\n    let months = 0;\n    let years = 0;\n    switch (largestUnit) {\n      case 'day':\n        days = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        break;\n      case 'week': {\n        const totalDays = this.calendarDaysUntil(calendarOne, calendarTwo, cache);\n        days = totalDays % 7;\n        weeks = (totalDays - days) / 7;\n        break;\n      }\n      case 'month':\n      case 'year': {\n        const sign = this.compareCalendarDates(calendarTwo, calendarOne);\n        if (!sign) {\n          return { years: 0, months: 0, weeks: 0, days: 0 };\n        }\n        const diffYears = calendarTwo.year - calendarOne.year;\n        const diffDays = calendarTwo.day - calendarOne.day;\n        if (largestUnit === 'year' && diffYears) {\n          let diffInYearSign = 0;\n          if (calendarTwo.monthCode > calendarOne.monthCode) diffInYearSign = 1;\n          if (calendarTwo.monthCode < calendarOne.monthCode) diffInYearSign = -1;\n          if (!diffInYearSign) diffInYearSign = Math.sign(diffDays);\n          const isOneFurtherInYear = diffInYearSign * sign < 0;\n          years = isOneFurtherInYear ? diffYears - sign : diffYears;\n        }\n        const yearsAdded = years ? this.addCalendar(calendarOne, { years }, 'constrain', cache) : calendarOne;\n        // Now we have less than one year remaining. Add one month at a time\n        // until we go over the target, then back up one month and calculate\n        // remaining days and weeks.\n        let current;\n        let next: CalendarYMD = yearsAdded;\n        do {\n          months += sign;\n          current = next;\n          next = this.addMonthsCalendar(current, sign, 'constrain', cache);\n          if (next.day !== calendarOne.day) {\n            // In case the day was constrained down, try to un-constrain it\n            next = this.regulateDate({ ...next, day: calendarOne.day }, 'constrain', cache);\n          }\n        } while (this.compareCalendarDates(calendarTwo, next) * sign >= 0);\n        months -= sign; // correct for loop above which overshoots by 1\n        const remainingDays = this.calendarDaysUntil(current, calendarTwo, cache);\n        days = remainingDays;\n        break;\n      }\n    }\n    return { years, months, weeks, days };\n  }\n  daysInMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    // Add enough days to roll over to the next month. One we're in the next\n    // month, we can calculate the length of the current month. NOTE: This\n    // algorithm assumes that months are continuous. It would break if a\n    // calendar skipped days, like the Julian->Gregorian switchover. But the\n    // only ICU calendars that currently skip days (japanese/roc/buddhist) is a\n    // bug (https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)\n    // that's currently detected by `checkIcuBugs()` which will throw. So this\n    // code should be safe for all ICU calendars.\n    const { day } = calendarDate;\n    const max = this.maximumMonthLength(calendarDate);\n    const min = this.minimumMonthLength(calendarDate);\n    // easiest case: we already know the month length if min and max are the same.\n    if (min === max) return min;\n\n    // Add enough days to get into the next month, without skipping it\n    const increment = day <= max - min ? max : min;\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const addedIsoDate = this.addDaysIso(isoDate, increment);\n    const addedCalendarDate = this.isoToCalendarDate(addedIsoDate, cache);\n\n    // Now back up to the last day of the original month\n    const endOfMonthIso = this.addDaysIso(addedIsoDate, -addedCalendarDate.day);\n    const endOfMonthCalendar = this.isoToCalendarDate(endOfMonthIso, cache);\n    return endOfMonthCalendar.day;\n  }\n  daysInPreviousMonth(calendarDate: CalendarYMD, cache: OneObjectCache): number {\n    const { day, month, year } = calendarDate;\n\n    // Check to see if we already know the month length, and return it if so\n    const previousMonthYear = month > 1 ? year : year - 1;\n    let previousMonthDate = { year: previousMonthYear, month, day: 1 };\n    const previousMonth = month > 1 ? month - 1 : this.monthsInYear(previousMonthDate, cache);\n    previousMonthDate = { ...previousMonthDate, month: previousMonth };\n    const min = this.minimumMonthLength(previousMonthDate);\n    const max = this.maximumMonthLength(previousMonthDate);\n    if (min === max) return max;\n\n    const isoDate = this.calendarToIsoDate(calendarDate, 'constrain', cache);\n    const lastDayOfPreviousMonthIso = this.addDaysIso(isoDate, -day);\n    const lastDayOfPreviousMonthCalendar = this.isoToCalendarDate(lastDayOfPreviousMonthIso, cache);\n    return lastDayOfPreviousMonthCalendar.day;\n  }\n  startOfCalendarYear(calendarDate: CalendarYearOnly): CalendarYMD & { monthCode: string } {\n    return { year: calendarDate.year, month: 1, monthCode: 'M01', day: 1 };\n  }\n  startOfCalendarMonth(calendarDate: CalendarYM): CalendarYMD {\n    return { year: calendarDate.year, month: calendarDate.month, day: 1 };\n  }\n  calendarDaysUntil(calendarOne: CalendarYMD, calendarTwo: CalendarYMD, cache: OneObjectCache): number {\n    const oneIso = this.calendarToIsoDate(calendarOne, 'constrain', cache);\n    const twoIso = this.calendarToIsoDate(calendarTwo, 'constrain', cache);\n    return this.isoDaysUntil(oneIso, twoIso);\n  }\n  isoDaysUntil(oneIso: IsoYMD, twoIso: IsoYMD): number {\n    const duration = ES.DifferenceISODate(\n      oneIso.year,\n      oneIso.month,\n      oneIso.day,\n      twoIso.year,\n      twoIso.month,\n      twoIso.day,\n      'day'\n    );\n    return duration.days;\n  }\n  // The short era format works for all calendars except Japanese, which will\n  // override.\n  eraLength: Intl.DateTimeFormatOptions['era'] = 'short';\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  hasEra = true;\n  // See https://github.com/tc39/proposal-temporal/issues/1784\n  erasBeginMidYear = false;\n  monthDayFromFields(fields: FullCalendarDate, overflow: Overflow, cache: OneObjectCache): IsoYMD {\n    let { monthCode, day } = fields;\n    if (monthCode === undefined) {\n      let { year, era, eraYear } = fields;\n      if (year === undefined && (era === undefined || eraYear === undefined)) {\n        throw new TypeError('when `monthCode` is omitted, `year` (or `era` and `eraYear`) and `month` are required');\n      }\n      // Apply overflow behaviour to year/month/day, to get correct monthCode/day\n      ({ monthCode, day } = this.isoToCalendarDate(this.calendarToIsoDate(fields, overflow, cache), cache));\n    }\n\n    let isoYear, isoMonth, isoDay;\n    let closestCalendar, closestIso;\n    // Look backwards starting from one of the calendar years spanning ISO year\n    // 1972, up to 100 calendar years prior, to find a year that has this month\n    // and day. Normal months and days will match immediately, but for leap days\n    // and leap months we may have to look for a while.\n    const startDateIso = { year: 1972, month: 12, day: 31 };\n    const calendarOfStartDateIso = this.isoToCalendarDate(startDateIso, cache);\n    // Note: relies on lexicographical ordering of monthCodes\n    const calendarYear =\n      calendarOfStartDateIso.monthCode > monthCode ||\n      (calendarOfStartDateIso.monthCode === monthCode && calendarOfStartDateIso.day >= day)\n        ? calendarOfStartDateIso.year\n        : calendarOfStartDateIso.year - 1;\n    for (let i = 0; i < 100; i++) {\n      const testCalendarDate: FullCalendarDate = this.adjustCalendarDate(\n        { day, monthCode, year: calendarYear - i },\n        cache\n      );\n      const isoDate = this.calendarToIsoDate(testCalendarDate, 'constrain', cache);\n      const roundTripCalendarDate = this.isoToCalendarDate(isoDate, cache);\n      ({ year: isoYear, month: isoMonth, day: isoDay } = isoDate);\n      if (roundTripCalendarDate.monthCode === monthCode && roundTripCalendarDate.day === day) {\n        return { month: isoMonth, day: isoDay, year: isoYear };\n      } else if (overflow === 'constrain') {\n        // non-ISO constrain algorithm tries to find the closest date in a matching month\n        if (\n          closestCalendar === undefined ||\n          (roundTripCalendarDate.monthCode === closestCalendar.monthCode &&\n            roundTripCalendarDate.day > closestCalendar.day)\n        ) {\n          closestCalendar = roundTripCalendarDate;\n          closestIso = isoDate;\n        }\n      }\n    }\n    if (overflow === 'constrain' && closestIso !== undefined) return closestIso;\n    throw new RangeError(`No recent ${this.id} year with monthCode ${monthCode} and day ${day}`);\n  }\n}\n\ninterface HebrewMonthInfo {\n  [m: string]: (\n    | {\n        leap: undefined;\n        regular: number;\n      }\n    | {\n        leap: number;\n        regular: undefined;\n      }\n    | {\n        leap: number;\n        regular: number;\n      }\n  ) & {\n    monthCode: string;\n    days:\n      | number\n      | {\n          min: number;\n          max: number;\n        };\n  };\n}\n\nclass HebrewHelper extends HelperBase {\n  id = 'hebrew' as const;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    const { year } = calendarDate;\n    // FYI: In addition to adding a month in leap years, the Hebrew calendar\n    // also has per-year changes to the number of days of Heshvan and Kislev.\n    // Given that these can be calculated by counting the number of days in\n    // those months, I assume that these DO NOT need to be exposed as\n    // Hebrew-only prototype fields or methods.\n    return (7 * year + 1) % 19 < 7;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly) {\n    return this.inLeapYear(calendarDate) ? 13 : 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'min');\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minMaxMonthLength(calendarDate, 'max');\n  }\n  minMaxMonthLength(calendarDate: CalendarYM, minOrMax: 'min' | 'max') {\n    const { month, year } = calendarDate;\n    const monthCode = this.getMonthCode(year, month);\n    const monthInfo = ObjectEntries(this.months).find((m) => m[1].monthCode === monthCode);\n    if (monthInfo === undefined) throw new RangeError(`unmatched Hebrew month: ${month}`);\n    const daysInMonth = monthInfo[1].days;\n    return typeof daysInMonth === 'number' ? daysInMonth : daysInMonth[minOrMax];\n  }\n  /** Take a guess at what ISO date a particular calendar date corresponds to */\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = calendarDate;\n    return { year: year - 3760, month: 1, day: 1 };\n  }\n  months: HebrewMonthInfo = {\n    Tishri: { leap: 1, regular: 1, monthCode: 'M01', days: 30 },\n    Heshvan: { leap: 2, regular: 2, monthCode: 'M02', days: { min: 29, max: 30 } },\n    Kislev: { leap: 3, regular: 3, monthCode: 'M03', days: { min: 29, max: 30 } },\n    Tevet: { leap: 4, regular: 4, monthCode: 'M04', days: 29 },\n    Shevat: { leap: 5, regular: 5, monthCode: 'M05', days: 30 },\n    Adar: { leap: undefined, regular: 6, monthCode: 'M06', days: 29 },\n    'Adar I': { leap: 6, regular: undefined, monthCode: 'M05L', days: 30 },\n    'Adar II': { leap: 7, regular: undefined, monthCode: 'M06', days: 29 },\n    Nisan: { leap: 8, regular: 7, monthCode: 'M07', days: 30 },\n    Iyar: { leap: 9, regular: 8, monthCode: 'M08', days: 29 },\n    Sivan: { leap: 10, regular: 9, monthCode: 'M09', days: 30 },\n    Tamuz: { leap: 11, regular: 10, monthCode: 'M10', days: 29 },\n    Av: { leap: 12, regular: 11, monthCode: 'M11', days: 30 },\n    Elul: { leap: 13, regular: 12, monthCode: 'M12', days: 29 }\n  };\n  getMonthCode(year: number, month: number) {\n    if (this.inLeapYear({ year })) {\n      return month === 6 ? buildMonthCode(5, true) : buildMonthCode(month < 6 ? month : month - 1);\n    } else {\n      return buildMonthCode(month);\n    }\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    // The incoming type is actually CalendarDate (same as args to\n    // Calendar.dateFromParams) but TS isn't smart enough to follow all the\n    // reassignments below, so as an alternative to 10+ type casts, we'll lie\n    // here and claim that the type has `day` and `year` filled in already.\n    let { year, eraYear, month, monthCode, day, monthExtra } = calendarDate as Omit<\n      typeof calendarDate,\n      'year' | 'day'\n    > & { year: number; day: number };\n    if (year === undefined && eraYear !== undefined) year = eraYear;\n    if (eraYear === undefined && year !== undefined) eraYear = year;\n    if (fromLegacyDate) {\n      // In Pre Node-14 V8, DateTimeFormat.formatToParts `month: 'numeric'`\n      // output returns the numeric equivalent of `month` as a string, meaning\n      // that `'6'` in a leap year is Adar I, while `'6'` in a non-leap year\n      // means Adar. In this case, `month` will already be correct and no action\n      // is needed. However, in Node 14 and later formatToParts returns the name\n      // of the Hebrew month (e.g. \"Tevet\"), so we'll need to look up the\n      // correct `month` using the string name as a key.\n      if (monthExtra) {\n        const monthInfo = this.months[monthExtra];\n        if (!monthInfo) throw new RangeError(`Unrecognized month from formatToParts: ${monthExtra}`);\n        month = this.inLeapYear({ year }) ? monthInfo.leap : monthInfo.regular;\n      }\n      // Because we're getting data from legacy Date, then `month` will always be present\n      monthCode = this.getMonthCode(year, month as number);\n      const result = { year, month: month as number, day, era: undefined as string | undefined, eraYear, monthCode };\n      return result;\n    } else {\n      // When called without input coming from legacy Date output, simply ensure\n      // that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (month === undefined) {\n        if ((monthCode as string).endsWith('L')) {\n          if (monthCode !== 'M05L') {\n            throw new RangeError(`Hebrew leap month must have monthCode M05L, not ${monthCode}`);\n          }\n          month = 6;\n          if (!this.inLeapYear({ year })) {\n            if (overflow === 'reject') {\n              throw new RangeError(`Hebrew monthCode M05L is invalid in year ${year} which is not a leap year`);\n            } else {\n              // constrain to same day of next month (Adar)\n              month = 6;\n              monthCode = 'M06';\n            }\n          }\n        } else {\n          month = monthCodeNumberPart(monthCode as string);\n          // if leap month is before this one, the month index is one more than the month code\n          if (this.inLeapYear({ year }) && month >= 6) month++;\n          const largestMonth = this.monthsInYear({ year });\n          if (month < 1 || month > largestMonth) throw new RangeError(`Invalid monthCode: ${monthCode}`);\n        }\n      } else {\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, this.monthsInYear({ year }));\n          ES.RejectToRange(day, 1, this.maximumMonthLength({ year, month }));\n        } else {\n          month = ES.ConstrainToRange(month, 1, this.monthsInYear({ year }));\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength({ year, month }));\n        }\n        if (monthCode === undefined) {\n          monthCode = this.getMonthCode(year, month);\n        } else {\n          const calculatedMonthCode = this.getMonthCode(year, month);\n          if (calculatedMonthCode !== monthCode) {\n            throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Hebrew year ${year}`);\n          }\n        }\n      }\n      return { ...calendarDate, day, month, monthCode: monthCode as string, year, eraYear };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\n/**\n * For Temporal purposes, the Islamic calendar is simple because it's always the\n * same 12 months in the same order.\n */\nabstract class IslamicBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // In leap years, the 12th month has 30 days. In non-leap years: 29.\n    const days = this.daysInMonth({ year: calendarDate.year, month: 12, day: 1 }, cache);\n    return days === 30;\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  DAYS_PER_ISLAMIC_YEAR = 354 + 11 / 30;\n  DAYS_PER_ISO_YEAR = 365.2425;\n  override constantEra = 'ah';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: MathFloor((year * this.DAYS_PER_ISLAMIC_YEAR) / this.DAYS_PER_ISO_YEAR) + 622, month: 1, day: 1 };\n  }\n}\n\n// There are 6 Islamic calendars with the same implementation in this polyfill.\n// They vary only in their ID. They do emit different output from the underlying\n// Intl implementation, but our code for each of them is identical.\nclass IslamicHelper extends IslamicBaseHelper {\n  id = 'islamic' as const;\n}\nclass IslamicUmalquraHelper extends IslamicBaseHelper {\n  id = 'islamic-umalqura' as const;\n}\nclass IslamicTblaHelper extends IslamicBaseHelper {\n  id = 'islamic-tbla' as const;\n}\nclass IslamicCivilHelper extends IslamicBaseHelper {\n  id = 'islamic-civil' as const;\n}\nclass IslamicRgsaHelper extends IslamicBaseHelper {\n  id = 'islamic-rgsa' as const;\n}\nclass IslamicCcHelper extends IslamicBaseHelper {\n  id = 'islamicc' as const;\n}\n\nclass PersianHelper extends HelperBase {\n  id = 'persian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    // Same logic (count days in the last month) for Persian as for Islamic,\n    // even though Persian is solar and Islamic is lunar.\n    return IslamicHelper.prototype.inLeapYear.call(this, calendarDate, cache);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 29;\n    return month <= 6 ? 31 : 30;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    if (month === 12) return 30;\n    return month <= 6 ? 31 : 30;\n  }\n  override constantEra = 'ap';\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year } = this.adjustCalendarDate(calendarDate);\n    return { year: year + 621, month: 1, day: 1 };\n  }\n}\n\ninterface IndianMonthInfo {\n  [month: number]: {\n    length: number;\n    month: number;\n    day: number;\n    leap?: {\n      length: number;\n      month: number;\n      day: number;\n    };\n    nextYear?: true | undefined;\n  };\n}\n\nclass IndianHelper extends HelperBase {\n  id = 'indian' as const;\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // From https://en.wikipedia.org/wiki/Indian_national_calendar:\n    // Years are counted in the Saka era, which starts its year 0 in the year 78\n    // of the Common Era. To determine leap years, add 78 to the Saka year – if\n    // the result is a leap year in the Gregorian calendar, then the Saka year\n    // is a leap year as well.\n    return isGregorianLeapYear(calendarDate.year + 78);\n  }\n  monthsInYear(/* calendarYear, cache */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  maximumMonthLength(calendarDate: CalendarYM) {\n    return this.getMonthInfo(calendarDate).length;\n  }\n  override constantEra = 'saka';\n  // Indian months always start at the same well-known Gregorian month and\n  // day. So this conversion is easy and fast. See\n  // https://en.wikipedia.org/wiki/Indian_national_calendar\n  months: IndianMonthInfo = {\n    1: { length: 30, month: 3, day: 22, leap: { length: 31, month: 3, day: 21 } },\n    2: { length: 31, month: 4, day: 21 },\n    3: { length: 31, month: 5, day: 22 },\n    4: { length: 31, month: 6, day: 22 },\n    5: { length: 31, month: 7, day: 23 },\n    6: { length: 31, month: 8, day: 23 },\n    7: { length: 30, month: 9, day: 23 },\n    8: { length: 30, month: 10, day: 23 },\n    9: { length: 30, month: 11, day: 22 },\n    10: { length: 30, month: 12, day: 22 },\n    11: { length: 30, month: 1, nextYear: true, day: 21 },\n    12: { length: 30, month: 2, nextYear: true, day: 20 }\n  };\n  getMonthInfo(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    let monthInfo = this.months[month];\n    if (monthInfo === undefined) throw new RangeError(`Invalid month: ${month}`);\n    if (this.inLeapYear(calendarDate) && monthInfo.leap) monthInfo = monthInfo.leap;\n    return monthInfo;\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    // FYI, this \"estimate\" is always the exact ISO date, which makes the Indian\n    // calendar fast!\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const monthInfo = this.getMonthInfo(calendarDate);\n    const isoYear = calendarDate.year + 78 + (monthInfo.nextYear ? 1 : 0);\n    const isoMonth = monthInfo.month;\n    const isoDay = monthInfo.day;\n    const isoDate = ES.AddISODate(isoYear, isoMonth, isoDay, 0, 0, 0, calendarDate.day - 1, 'constrain');\n    return isoDate;\n  }\n  // https://bugs.chromium.org/p/v8/issues/detail?id=10529 causes Intl's Indian\n  // calendar output to fail for all dates before 0001-01-01 ISO.  For example,\n  // in Node 12 0000-01-01 is calculated as 6146/12/-583 instead of 10/11/-79 as\n  // expected.\n  vulnerableToBceBug =\n    new Date('0000-01-01T00:00Z').toLocaleDateString('en-US-u-ca-indian', { timeZone: 'UTC' }) !== '10/11/-79 Saka';\n  override checkIcuBugs(isoDate: IsoYMD) {\n    if (this.vulnerableToBceBug && isoDate.year < 1) {\n      throw new RangeError(\n        `calendar '${this.id}' is broken for ISO dates before 0001-01-01` +\n          ' (see https://bugs.chromium.org/p/v8/issues/detail?id=10529)'\n      );\n    }\n  }\n}\n\n/**\n * Era metadata defined for each calendar.\n * TODO: instead of optional properties, this should really have rules\n * encoded in the type, e.g. isoEpoch is required unless reverseOf is present.\n *  */\ninterface InputEra {\n  /** name of the era */\n  name: string;\n\n  /**\n   * Signed calendar year where this era begins.Will be\n   * 1 (or 0 for zero-based eras) for the anchor era assuming that `year`\n   * numbering starts at the beginning of the anchor era, which is true\n   * for all ICU calendars except Japanese. If an era starts mid-year\n   * then a calendar month and day are included. Otherwise\n   * `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch?: CalendarYearOnly | CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch?: { year: number; month: number; day: number };\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: string;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n/**\n * Transformation of the `InputEra` type with all fields filled in by\n * `adjustEras()`\n * */\ninterface Era {\n  /** name of the era */\n  name: string;\n\n  /**\n   * alternate name of the era used in old versions of ICU data\n   * format is `era{n}` where n is the zero-based index of the era\n   * with the oldest era being 0.\n   * */\n  genericName: string;\n\n  /**\n   * Signed calendar year where this era begins. Will be 1 (or 0 for zero-based\n   * eras) for the anchor era assuming that `year` numbering starts at the\n   * beginning of the anchor era, which is true for all ICU calendars except\n   * Japanese. For input, the month and day are optional. If an era starts\n   * mid-year then a calendar month and day are included.\n   * Otherwise `{ month: 1, day: 1 }` is assumed.\n   */\n  anchorEpoch: CalendarYMD;\n\n  /** ISO date of the first day of this era */\n  isoEpoch: IsoYMD;\n\n  /**\n   * If present, then this era counts years backwards like BC\n   * and this property points to the forward era. This must be\n   * the last (oldest) era in the array.\n   * */\n  reverseOf?: Era;\n\n  /**\n   * If true, the era's years are 0-based. If omitted or false,\n   * then the era's years are 1-based.\n   * */\n  hasYearZero?: boolean;\n\n  /**\n   * Override if this era is the anchor. Not normally used because\n   * anchor eras are inferred.\n   * */\n  isAnchor?: boolean;\n}\n\n/**\n * This function adds additional metadata that makes it easier to work with\n * eras. Note that it mutates and normalizes the original era objects, which is\n * OK because this is non-observable, internal-only metadata.\n *\n * The result is an array of eras with the shape defined above.\n * */\nfunction adjustEras(erasParam: InputEra[]): { eras: Era[]; anchorEra: Era } {\n  let eras: (InputEra | Era)[] = erasParam;\n  if (eras.length === 0) {\n    throw new RangeError('Invalid era data: eras are required');\n  }\n  if (eras.length === 1 && eras[0].reverseOf) {\n    throw new RangeError('Invalid era data: anchor era cannot count years backwards');\n  }\n  if (eras.length === 1 && !eras[0].name) {\n    throw new RangeError('Invalid era data: at least one named era is required');\n  }\n  if (eras.filter((e) => e.reverseOf != null).length > 1) {\n    throw new RangeError('Invalid era data: only one era can count years backwards');\n  }\n\n  // Find the \"anchor era\" which is the era used for (era-less) `year`. Reversed\n  // eras can never be anchors. The era without an `anchorEpoch` property is the\n  // anchor.\n  let anchorEra: Era | InputEra | undefined;\n  eras.forEach((e) => {\n    if (e.isAnchor || (!e.anchorEpoch && !e.reverseOf)) {\n      if (anchorEra) throw new RangeError('Invalid era data: cannot have multiple anchor eras');\n      anchorEra = e;\n      e.anchorEpoch = { year: e.hasYearZero ? 0 : 1 };\n    } else if (!e.name) {\n      throw new RangeError('If era name is blank, it must be the anchor era');\n    }\n  });\n\n  // If the era name is undefined, then it's an anchor that doesn't interact\n  // with eras at all. For example, Japanese `year` is always the same as ISO\n  // `year`.  So this \"era\" is the anchor era but isn't used for era matching.\n  // Strip it from the list that's returned.\n  eras = eras.filter((e) => e.name);\n\n  eras.forEach((e) => {\n    // Some eras are mirror images of another era e.g. B.C. is the reverse of A.D.\n    // Replace the string-valued \"reverseOf\" property with the actual era object\n    // that's reversed.\n    const { reverseOf } = e;\n    if (reverseOf) {\n      const reversedEra = eras.find((era) => era.name === reverseOf);\n      if (reversedEra === undefined) throw new RangeError(`Invalid era data: unmatched reverseOf era: ${reverseOf}`);\n      e.reverseOf = reversedEra as Era;\n      e.anchorEpoch = reversedEra.anchorEpoch;\n      e.isoEpoch = reversedEra.isoEpoch;\n    }\n    type YMD = {\n      year: number;\n      month: number;\n      day: number;\n    };\n    if ((e.anchorEpoch as YMD).month === undefined) (e.anchorEpoch as YMD).month = 1;\n    if ((e.anchorEpoch as YMD).day === undefined) (e.anchorEpoch as YMD).day = 1;\n  });\n\n  // Ensure that the latest epoch is first in the array. This lets us try to\n  // match eras in index order, with the last era getting the remaining older\n  // years. Any reverse-signed era must be at the end.\n  ArraySort.call(eras, (e1, e2) => {\n    if (e1.reverseOf) return 1;\n    if (e2.reverseOf) return -1;\n    if (!e1.isoEpoch || !e2.isoEpoch) throw new RangeError('Invalid era data: missing ISO epoch');\n    return e2.isoEpoch.year - e1.isoEpoch.year;\n  });\n\n  // If there's a reversed era, then the one before it must be the era that's\n  // being reversed.\n  const lastEraReversed = eras[eras.length - 1].reverseOf;\n  if (lastEraReversed) {\n    if (lastEraReversed !== eras[eras.length - 2]) throw new RangeError('Invalid era data: invalid reverse-sign era');\n  }\n\n  // Finally, add a \"genericName\" property in the format \"era{n} where `n` is\n  // zero-based index, with the oldest era being zero. This format is used by\n  // older versions of ICU data.\n  eras.forEach((e, i) => {\n    (e as Era).genericName = `era${eras.length - 1 - i}`;\n  });\n\n  return { eras: eras as Era[], anchorEra: (anchorEra || eras[0]) as Era };\n}\n\nfunction isGregorianLeapYear(year: number) {\n  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\n/** Base for all Gregorian-like calendars. */\nabstract class GregorianBaseHelper extends HelperBase {\n  id: BuiltinCalendarId;\n  eras: Era[];\n  anchorEra: Era;\n\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super();\n    this.id = id;\n    const { eras, anchorEra } = adjustEras(originalEras);\n    this.anchorEra = anchorEra;\n    this.eras = eras;\n  }\n  calendarType = 'solar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly) {\n    // Calendars that don't override this method use the same months and leap\n    // years as Gregorian. Once we know the ISO year corresponding to the\n    // calendar year, we'll know if it's a leap year or not.\n    const { year } = this.estimateIsoDate({ month: 1, day: 1, year: calendarDate.year });\n    return isGregorianLeapYear(year);\n  }\n  monthsInYear(/* calendarDate */) {\n    return 12;\n  }\n  minimumMonthLength(calendarDate: CalendarYM): number {\n    const { month } = calendarDate;\n    if (month === 2) return this.inLeapYear(calendarDate) ? 29 : 28;\n    return [4, 6, 9, 11].indexOf(month) >= 0 ? 30 : 31;\n  }\n  maximumMonthLength(calendarDate: CalendarYM): number {\n    return this.minimumMonthLength(calendarDate);\n  }\n  /** Fill in missing parts of the (year, era, eraYear) tuple */\n  completeEraYear(calendarDate: Partial<FullCalendarDate>) {\n    const checkField = (name: keyof FullCalendarDate, value: string | number | undefined) => {\n      const currentValue = calendarDate[name];\n      if (currentValue != null && currentValue != value) {\n        throw new RangeError(`Input ${name} ${currentValue} doesn't match calculated value ${value}`);\n      }\n    };\n    const eraFromYear = (year: number) => {\n      let eraYear;\n      const adjustedCalendarDate = { ...calendarDate, year };\n      const matchingEra = this.eras.find((e, i) => {\n        if (i === this.eras.length - 1) {\n          if (e.reverseOf) {\n            // This is a reverse-sign era (like BCE) which must be the oldest\n            // era. Count years backwards.\n            if (year > 0) throw new RangeError(`Signed year ${year} is invalid for era ${e.name}`);\n            eraYear = e.anchorEpoch.year - year;\n            return true;\n          }\n          // last era always gets all \"leftover\" (older than epoch) years,\n          // so no need for a comparison like below.\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        const comparison = this.compareCalendarDates(adjustedCalendarDate, e.anchorEpoch);\n        if (comparison >= 0) {\n          eraYear = year - e.anchorEpoch.year + (e.hasYearZero ? 0 : 1);\n          return true;\n        }\n        return false;\n      });\n      if (!matchingEra) throw new RangeError(`Year ${year} was not matched by any era`);\n      return { eraYear: eraYear as unknown as number, era: matchingEra.name };\n    };\n\n    let { year, eraYear, era } = calendarDate;\n    if (year != null) {\n      ({ eraYear, era } = eraFromYear(year));\n      checkField('era', era);\n      checkField('eraYear', eraYear);\n    } else if (eraYear != null) {\n      const matchingEra =\n        era === undefined ? undefined : this.eras.find((e) => e.name === era || e.genericName === era);\n      if (!matchingEra) throw new RangeError(`Era ${era} (ISO year ${eraYear}) was not matched by any era`);\n      if (eraYear < 1 && matchingEra.reverseOf) {\n        throw new RangeError(`Years in ${era} era must be positive, not ${year}`);\n      }\n      if (matchingEra.reverseOf) {\n        year = matchingEra.anchorEpoch.year - eraYear;\n      } else {\n        year = eraYear + matchingEra.anchorEpoch.year - (matchingEra.hasYearZero ? 0 : 1);\n      }\n      checkField('year', year);\n      // We'll accept dates where the month/day is earlier than the start of\n      // the era or after its end as long as it's in the same year. If that\n      // happens, we'll adjust the era/eraYear pair to be the correct era for\n      // the `year`.\n      ({ eraYear, era } = eraFromYear(year));\n    } else {\n      throw new RangeError('Either `year` or `eraYear` and `era` are required');\n    }\n    return { ...calendarDate, year, eraYear, era };\n  }\n  override adjustCalendarDate(\n    calendarDateParam: Partial<FullCalendarDate>,\n    cache?: OneObjectCache,\n    overflow: Overflow = 'constrain'\n  ): FullCalendarDate {\n    let calendarDate = calendarDateParam;\n    // Because this is not a lunisolar calendar, it's safe to convert monthCode to a number\n    const { month, monthCode } = calendarDate;\n    if (month === undefined) calendarDate = { ...calendarDate, month: monthCodeNumberPart(monthCode as string) };\n    this.validateCalendarDate(calendarDate);\n    calendarDate = this.completeEraYear(calendarDate);\n    return super.adjustCalendarDate(calendarDate, cache, overflow);\n  }\n  estimateIsoDate(calendarDateParam: CalendarYMD) {\n    const calendarDate = this.adjustCalendarDate(calendarDateParam);\n    const { year, month, day } = calendarDate;\n    const { anchorEra } = this;\n    const isoYearEstimate = year + anchorEra.isoEpoch.year - (anchorEra.hasYearZero ? 0 : 1);\n    return ES.RegulateISODate(isoYearEstimate, month, day, 'constrain');\n  }\n  // Several calendars based on the Gregorian calendar use Julian dates (not\n  // proleptic Gregorian dates) before the Julian switchover in Oct 1582. See\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=1173158.\n  v8IsVulnerableToJulianBug = new Date('+001001-01-01T00:00Z')\n    .toLocaleDateString('en-US-u-ca-japanese', { timeZone: 'UTC' })\n    .startsWith('12');\n  calendarIsVulnerableToJulianBug = false;\n  override checkIcuBugs(isoDate: IsoYMD) {\n    if (this.calendarIsVulnerableToJulianBug && this.v8IsVulnerableToJulianBug) {\n      const beforeJulianSwitch = ES.CompareISODate(isoDate.year, isoDate.month, isoDate.day, 1582, 10, 15) < 0;\n      if (beforeJulianSwitch) {\n        throw new RangeError(\n          `calendar '${this.id}' is broken for ISO dates before 1582-10-15` +\n            ' (see https://bugs.chromium.org/p/chromium/issues/detail?id=1173158)'\n        );\n      }\n    }\n  }\n}\n\nabstract class OrthodoxBaseHelper extends GregorianBaseHelper {\n  constructor(id: BuiltinCalendarId, originalEras: InputEra[]) {\n    super(id, originalEras);\n  }\n  override inLeapYear(calendarDate: CalendarYearOnly) {\n    // Leap years happen one year before the Julian leap year. Note that this\n    // calendar is based on the Julian calendar which has a leap year every 4\n    // years, unlike the Gregorian calendar which doesn't have leap years on\n    // years divisible by 100 except years divisible by 400.\n    //\n    // Note that we're assuming that leap years in before-epoch times match\n    // how leap years are defined now. This is probably not accurate but I'm\n    // not sure how better to do it.\n    const { year } = calendarDate;\n    return (year + 1) % 4 === 0;\n  }\n  override monthsInYear(/* calendarDate */) {\n    return 13;\n  }\n  override minimumMonthLength(calendarDate: CalendarYM) {\n    const { month } = calendarDate;\n    // Ethiopian/Coptic calendars have 12 30-day months and an extra 5-6 day 13th month.\n    if (month === 13) return this.inLeapYear(calendarDate) ? 6 : 5;\n    return 30;\n  }\n  override maximumMonthLength(calendarDate: CalendarYM) {\n    return this.minimumMonthLength(calendarDate);\n  }\n}\n\n// `coptic` and `ethiopic` calendars are very similar to `ethioaa` calendar,\n// with the following differences:\n// - Coptic uses BCE-like positive numbers for years before its epoch (the other\n//   two use negative year numbers before epoch)\n// - Coptic has a different epoch date\n// - Ethiopic has an additional second era that starts at the same date as the\n//   zero era of ethioaa.\nclass EthioaaHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethioaa', [{ name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } }]);\n  }\n}\nclass CopticHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('coptic', [\n      { name: 'era1', isoEpoch: { year: 284, month: 8, day: 29 } },\n      { name: 'era0', reverseOf: 'era1' }\n    ]);\n  }\n}\n\n// Anchor is currently the older era to match ethioaa, but should it be the newer era?\n// See https://github.com/tc39/ecma402/issues/534 for discussion.\nclass EthiopicHelper extends OrthodoxBaseHelper {\n  constructor() {\n    super('ethiopic', [\n      { name: 'era0', isoEpoch: { year: -5492, month: 7, day: 17 } },\n      { name: 'era1', isoEpoch: { year: 8, month: 8, day: 27 }, anchorEpoch: { year: 5501 } }\n    ]);\n  }\n}\n\nclass RocHelper extends GregorianBaseHelper {\n  constructor() {\n    super('roc', [\n      { name: 'minguo', isoEpoch: { year: 1912, month: 1, day: 1 } },\n      { name: 'before-roc', reverseOf: 'minguo' }\n    ]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n}\n\nclass BuddhistHelper extends GregorianBaseHelper {\n  constructor() {\n    super('buddhist', [{ name: 'be', hasYearZero: true, isoEpoch: { year: -543, month: 1, day: 1 } }]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n}\n\nclass GregoryHelper extends GregorianBaseHelper {\n  constructor() {\n    super('gregory', [\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T /*, isoDate: IsoDate*/): T {\n    let { era, eraYear } = calendarDate;\n    // Firefox 96 introduced a bug where the `'short'` format of the era\n    // option mistakenly returns the one-letter (narrow) format instead. The\n    // code below handles either the correct or Firefox-buggy format. See\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1752253\n    if (era === 'bc' || era === 'b') era = 'bce';\n    if (era === 'ad' || era === 'a') era = 'ce';\n    return { era, eraYear } as T;\n  }\n}\n\n// NOTE: Only the 5 modern eras (Meiji and later) are included. For dates\n// before Meiji 1, the `ce` and `bce` eras are used. Challenges with pre-Meiji\n// eras include:\n// - Start/end dates of older eras are not precisely defined, which is\n//   challenging given Temporal's need for precision\n// - Some era dates and/or names are disputed by historians\n// - As historical research proceeds, new eras are discovered and existing era\n//   dates are modified, leading to considerable churn which is not good for\n//   Temporal use.\n//  - The earliest era (in 645 CE) may not end up being the earliest depending\n//    on future historical scholarship\n//  - Before Meiji, Japan used a lunar (or lunisolar?) calendar but AFAIK\n//    that's not reflected in the ICU implementation.\n//\n// For more discussion: https://github.com/tc39/proposal-temporal/issues/526.\n//\n// Here's a full list of CLDR/ICU eras:\n// https://github.com/unicode-org/icu/blob/master/icu4c/source/data/locales/root.txt#L1582-L1818\n// https://github.com/unicode-org/cldr/blob/master/common/supplemental/supplementalData.xml#L4310-L4546\n//\n// NOTE: Japan started using the Gregorian calendar in 6 Meiji, replacing a\n// lunisolar calendar. So the day before January 1 of 6 Meiji (1873) was not\n// December 31, but December 2, of 5 Meiji (1872). The existing Ecma-402\n// Japanese calendar doesn't seem to take this into account, so neither do we:\n// > args = ['en-ca-u-ca-japanese', { era: 'short' }]\n// > new Date('1873-01-01T12:00').toLocaleString(...args)\n// '1 1, 6 Meiji, 12:00:00 PM'\n// > new Date('1872-12-31T12:00').toLocaleString(...args)\n// '12 31, 5 Meiji, 12:00:00 PM'\nclass JapaneseHelper extends GregorianBaseHelper {\n  constructor() {\n    super('japanese', [\n      // The Japanese calendar `year` is just the ISO year, because (unlike other\n      // ICU calendars) there's no obvious \"default era\", we use the ISO year.\n      { name: 'reiwa', isoEpoch: { year: 2019, month: 5, day: 1 }, anchorEpoch: { year: 2019, month: 5, day: 1 } },\n      { name: 'heisei', isoEpoch: { year: 1989, month: 1, day: 8 }, anchorEpoch: { year: 1989, month: 1, day: 8 } },\n      { name: 'showa', isoEpoch: { year: 1926, month: 12, day: 25 }, anchorEpoch: { year: 1926, month: 12, day: 25 } },\n      { name: 'taisho', isoEpoch: { year: 1912, month: 7, day: 30 }, anchorEpoch: { year: 1912, month: 7, day: 30 } },\n      { name: 'meiji', isoEpoch: { year: 1868, month: 9, day: 8 }, anchorEpoch: { year: 1868, month: 9, day: 8 } },\n      { name: 'ce', isoEpoch: { year: 1, month: 1, day: 1 } },\n      { name: 'bce', reverseOf: 'ce' }\n    ]);\n  }\n  override calendarIsVulnerableToJulianBug = true;\n\n  // The last 3 Japanese eras confusingly return only one character in the\n  // default \"short\" era, so need to use the long format.\n  override eraLength = 'long' as const;\n\n  override erasBeginMidYear = true;\n\n  override reviseIntlEra<T extends Partial<EraAndEraYear>>(calendarDate: T, isoDate: IsoYMD): T {\n    const { era, eraYear } = calendarDate;\n    const { year: isoYear } = isoDate;\n    if (this.eras.find((e) => e.name === era)) return { era, eraYear } as T;\n    return (isoYear < 1 ? { era: 'bce', eraYear: 1 - isoYear } : { era: 'ce', eraYear: isoYear }) as T;\n  }\n}\n\ninterface ChineseMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth: number };\n}\ninterface ChineseDraftMonthInfo {\n  [key: string]: { monthIndex: number; daysInMonth?: number };\n}\n\nabstract class ChineseBaseHelper extends HelperBase {\n  abstract override id: BuiltinCalendarId;\n  calendarType = 'lunisolar' as const;\n  inLeapYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    const months = this.getMonthList(calendarDate.year, cache);\n    return ObjectEntries(months).length === 13;\n  }\n  monthsInYear(calendarDate: CalendarYearOnly, cache: OneObjectCache) {\n    return this.inLeapYear(calendarDate, cache) ? 13 : 12;\n  }\n  minimumMonthLength(/* calendarDate */) {\n    return 29;\n  }\n  maximumMonthLength(/* calendarDate */) {\n    return 30;\n  }\n  getMonthList(calendarYear: number, cache: OneObjectCache): ChineseMonthInfo {\n    if (calendarYear === undefined) {\n      throw new TypeError('Missing year');\n    }\n    const key = JSON.stringify({ func: 'getMonthList', calendarYear, id: this.id });\n    const cached = cache.get(key);\n    if (cached) return cached;\n    const dateTimeFormat = this.getFormatter();\n    const getCalendarDate = (isoYear: number, daysPastFeb1: number) => {\n      const isoStringFeb1 = toUtcIsoDateString({ isoYear, isoMonth: 2, isoDay: 1 });\n      const legacyDate = new Date(isoStringFeb1);\n      // Now add the requested number of days, which may wrap to the next month.\n      legacyDate.setUTCDate(daysPastFeb1 + 1);\n      const newYearGuess = dateTimeFormat.formatToParts(legacyDate);\n      const calendarMonthString = (newYearGuess.find((tv) => tv.type === 'month') as Intl.DateTimeFormatPart).value;\n      const calendarDay = +(newYearGuess.find((tv) => tv.type === 'day') as Intl.DateTimeFormatPart).value;\n      let calendarYearToVerify: globalThis.Intl.DateTimeFormatPart | number | undefined = newYearGuess.find(\n        (tv) => (tv.type as string) === 'relatedYear'\n      );\n      if (calendarYearToVerify !== undefined) {\n        calendarYearToVerify = +calendarYearToVerify.value;\n      } else {\n        // Node 12 has outdated ICU data that lacks the `relatedYear` field in the\n        // output of Intl.DateTimeFormat.formatToParts.\n        throw new RangeError(\n          `Intl.DateTimeFormat.formatToParts lacks relatedYear in ${this.id} calendar. Try Node 14+ or modern browsers.`\n        );\n      }\n      return { calendarMonthString, calendarDay, calendarYearToVerify };\n    };\n\n    // First, find a date close to Chinese New Year. Feb 17 will either be in\n    // the first month or near the end of the last month of the previous year.\n    let isoDaysDelta = 17;\n    let { calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta);\n\n    // If we didn't guess the first month correctly, add (almost in some months)\n    // a lunar month\n    if (calendarMonthString !== '1') {\n      isoDaysDelta += 29;\n      ({ calendarMonthString, calendarDay } = getCalendarDate(calendarYear, isoDaysDelta));\n    }\n\n    // Now back up to near the start of the first month, but not too near that\n    // off-by-one issues matter.\n    isoDaysDelta -= calendarDay - 5;\n    const result = {} as ChineseDraftMonthInfo;\n    let monthIndex = 1;\n    let oldCalendarDay: number | undefined;\n    let oldMonthString: string | undefined;\n    let done = false;\n    do {\n      ({ calendarMonthString, calendarDay, calendarYearToVerify } = getCalendarDate(calendarYear, isoDaysDelta));\n      if (oldCalendarDay) {\n        result[oldMonthString as string].daysInMonth = oldCalendarDay + 30 - calendarDay;\n      }\n      if (calendarYearToVerify !== calendarYear) {\n        done = true;\n      } else {\n        result[calendarMonthString] = { monthIndex: monthIndex++ };\n        // Move to the next month. Because months are sometimes 29 days, the day of the\n        // calendar month will move forward slowly but not enough to flip over to a new\n        // month before the loop ends at 12-13 months.\n        isoDaysDelta += 30;\n      }\n      oldCalendarDay = calendarDay;\n      oldMonthString = calendarMonthString;\n    } while (!done);\n    result[oldMonthString].daysInMonth = oldCalendarDay + 30 - calendarDay;\n\n    cache.set(key, result);\n    return result as ChineseMonthInfo;\n  }\n  estimateIsoDate(calendarDate: CalendarYMD) {\n    const { year, month } = calendarDate;\n    return { year, month: month >= 12 ? 12 : month + 1, day: 1 };\n  }\n  override adjustCalendarDate(\n    calendarDate: Partial<FullCalendarDate>,\n    cache: OneObjectCache,\n    overflow: Overflow = 'constrain',\n    fromLegacyDate = false\n  ): FullCalendarDate {\n    let { year, month, monthExtra, day, monthCode, eraYear } = calendarDate;\n    if (fromLegacyDate) {\n      // Legacy Date output returns a string that's an integer with an optional\n      // \"bis\" suffix used only by the Chinese/Dangi calendar to indicate a leap\n      // month. Below we'll normalize the output.\n      year = eraYear;\n      if (monthExtra && monthExtra !== 'bis') throw new RangeError(`Unexpected leap month suffix: ${monthExtra}`);\n      const monthCode = buildMonthCode(month as number, monthExtra !== undefined);\n      const monthString = `${month}${monthExtra || ''}`;\n      const months = this.getMonthList(year as number, cache);\n      const monthInfo = months[monthString];\n      if (monthInfo === undefined) throw new RangeError(`Unmatched month ${monthString} in Chinese year ${year}`);\n      month = monthInfo.monthIndex;\n      return { year: year as number, month, day: day as number, era: undefined, eraYear, monthCode };\n    } else {\n      // When called without input coming from legacy Date output,\n      // simply ensure that all fields are present.\n      this.validateCalendarDate(calendarDate);\n      if (year === undefined) year = eraYear;\n      if (eraYear === undefined) eraYear = year;\n      if (month === undefined) {\n        ES.assertExists(monthCode);\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        let monthInfo = months[numberPart];\n        month = monthInfo && monthInfo.monthIndex;\n\n        // If this leap month isn't present in this year, constrain to the same\n        // day of the previous month.\n        if (month === undefined && monthCode.endsWith('L') && monthCode != 'M13L' && overflow === 'constrain') {\n          let withoutML = monthCode.slice(1, -1);\n          if (withoutML[0] === '0') withoutML = withoutML.slice(1);\n          monthInfo = months[withoutML];\n          if (monthInfo) {\n            month = monthInfo.monthIndex;\n            monthCode = buildMonthCode(withoutML);\n          }\n        }\n        if (month === undefined) {\n          throw new RangeError(`Unmatched month ${monthCode} in Chinese year ${year}`);\n        }\n      } else if (monthCode === undefined) {\n        const months = this.getMonthList(year as number, cache);\n        const monthEntries = ObjectEntries(months);\n        const largestMonth = monthEntries.length;\n        if (overflow === 'reject') {\n          ES.RejectToRange(month, 1, largestMonth);\n          ES.RejectToRange(day as number, 1, this.maximumMonthLength());\n        } else {\n          month = ES.ConstrainToRange(month, 1, largestMonth);\n          day = ES.ConstrainToRange(day, 1, this.maximumMonthLength());\n        }\n        const matchingMonthEntry = monthEntries.find(([, v]) => v.monthIndex === month);\n        if (matchingMonthEntry === undefined) {\n          throw new RangeError(`Invalid month ${month} in Chinese year ${year}`);\n        }\n        monthCode = buildMonthCode(\n          matchingMonthEntry[0].replace('bis', ''),\n          matchingMonthEntry[0].indexOf('bis') !== -1\n        );\n      } else {\n        // Both month and monthCode are present. Make sure they don't conflict.\n        const months = this.getMonthList(year as number, cache);\n        let numberPart = monthCode.replace('L', 'bis').slice(1);\n        if (numberPart[0] === '0') numberPart = numberPart.slice(1);\n        const monthInfo = months[numberPart];\n        if (!monthInfo) throw new RangeError(`Unmatched monthCode ${monthCode} in Chinese year ${year}`);\n        if (month !== monthInfo.monthIndex) {\n          throw new RangeError(`monthCode ${monthCode} doesn't correspond to month ${month} in Chinese year ${year}`);\n        }\n      }\n      return {\n        ...calendarDate,\n        year: year as number,\n        eraYear,\n        month,\n        monthCode: monthCode,\n        day: day as number\n      };\n    }\n  }\n  // All built-in calendars except Chinese/Dangi and Hebrew use an era\n  override hasEra = false;\n}\n\nclass ChineseHelper extends ChineseBaseHelper {\n  id = 'chinese' as const;\n}\n\n// Dangi (Korean) calendar has same implementation as Chinese\nclass DangiHelper extends ChineseBaseHelper {\n  id = 'dangi' as const;\n}\n\n/**\n * Common implementation of all non-ISO calendars.\n * Per-calendar id and logic live in `id` and `helper` properties attached later.\n * This split allowed an easy separation between code that was similar between\n * ISO and non-ISO implementations vs. code that was very different.\n */\nclass NonIsoCalendar implements CalendarImpl {\n  constructor(private readonly helper: HelperBase) {}\n  dateFromFields(\n    fieldsParam: Params['dateFromFields'][0],\n    options: NonNullable<Params['dateFromFields'][1]>,\n    calendarSlotValue: string\n  ): Temporal.PlainDate {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate(fields, overflow, cache);\n    const result = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    cache.setObject(result);\n    return result;\n  }\n  yearMonthFromFields(\n    fieldsParam: Params['yearMonthFromFields'][0],\n    options: NonNullable<Params['yearMonthFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainYearMonth {\n    const cache = new OneObjectCache();\n    const fieldNames = this.fields(['month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.calendarToIsoDate({ ...fields, day: 1 }, overflow, cache);\n    const result = ES.CreateTemporalYearMonth(year, month, calendarSlotValue, /* referenceISODay = */ day);\n    cache.setObject(result);\n    return result;\n  }\n  monthDayFromFields(\n    fieldsParam: Params['monthDayFromFields'][0],\n    options: NonNullable<Params['monthDayFromFields'][1]>,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainMonthDay {\n    const cache = new OneObjectCache();\n    // For lunisolar calendars, either `monthCode` or `year` must be provided\n    // because `month` is ambiguous without a year or a code.\n    const fieldNames = this.fields(['day', 'month', 'monthCode', 'year']) as AnyTemporalKey[];\n    const fields = ES.PrepareTemporalFields(fieldsParam, fieldNames, []);\n    const overflow = ES.ToTemporalOverflow(options);\n    const { year, month, day } = this.helper.monthDayFromFields(fields, overflow, cache);\n    // `year` is a reference year where this month/day exists in this calendar\n    const result = ES.CreateTemporalMonthDay(month, day, calendarSlotValue, /* referenceISOYear = */ year);\n    cache.setObject(result);\n    return result;\n  }\n  fields(fieldsParam: string[]): string[] {\n    let fields = fieldsParam;\n    if (ArrayIncludes.call(fields, 'year')) fields = [...fields, 'era', 'eraYear'];\n    return fields;\n  }\n  fieldKeysToIgnore(\n    keys: Exclude<keyof Temporal.PlainDateLike, 'calendar'>[]\n  ): Exclude<keyof Temporal.PlainDateLike, 'calendar'>[] {\n    const result = new OriginalSet();\n    for (let ix = 0; ix < keys.length; ix++) {\n      const key = keys[ix];\n      ES.Call(SetPrototypeAdd, result, [key]);\n      switch (key) {\n        case 'era':\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'eraYear':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['year']);\n          break;\n        case 'year':\n          ES.Call(SetPrototypeAdd, result, ['era']);\n          ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          break;\n        case 'month':\n          ES.Call(SetPrototypeAdd, result, ['monthCode']);\n          // See https://github.com/tc39/proposal-temporal/issues/1784\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'monthCode':\n          ES.Call(SetPrototypeAdd, result, ['month']);\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n        case 'day':\n          if (this.helper.erasBeginMidYear) {\n            ES.Call(SetPrototypeAdd, result, ['era']);\n            ES.Call(SetPrototypeAdd, result, ['eraYear']);\n          }\n          break;\n      }\n    }\n    return [...ES.Call(SetPrototypeValues, result, [])];\n  }\n  dateAdd(\n    date: Temporal.PlainDate,\n    years: number,\n    months: number,\n    weeks: number,\n    days: number,\n    overflow: Overflow,\n    calendarSlotValue: CalendarSlot\n  ): Temporal.PlainDate {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const added = this.helper.addCalendar(calendarDate, { years, months, weeks, days }, overflow, cache);\n    const isoAdded = this.helper.calendarToIsoDate(added, 'constrain', cache);\n    const { year, month, day } = isoAdded;\n    const newTemporalObject = ES.CreateTemporalDate(year, month, day, calendarSlotValue);\n    // The new object's cache starts with the cache of the old object\n    const newCache = new OneObjectCache(cache);\n    newCache.setObject(newTemporalObject);\n    return newTemporalObject;\n  }\n  dateUntil(one: Temporal.PlainDate, two: Temporal.PlainDate, largestUnit: Temporal.DateUnit) {\n    const cacheOne = OneObjectCache.getCacheForObject(one);\n    const cacheTwo = OneObjectCache.getCacheForObject(two);\n    const calendarOne = this.helper.temporalToCalendarDate(one, cacheOne);\n    const calendarTwo = this.helper.temporalToCalendarDate(two, cacheTwo);\n    const result = this.helper.untilCalendar(calendarOne, calendarTwo, largestUnit, cacheOne);\n    return result;\n  }\n  year(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.year;\n  }\n  month(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.month;\n  }\n  day(date: Temporal.PlainDate | Temporal.PlainMonthDay): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.day;\n  }\n  era(date: Temporal.PlainDate | Temporal.PlainYearMonth): string | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.era;\n  }\n  eraYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number | undefined {\n    if (!this.helper.hasEra) return undefined;\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.eraYear;\n  }\n  monthCode(date: Temporal.PlainDate | Temporal.PlainYearMonth | Temporal.PlainMonthDay): string {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    return calendarDate.monthCode;\n  }\n  dayOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].dayOfWeek(date);\n  }\n  dayOfYear(date: Temporal.PlainDate): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.isoToCalendarDate(date, cache);\n    const startOfYear = this.helper.startOfCalendarYear(calendarDate);\n    const diffDays = this.helper.calendarDaysUntil(startOfYear, calendarDate, cache);\n    return diffDays + 1;\n  }\n  weekOfYear(date: Temporal.PlainDate): number {\n    return impl['iso8601'].weekOfYear(date);\n  }\n  yearOfWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].yearOfWeek(date);\n  }\n  daysInWeek(date: Temporal.PlainDate): number {\n    return impl['iso8601'].daysInWeek(date);\n  }\n  daysInMonth(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n\n    // Easy case: if the helper knows the length without any heavy calculation.\n    const max = this.helper.maximumMonthLength(calendarDate);\n    const min = this.helper.minimumMonthLength(calendarDate);\n    if (max === min) return max;\n\n    // The harder case is where months vary every year, e.g. islamic calendars.\n    // Find the answer by calculating the difference in days between the first\n    // day of the current month and the first day of the next month.\n    const startOfMonthCalendar = this.helper.startOfCalendarMonth(calendarDate);\n    const startOfNextMonthCalendar = this.helper.addMonthsCalendar(startOfMonthCalendar, 1, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfMonthCalendar, startOfNextMonthCalendar, cache);\n    return result;\n  }\n  daysInYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const startOfYearCalendar = this.helper.startOfCalendarYear(calendarDate);\n    const startOfNextYearCalendar = this.helper.addCalendar(startOfYearCalendar, { years: 1 }, 'constrain', cache);\n    const result = this.helper.calendarDaysUntil(startOfYearCalendar, startOfNextYearCalendar, cache);\n    return result;\n  }\n  monthsInYear(date: Temporal.PlainDate | Temporal.PlainYearMonth): number {\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.monthsInYear(calendarDate, cache);\n    return result;\n  }\n  inLeapYear(dateParam: Temporal.PlainDate | Temporal.PlainYearMonth): boolean {\n    let date = dateParam;\n    if (!HasSlot(date, ISO_YEAR)) date = ES.ToTemporalDate(date);\n    const cache = OneObjectCache.getCacheForObject(date);\n    const calendarDate = this.helper.temporalToCalendarDate(date, cache);\n    const result = this.helper.inLeapYear(calendarDate, cache);\n    return result;\n  }\n}\n\nfor (const Helper of [\n  HebrewHelper,\n  PersianHelper,\n  EthiopicHelper,\n  EthioaaHelper,\n  CopticHelper,\n  ChineseHelper,\n  DangiHelper,\n  RocHelper,\n  IndianHelper,\n  BuddhistHelper,\n  GregoryHelper,\n  JapaneseHelper,\n  IslamicHelper,\n  IslamicUmalquraHelper,\n  IslamicTblaHelper,\n  IslamicCivilHelper,\n  IslamicRgsaHelper,\n  IslamicCcHelper\n]) {\n  const helper = new Helper();\n  // Construct a new NonIsoCalendar instance with the given Helper implementation that contains\n  // per-calendar logic.\n  impl[helper.id] = new NonIsoCalendar(helper);\n}\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateParams as Params, PlainDateReturn as Return } from './internaltypes';\n\nexport class PlainDate implements Temporal.PlainDate {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    calendarParam: Params['constructor'][3] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateSlots(this, isoYear, isoMonth, isoDay, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDate = ES.PrepareTemporalFields(temporalDateLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDate);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarDateFromFields(calendar, fields, options);\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDate(GetSlot(this, ISO_YEAR), GetSlot(this, ISO_MONTH), GetSlot(this, ISO_DAY), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], optionsParam: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.ToTemporalDuration(temporalDurationLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    optionsParam: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    const duration = ES.CreateNegatedTemporalDuration(ES.ToTemporalDuration(temporalDurationLike));\n    const options = ES.GetOptionsObject(optionsParam);\n\n    return ES.CalendarDateAdd(GetSlot(this, CALENDAR), this, duration, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDate('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDate(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalDateToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDate');\n  }\n  toPlainDateTime(temporalTimeParam: Params['toPlainDateTime'][0] = undefined): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n\n    type TimeZoneAndPlainTimeProps = Exclude<typeof item, string | Temporal.TimeZoneProtocol>;\n    let timeZone: Temporal.TimeZoneLike, temporalTime: TimeZoneAndPlainTimeProps['plainTime'];\n    if (ES.IsObject(item)) {\n      if (ES.IsTemporalTimeZone(item)) {\n        timeZone = item;\n      } else {\n        const timeZoneLike = (item as TimeZoneAndPlainTimeProps).timeZone;\n        if (timeZoneLike === undefined) {\n          ES.uncheckedAssertNarrowedType<Temporal.TimeZoneProtocol>(\n            item,\n            \"if no timeZone property, then assume it's a custom time zone object\"\n          );\n          timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n        } else {\n          timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n          ES.uncheckedAssertNarrowedType<TimeZoneAndPlainTimeProps>(\n            item,\n            \"it's a property bag with a timeZone and optional plainTime\"\n          );\n          temporalTime = item.plainTime;\n        }\n      }\n    } else {\n      timeZone = ES.ToTemporalTimeZoneSlotValue(item);\n    }\n\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    let hour = 0,\n      minute = 0,\n      second = 0,\n      millisecond = 0,\n      microsecond = 0,\n      nanosecond = 0;\n    if (temporalTime !== undefined) {\n      temporalTime = ES.ToTemporalTime(temporalTime);\n      ES.uncheckedAssertNarrowedType<Temporal.PlainTime>(\n        temporalTime,\n        'ToTemporalTime above always returns a PlainTime'\n      );\n      hour = GetSlot(temporalTime, ISO_HOUR);\n      minute = GetSlot(temporalTime, ISO_MINUTE);\n      second = GetSlot(temporalTime, ISO_SECOND);\n      millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n      microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n      nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n    }\n\n    const dt = ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDate(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDate(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDate(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDate(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDate(oneParam);\n    const two = ES.ToTemporalDate(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDate';\n}\n\nMakeIntrinsicClass(PlainDate, 'Temporal.PlainDate');\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainDateTimeParams as Params, PlainDateTimeReturn as Return } from './internaltypes';\n\nexport class PlainDateTime implements Temporal.PlainDateTime {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    isoDayParam: Params['constructor'][2],\n    hourParam: Params['constructor'][3] = 0,\n    minuteParam: Params['constructor'][4] = 0,\n    secondParam: Params['constructor'][5] = 0,\n    millisecondParam: Params['constructor'][6] = 0,\n    microsecondParam: Params['constructor'][7] = 0,\n    nanosecondParam: Params['constructor'][8] = 0,\n    calendarParam: Params['constructor'][9] = 'iso8601'\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const hour = hourParam === undefined ? 0 : ES.ToIntegerWithTruncation(hourParam);\n    const minute = minuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(minuteParam);\n    const second = secondParam === undefined ? 0 : ES.ToIntegerWithTruncation(secondParam);\n    const millisecond = millisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(millisecondParam);\n    const microsecond = microsecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(microsecondParam);\n    const nanosecond = nanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(nanosecondParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalDateTimeSlots(\n      this,\n      isoYear,\n      isoMonth,\n      isoDay,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), this);\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalDateTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalDateTimeLike);\n\n    const options = ES.GetOptionsObject(optionsParam);\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialDateTime = ES.PrepareTemporalFields(temporalDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n    const { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const year = GetSlot(this, ISO_YEAR);\n    const month = GetSlot(this, ISO_MONTH);\n    const day = GetSlot(this, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n\n    if (temporalTimeParam === undefined) return ES.CreateTemporalDateTime(year, month, day, 0, 0, 0, 0, 0, 0, calendar);\n\n    const temporalTime = ES.ToTemporalTime(temporalTimeParam);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return new PlainDateTime(\n      GetSlot(this, ISO_YEAR),\n      GetSlot(this, ISO_MONTH),\n      GetSlot(this, ISO_DAY),\n      GetSlot(this, ISO_HOUR),\n      GetSlot(this, ISO_MINUTE),\n      GetSlot(this, ISO_SECOND),\n      GetSlot(this, ISO_MILLISECOND),\n      GetSlot(this, ISO_MICROSECOND),\n      GetSlot(this, ISO_NANOSECOND),\n      calendar\n    );\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    let year = GetSlot(this, ISO_YEAR);\n    let month = GetSlot(this, ISO_MONTH);\n    let day = GetSlot(this, ISO_DAY);\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      GetSlot(this, CALENDAR)\n    );\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalDateTime(otherParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalDateTimeToString(this, precision, showCalendar, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainDateTime');\n  }\n\n  toZonedDateTime(\n    temporalTimeZoneLike: Params['toZonedDateTime'][0],\n    optionsParam: Params['toZonedDateTime'][1] = undefined\n  ): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const instant = ES.GetInstantFor(timeZone, this, disambiguation);\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(this);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalDateTime(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalDateTime(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalDateTime(oneParam);\n    const two = ES.ToTemporalDateTime(twoParam);\n    for (const slot of [\n      ISO_YEAR,\n      ISO_MONTH,\n      ISO_DAY,\n      ISO_HOUR,\n      ISO_MINUTE,\n      ISO_SECOND,\n      ISO_MILLISECOND,\n      ISO_MICROSECOND,\n      ISO_NANOSECOND\n    ] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainDateTime';\n}\n\nMakeIntrinsicClass(PlainDateTime, 'Temporal.PlainDateTime');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  YEARS,\n  MONTHS,\n  WEEKS,\n  DAYS,\n  HOURS,\n  MINUTES,\n  SECONDS,\n  MILLISECONDS,\n  MICROSECONDS,\n  NANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport type { DurationParams as Params, DurationReturn as Return } from './internaltypes';\nimport JSBI from 'jsbi';\n\nexport class Duration implements Temporal.Duration {\n  constructor(\n    yearsParam: Params['constructor'][0] = 0,\n    monthsParam: Params['constructor'][1] = 0,\n    weeksParam: Params['constructor'][2] = 0,\n    daysParam: Params['constructor'][3] = 0,\n    hoursParam: Params['constructor'][4] = 0,\n    minutesParam: Params['constructor'][5] = 0,\n    secondsParam: Params['constructor'][6] = 0,\n    millisecondsParam: Params['constructor'][7] = 0,\n    microsecondsParam: Params['constructor'][8] = 0,\n    nanosecondsParam: Params['constructor'][9] = 0\n  ) {\n    const years = yearsParam === undefined ? 0 : ES.ToIntegerIfIntegral(yearsParam);\n    const months = monthsParam === undefined ? 0 : ES.ToIntegerIfIntegral(monthsParam);\n    const weeks = weeksParam === undefined ? 0 : ES.ToIntegerIfIntegral(weeksParam);\n    const days = daysParam === undefined ? 0 : ES.ToIntegerIfIntegral(daysParam);\n    const hours = hoursParam === undefined ? 0 : ES.ToIntegerIfIntegral(hoursParam);\n    const minutes = minutesParam === undefined ? 0 : ES.ToIntegerIfIntegral(minutesParam);\n    const seconds = secondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(secondsParam);\n    const milliseconds = millisecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(millisecondsParam);\n    const microseconds = microsecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(microsecondsParam);\n    const nanoseconds = nanosecondsParam === undefined ? 0 : ES.ToIntegerIfIntegral(nanosecondsParam);\n\n    ES.RejectDuration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n\n    CreateSlots(this);\n    SetSlot(this, YEARS, years);\n    SetSlot(this, MONTHS, months);\n    SetSlot(this, WEEKS, weeks);\n    SetSlot(this, DAYS, days);\n    SetSlot(this, HOURS, hours);\n    SetSlot(this, MINUTES, minutes);\n    SetSlot(this, SECONDS, seconds);\n    SetSlot(this, MILLISECONDS, milliseconds);\n    SetSlot(this, MICROSECONDS, microseconds);\n    SetSlot(this, NANOSECONDS, nanoseconds);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${ES.TemporalDurationToString(this)}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get years(): Return['years'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, YEARS);\n  }\n  get months(): Return['months'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MONTHS);\n  }\n  get weeks(): Return['weeks'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, WEEKS);\n  }\n  get days(): Return['days'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, DAYS);\n  }\n  get hours(): Return['hours'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, HOURS);\n  }\n  get minutes(): Return['minutes'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MINUTES);\n  }\n  get seconds(): Return['seconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, SECONDS);\n  }\n  get milliseconds(): Return['milliseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MILLISECONDS);\n  }\n  get microseconds(): Return['microseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, MICROSECONDS);\n  }\n  get nanoseconds(): Return['nanoseconds'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, NANOSECONDS);\n  }\n  get sign(): Return['sign'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.DurationSign(\n      GetSlot(this, YEARS),\n      GetSlot(this, MONTHS),\n      GetSlot(this, WEEKS),\n      GetSlot(this, DAYS),\n      GetSlot(this, HOURS),\n      GetSlot(this, MINUTES),\n      GetSlot(this, SECONDS),\n      GetSlot(this, MILLISECONDS),\n      GetSlot(this, MICROSECONDS),\n      GetSlot(this, NANOSECONDS)\n    );\n  }\n  get blank(): Return['blank'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return (\n      ES.DurationSign(\n        GetSlot(this, YEARS),\n        GetSlot(this, MONTHS),\n        GetSlot(this, WEEKS),\n        GetSlot(this, DAYS),\n        GetSlot(this, HOURS),\n        GetSlot(this, MINUTES),\n        GetSlot(this, SECONDS),\n        GetSlot(this, MILLISECONDS),\n        GetSlot(this, MICROSECONDS),\n        GetSlot(this, NANOSECONDS)\n      ) === 0\n    );\n  }\n  with(durationLike: Params['with'][0]): Return['with'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const partialDuration = ES.PrepareTemporalFields(\n      durationLike,\n      // NOTE: Field order here is important.\n      [\n        'days',\n        'hours',\n        'microseconds',\n        'milliseconds',\n        'minutes',\n        'months',\n        'nanoseconds',\n        'seconds',\n        'weeks',\n        'years'\n      ],\n      'partial'\n    );\n    const {\n      years = GetSlot(this, YEARS),\n      months = GetSlot(this, MONTHS),\n      weeks = GetSlot(this, WEEKS),\n      days = GetSlot(this, DAYS),\n      hours = GetSlot(this, HOURS),\n      minutes = GetSlot(this, MINUTES),\n      seconds = GetSlot(this, SECONDS),\n      milliseconds = GetSlot(this, MILLISECONDS),\n      microseconds = GetSlot(this, MICROSECONDS),\n      nanoseconds = GetSlot(this, NANOSECONDS)\n    } = partialDuration;\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  negated(): Return['negated'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.CreateNegatedTemporalDuration(this);\n  }\n  abs(): Return['abs'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return new Duration(\n      Math.abs(GetSlot(this, YEARS)),\n      Math.abs(GetSlot(this, MONTHS)),\n      Math.abs(GetSlot(this, WEEKS)),\n      Math.abs(GetSlot(this, DAYS)),\n      Math.abs(GetSlot(this, HOURS)),\n      Math.abs(GetSlot(this, MINUTES)),\n      Math.abs(GetSlot(this, SECONDS)),\n      Math.abs(GetSlot(this, MILLISECONDS)),\n      Math.abs(GetSlot(this, MICROSECONDS)),\n      Math.abs(GetSlot(this, NANOSECONDS))\n    );\n  }\n  add(other: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('add', this, other, options);\n  }\n  subtract(other: Params['subtract'][0], options: Params['subtract'][1] = undefined): Return['subtract'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromDuration('subtract', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    let defaultLargestUnit = ES.DefaultTemporalLargestUnit(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds\n    );\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n\n    let largestUnit = ES.GetTemporalUnit(roundTo, 'largestUnit', 'datetime', undefined, ['auto']);\n    let relativeTo = ES.ToRelativeTemporalObject(roundTo);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    let smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'datetime', undefined);\n\n    let smallestUnitPresent = true;\n    if (!smallestUnit) {\n      smallestUnitPresent = false;\n      smallestUnit = 'nanosecond';\n    }\n    defaultLargestUnit = ES.LargerOfTwoTemporalUnits(defaultLargestUnit, smallestUnit);\n    let largestUnitPresent = true;\n    if (!largestUnit) {\n      largestUnitPresent = false;\n      largestUnit = defaultLargestUnit;\n    }\n    if (largestUnit === 'auto') largestUnit = defaultLargestUnit;\n    if (!smallestUnitPresent && !largestUnitPresent) {\n      throw new RangeError('at least one of smallestUnit or largestUnit is required');\n    }\n    if (ES.LargerOfTwoTemporalUnits(largestUnit, smallestUnit) !== largestUnit) {\n      throw new RangeError(`largestUnit ${largestUnit} cannot be smaller than smallestUnit ${smallestUnit}`);\n    }\n\n    const maximumIncrements = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    } as { [k in Temporal.DateTimeUnit]?: number };\n    const maximum = maximumIncrements[smallestUnit];\n    if (maximum !== undefined) ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false);\n\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(\n      years,\n      months,\n      weeks,\n      days,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.RoundDuration(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } =\n      ES.AdjustRoundedDurationDays(\n        years,\n        months,\n        weeks,\n        days,\n        hours,\n        minutes,\n        seconds,\n        milliseconds,\n        microseconds,\n        nanoseconds,\n        roundingIncrement,\n        smallestUnit,\n        roundingMode,\n        relativeTo\n      ));\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = ES.BalanceDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      largestUnit,\n      relativeTo\n    ));\n    ({ years, months, weeks, days } = ES.BalanceDurationRelative(years, months, weeks, days, largestUnit, relativeTo));\n\n    return new Duration(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds);\n  }\n  total(optionsParam: Params['total'][0]): Return['total'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    let years = GetSlot(this, YEARS);\n    let months = GetSlot(this, MONTHS);\n    let weeks = GetSlot(this, WEEKS);\n    let days = GetSlot(this, DAYS);\n    let hours = GetSlot(this, HOURS);\n    let minutes = GetSlot(this, MINUTES);\n    let seconds = GetSlot(this, SECONDS);\n    let milliseconds = GetSlot(this, MILLISECONDS);\n    let microseconds = GetSlot(this, MICROSECONDS);\n    let nanoseconds = GetSlot(this, NANOSECONDS);\n\n    if (optionsParam === undefined) throw new TypeError('options argument is required');\n    const options =\n      typeof optionsParam === 'string'\n        ? (ES.CreateOnePropObject('unit', optionsParam) as Exclude<typeof optionsParam, string>)\n        : ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const unit = ES.GetTemporalUnit(options, 'unit', 'datetime', ES.REQUIRED);\n\n    // Convert larger units down to days\n    ({ years, months, weeks, days } = ES.UnbalanceDurationRelative(years, months, weeks, days, unit, relativeTo));\n    // If the unit we're totalling is smaller than `days`, convert days down to that unit.\n    let intermediate;\n    if (ES.IsTemporalZonedDateTime(relativeTo)) {\n      intermediate = ES.MoveRelativeZonedDateTime(relativeTo, years, months, weeks, 0);\n    }\n    let balanceResult = ES.BalancePossiblyInfiniteDuration(\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      unit,\n      intermediate\n    );\n    if (balanceResult === 'positive overflow') {\n      return Infinity;\n    } else if (balanceResult === 'negative overflow') {\n      return -Infinity;\n    }\n    ({ days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds } = balanceResult);\n    // Finally, truncate to the correct unit and calculate remainder\n    const { total } = ES.RoundDuration(\n      years,\n      months,\n      weeks,\n      days,\n      hours,\n      minutes,\n      seconds,\n      milliseconds,\n      microseconds,\n      nanoseconds,\n      1,\n      unit,\n      'trunc',\n      relativeTo\n    );\n    return total;\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour' || smallestUnit === 'minute') {\n      throw new RangeError('smallestUnit must be a time unit other than \"hours\" or \"minutes\"');\n    }\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    ES.uncheckedAssertNarrowedType<Exclude<typeof precision, 'minute'>>(\n      precision,\n      'Precision cannot be \"minute\" because of RangeError above'\n    );\n    return ES.TemporalDurationToString(this, precision, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDurationToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalDuration(this)) throw new TypeError('invalid receiver');\n    if (typeof Intl !== 'undefined' && typeof (Intl as any).DurationFormat !== 'undefined') {\n      return new (Intl as any).DurationFormat(locales, options).format(this);\n    }\n    console.warn('Temporal.Duration.prototype.toLocaleString() requires Intl.DurationFormat.');\n    return ES.TemporalDurationToString(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() to compare Temporal.Duration');\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    if (ES.IsTemporalDuration(item)) {\n      return new Duration(\n        GetSlot(item, YEARS),\n        GetSlot(item, MONTHS),\n        GetSlot(item, WEEKS),\n        GetSlot(item, DAYS),\n        GetSlot(item, HOURS),\n        GetSlot(item, MINUTES),\n        GetSlot(item, SECONDS),\n        GetSlot(item, MILLISECONDS),\n        GetSlot(item, MICROSECONDS),\n        GetSlot(item, NANOSECONDS)\n      );\n    }\n    return ES.ToTemporalDuration(item);\n  }\n  static compare(\n    oneParam: Params['compare'][0],\n    twoParam: Params['compare'][1],\n    optionsParam: Params['compare'][2] = undefined\n  ) {\n    const one = ES.ToTemporalDuration(oneParam);\n    const two = ES.ToTemporalDuration(twoParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const relativeTo = ES.ToRelativeTemporalObject(options);\n    const y1 = GetSlot(one, YEARS);\n    const mon1 = GetSlot(one, MONTHS);\n    const w1 = GetSlot(one, WEEKS);\n    let d1 = GetSlot(one, DAYS);\n    const h1 = GetSlot(one, HOURS);\n    const min1 = GetSlot(one, MINUTES);\n    const s1 = GetSlot(one, SECONDS);\n    const ms1 = GetSlot(one, MILLISECONDS);\n    const µs1 = GetSlot(one, MICROSECONDS);\n    let ns1 = GetSlot(one, NANOSECONDS);\n    const y2 = GetSlot(two, YEARS);\n    const mon2 = GetSlot(two, MONTHS);\n    const w2 = GetSlot(two, WEEKS);\n    let d2 = GetSlot(two, DAYS);\n    const h2 = GetSlot(two, HOURS);\n    const min2 = GetSlot(two, MINUTES);\n    const s2 = GetSlot(two, SECONDS);\n    const ms2 = GetSlot(two, MILLISECONDS);\n    const µs2 = GetSlot(two, MICROSECONDS);\n    let ns2 = GetSlot(two, NANOSECONDS);\n    const shift1 = ES.CalculateOffsetShift(relativeTo, y1, mon1, w1, d1);\n    const shift2 = ES.CalculateOffsetShift(relativeTo, y2, mon2, w2, d2);\n    if (y1 !== 0 || y2 !== 0 || mon1 !== 0 || mon2 !== 0 || w1 !== 0 || w2 !== 0) {\n      ({ days: d1 } = ES.UnbalanceDurationRelative(y1, mon1, w1, d1, 'day', relativeTo));\n      ({ days: d2 } = ES.UnbalanceDurationRelative(y2, mon2, w2, d2, 'day', relativeTo));\n    }\n    const totalNs1 = ES.TotalDurationNanoseconds(d1, h1, min1, s1, ms1, µs1, ns1, shift1);\n    const totalNs2 = ES.TotalDurationNanoseconds(d2, h2, min2, s2, ms2, µs2, ns2, shift2);\n    return ES.ComparisonResult(JSBI.toNumber(JSBI.subtract(totalNs1, totalNs2)));\n  }\n  [Symbol.toStringTag]!: 'Temporal.Duration';\n}\n\nMakeIntrinsicClass(Duration, 'Temporal.Duration');\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_MONTH, ISO_DAY, ISO_YEAR, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainMonthDayParams as Params, PlainMonthDayReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainMonthDay implements Temporal.PlainMonthDay {\n  constructor(\n    isoMonthParam: Params['constructor'][0],\n    isoDayParam: Params['constructor'][0],\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601',\n    referenceISOYearParam = 1972\n  ) {\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const isoDay = ES.ToIntegerWithTruncation(isoDayParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISOYear = ES.ToIntegerWithTruncation(referenceISOYearParam);\n\n    ES.CreateTemporalMonthDaySlots(this, isoMonth, isoDay, calendar, referenceISOYear);\n  }\n\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n\n  with(temporalMonthDayLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalMonthDayLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalMonthDayLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialMonthDay = ES.PrepareTemporalFields(temporalMonthDayLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialMonthDay);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarMonthDayFromFields(calendar, fields, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalMonthDay(otherParam);\n    for (const slot of [ISO_MONTH, ISO_DAY, ISO_YEAR]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalMonthDayToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalMonthDayToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use equals() to compare Temporal.PlainMonthDay');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['year'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalMonthDay(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalMonthDay(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalMonthDay(\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, ISO_DAY),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_YEAR)\n      );\n    }\n    return ES.ToTemporalMonthDay(item, options);\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainMonthDay';\n}\n\nMakeIntrinsicClass(PlainMonthDay, 'Temporal.PlainMonthDay');\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic } from './intrinsicclass';\nimport type { Temporal } from '..';\n\nconst instant: typeof Temporal.Now['instant'] = () => {\n  const Instant = GetIntrinsic('%Temporal.Instant%');\n  return new Instant(ES.SystemUTCEpochNanoSeconds());\n};\nconst plainDateTime: typeof Temporal.Now['plainDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, calendar);\n};\nconst plainDateTimeISO: typeof Temporal.Now['plainDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const inst = instant();\n  return ES.GetPlainDateTimeFor(tZ, inst, 'iso8601');\n};\nconst zonedDateTime: typeof Temporal.Now['zonedDateTime'] = (\n  calendarLike,\n  temporalTimeZoneLike = ES.DefaultTimeZone()\n) => {\n  const tZ = ES.ToTemporalTimeZoneSlotValue(temporalTimeZoneLike);\n  const calendar = ES.ToTemporalCalendarSlotValue(calendarLike);\n  return ES.CreateTemporalZonedDateTime(ES.SystemUTCEpochNanoSeconds(), tZ, calendar);\n};\nconst zonedDateTimeISO: typeof Temporal.Now['zonedDateTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return zonedDateTime('iso8601', temporalTimeZoneLike);\n};\nconst plainDate: typeof Temporal.Now['plainDate'] = (calendarLike, temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTime(calendarLike, temporalTimeZoneLike));\n};\nconst plainDateISO: typeof Temporal.Now['plainDateISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToDate(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst plainTimeISO: typeof Temporal.Now['plainTimeISO'] = (temporalTimeZoneLike = ES.DefaultTimeZone()) => {\n  return ES.TemporalDateTimeToTime(plainDateTimeISO(temporalTimeZoneLike));\n};\nconst timeZoneId: typeof Temporal.Now['timeZoneId'] = () => {\n  return ES.DefaultTimeZone();\n};\n\nexport const Now: typeof Temporal.Now = {\n  instant,\n  plainDateTime,\n  plainDateTimeISO,\n  plainDate,\n  plainDateISO,\n  plainTimeISO,\n  timeZoneId,\n  zonedDateTime,\n  zonedDateTimeISO,\n  [Symbol.toStringTag]: 'Temporal.Now'\n};\nObject.defineProperty(Now, Symbol.toStringTag, {\n  value: 'Temporal.Now',\n  writable: false,\n  enumerable: false,\n  configurable: true\n});\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\n\nimport {\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainTimeParams as Params, PlainTimeReturn as Return } from './internaltypes';\n\nconst ObjectAssign = Object.assign;\n\ntype TemporalTimeToStringOptions = {\n  unit: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['unit'];\n  increment: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['increment'];\n  roundingMode: Temporal.RoundingMode;\n};\n\nfunction TemporalTimeToString(\n  time: Temporal.PlainTime,\n  precision: ReturnType<typeof ES.ToSecondsStringPrecisionRecord>['precision'],\n  options: TemporalTimeToStringOptions | undefined = undefined\n) {\n  let hour = GetSlot(time, ISO_HOUR);\n  let minute = GetSlot(time, ISO_MINUTE);\n  let second = GetSlot(time, ISO_SECOND);\n  let millisecond = GetSlot(time, ISO_MILLISECOND);\n  let microsecond = GetSlot(time, ISO_MICROSECOND);\n  let nanosecond = GetSlot(time, ISO_NANOSECOND);\n\n  if (options) {\n    const { unit, increment, roundingMode } = options;\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      increment,\n      unit,\n      roundingMode\n    ));\n  }\n\n  const hourString = ES.ISODateTimePartString(hour);\n  const minuteString = ES.ISODateTimePartString(minute);\n  const seconds = ES.FormatSecondsStringPart(second, millisecond, microsecond, nanosecond, precision);\n  return `${hourString}:${minuteString}${seconds}`;\n}\n\nexport class PlainTime implements Temporal.PlainTime {\n  constructor(\n    isoHourParam = 0,\n    isoMinuteParam = 0,\n    isoSecondParam = 0,\n    isoMillisecondParam = 0,\n    isoMicrosecondParam = 0,\n    isoNanosecondParam = 0\n  ) {\n    const isoHour = isoHourParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoHourParam);\n    const isoMinute = isoMinuteParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMinuteParam);\n    const isoSecond = isoSecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoSecondParam);\n    const isoMillisecond = isoMillisecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMillisecondParam);\n    const isoMicrosecond = isoMicrosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoMicrosecondParam);\n    const isoNanosecond = isoNanosecondParam === undefined ? 0 : ES.ToIntegerWithTruncation(isoNanosecondParam);\n\n    ES.RejectTime(isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond);\n    CreateSlots(this);\n    SetSlot(this, ISO_HOUR, isoHour);\n    SetSlot(this, ISO_MINUTE, isoMinute);\n    SetSlot(this, ISO_SECOND, isoSecond);\n    SetSlot(this, ISO_MILLISECOND, isoMillisecond);\n    SetSlot(this, ISO_MICROSECOND, isoMicrosecond);\n    SetSlot(this, ISO_NANOSECOND, isoNanosecond);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${TemporalTimeToString(this, 'auto')}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, ISO_NANOSECOND);\n  }\n\n  with(temporalTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalTimeLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n\n    const partialTime = ES.ToTemporalTimeRecord(temporalTimeLike, 'partial');\n\n    const fields = ES.ToTemporalTimeRecord(this);\n    let { hour, minute, second, millisecond, microsecond, nanosecond } = ObjectAssign(fields, partialTime);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RegulateTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      overflow\n    ));\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  add(temporalDurationLike: Params['add'][0]): Return['add'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('add', this, temporalDurationLike);\n  }\n  subtract(temporalDurationLike: Params['subtract'][0]): Return['subtract'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainTime('subtract', this, temporalDurationLike);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED);\n    const MAX_INCREMENTS = {\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, MAX_INCREMENTS[smallestUnit], false);\n\n    let hour = GetSlot(this, ISO_HOUR);\n    let minute = GetSlot(this, ISO_MINUTE);\n    let second = GetSlot(this, ISO_SECOND);\n    let millisecond = GetSlot(this, ISO_MILLISECOND);\n    let microsecond = GetSlot(this, ISO_MICROSECOND);\n    let nanosecond = GetSlot(this, ISO_NANOSECOND);\n    ({ hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundTime(\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode\n    ));\n\n    return new PlainTime(hour, minute, second, millisecond, microsecond, nanosecond);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalTime(otherParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return true;\n  }\n\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return TemporalTimeToString(this, precision, { unit, increment, roundingMode });\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return TemporalTimeToString(this, 'auto');\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainTime');\n  }\n\n  toPlainDateTime(temporalDateParam: Params['toPlainDateTime'][0]): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    return ES.CreateTemporalDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n  }\n  toZonedDateTime(item: Params['toZonedDateTime'][0]): Return['toZonedDateTime'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n\n    if (!ES.IsObject(item)) {\n      throw new TypeError('invalid argument');\n    }\n\n    const dateLike = item.plainDate;\n    if (dateLike === undefined) {\n      throw new TypeError('missing date property');\n    }\n    const temporalDate = ES.ToTemporalDate(dateLike);\n\n    const timeZoneLike = item.timeZone;\n    if (timeZoneLike === undefined) {\n      throw new TypeError('missing timeZone property');\n    }\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneLike);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    const calendar = GetSlot(temporalDate, CALENDAR);\n    const hour = GetSlot(this, ISO_HOUR);\n    const minute = GetSlot(this, ISO_MINUTE);\n    const second = GetSlot(this, ISO_SECOND);\n    const millisecond = GetSlot(this, ISO_MILLISECOND);\n    const microsecond = GetSlot(this, ISO_MICROSECOND);\n    const nanosecond = GetSlot(this, ISO_NANOSECOND);\n\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalTime(this)) throw new TypeError('invalid receiver');\n    return {\n      isoHour: GetSlot(this, ISO_HOUR),\n      isoMicrosecond: GetSlot(this, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(this, ISO_MILLISECOND),\n      isoMinute: GetSlot(this, ISO_MINUTE),\n      isoNanosecond: GetSlot(this, ISO_NANOSECOND),\n      isoSecond: GetSlot(this, ISO_SECOND)\n    };\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    const overflow = ES.ToTemporalOverflow(options);\n    if (ES.IsTemporalTime(item)) {\n      return new PlainTime(\n        GetSlot(item, ISO_HOUR),\n        GetSlot(item, ISO_MINUTE),\n        GetSlot(item, ISO_SECOND),\n        GetSlot(item, ISO_MILLISECOND),\n        GetSlot(item, ISO_MICROSECOND),\n        GetSlot(item, ISO_NANOSECOND)\n      );\n    }\n    return ES.ToTemporalTime(item, overflow);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalTime(oneParam);\n    const two = ES.ToTemporalTime(twoParam);\n    for (const slot of [ISO_HOUR, ISO_MINUTE, ISO_SECOND, ISO_MILLISECOND, ISO_MICROSECOND, ISO_NANOSECOND] as const) {\n      const val1 = GetSlot(one, slot);\n      const val2 = GetSlot(two, slot);\n      if (val1 !== val2) return ES.ComparisonResult(val1 - val2);\n    }\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainTime';\n}\n\nMakeIntrinsicClass(PlainTime, 'Temporal.PlainTime');\n", "import { DEBUG } from './debug';\nimport * as ES from './ecmascript';\nimport { DefineIntrinsic, GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  TIMEZONE_ID,\n  EPOCHNANOSECONDS,\n  ISO_YEAR,\n  ISO_MONTH,\n  ISO_DAY,\n  ISO_HOUR,\n  ISO_MINUTE,\n  ISO_SECOND,\n  ISO_MILLISECOND,\n  ISO_MICROSECOND,\n  ISO_NANOSECOND,\n  CreateSlots,\n  GetSlot,\n  SetSlot\n} from './slots';\nimport JSBI from 'jsbi';\nimport type { Temporal } from '..';\nimport type { TimeZoneParams as Params, TimeZoneReturn as Return } from './internaltypes';\n\nexport class TimeZone implements Temporal.TimeZone {\n  constructor(timeZoneIdentifierParam: string) {\n    // Note: if the argument is not passed, GetCanonicalTimeZoneIdentifier(undefined) will throw.\n    //       This check exists only to improve the error message.\n    if (arguments.length < 1) {\n      throw new RangeError('missing argument: identifier is required');\n    }\n\n    const timeZoneIdentifier = ES.GetCanonicalTimeZoneIdentifier(timeZoneIdentifierParam);\n    CreateSlots(this);\n    SetSlot(this, TIMEZONE_ID, timeZoneIdentifier);\n\n    if (DEBUG) {\n      Object.defineProperty(this, '_repr_', {\n        value: `${this[Symbol.toStringTag]} <${timeZoneIdentifier}>`,\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n  get id(): Return['id'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  getOffsetNanosecondsFor(instantParam: Params['getOffsetNanosecondsFor'][0]): Return['getOffsetNanosecondsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      return ES.ParseTimeZoneOffsetString(id);\n    }\n\n    return ES.GetNamedTimeZoneOffsetNanoseconds(id, GetSlot(instant, EPOCHNANOSECONDS));\n  }\n  getOffsetStringFor(instantParam: Params['getOffsetStringFor'][0]): Return['getOffsetStringFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    return ES.GetOffsetStringFor(this, instant);\n  }\n  getPlainDateTimeFor(\n    instantParam: Params['getPlainDateTimeFor'][0],\n    calendarParam: Params['getPlainDateTimeFor'][1] = 'iso8601'\n  ): Return['getPlainDateTimeFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const instant = ES.ToTemporalInstant(instantParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.GetPlainDateTimeFor(this, instant, calendar);\n  }\n  getInstantFor(\n    dateTimeParam: Params['getInstantFor'][0],\n    optionsParam: Params['getInstantFor'][1] = undefined\n  ): Return['getInstantFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const options = ES.GetOptionsObject(optionsParam);\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    return ES.GetInstantFor(this, dateTime, disambiguation);\n  }\n  getPossibleInstantsFor(dateTimeParam: Params['getPossibleInstantsFor'][0]): Return['getPossibleInstantsFor'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const dateTime = ES.ToTemporalDateTime(dateTimeParam);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    if (ES.IsTimeZoneOffsetString(id)) {\n      const epochNs = ES.GetUTCEpochNanoseconds(\n        GetSlot(dateTime, ISO_YEAR),\n        GetSlot(dateTime, ISO_MONTH),\n        GetSlot(dateTime, ISO_DAY),\n        GetSlot(dateTime, ISO_HOUR),\n        GetSlot(dateTime, ISO_MINUTE),\n        GetSlot(dateTime, ISO_SECOND),\n        GetSlot(dateTime, ISO_MILLISECOND),\n        GetSlot(dateTime, ISO_MICROSECOND),\n        GetSlot(dateTime, ISO_NANOSECOND)\n      );\n      if (epochNs === null) throw new RangeError('DateTime outside of supported range');\n      const offsetNs = ES.ParseTimeZoneOffsetString(id);\n      return [new Instant(JSBI.subtract(epochNs, JSBI.BigInt(offsetNs)))];\n    }\n\n    const possibleEpochNs = ES.GetNamedTimeZoneEpochNanoseconds(\n      id,\n      GetSlot(dateTime, ISO_YEAR),\n      GetSlot(dateTime, ISO_MONTH),\n      GetSlot(dateTime, ISO_DAY),\n      GetSlot(dateTime, ISO_HOUR),\n      GetSlot(dateTime, ISO_MINUTE),\n      GetSlot(dateTime, ISO_SECOND),\n      GetSlot(dateTime, ISO_MILLISECOND),\n      GetSlot(dateTime, ISO_MICROSECOND),\n      GetSlot(dateTime, ISO_NANOSECOND)\n    );\n    return possibleEpochNs.map((ns) => new Instant(ns));\n  }\n  getNextTransition(startingPointParam: Params['getNextTransition'][0]): Return['getNextTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZoneNextTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  getPreviousTransition(startingPointParam: Params['getPreviousTransition'][0]): Return['getPreviousTransition'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    const startingPoint = ES.ToTemporalInstant(startingPointParam);\n    const id = GetSlot(this, TIMEZONE_ID);\n\n    // Offset time zones or UTC have no transitions\n    if (ES.IsTimeZoneOffsetString(id) || id === 'UTC') {\n      return null;\n    }\n\n    let epochNanoseconds: JSBI | null = GetSlot(startingPoint, EPOCHNANOSECONDS);\n    const Instant = GetIntrinsic('%Temporal.Instant%');\n    epochNanoseconds = ES.GetNamedTimeZonePreviousTransition(id, epochNanoseconds);\n    return epochNanoseconds === null ? null : new Instant(epochNanoseconds);\n  }\n  toString(): string {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalTimeZone(this)) throw new TypeError('invalid receiver');\n    return GetSlot(this, TIMEZONE_ID);\n  }\n  static from(item: Params['from'][0]): Return['from'] {\n    const timeZoneSlotValue = ES.ToTemporalTimeZoneSlotValue(item);\n    return ES.ToTemporalTimeZoneObject(timeZoneSlotValue);\n  }\n  [Symbol.toStringTag]!: 'Temporal.TimeZone';\n}\n\nMakeIntrinsicClass(TimeZone, 'Temporal.TimeZone');\nDefineIntrinsic('Temporal.TimeZone.prototype.getOffsetNanosecondsFor', TimeZone.prototype.getOffsetNanosecondsFor);\nDefineIntrinsic('Temporal.TimeZone.prototype.getPossibleInstantsFor', TimeZone.prototype.getPossibleInstantsFor);\n", "import * as ES from './ecmascript';\nimport { MakeIntrinsicClass } from './intrinsicclass';\nimport { ISO_YEAR, ISO_MONTH, ISO_DAY, CALENDAR, GetSlot } from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { PlainYearMonthParams as Params, PlainYearMonthReturn as Return } from './internaltypes';\n\nconst ObjectCreate = Object.create;\n\nexport class PlainYearMonth implements Temporal.PlainYearMonth {\n  constructor(\n    isoYearParam: Params['constructor'][0],\n    isoMonthParam: Params['constructor'][1],\n    calendarParam: Params['constructor'][2] = 'iso8601',\n    referenceISODayParam: Params['constructor'][3] = 1\n  ) {\n    const isoYear = ES.ToIntegerWithTruncation(isoYearParam);\n    const isoMonth = ES.ToIntegerWithTruncation(isoMonthParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    const referenceISODay = ES.ToIntegerWithTruncation(referenceISODayParam);\n\n    ES.CreateTemporalYearMonthSlots(this, isoYear, isoMonth, calendar, referenceISODay);\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), this);\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), this);\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), this);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), this);\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), this);\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), this);\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), this);\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), this);\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), this);\n  }\n  with(temporalYearMonthLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalYearMonthLike)) {\n      throw new TypeError('invalid argument');\n    }\n    ES.RejectTemporalLikeObject(temporalYearMonthLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['month', 'monthCode', 'year'] as const);\n    let fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    const partialYearMonth = ES.PrepareTemporalFields(temporalYearMonthLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialYearMonth);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, []);\n\n    return ES.CalendarYearMonthFromFields(calendar, fields, options);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromPlainYearMonth('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalPlainYearMonth('since', this, other, options);\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalYearMonth(otherParam);\n    for (const slot of [ISO_YEAR, ISO_MONTH, ISO_DAY]) {\n      const val1 = GetSlot(this, slot);\n      const val2 = GetSlot(other, slot);\n      if (val1 !== val2) return false;\n    }\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    return ES.TemporalYearMonthToString(this, showCalendar);\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalYearMonthToString(this);\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    options: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return new DateTimeFormat(locales, options).format(this);\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.PlainYearMonth');\n  }\n  toPlainDate(item: Params['toPlainDate'][0]): Return['toPlainDate'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(item)) throw new TypeError('argument should be an object');\n    const calendar = GetSlot(this, CALENDAR);\n\n    const receiverFieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, receiverFieldNames, []);\n\n    const inputFieldNames = ES.CalendarFields(calendar, ['day'] as const);\n    const inputFields = ES.PrepareTemporalFields(item, inputFieldNames, []);\n    let mergedFields = ES.CalendarMergeFields(calendar, fields, inputFields);\n\n    // TODO: Use MergeLists abstract operation.\n    const mergedFieldNames = [...new Set([...receiverFieldNames, ...inputFieldNames])];\n    mergedFields = ES.PrepareTemporalFields(mergedFields, mergedFieldNames, []);\n    const options = ObjectCreate(null);\n    options.overflow = 'reject';\n    return ES.CalendarDateFromFields(calendar, mergedFields, options);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(this, ISO_DAY),\n      isoMonth: GetSlot(this, ISO_MONTH),\n      isoYear: GetSlot(this, ISO_YEAR)\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalYearMonth(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalYearMonth(item)) {\n      ES.ToTemporalOverflow(options); // validate and ignore\n      return ES.CreateTemporalYearMonth(\n        GetSlot(item, ISO_YEAR),\n        GetSlot(item, ISO_MONTH),\n        GetSlot(item, CALENDAR),\n        GetSlot(item, ISO_DAY)\n      );\n    }\n    return ES.ToTemporalYearMonth(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalYearMonth(oneParam);\n    const two = ES.ToTemporalYearMonth(twoParam);\n    return ES.CompareISODate(\n      GetSlot(one, ISO_YEAR),\n      GetSlot(one, ISO_MONTH),\n      GetSlot(one, ISO_DAY),\n      GetSlot(two, ISO_YEAR),\n      GetSlot(two, ISO_MONTH),\n      GetSlot(two, ISO_DAY)\n    );\n  }\n  [Symbol.toStringTag]!: 'Temporal.PlainYearMonth';\n}\n\nMakeIntrinsicClass(PlainYearMonth, 'Temporal.PlainYearMonth');\n", "import * as ES from './ecmascript';\nimport { GetIntrinsic, MakeIntrinsicClass } from './intrinsicclass';\nimport {\n  CALENDAR,\n  EPOCHNANOSECONDS,\n  ISO_HOUR,\n  INSTANT,\n  ISO_DAY,\n  ISO_MONTH,\n  ISO_YEAR,\n  ISO_MICROSECOND,\n  ISO_MILLISECOND,\n  ISO_MINUTE,\n  ISO_NANOSECOND,\n  ISO_SECOND,\n  TIME_ZONE,\n  GetSlot\n} from './slots';\nimport type { Temporal } from '..';\nimport { DateTimeFormat } from './intl';\nimport type { ZonedDateTimeParams as Params, ZonedDateTimeReturn as Return } from './internaltypes';\n\nimport JSBI from 'jsbi';\nimport { BILLION, MILLION, THOUSAND, ZERO, HOUR_NANOS } from './ecmascript';\n\nconst customResolvedOptions = DateTimeFormat.prototype.resolvedOptions as Intl.DateTimeFormat['resolvedOptions'];\nconst ObjectCreate = Object.create;\n\nexport class ZonedDateTime implements Temporal.ZonedDateTime {\n  constructor(\n    epochNanosecondsParam: bigint | JSBI,\n    timeZoneParam: string | Temporal.TimeZoneProtocol,\n    calendarParam: string | Temporal.CalendarProtocol = 'iso8601'\n  ) {\n    // Note: if the argument is not passed, ToBigInt(undefined) will throw. This check exists only\n    //       to improve the error message.\n    //       ToTemporalTimeZoneSlotValue(undefined) has a clear enough message.\n    if (arguments.length < 1) {\n      throw new TypeError('missing argument: epochNanoseconds is required');\n    }\n    const epochNanoseconds = ES.ToBigInt(epochNanosecondsParam);\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n\n    ES.CreateTemporalZonedDateTimeSlots(this, epochNanoseconds, timeZone, calendar);\n  }\n  get calendarId(): Return['calendarId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n  }\n  get timeZoneId(): Return['timeZoneId'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n  }\n  get year(): Return['year'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get month(): Return['month'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthCode(): Return['monthCode'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthCode(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get day(): Return['day'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDay(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hour(): Return['hour'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_HOUR);\n  }\n  get minute(): Return['minute'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MINUTE);\n  }\n  get second(): Return['second'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_SECOND);\n  }\n  get millisecond(): Return['millisecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MILLISECOND);\n  }\n  get microsecond(): Return['microsecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_MICROSECOND);\n  }\n  get nanosecond(): Return['nanosecond'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return GetSlot(dateTime(this), ISO_NANOSECOND);\n  }\n  get era(): Return['era'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEra(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get eraYear(): Return['eraYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarEraYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get epochSeconds(): Return['epochSeconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, BILLION));\n  }\n  get epochMilliseconds(): Return['epochMilliseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return JSBI.toNumber(ES.BigIntFloorDiv(value, MILLION));\n  }\n  get epochMicroseconds(): Return['epochMicroseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const value = GetSlot(this, EPOCHNANOSECONDS);\n    return ES.ToBigIntExternal(ES.BigIntFloorDiv(value, THOUSAND));\n  }\n  get epochNanoseconds(): Return['epochNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToBigIntExternal(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  get dayOfWeek(): Return['dayOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get dayOfYear(): Return['dayOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDayOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get weekOfYear(): Return['weekOfYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarWeekOfYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get yearOfWeek(): Return['yearOfWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarYearOfWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get hoursInDay(): Return['hoursInDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const year = GetSlot(dt, ISO_YEAR);\n    const month = GetSlot(dt, ISO_MONTH);\n    const day = GetSlot(dt, ISO_DAY);\n    const today = new DateTime(year, month, day, 0, 0, 0, 0, 0, 0);\n    const tomorrowFields = ES.AddISODate(year, month, day, 0, 0, 0, 1, 'reject');\n    const tomorrow = new DateTime(tomorrowFields.year, tomorrowFields.month, tomorrowFields.day, 0, 0, 0, 0, 0, 0);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const todayNs = GetSlot(ES.GetInstantFor(timeZone, today, 'compatible'), EPOCHNANOSECONDS);\n    const tomorrowNs = GetSlot(ES.GetInstantFor(timeZone, tomorrow, 'compatible'), EPOCHNANOSECONDS);\n    const diffNs = JSBI.subtract(tomorrowNs, todayNs);\n    return ES.BigIntDivideToNumber(diffNs, HOUR_NANOS);\n  }\n  get daysInWeek(): Return['daysInWeek'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInWeek(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInMonth(): Return['daysInMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInMonth(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get daysInYear(): Return['daysInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarDaysInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get monthsInYear(): Return['monthsInYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarMonthsInYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get inLeapYear(): Return['inLeapYear'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.CalendarInLeapYear(GetSlot(this, CALENDAR), dateTime(this));\n  }\n  get offset(): Return['offset'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetStringFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  get offsetNanoseconds(): Return['offsetNanoseconds'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.GetOffsetNanosecondsFor(GetSlot(this, TIME_ZONE), GetSlot(this, INSTANT));\n  }\n  with(temporalZonedDateTimeLike: Params['with'][0], optionsParam: Params['with'][1] = undefined): Return['with'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (!ES.IsObject(temporalZonedDateTimeLike)) {\n      throw new TypeError('invalid zoned-date-time-like');\n    }\n    ES.RejectTemporalLikeObject(temporalZonedDateTimeLike);\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const calendar = GetSlot(this, CALENDAR);\n    let fieldNames: (keyof Temporal.ZonedDateTimeLike)[] = ES.CalendarFields(calendar, [\n      'day',\n      'hour',\n      'microsecond',\n      'millisecond',\n      'minute',\n      'month',\n      'monthCode',\n      'nanosecond',\n      'second',\n      'year'\n    ] as const);\n    fieldNames.push('offset');\n    let fields = ES.PrepareTemporalFields(this, fieldNames, ['offset']);\n    const partialZonedDateTime = ES.PrepareTemporalFields(temporalZonedDateTimeLike, fieldNames, 'partial');\n    fields = ES.CalendarMergeFields(calendar, fields, partialZonedDateTime);\n    fields = ES.PrepareTemporalFields(fields, fieldNames, ['offset']);\n\n    const disambiguation = ES.ToTemporalDisambiguation(options);\n    const offset = ES.ToTemporalOffset(options, 'prefer');\n\n    let { year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } =\n      ES.InterpretTemporalDateTimeFields(calendar, fields, options);\n    const offsetNs = ES.ParseTimeZoneOffsetString(fields.offset);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      disambiguation,\n      offset,\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar);\n  }\n  withPlainDate(temporalDateParam: Params['withPlainDate'][0]): Return['withPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const temporalDate = ES.ToTemporalDate(temporalDateParam);\n\n    const year = GetSlot(temporalDate, ISO_YEAR);\n    const month = GetSlot(temporalDate, ISO_MONTH);\n    const day = GetSlot(temporalDate, ISO_DAY);\n    let calendar = GetSlot(temporalDate, CALENDAR);\n    const thisDt = dateTime(this);\n    const hour = GetSlot(thisDt, ISO_HOUR);\n    const minute = GetSlot(thisDt, ISO_MINUTE);\n    const second = GetSlot(thisDt, ISO_SECOND);\n    const millisecond = GetSlot(thisDt, ISO_MILLISECOND);\n    const microsecond = GetSlot(thisDt, ISO_MICROSECOND);\n    const nanosecond = GetSlot(thisDt, ISO_NANOSECOND);\n\n    calendar = ES.ConsolidateCalendars(GetSlot(this, CALENDAR), calendar);\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withPlainTime(temporalTimeParam: Params['withPlainTime'][0] = undefined): Return['withPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n\n    const PlainTime = GetIntrinsic('%Temporal.PlainTime%');\n    const temporalTime = temporalTimeParam === undefined ? new PlainTime() : ES.ToTemporalTime(temporalTimeParam);\n\n    const thisDt = dateTime(this);\n    const year = GetSlot(thisDt, ISO_YEAR);\n    const month = GetSlot(thisDt, ISO_MONTH);\n    const day = GetSlot(thisDt, ISO_DAY);\n    const calendar = GetSlot(this, CALENDAR);\n    const hour = GetSlot(temporalTime, ISO_HOUR);\n    const minute = GetSlot(temporalTime, ISO_MINUTE);\n    const second = GetSlot(temporalTime, ISO_SECOND);\n    const millisecond = GetSlot(temporalTime, ISO_MILLISECOND);\n    const microsecond = GetSlot(temporalTime, ISO_MICROSECOND);\n    const nanosecond = GetSlot(temporalTime, ISO_NANOSECOND);\n\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const PlainDateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const dt = new PlainDateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      calendar\n    );\n    const instant = ES.GetInstantFor(timeZone, dt, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  withTimeZone(timeZoneParam: Params['withTimeZone'][0]): Return['withTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const timeZone = ES.ToTemporalTimeZoneSlotValue(timeZoneParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), timeZone, GetSlot(this, CALENDAR));\n  }\n  withCalendar(calendarParam: Params['withCalendar'][0]): Return['withCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = ES.ToTemporalCalendarSlotValue(calendarParam);\n    return ES.CreateTemporalZonedDateTime(GetSlot(this, EPOCHNANOSECONDS), GetSlot(this, TIME_ZONE), calendar);\n  }\n  add(temporalDurationLike: Params['add'][0], options: Params['add'][1] = undefined): Return['add'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('add', this, temporalDurationLike, options);\n  }\n  subtract(\n    temporalDurationLike: Params['subtract'][0],\n    options: Params['subtract'][1] = undefined\n  ): Return['subtract'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.AddDurationToOrSubtractDurationFromZonedDateTime('subtract', this, temporalDurationLike, options);\n  }\n  until(other: Params['until'][0], options: Params['until'][1] = undefined): Return['until'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('until', this, other, options);\n  }\n  since(other: Params['since'][0], options: Params['since'][1] = undefined): Return['since'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.DifferenceTemporalZonedDateTime('since', this, other, options);\n  }\n  round(roundToParam: Params['round'][0]): Return['round'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    if (roundToParam === undefined) throw new TypeError('options parameter is required');\n    const roundTo =\n      typeof roundToParam === 'string'\n        ? (ES.CreateOnePropObject('smallestUnit', roundToParam) as Exclude<typeof roundToParam, string>)\n        : ES.GetOptionsObject(roundToParam);\n    const roundingIncrement = ES.ToTemporalRoundingIncrement(roundTo);\n    const roundingMode = ES.ToTemporalRoundingMode(roundTo, 'halfExpand');\n    const smallestUnit = ES.GetTemporalUnit(roundTo, 'smallestUnit', 'time', ES.REQUIRED, ['day']);\n    const maximumIncrements = {\n      day: 1,\n      hour: 24,\n      minute: 60,\n      second: 60,\n      millisecond: 1000,\n      microsecond: 1000,\n      nanosecond: 1000\n    };\n    const maximum = maximumIncrements[smallestUnit];\n    const inclusive = maximum === 1;\n    ES.ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive);\n\n    // first, round the underlying DateTime fields\n    const dt = dateTime(this);\n    let year = GetSlot(dt, ISO_YEAR);\n    let month = GetSlot(dt, ISO_MONTH);\n    let day = GetSlot(dt, ISO_DAY);\n    let hour = GetSlot(dt, ISO_HOUR);\n    let minute = GetSlot(dt, ISO_MINUTE);\n    let second = GetSlot(dt, ISO_SECOND);\n    let millisecond = GetSlot(dt, ISO_MILLISECOND);\n    let microsecond = GetSlot(dt, ISO_MICROSECOND);\n    let nanosecond = GetSlot(dt, ISO_NANOSECOND);\n\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(GetSlot(dt, ISO_YEAR), GetSlot(dt, ISO_MONTH), GetSlot(dt, ISO_DAY), 0, 0, 0, 0, 0, 0);\n    const instantStart = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    const endNs = ES.AddZonedDateTime(instantStart, timeZone, calendar, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0);\n    const dayLengthNs = JSBI.subtract(endNs, JSBI.BigInt(GetSlot(instantStart, EPOCHNANOSECONDS)));\n    if (JSBI.lessThanOrEqual(dayLengthNs, ZERO)) {\n      throw new RangeError('cannot round a ZonedDateTime in a calendar with zero or negative length days');\n    }\n    ({ year, month, day, hour, minute, second, millisecond, microsecond, nanosecond } = ES.RoundISODateTime(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      roundingIncrement,\n      smallestUnit,\n      roundingMode,\n      // Days are guaranteed to be shorter than Number.MAX_SAFE_INTEGER\n      // (which can hold up to 104 days in nanoseconds)\n      JSBI.toNumber(dayLengthNs)\n    ));\n\n    // Now reset all DateTime fields but leave the TimeZone. The offset will\n    // also be retained if the new date/time values are still OK with the old\n    // offset. Otherwise the offset will be changed to be compatible with the\n    // new date/time values. If DST disambiguation is required, the `compatible`\n    // disambiguation algorithm will be used.\n    const offsetNs = ES.GetOffsetNanosecondsFor(timeZone, GetSlot(this, INSTANT));\n    const epochNanoseconds = ES.InterpretISODateTimeOffset(\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond,\n      nanosecond,\n      'option',\n      offsetNs,\n      timeZone,\n      'compatible',\n      'prefer',\n      /* matchMinute = */ false\n    );\n\n    return ES.CreateTemporalZonedDateTime(epochNanoseconds, timeZone, GetSlot(this, CALENDAR));\n  }\n  equals(otherParam: Params['equals'][0]): Return['equals'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const other = ES.ToTemporalZonedDateTime(otherParam);\n    const one = GetSlot(this, EPOCHNANOSECONDS);\n    const two = GetSlot(other, EPOCHNANOSECONDS);\n    if (!JSBI.equal(JSBI.BigInt(one), JSBI.BigInt(two))) return false;\n    if (!ES.TimeZoneEquals(GetSlot(this, TIME_ZONE), GetSlot(other, TIME_ZONE))) return false;\n    return ES.CalendarEquals(GetSlot(this, CALENDAR), GetSlot(other, CALENDAR));\n  }\n  toString(optionsParam: Params['toString'][0] = undefined): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n    const showCalendar = ES.ToCalendarNameOption(options);\n    const digits = ES.ToFractionalSecondDigits(options);\n    const showOffset = ES.ToShowOffsetOption(options);\n    const roundingMode = ES.ToTemporalRoundingMode(options, 'trunc');\n    const smallestUnit = ES.GetTemporalUnit(options, 'smallestUnit', 'time', undefined);\n    if (smallestUnit === 'hour') throw new RangeError('smallestUnit must be a time unit other than \"hour\"');\n    const showTimeZone = ES.ToTimeZoneNameOption(options);\n    const { precision, unit, increment } = ES.ToSecondsStringPrecisionRecord(smallestUnit, digits);\n    return ES.TemporalZonedDateTimeToString(this, precision, showCalendar, showTimeZone, showOffset, {\n      unit,\n      increment,\n      roundingMode\n    });\n  }\n  toLocaleString(\n    locales: Params['toLocaleString'][0] = undefined,\n    optionsParam: Params['toLocaleString'][1] = undefined\n  ): string {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const options = ES.GetOptionsObject(optionsParam);\n\n    const optionsCopy = ObjectCreate(null);\n    // This is not quite per specification, but this polyfill's DateTimeFormat\n    // already doesn't match the InitializeDateTimeFormat operation, and the\n    // access order might change anyway;\n    // see https://github.com/tc39/ecma402/issues/747\n    ES.CopyDataProperties(optionsCopy, options, ['timeZone']);\n\n    if (options.timeZone !== undefined) {\n      throw new TypeError('ZonedDateTime toLocaleString does not accept a timeZone option');\n    }\n\n    if (\n      optionsCopy.year === undefined &&\n      optionsCopy.month === undefined &&\n      optionsCopy.day === undefined &&\n      optionsCopy.weekday === undefined &&\n      optionsCopy.dateStyle === undefined &&\n      optionsCopy.hour === undefined &&\n      optionsCopy.minute === undefined &&\n      optionsCopy.second === undefined &&\n      optionsCopy.timeStyle === undefined &&\n      optionsCopy.dayPeriod === undefined &&\n      optionsCopy.timeZoneName === undefined\n    ) {\n      optionsCopy.timeZoneName = 'short';\n      // The rest of the defaults will be filled in by formatting the Instant\n    }\n\n    let timeZone = ES.ToTemporalTimeZoneIdentifier(GetSlot(this, TIME_ZONE));\n    if (ES.IsTimeZoneOffsetString(timeZone)) {\n      // Note: https://github.com/tc39/ecma402/issues/683 will remove this\n      throw new RangeError('toLocaleString does not support offset string time zones');\n    }\n    timeZone = ES.GetCanonicalTimeZoneIdentifier(timeZone);\n    optionsCopy.timeZone = timeZone;\n\n    const formatter = new DateTimeFormat(locales, optionsCopy);\n\n    const localeCalendarIdentifier = ES.Call(customResolvedOptions, formatter, []).calendar;\n    const calendarIdentifier = ES.ToTemporalCalendarIdentifier(GetSlot(this, CALENDAR));\n    if (\n      calendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== 'iso8601' &&\n      localeCalendarIdentifier !== calendarIdentifier\n    ) {\n      throw new RangeError(\n        `cannot format ZonedDateTime with calendar ${calendarIdentifier}` +\n          ` in locale with calendar ${localeCalendarIdentifier}`\n      );\n    }\n\n    return formatter.format(GetSlot(this, INSTANT));\n  }\n  toJSON(): Return['toJSON'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalZonedDateTimeToString(this, 'auto');\n  }\n  valueOf(): never {\n    throw new TypeError('use compare() or equals() to compare Temporal.ZonedDateTime');\n  }\n  startOfDay(): Return['startOfDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const DateTime = GetIntrinsic('%Temporal.PlainDateTime%');\n    const calendar = GetSlot(this, CALENDAR);\n    const dtStart = new DateTime(\n      GetSlot(dt, ISO_YEAR),\n      GetSlot(dt, ISO_MONTH),\n      GetSlot(dt, ISO_DAY),\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      calendar\n    );\n    const timeZone = GetSlot(this, TIME_ZONE);\n    const instant = ES.GetInstantFor(timeZone, dtStart, 'compatible');\n    return ES.CreateTemporalZonedDateTime(GetSlot(instant, EPOCHNANOSECONDS), timeZone, calendar);\n  }\n  toInstant(): Return['toInstant'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const TemporalInstant = GetIntrinsic('%Temporal.Instant%');\n    return new TemporalInstant(GetSlot(this, EPOCHNANOSECONDS));\n  }\n  toPlainDate(): Return['toPlainDate'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToDate(dateTime(this));\n  }\n  toPlainTime(): Return['toPlainTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.TemporalDateTimeToTime(dateTime(this));\n  }\n  toPlainDateTime(): Return['toPlainDateTime'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return dateTime(this);\n  }\n  toPlainYearMonth(): Return['toPlainYearMonth'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['monthCode', 'year'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarYearMonthFromFields(calendar, fields);\n  }\n  toPlainMonthDay(): Return['toPlainMonthDay'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const calendar = GetSlot(this, CALENDAR);\n    const fieldNames = ES.CalendarFields(calendar, ['day', 'monthCode'] as const);\n    const fields = ES.PrepareTemporalFields(this, fieldNames, []);\n    return ES.CalendarMonthDayFromFields(calendar, fields);\n  }\n  getISOFields(): Return['getISOFields'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    const dt = dateTime(this);\n    const tz = GetSlot(this, TIME_ZONE);\n    return {\n      calendar: GetSlot(this, CALENDAR),\n      isoDay: GetSlot(dt, ISO_DAY),\n      isoHour: GetSlot(dt, ISO_HOUR),\n      isoMicrosecond: GetSlot(dt, ISO_MICROSECOND),\n      isoMillisecond: GetSlot(dt, ISO_MILLISECOND),\n      isoMinute: GetSlot(dt, ISO_MINUTE),\n      isoMonth: GetSlot(dt, ISO_MONTH),\n      isoNanosecond: GetSlot(dt, ISO_NANOSECOND),\n      isoSecond: GetSlot(dt, ISO_SECOND),\n      isoYear: GetSlot(dt, ISO_YEAR),\n      offset: ES.GetOffsetStringFor(tz, GetSlot(this, INSTANT)),\n      timeZone: tz\n    };\n  }\n  getCalendar(): Return['getCalendar'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalCalendarObject(GetSlot(this, CALENDAR));\n  }\n  getTimeZone(): Return['getTimeZone'] {\n    if (!ES.IsTemporalZonedDateTime(this)) throw new TypeError('invalid receiver');\n    return ES.ToTemporalTimeZoneObject(GetSlot(this, TIME_ZONE));\n  }\n\n  static from(item: Params['from'][0], optionsParam: Params['from'][1] = undefined): Return['from'] {\n    const options = ES.GetOptionsObject(optionsParam);\n    if (ES.IsTemporalZonedDateTime(item)) {\n      ES.ToTemporalDisambiguation(options); // validate and ignore\n      ES.ToTemporalOffset(options, 'reject');\n      ES.ToTemporalOverflow(options);\n      return ES.CreateTemporalZonedDateTime(\n        GetSlot(item, EPOCHNANOSECONDS),\n        GetSlot(item, TIME_ZONE),\n        GetSlot(item, CALENDAR)\n      );\n    }\n    return ES.ToTemporalZonedDateTime(item, options);\n  }\n  static compare(oneParam: Params['compare'][0], twoParam: Params['compare'][1]): Return['compare'] {\n    const one = ES.ToTemporalZonedDateTime(oneParam);\n    const two = ES.ToTemporalZonedDateTime(twoParam);\n    const ns1 = GetSlot(one, EPOCHNANOSECONDS);\n    const ns2 = GetSlot(two, EPOCHNANOSECONDS);\n    if (JSBI.lessThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return -1;\n    if (JSBI.greaterThan(JSBI.BigInt(ns1), JSBI.BigInt(ns2))) return 1;\n    return 0;\n  }\n  [Symbol.toStringTag]!: 'Temporal.ZonedDateTime';\n}\n\nMakeIntrinsicClass(ZonedDateTime, 'Temporal.ZonedDateTime');\n\nfunction dateTime(zdt: Temporal.ZonedDateTime) {\n  return ES.GetPlainDateTimeFor(GetSlot(zdt, TIME_ZONE), GetSlot(zdt, INSTANT), GetSlot(zdt, CALENDAR));\n}\n", "import { Instant } from './instant';\n\nimport JSBI from 'jsbi';\nimport { MILLION } from './ecmascript';\n\nexport function toTemporalInstant(this: Date) {\n  // Observable access to valueOf is not correct here, but unavoidable\n  const epochNanoseconds = JSBI.multiply(JSBI.BigInt(+this), MILLION);\n  return new Instant(epochNanoseconds);\n}\n", "// This entry point treats Temporal as a library, and does not polyfill it onto\n// the global object.\n// This is in order to avoid breaking the web in the future, if the polyfill\n// gains wide adoption before the API is finalized. We do not want checks such\n// as `if (typeof Temporal === 'undefined')` in the wild, until browsers start\n// shipping the finalized API.\n\nimport * as Temporal from './temporal';\nimport * as Intl from './intl';\nimport { toTemporalInstant } from './legacydate';\n\n// Work around https://github.com/babel/babel/issues/2025.\nconst types = [\n  Temporal.Instant,\n  Temporal.Calendar,\n  Temporal.PlainDate,\n  Temporal.PlainDateTime,\n  Temporal.Duration,\n  Temporal.PlainMonthDay,\n  // Temporal.Now, // plain object (not a constructor), so no `prototype`\n  Temporal.PlainTime,\n  Temporal.TimeZone,\n  Temporal.PlainYearMonth,\n  Temporal.ZonedDateTime\n];\nfor (const type of types) {\n  const descriptor = Object.getOwnPropertyDescriptor(type, 'prototype') as PropertyDescriptor;\n  if (descriptor.configurable || descriptor.enumerable || descriptor.writable) {\n    descriptor.configurable = false;\n    descriptor.enumerable = false;\n    descriptor.writable = false;\n    Object.defineProperty(type, 'prototype', descriptor);\n  }\n}\n\nexport { Temporal, Intl, toTemporalInstant };\n", "import { Temporal } from '@js-temporal/polyfill';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n/**\n * Time related utilities.\n */\nexport class Time {\n  /**\n   * sleeps for the desired duration\n   * @param durationInMillisecond the desired amount of sleep time\n   * @returns when the provided duration has passed\n   */\n  public static async sleep(durationInMillisecond: number): Promise<void> {\n    return new Promise(resolve => setTimeout(resolve, durationInMillisecond));\n  }\n\n  /**\n   * We must sleep for at least 2ms to avoid timestamp collisions during testing.\n   * https://github.com/TBD54566975/dwn-sdk-js/issues/481\n   */\n  public static async minimalSleep(): Promise<void> {\n    await Time.sleep(2);\n  }\n\n  /**\n   * Returns an UTC ISO-8601 timestamp with microsecond precision accepted by DWN.\n   * using @js-temporal/polyfill\n   */\n  public static getCurrentTimestamp(): string {\n    return Temporal.Now.instant().toString({ smallestUnit: 'microseconds' });\n  }\n\n  /**\n   * Creates a UTC ISO-8601 timestamp in microsecond precision accepted by DWN.\n   * @param options - Options for creating the timestamp.\n   * @returns string\n   */\n  public static createTimestamp(options: {\n    year?: number, month?: number, day?: number, hour?: number, minute?: number, second?: number, millisecond?: number, microsecond?: number\n  }): string {\n    const { year, month, day, hour, minute, second, millisecond, microsecond } = options;\n    return Temporal.ZonedDateTime.from({\n      timeZone: 'UTC',\n      year,\n      month,\n      day,\n      hour,\n      minute,\n      second,\n      millisecond,\n      microsecond\n    }).toInstant().toString({ smallestUnit: 'microseconds' });\n  }\n\n  /**\n   * Creates a UTC ISO-8601 timestamp offset from now or given timestamp accepted by DWN.\n   * @param offset Negative number means offset into the past.\n   */\n  public static createOffsetTimestamp(offset: { seconds: number }, timestamp?: string): string {\n    const timestampInstant = timestamp ? Temporal.Instant.from(timestamp) : Temporal.Now.instant();\n    const offsetDuration = Temporal.Duration.from(offset);\n    const offsetInstant = timestampInstant.add(offsetDuration);\n    return offsetInstant.toString({ smallestUnit: 'microseconds' });\n  }\n\n  /**\n   * Validates that the provided timestamp is a valid number\n   * @param timestamp the timestamp to validate\n   * @throws DwnError if timestamp is not a valid number\n   */\n  public static validateTimestamp(timestamp: string): void {\n    try {\n      Temporal.Instant.from(timestamp);\n    } catch {\n      throw new DwnError(DwnErrorCode.TimestampInvalid, `Invalid timestamp: ${timestamp}`);\n    }\n  }\n}\n", "import type { GeneralJws } from '../types/jws-types.js';\nimport type { KeyValues } from '../types/query-types.js';\nimport type { MessageInterface } from '../types/message-interface.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { PublicJwk } from '../types/jose-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type {\n  DataEncodedRecordsWriteMessage,\n  EncryptedKey,\n  EncryptionProperty,\n  InternalRecordsWriteMessage,\n  RecordsWriteAttestationPayload,\n  RecordsWriteDescriptor,\n  RecordsWriteMessage,\n  RecordsWriteSignaturePayload,\n  RecordsWriteTags\n} from '../types/records-types.js';\nimport type { GenericMessage, GenericSignaturePayload } from '../types/message-types.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { Encryption } from '../utils/encryption.js';\nimport { EncryptionAlgorithm } from '../utils/encryption.js';\nimport { GeneralJwsBuilder } from '../jose/jws/general/builder.js';\nimport { Jws } from '../utils/jws.js';\nimport { KeyDerivationScheme } from '../utils/hd-key.js';\nimport { Message } from '../core/message.js';\nimport { PermissionGrant } from '../protocols/permission-grant.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Secp256k1 } from '../utils/secp256k1.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type RecordsWriteOptions = {\n  recipient?: string;\n  protocol?: string;\n  protocolPath?: string;\n  protocolRole?: string;\n  schema?: string;\n  tags?: RecordsWriteTags;\n  recordId?: string;\n\n  /**\n   * Must be given if this message is for a non-root protocol record.\n   * If not given, it either means this write is for a root protocol record or a flat-space record.\n   */\n  parentContextId?: string;\n\n  data?: Uint8Array;\n  dataCid?: string;\n  dataSize?: number;\n  dateCreated?: string;\n  messageTimestamp?: string;\n  published?: boolean;\n  datePublished?: string;\n  dataFormat: string;\n\n  /**\n   * The signer of the message, which is commonly the author, but can also be a delegate.\n   */\n  signer?: Signer;\n\n  /**\n   * The delegated grant invoked to sign on behalf of the logical author, which is the grantor of the delegated grant.\n   */\n  delegatedGrant?: DataEncodedRecordsWriteMessage;\n\n  attestationSigners?: Signer[];\n  encryptionInput?: EncryptionInput;\n  permissionGrantId?: string;\n};\n\n/**\n * Input that describes how data is encrypted as spec-ed in TP18 (https://github.com/TBD54566975/technical-proposals/pull/6).\n */\nexport type EncryptionInput = {\n  /**\n   * Algorithm used for encrypting the Data. Uses {EncryptionAlgorithm.Aes256Ctr} if not given.\n   */\n  algorithm?: EncryptionAlgorithm;\n\n  /**\n   * Initialization vector used for encrypting the data.\n   */\n  initializationVector: Uint8Array;\n\n  /**\n   * Symmetric key used to encrypt the data.\n   */\n  key: Uint8Array;\n\n  /**\n   * Array of input that specifies how the symmetric key is encrypted.\n   * Each entry in the array will result in a unique ciphertext of the symmetric key.\n   */\n  keyEncryptionInputs: KeyEncryptionInput[];\n};\n\n/**\n * Input that specifies how a symmetric key is encrypted.\n */\nexport type KeyEncryptionInput = {\n  /**\n   * Key derivation scheme used to derive the public key to encrypt the symmetric key.\n   */\n  derivationScheme: KeyDerivationScheme;\n\n  /**\n   * Fully qualified ID of root public key used derive the public key to be used to to encrypt the symmetric key.\n   * (e.g. did:example:abc#encryption-key-id)\n   */\n  publicKeyId: string;\n\n  /**\n   * Public key to be used to encrypt the symmetric key.\n   */\n  publicKey: PublicJwk;\n\n  /**\n   * Algorithm used for encrypting the symmetric key. Uses {EncryptionAlgorithm.EciesSecp256k1} if not given.\n   */\n  algorithm?: EncryptionAlgorithm;\n};\n\nexport type CreateFromOptions = {\n  recordsWriteMessage: RecordsWriteMessage,\n  data?: Uint8Array;\n\n  /**\n   * The data format of the new data. If not given, the data format from the existing message will be used.\n   */\n  dataFormat?: string;\n\n  published?: boolean;\n  tags?: RecordsWriteTags;\n  messageTimestamp?: string;\n  datePublished?: string;\n\n\n  /**\n   * The signer of the message, which is commonly the author, but can also be a delegate.\n   */\n  signer?: Signer;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DataEncodedRecordsWriteMessage;\n\n  attestationSigners?: Signer[];\n  encryptionInput?: EncryptionInput;\n  protocolRole?: string;\n};\n\n/**\n * A class representing a RecordsWrite DWN message.\n * NOTE: Unable to extend `AbstractMessage` directly because the incompatible `_message` type, which is not just a generic `<M>` type.\n */\nexport class RecordsWrite implements MessageInterface<RecordsWriteMessage> {\n  private parentContextId: string | undefined;\n\n  private _message: InternalRecordsWriteMessage;\n  /**\n   * Valid JSON message representing this RecordsWrite.\n   * @throws `DwnErrorCode.RecordsWriteMissingSigner` if the message is not signed yet.\n   */\n  public get message(): RecordsWriteMessage {\n    if (this._message.authorization === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteMissingSigner,\n        'This RecordsWrite is not yet signed, JSON message cannot be generated from an incomplete state.'\n      );\n    }\n\n    return this._message as RecordsWriteMessage;\n  }\n\n  private _author: string | undefined;\n  public get author(): string | undefined {\n    return this._author;\n  }\n\n  private _signaturePayload: RecordsWriteSignaturePayload | undefined;\n  public get signaturePayload(): RecordsWriteSignaturePayload | undefined {\n    return this._signaturePayload;\n  }\n\n  private _owner: string | undefined;\n  /**\n   * The owner DID of the message if owner signature is present in the message; `undefined` otherwise.\n   * This is the logical owner of the message, not to be confused with the actual signer of the owner signature,\n   * this is because the signer of the owner signature may not be the actual DWN owner, but a delegate authorized by the owner.\n   */\n  public get owner(): string | undefined {\n    return this._owner;\n  }\n\n  private _ownerSignaturePayload: GenericSignaturePayload | undefined;\n  /**\n   * Decoded owner signature payload.\n   */\n  public get ownerSignaturePayload(): GenericSignaturePayload | undefined {\n    return this._ownerSignaturePayload;\n  }\n\n  /**\n   * If this message is signed by an author-delegate.\n   */\n  public get isSignedByAuthorDelegate(): boolean {\n    return Message.isSignedByAuthorDelegate(this._message);\n  }\n\n  /**\n   * If this message is signed by an owner-delegate.\n   */\n  public get isSignedByOwnerDelegate(): boolean {\n    return Message.isSignedByOwnerDelegate(this._message);\n  }\n\n  /**\n   * Gets the signer of this message.\n   * This is not to be confused with the logical author of the message.\n   */\n  public get signer(): string | undefined {\n    return Message.getSigner(this._message);\n  }\n\n  /**\n   * Gets the signer of owner signature; `undefined` if owner signature is not present in the message.\n   * This is not to be confused with the logical owner {@link #owner} of the message,\n   * this is because the signer of the owner signature may not be the actual DWN owner, but a delegate authorized by the owner.\n   * In the case that the owner signature is signed by the actual DWN owner, this value will be the same as {@link #owner}.\n   */\n  public get ownerSignatureSigner(): string | undefined {\n    if (this._message.authorization?.ownerSignature === undefined) {\n      return undefined;\n    }\n\n    const signer = Jws.getSignerDid(this._message.authorization.ownerSignature.signatures[0]);\n    return signer;\n  }\n\n  readonly attesters: string[];\n\n  private constructor(message: InternalRecordsWriteMessage, parentContextId?: string) {\n    this.parentContextId = parentContextId;\n    this._message = message;\n\n    if (message.authorization !== undefined) {\n      this._author = Message.getAuthor(message as RecordsWriteMessage);\n\n      this._signaturePayload = Jws.decodePlainObjectPayload(message.authorization.signature);\n\n      if (message.authorization.ownerSignature !== undefined) {\n        // if the message authorization contains owner delegated grant, the owner would be the grantor of the grant\n        // else the owner would be the signer of the owner signature\n        if (message.authorization.ownerDelegatedGrant !== undefined) {\n          this._owner = Message.getSigner(message.authorization.ownerDelegatedGrant);\n        } else {\n          this._owner = Jws.getSignerDid(message.authorization.ownerSignature.signatures[0]);\n        }\n\n        this._ownerSignaturePayload = Jws.decodePlainObjectPayload(message.authorization.ownerSignature);\n      }\n    }\n\n    this.attesters = RecordsWrite.getAttesters(message);\n\n    // consider converting isInitialWrite() & getEntryId() into properties for performance and convenience\n  }\n\n  /**\n   * Parses a RecordsWrite message and returns a {RecordsWrite} instance.\n   */\n  public static async parse(recordsWriteMessage: RecordsWriteMessage): Promise<RecordsWrite> {\n    // Make a copy so that the stored copy is not subject to external, unexpected modification.\n    const message = JSON.parse(JSON.stringify(recordsWriteMessage)) as RecordsWriteMessage;\n\n    // asynchronous checks that are required by the constructor to initialize members properly\n\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor, 'RecordsWriteSignaturePayload');\n\n    if (message.authorization.ownerSignature !== undefined) {\n      await Message.validateSignatureStructure(message.authorization.ownerSignature, message.descriptor);\n    }\n\n    await RecordsWrite.validateAttestationIntegrity(message);\n\n    const recordsWrite = new RecordsWrite(message);\n\n    await recordsWrite.validateIntegrity(); // RecordsWrite specific data integrity check\n\n    return recordsWrite;\n  }\n\n  /**\n   * Creates a RecordsWrite message.\n   * @param options.recordId If `undefined`, will be auto-filled as the initial message as convenience for developer.\n   * @param options.data Data used to compute the `dataCid`, must be the encrypted data bytes if `options.encryptionInput` is given.\n   *                     Must specify `options.dataCid` if `undefined`.\n   * @param options.dataCid CID of the data that is already stored in the DWN. Must specify `options.data` if `undefined`.\n   * @param options.dataSize Size of data in number of bytes. Must be defined if `options.dataCid` is defined; must be `undefined` otherwise.\n   * @param options.dateCreated If `undefined`, it will be auto-filled with current time.\n   * @param options.messageTimestamp If `undefined`, it will be auto-filled with current time.\n   * @param options.parentContextId Must be given if this message is for a non-root protocol record.\n   *                                If not given, it either means this write is for a root protocol record or a flat-space record.\n   */\n  public static async create(options: RecordsWriteOptions): Promise<RecordsWrite> {\n    if ((options.protocol === undefined && options.protocolPath !== undefined) ||\n      (options.protocol !== undefined && options.protocolPath === undefined)) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive, '`protocol` and `protocolPath` must both be defined or undefined at the same time');\n    }\n\n    if ((options.data === undefined && options.dataCid === undefined) ||\n      (options.data !== undefined && options.dataCid !== undefined)) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateDataAndDataCidMutuallyExclusive, 'one and only one parameter between `data` and `dataCid` is required');\n    }\n\n    if ((options.dataCid === undefined && options.dataSize !== undefined) ||\n      (options.dataCid !== undefined && options.dataSize === undefined)) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateDataCidAndDataSizeMutuallyInclusive, '`dataCid` and `dataSize` must both be defined or undefined at the same time');\n    }\n\n    if (options.signer === undefined && options.delegatedGrant !== undefined) {\n      throw new DwnError(DwnErrorCode.RecordsWriteCreateMissingSigner, '`signer` must be given when `delegatedGrant` is given');\n    }\n\n    const dataCid = options.dataCid ?? await Cid.computeDagPbCidFromBytes(options.data!);\n    const dataSize = options.dataSize ?? options.data!.length;\n\n    const currentTime = Time.getCurrentTimestamp();\n\n    const descriptor: RecordsWriteDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Write,\n      protocol         : options.protocol !== undefined ? normalizeProtocolUrl(options.protocol) : undefined,\n      protocolPath     : options.protocolPath,\n      recipient        : options.recipient,\n      schema           : options.schema !== undefined ? normalizeSchemaUrl(options.schema) : undefined,\n      tags             : options.tags,\n      parentId         : RecordsWrite.getRecordIdFromContextId(options.parentContextId),\n      dataCid,\n      dataSize,\n      dateCreated      : options.dateCreated ?? currentTime,\n      messageTimestamp : options.messageTimestamp ?? currentTime,\n      published        : options.published,\n      datePublished    : options.datePublished,\n      dataFormat       : options.dataFormat\n    };\n\n    // generate `datePublished` if the message is to be published but `datePublished` is not given\n    if (options.published === true &&\n      options.datePublished === undefined) {\n      descriptor.datePublished = currentTime;\n    }\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // `recordId` computation\n    const recordId = options.recordId;\n\n    // `attestation` generation\n    const descriptorCid = await Cid.computeCid(descriptor);\n    const attestation = await RecordsWrite.createAttestation(descriptorCid, options.attestationSigners);\n\n    // `encryption` generation\n    const encryption = await RecordsWrite.createEncryptionProperty(descriptor, options.encryptionInput);\n\n    const message: InternalRecordsWriteMessage = {\n      recordId,\n      descriptor\n    };\n\n    // assign optional properties only if they exist\n    if (attestation !== undefined) { message.attestation = attestation; }\n    if (encryption !== undefined) { message.encryption = encryption; }\n\n    const recordsWrite = new RecordsWrite(message, options.parentContextId);\n\n    if (options.signer !== undefined) {\n      await recordsWrite.sign({\n        signer            : options.signer,\n        delegatedGrant    : options.delegatedGrant,\n        permissionGrantId : options.permissionGrantId,\n        protocolRole      : options.protocolRole\n      });\n    }\n\n    return recordsWrite;\n  }\n\n  private static getRecordIdFromContextId(contextId: string | undefined): string | undefined {\n    return contextId?.split('/').filter(segment => segment !== '').pop();\n  }\n\n  /**\n   * Convenience method that creates a message by:\n   * 1. Copying over immutable properties from the given source message\n   * 2. Copying over mutable properties that are not overwritten from the given source message\n   * 3. Replace the mutable properties that are given new value\n   * @param options.recordsWriteMessage Message that the new RecordsWrite will be based from.\n   * @param options.messageTimestamp The new date the record is modified. If not given, current time will be used .\n   * @param options.data The new data or the record. If not given, data from given message will be used.\n   * @param options.published The new published state. If not given, then will be set to `true` if {options.messageTimestamp} is given;\n   * else the state from given message will be used.\n   * @param options.publishedDate The new date the record is modified. If not given, then:\n   * - will not be set if the record will be unpublished as the result of this RecordsWrite; else\n   * - will be set to the same published date as the given message if it wss already published; else\n   * - will be set to current time (because this is a toggle from unpublished to published)\n   */\n  public static async createFrom(options: CreateFromOptions): Promise<RecordsWrite> {\n    const sourceMessage = options.recordsWriteMessage;\n    const sourceRecordsWrite = await RecordsWrite.parse(sourceMessage);\n    const currentTime = Time.getCurrentTimestamp();\n\n    // inherit published value from parent if neither published nor datePublished is specified\n    const published = options.published ?? (options.datePublished ? true : sourceMessage.descriptor.published);\n    // use current time if published but no explicit time given\n    let datePublished: string | undefined = undefined;\n    // if given explicitly published dated\n    if (options.datePublished) {\n      datePublished = options.datePublished;\n    } else {\n      // if this RecordsWrite will publish the record\n      if (published) {\n        // the parent was already published, inherit the same published date\n        if (sourceMessage.descriptor.published) {\n          datePublished = sourceMessage.descriptor.datePublished;\n        } else {\n          // this is a toggle from unpublished to published, use current time\n          datePublished = currentTime;\n        }\n      }\n    }\n\n    const createOptions: RecordsWriteOptions = {\n      // immutable properties below, just copy from the source message\n      recipient          : sourceMessage.descriptor.recipient,\n      recordId           : sourceMessage.recordId,\n      dateCreated        : sourceMessage.descriptor.dateCreated,\n      protocol           : sourceMessage.descriptor.protocol,\n      protocolPath       : sourceMessage.descriptor.protocolPath,\n      schema             : sourceMessage.descriptor.schema,\n      parentContextId    : Records.getParentContextFromOfContextId(sourceMessage.contextId),\n      // mutable properties below\n      messageTimestamp   : options.messageTimestamp ?? currentTime,\n      published,\n      datePublished,\n      tags               : options.tags,\n      data               : options.data,\n      dataCid            : options.data ? undefined : sourceMessage.descriptor.dataCid, // if new `data` not given, use value from source message\n      dataSize           : options.data ? undefined : sourceMessage.descriptor.dataSize, // if new `data` not given, use value from source message\n      dataFormat         : options.dataFormat ?? sourceMessage.descriptor.dataFormat,\n      protocolRole       : options.protocolRole ?? sourceRecordsWrite.signaturePayload!.protocolRole, // if not given, use value from source message\n      delegatedGrant     : options.delegatedGrant,\n      // finally still need signers\n      signer             : options.signer,\n      attestationSigners : options.attestationSigners\n    };\n\n    const recordsWrite = await RecordsWrite.create(createOptions);\n    return recordsWrite;\n  }\n\n  /**\n   * Called by `JSON.stringify(...)` automatically.\n   */\n  toJSON(): RecordsWriteMessage {\n    return this.message;\n  }\n\n  /**\n   * Encrypts the symmetric encryption key using the public keys given and attach the resulting `encryption` property to the RecordsWrite.\n   */\n  public async encryptSymmetricEncryptionKey(encryptionInput: EncryptionInput): Promise<void> {\n    this._message.encryption = await RecordsWrite.createEncryptionProperty(this._message.descriptor, encryptionInput);\n\n    // opportunity here to re-sign instead of remove\n    delete this._message.authorization;\n    this._signaturePayload = undefined;\n    this._author = undefined;\n  }\n\n  /**\n   * Signs the RecordsWrite, the signer is commonly the author, but can also be a delegate.\n   */\n  public async sign(options: {\n    signer: Signer,\n    delegatedGrant?: DataEncodedRecordsWriteMessage,\n    permissionGrantId?: string,\n    protocolRole?: string\n  }): Promise<void> {\n    const { signer, delegatedGrant, permissionGrantId, protocolRole } = options;\n\n    // compute delegated grant ID and author if delegated grant is given\n    let delegatedGrantId;\n    let authorDid;\n    if (delegatedGrant !== undefined) {\n      delegatedGrantId = await Message.getCid(delegatedGrant);\n      authorDid = Jws.getSignerDid(delegatedGrant.authorization.signature.signatures[0]);\n    } else {\n      authorDid = Jws.extractDid(signer.keyId);\n    }\n\n    const descriptor = this._message.descriptor;\n    const descriptorCid = await Cid.computeCid(descriptor);\n\n    // compute `recordId` if not given at construction time\n    this._message.recordId = this._message.recordId ?? await RecordsWrite.getEntryId(authorDid, descriptor);\n\n    // compute `contextId` if this is a protocol-space record\n    if (this._message.descriptor.protocol !== undefined) {\n      // if `parentContextId` is not given, this is a root protocol record\n      if (this.parentContextId === undefined || this.parentContextId === '') {\n        this._message.contextId = this._message.recordId;\n      } else {\n        // else this is a non-root protocol record\n\n        this._message.contextId = this.parentContextId + '/' + this._message.recordId;\n      }\n    }\n\n    // `signature` generation\n    const signature = await RecordsWrite.createSignerSignature({\n      recordId    : this._message.recordId,\n      contextId   : this._message.contextId,\n      descriptorCid,\n      attestation : this._message.attestation,\n      encryption  : this._message.encryption,\n      signer,\n      delegatedGrantId,\n      permissionGrantId,\n      protocolRole\n    });\n\n    this._message.authorization = { signature };\n\n    if (delegatedGrant !== undefined) {\n      this._message.authorization.authorDelegatedGrant = delegatedGrant;\n    }\n\n    // there is opportunity to optimize here as the payload is constructed within `createAuthorization(...)`\n    this._signaturePayload = Jws.decodePlainObjectPayload(signature);\n    this._author = authorDid;\n  }\n\n  /**\n   * Signs the `RecordsWrite` as the DWN owner.\n   * This is used when the DWN owner wants to retain a copy of a message that the owner did not author.\n   * NOTE: requires the `RecordsWrite` to already have the author's signature.\n   */\n  public async signAsOwner(signer: Signer): Promise<void> {\n    if (this._author === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteSignAsOwnerUnknownAuthor,\n        'Unable to sign as owner without message signature because owner needs to sign over `recordId` which depends on author DID.');\n    }\n\n    const descriptor = this._message.descriptor;\n    const ownerSignature = await Message.createSignature(descriptor, signer);\n\n    this._message.authorization!.ownerSignature = ownerSignature;\n\n    this._ownerSignaturePayload = Jws.decodePlainObjectPayload(ownerSignature);\n    this._owner = Jws.extractDid(signer.keyId);\n    ;\n  }\n\n  /**\n   * Signs the `RecordsWrite` as the DWN owner-delegate.\n   * This is used when a DWN owner-delegate wants to retain a copy of a message that the owner did not author.\n   * NOTE: requires the `RecordsWrite` to already have the author's signature.\n   */\n  public async signAsOwnerDelegate(signer: Signer, delegatedGrant: DataEncodedRecordsWriteMessage): Promise<void> {\n    if (this._author === undefined) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteSignAsOwnerDelegateUnknownAuthor,\n        'Unable to sign as owner delegate without message signature because owner delegate needs to sign over `recordId` which depends on author DID.');\n    }\n\n    const delegatedGrantId = await Message.getCid(delegatedGrant);\n\n    const descriptor = this._message.descriptor;\n    const ownerSignature = await Message.createSignature(descriptor, signer, { delegatedGrantId });\n\n    this._message.authorization!.ownerSignature = ownerSignature;\n    this._message.authorization!.ownerDelegatedGrant = delegatedGrant;\n\n    this._ownerSignaturePayload = Jws.decodePlainObjectPayload(ownerSignature);\n    this._owner = Jws.getSignerDid(delegatedGrant.authorization.signature.signatures[0]);\n  }\n\n  /**\n   * Validates the integrity of the RecordsWrite message assuming the message passed basic schema validation.\n   * There is opportunity to integrate better with `validateSchema(...)`\n   */\n  private async validateIntegrity(): Promise<void> {\n    // if the new message is the initial write\n    const isInitialWrite = await this.isInitialWrite();\n    if (isInitialWrite) {\n      // `messageTimestamp` and `dateCreated` equality check\n      const dateRecordCreated = this.message.descriptor.dateCreated;\n      const messageTimestamp = this.message.descriptor.messageTimestamp;\n      if (messageTimestamp !== dateRecordCreated) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteValidateIntegrityDateCreatedMismatch,\n          `messageTimestamp ${messageTimestamp} must match dateCreated ${dateRecordCreated} for the initial write`\n        );\n      }\n\n      // if the message is also a protocol context root, the `contextId` must match the expected deterministic value\n      if (this.message.descriptor.protocol !== undefined &&\n        this.message.descriptor.parentId === undefined) {\n        const expectedContextId = await this.getEntryId();\n\n        if (this.message.contextId !== expectedContextId) {\n          throw new DwnError(\n            DwnErrorCode.RecordsWriteValidateIntegrityContextIdMismatch,\n            `contextId in message: ${this.message.contextId} does not match deterministic contextId: ${expectedContextId}`\n          );\n        }\n      }\n    }\n\n    // NOTE: validateSignatureStructure() call earlier enforces the presence of `authorization` and thus `signature` in RecordsWrite\n    const signaturePayload = this.signaturePayload!;\n\n    // make sure the `recordId` in message is the same as the `recordId` in the payload of the message signature\n    if (this.message.recordId !== signaturePayload.recordId) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteValidateIntegrityRecordIdUnauthorized,\n        `recordId in message ${this.message.recordId} does not match recordId in authorization: ${signaturePayload.recordId}`\n      );\n    }\n\n    // if `contextId` is given in message, make sure the same `contextId` is in the payload of the message signature\n    if (this.message.contextId !== signaturePayload.contextId) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteValidateIntegrityContextIdNotInSignerSignaturePayload,\n        `contextId in message ${this.message.contextId} does not match contextId in authorization: ${signaturePayload.contextId}`\n      );\n    }\n\n    await Records.validateDelegatedGrantReferentialIntegrity(this.message, signaturePayload, this.ownerSignaturePayload);\n\n    // if `attestation` is given in message, make sure the correct `attestationCid` is in the payload of the message signature\n    if (signaturePayload.attestationCid !== undefined) {\n      const expectedAttestationCid = await Cid.computeCid(this.message.attestation);\n      const actualAttestationCid = signaturePayload.attestationCid;\n      if (actualAttestationCid !== expectedAttestationCid) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteValidateIntegrityAttestationMismatch,\n          `CID ${expectedAttestationCid} of attestation property in message does not match attestationCid in authorization: ${actualAttestationCid}`\n        );\n      }\n    }\n\n    // if `encryption` is given in message, make sure the correct `encryptionCid` is in the payload of the message signature\n    if (signaturePayload.encryptionCid !== undefined) {\n      const expectedEncryptionCid = await Cid.computeCid(this.message.encryption);\n      const actualEncryptionCid = signaturePayload.encryptionCid;\n      if (actualEncryptionCid !== expectedEncryptionCid) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteValidateIntegrityEncryptionCidMismatch,\n          `CID ${expectedEncryptionCid} of encryption property in message does not match encryptionCid in authorization: ${actualEncryptionCid}`\n        );\n      }\n    }\n\n    if (this.message.descriptor.protocol !== undefined) {\n      validateProtocolUrlNormalized(this.message.descriptor.protocol);\n    }\n    if (this.message.descriptor.schema !== undefined) {\n      validateSchemaUrlNormalized(this.message.descriptor.schema);\n    }\n\n    Time.validateTimestamp(this.message.descriptor.messageTimestamp);\n    Time.validateTimestamp(this.message.descriptor.dateCreated);\n    if (this.message.descriptor.datePublished) {\n      Time.validateTimestamp(this.message.descriptor.datePublished);\n    }\n  }\n\n  /**\n   * Validates the structural integrity of the `attestation` property.\n   * NOTE: signature is not verified.\n   */\n  private static async validateAttestationIntegrity(message: RecordsWriteMessage): Promise<void> {\n    if (message.attestation === undefined) {\n      return;\n    }\n\n    // TODO: multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/TBD54566975/dwn-sdk-js/issues/205)\n    if (message.attestation.signatures.length !== 1) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteAttestationIntegrityMoreThanOneSignature,\n        `Currently implementation only supports 1 attester, but got ${message.attestation.signatures.length}`\n      );\n    }\n\n    const payloadJson = Jws.decodePlainObjectPayload(message.attestation);\n    const { descriptorCid } = payloadJson;\n\n    // `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message\n    const expectedDescriptorCid = await Cid.computeCid(message.descriptor);\n    if (descriptorCid !== expectedDescriptorCid) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteAttestationIntegrityDescriptorCidMismatch,\n        `descriptorCid ${descriptorCid} does not match expected descriptorCid ${expectedDescriptorCid}`\n      );\n    }\n\n    // check to ensure that no other unexpected properties exist in payload.\n    const propertyCount = Object.keys(payloadJson).length;\n    if (propertyCount > 1) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteAttestationIntegrityInvalidPayloadProperty,\n        `Only 'descriptorCid' is allowed in attestation payload, but got ${propertyCount} properties.`\n      );\n    }\n  };\n\n  /**\n   * Computes the deterministic Entry ID of this message.\n   */\n  public async getEntryId(): Promise<string> {\n    const entryId = await RecordsWrite.getEntryId(this.author, this.message.descriptor);\n    return entryId;\n  };\n\n  /**\n   * Computes the deterministic Entry ID of this message.\n   */\n  public static async getEntryId(author: string | undefined, descriptor: RecordsWriteDescriptor): Promise<string> {\n    if (author === undefined) {\n      throw new DwnError(DwnErrorCode.RecordsWriteGetEntryIdUndefinedAuthor, 'Property `author` is needed to compute entry ID.');\n    }\n\n    const entryIdInput = { ...descriptor };\n    (entryIdInput as any).author = author;\n\n    const cid = await Cid.computeCid(entryIdInput);\n    return cid;\n  };\n\n  /**\n   * Checks if the given message is the initial entry of a record.\n   */\n  public async isInitialWrite(): Promise<boolean> {\n    const entryId = await this.getEntryId();\n    return (entryId === this.message.recordId);\n  }\n\n  public async constructIndexes(\n    isLatestBaseState: boolean\n  ): Promise<KeyValues> {\n    const message = this.message;\n    // we want to process tags separately from the rest of descriptors as it is an object and not a primitive KeyValue type.\n    const { tags, ...descriptor } = message.descriptor;\n    delete descriptor.published; // handle `published` specifically further down\n\n    let indexes: KeyValues = {\n      ...descriptor,\n      isLatestBaseState,\n      published : !!message.descriptor.published,\n      author    : this.author!, //author will not be undefined when indexes are constructed as it's been authorized\n      recordId  : message.recordId,\n      entryId   : await RecordsWrite.getEntryId(this.author, this.message.descriptor)\n    };\n\n    // in order to avoid name clashes with first-class index keys\n    // we build the indexes with `tag.property_name` for each tag property.\n    // we only index tags if the message is the latest base state, as that's the only time filtering for tags is relevant.\n    if (tags !== undefined && isLatestBaseState === true) {\n      const flattenedTags = Records.buildTagIndexes({ ...tags });\n      indexes = { ...indexes, ...flattenedTags };\n    }\n\n    // add additional indexes to optional values if given\n    // TODO: index multi-attesters to be unblocked by #205 - Revisit database interfaces (https://github.com/TBD54566975/dwn-sdk-js/issues/205)\n    if (this.attesters.length > 0) { indexes.attester = this.attesters[0]; }\n    if (message.contextId !== undefined) { indexes.contextId = message.contextId; }\n\n    return indexes;\n  }\n\n  /**\n   * Authorizes the author-delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeAuthorDelegate(messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = await PermissionGrant.parse(this.message.authorization.authorDelegatedGrant!);\n    await RecordsGrantAuthorization.authorizeWrite({\n      recordsWriteMessage : this.message,\n      expectedGrantor     : this.author!,\n      expectedGrantee     : this.signer!,\n      permissionGrant     : delegatedGrant,\n      messageStore\n    });\n  }\n\n  /**\n   * Authorizes the owner-delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeOwnerDelegate(messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = await PermissionGrant.parse(this.message.authorization.ownerDelegatedGrant!);\n    await RecordsGrantAuthorization.authorizeWrite({\n      recordsWriteMessage : this.message,\n      expectedGrantor     : this.owner!,\n      expectedGrantee     : this.ownerSignatureSigner!,\n      permissionGrant     : delegatedGrant,\n      messageStore\n    });\n  }\n\n  /**\n   * Checks if the given message is the initial entry of a record.\n   */\n  public static async isInitialWrite(message: GenericMessage): Promise<boolean> {\n    // can't be the initial write if the message is not a Records Write\n    if (message.descriptor.interface !== DwnInterfaceName.Records ||\n      message.descriptor.method !== DwnMethodName.Write) {\n      return false;\n    }\n\n    const recordsWriteMessage = message as RecordsWriteMessage;\n    const author = Message.getAuthor(recordsWriteMessage);\n    const entryId = await RecordsWrite.getEntryId(author, recordsWriteMessage.descriptor);\n    return (entryId === recordsWriteMessage.recordId);\n  }\n\n  /**\n   * Creates the `encryption` property if encryption input is given. Else `undefined` is returned.\n   * @param descriptor Descriptor of the `RecordsWrite` message which contains the information need by key path derivation schemes.\n   */\n  private static async createEncryptionProperty(\n    descriptor: RecordsWriteDescriptor,\n    encryptionInput: EncryptionInput | undefined\n  ): Promise<EncryptionProperty | undefined> {\n    if (encryptionInput === undefined) {\n      return undefined;\n    }\n\n    // encrypt the data encryption key once per encryption input\n    const keyEncryption: EncryptedKey[] = [];\n    for (const keyEncryptionInput of encryptionInput.keyEncryptionInputs) {\n\n      if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.ProtocolPath && descriptor.protocol === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingProtocol,\n          '`protocols` encryption scheme cannot be applied to record without the `protocol` property.'\n        );\n      }\n\n      if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.Schemas && descriptor.schema === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingSchema,\n          '`schemas` encryption scheme cannot be applied to record without the `schema` property.'\n        );\n      }\n\n      // NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,\n      // so we will assume that's the algorithm without additional switch/if statements\n      const publicKeyBytes = Secp256k1.publicJwkToBytes(keyEncryptionInput.publicKey);\n      const keyEncryptionOutput = await Encryption.eciesSecp256k1Encrypt(publicKeyBytes, encryptionInput.key);\n\n      const encryptedKey = Encoder.bytesToBase64Url(keyEncryptionOutput.ciphertext);\n      const ephemeralPublicKey = await Secp256k1.publicKeyToJwk(keyEncryptionOutput.ephemeralPublicKey);\n      const keyEncryptionInitializationVector = Encoder.bytesToBase64Url(keyEncryptionOutput.initializationVector);\n      const messageAuthenticationCode = Encoder.bytesToBase64Url(keyEncryptionOutput.messageAuthenticationCode);\n      const encryptedKeyData: EncryptedKey = {\n        rootKeyId            : keyEncryptionInput.publicKeyId,\n        algorithm            : keyEncryptionInput.algorithm ?? EncryptionAlgorithm.EciesSecp256k1,\n        derivationScheme     : keyEncryptionInput.derivationScheme,\n        ephemeralPublicKey,\n        initializationVector : keyEncryptionInitializationVector,\n        messageAuthenticationCode,\n        encryptedKey\n      };\n\n      // we need to attach the actual public key if derivation scheme is protocol-context,\n      // so that the responder to this message is able to encrypt the message/symmetric key using the same protocol-context derived public key,\n      // without needing the knowledge of the corresponding private key\n      if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.ProtocolContext) {\n        encryptedKeyData.derivedPublicKey = keyEncryptionInput.publicKey;\n      }\n\n      keyEncryption.push(encryptedKeyData);\n    }\n\n    const encryption: EncryptionProperty = {\n      algorithm            : encryptionInput.algorithm ?? EncryptionAlgorithm.Aes256Ctr,\n      initializationVector : Encoder.bytesToBase64Url(encryptionInput.initializationVector),\n      keyEncryption\n    };\n\n    return encryption;\n  }\n\n  /**\n   * Creates the `attestation` property of a RecordsWrite message if given signature inputs; returns `undefined` otherwise.\n   */\n  public static async createAttestation(descriptorCid: string, signers?: Signer[]): Promise<GeneralJws | undefined> {\n    if (signers === undefined || signers.length === 0) {\n      return undefined;\n    }\n\n    const attestationPayload: RecordsWriteAttestationPayload = { descriptorCid };\n    const attestationPayloadBytes = Encoder.objectToBytes(attestationPayload);\n\n    const builder = await GeneralJwsBuilder.create(attestationPayloadBytes, signers);\n    return builder.getJws();\n  }\n\n  /**\n   * Creates the `signature` property in the `authorization` of a `RecordsWrite` message.\n   */\n  public static async createSignerSignature(input: {\n    recordId: string,\n    contextId: string | undefined,\n    descriptorCid: string,\n    attestation: GeneralJws | undefined,\n    encryption: EncryptionProperty | undefined,\n    signer: Signer,\n    delegatedGrantId?: string,\n    permissionGrantId?: string,\n    protocolRole?: string\n  }): Promise<GeneralJws> {\n    const { recordId, contextId, descriptorCid, attestation, encryption, signer, delegatedGrantId, permissionGrantId, protocolRole } = input;\n\n    const attestationCid = attestation ? await Cid.computeCid(attestation) : undefined;\n    const encryptionCid = encryption ? await Cid.computeCid(encryption) : undefined;\n\n    const signaturePayload: RecordsWriteSignaturePayload = {\n      recordId,\n      descriptorCid,\n      contextId,\n      attestationCid,\n      encryptionCid,\n      delegatedGrantId,\n      permissionGrantId,\n      protocolRole\n    };\n    removeUndefinedProperties(signaturePayload);\n\n    const signaturePayloadBytes = Encoder.objectToBytes(signaturePayload);\n\n    const builder = await GeneralJwsBuilder.create(signaturePayloadBytes, [signer]);\n    const signature = builder.getJws();\n\n    return signature;\n  }\n\n  /**\n   * Gets the initial write from the given list of `RecordsWrite`.\n   */\n  public static async getInitialWrite(messages: GenericMessage[]): Promise<RecordsWriteMessage> {\n    for (const message of messages) {\n      if (await RecordsWrite.isInitialWrite(message)) {\n        return message as RecordsWriteMessage;\n      }\n    }\n\n    throw new DwnError(DwnErrorCode.RecordsWriteGetInitialWriteNotFound, `Initial write is not found.`);\n  }\n\n  /**\n   * Verifies that immutable properties of the two given messages are identical.\n   * @throws {Error} if immutable properties between two RecordsWrite message\n   */\n  public static verifyEqualityOfImmutableProperties(existingWriteMessage: RecordsWriteMessage, newMessage: RecordsWriteMessage): boolean {\n    const mutableDescriptorProperties = ['dataCid', 'dataSize', 'dataFormat', 'datePublished', 'published', 'messageTimestamp', 'tags'];\n\n    // get distinct property names that exist in either the existing message given or new message\n    let descriptorPropertyNames: string[] = [];\n    descriptorPropertyNames.push(...Object.keys(existingWriteMessage.descriptor));\n    descriptorPropertyNames.push(...Object.keys(newMessage.descriptor));\n    descriptorPropertyNames = [...new Set(descriptorPropertyNames)]; // step to remove duplicates\n\n    // ensure all immutable properties are not modified\n    for (const descriptorPropertyName of descriptorPropertyNames) {\n      // if property is supposed to be immutable\n      if (mutableDescriptorProperties.indexOf(descriptorPropertyName) === -1) {\n        const valueInExistingWrite = (existingWriteMessage.descriptor as any)[descriptorPropertyName];\n        const valueInNewMessage = (newMessage.descriptor as any)[descriptorPropertyName];\n        if (valueInNewMessage !== valueInExistingWrite) {\n          throw new DwnError(\n            DwnErrorCode.RecordsWriteImmutablePropertyChanged,\n            `${descriptorPropertyName} is an immutable property: cannot change '${valueInExistingWrite}' to '${valueInNewMessage}'`\n          );\n        }\n      }\n    }\n\n    return true;\n  }\n\n  /**\n   * Gets the DID of the attesters of the given message.\n   */\n  public static getAttesters(message: InternalRecordsWriteMessage): string[] {\n    const attestationSignatures = message.attestation?.signatures ?? [];\n    const attesters = attestationSignatures.map((signature) => Jws.getSignerDid(signature));\n    return attesters;\n  }\n\n  public static async fetchNewestRecordsWrite(\n    messageStore: MessageStore,\n    tenant: string,\n    recordId: string,\n  ): Promise<RecordsWriteMessage> {\n    // get existing RecordsWrite messages matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      method    : DwnMethodName.Write,\n      recordId  : recordId\n    };\n\n    const { messages: existingMessages } = await messageStore.query(tenant, [ query ]);\n    const newestWrite = await Message.getNewestMessage(existingMessages);\n    if (newestWrite !== undefined) {\n      return newestWrite as RecordsWriteMessage;\n    }\n\n    throw new DwnError(DwnErrorCode.RecordsWriteGetNewestWriteRecordNotFound, 'record not found');\n  }\n\n  /**\n   * Fetches the initial RecordsWrite of a record.\n   * @returns The initial RecordsWrite if found; `undefined` otherwise.\n   */\n  public static async fetchInitialRecordsWrite(\n    messageStore: MessageStore,\n    tenant: string,\n    recordId: string\n  ): Promise<RecordsWrite | undefined> {\n\n    const initialRecordsWriteMessage = await RecordsWrite.fetchInitialRecordsWriteMessage(messageStore, tenant, recordId);\n    if (initialRecordsWriteMessage === undefined) {\n      return undefined;\n    }\n\n    const initialRecordsWrite = await RecordsWrite.parse(initialRecordsWriteMessage);\n    return initialRecordsWrite;\n  }\n\n  /**\n   * Fetches the initial RecordsWrite message of a record.\n   * @returns The initial RecordsWriteMessage if found; `undefined` otherwise.\n   */\n  public static async fetchInitialRecordsWriteMessage(\n    messageStore: MessageStore,\n    tenant: string,\n    recordId: string\n  ): Promise<RecordsWriteMessage | undefined> {\n    const query = { entryId: recordId };\n    const { messages } = await messageStore.query(tenant, [query]);\n\n    if (messages.length === 0) {\n      return undefined;\n    }\n\n    return messages[0] as RecordsWriteMessage;\n  }\n}\n", "import type { AuthorizationModel } from '../types/message-types.js';\nimport type { DidResolver } from '@web5/dids';\n\nimport { GeneralJwsVerifier } from '../jose/jws/general/verifier.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\n/**\n * Verifies all the signature(s) within the authorization property.\n *\n * @throws {Error} if fails authentication\n */\nexport async function authenticate(authorizationModel: AuthorizationModel | undefined, didResolver: DidResolver): Promise<void> {\n\n  if (authorizationModel === undefined) {\n    throw new DwnError(DwnErrorCode.AuthenticateJwsMissing, 'Missing JWS.');\n  }\n\n  await GeneralJwsVerifier.verifySignatures(authorizationModel.signature, didResolver);\n\n  if (authorizationModel.ownerSignature !== undefined) {\n    await GeneralJwsVerifier.verifySignatures(authorizationModel.ownerSignature, didResolver);\n  }\n\n  if (authorizationModel.authorDelegatedGrant !== undefined) {\n    // verify the signature of the grantor of the author-delegated grant\n    const authorDelegatedGrant = await RecordsWrite.parse(authorizationModel.authorDelegatedGrant);\n    await GeneralJwsVerifier.verifySignatures(authorDelegatedGrant.message.authorization.signature, didResolver);\n  }\n\n  if (authorizationModel.ownerDelegatedGrant !== undefined) {\n    // verify the signature of the grantor of the owner-delegated grant\n    const ownerDelegatedGrant = await RecordsWrite.parse(authorizationModel.ownerDelegatedGrant);\n    await GeneralJwsVerifier.verifySignatures(ownerDelegatedGrant.message.authorization.signature, didResolver);\n  }\n}", "/**\n * The result of the isActiveTenant() call.\n */\nexport type ActiveTenantCheckResult = {\n  /**\n   * `true` if the given DID is an active tenant of the DWN; `false` otherwise.\n   */\n  isActiveTenant: boolean;\n\n  /**\n   * An optional detail message if the given DID is not an active tenant of the DWN.\n   */\n  detail?: string;\n};\n\n/**\n * An interface that gates tenant access to the DWN.\n */\nexport interface TenantGate {\n  /**\n   * @returns `true` if the given DID is an active tenant of the DWN; `false` otherwise\n   */\n  isActiveTenant(did: string): Promise<ActiveTenantCheckResult>;\n}\n\n/**\n * A tenant gate that treats every DID as an active tenant.\n */\nexport class AllowAllTenantGate implements TenantGate {\n  public async isActiveTenant(_did: string): Promise<ActiveTenantCheckResult> {\n    return { isActiveTenant: true };\n  }\n}\n", "import type { MessageInterface } from '../types/message-interface.js';\nimport type { GenericMessage, GenericSignaturePayload } from '../types/message-types.js';\n\nimport { Jws } from '../utils/jws.js';\nimport { Message } from './message.js';\n\n/**\n * An abstract implementation of the `MessageInterface` interface.\n */\nexport abstract class AbstractMessage<M extends GenericMessage> implements MessageInterface<M> {\n  private _message: M;\n  public get message(): M {\n    return this._message as M;\n  }\n\n  private _signer: string | undefined;\n  public get signer(): string | undefined {\n    return this._signer;\n  }\n\n  private _author: string | undefined;\n  public get author(): string | undefined {\n    return this._author;\n  }\n\n  private _signaturePayload: GenericSignaturePayload | undefined;\n  public get signaturePayload(): GenericSignaturePayload | undefined {\n    return this._signaturePayload;\n  }\n\n  /**\n   * If this message is signed by an author-delegate.\n   */\n  public get isSignedByAuthorDelegate(): boolean {\n    return Message.isSignedByAuthorDelegate(this._message);\n  }\n\n  protected constructor(message: M) {\n    this._message = message;\n\n    if (message.authorization !== undefined) {\n      this._signer = Message.getSigner(message);\n\n      // if the message authorization contains author delegated grant, the author would be the grantor of the grant\n      // else the author would be the signer of the message\n      if (message.authorization.authorDelegatedGrant !== undefined) {\n        this._author = Message.getSigner(message.authorization.authorDelegatedGrant);\n      } else {\n        this._author = this._signer;\n      }\n\n      this._signaturePayload = Jws.decodePlainObjectPayload(message.authorization.signature);\n    }\n  }\n\n  /**\n   * Called by `JSON.stringify(...)` automatically.\n   */\n  toJSON(): GenericMessage {\n    return this.message;\n  }\n}", "import type { MessageStore } from '../types//message-store.js';\nimport type { Pagination } from '../types/message-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { DataEncodedRecordsWriteMessage, RecordsFilter, RecordsQueryDescriptor, RecordsQueryMessage } from '../types/records-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { DateSort } from '../types/records-types.js';\nimport { Message } from '../core/message.js';\nimport { PermissionGrant } from '../protocols/permission-grant.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type RecordsQueryOptions = {\n  messageTimestamp?: string;\n  filter: RecordsFilter;\n  dateSort?: DateSort;\n  pagination?: Pagination;\n  signer?: Signer;\n  protocolRole?: string;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DataEncodedRecordsWriteMessage;\n};\n\n/**\n * A class representing a RecordsQuery DWN message.\n */\nexport class RecordsQuery extends AbstractMessage<RecordsQueryMessage> {\n\n  public static async parse(message: RecordsQueryMessage): Promise<RecordsQuery> {\n\n    if (message.descriptor.filter.published === false) {\n      if (message.descriptor.dateSort === DateSort.PublishedAscending || message.descriptor.dateSort === DateSort.PublishedDescending) {\n        throw new DwnError(\n          DwnErrorCode.RecordsQueryParseFilterPublishedSortInvalid,\n          `queries must not filter for \\`published:false\\` and sort by ${message.descriptor.dateSort}`\n        );\n      }\n    }\n\n    let signaturePayload;\n    if (message.authorization !== undefined) {\n      signaturePayload = await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    await Records.validateDelegatedGrantReferentialIntegrity(message, signaturePayload);\n\n    if (signaturePayload?.protocolRole !== undefined) {\n      if (message.descriptor.filter.protocolPath === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsQueryFilterMissingRequiredProperties,\n          'Role-authorized queries must include `protocolPath` in the filter'\n        );\n      }\n    }\n\n    if (message.descriptor.filter.protocol !== undefined) {\n      validateProtocolUrlNormalized(message.descriptor.filter.protocol);\n    }\n    if (message.descriptor.filter.schema !== undefined) {\n      validateSchemaUrlNormalized(message.descriptor.filter.schema);\n    }\n\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new RecordsQuery(message);\n  }\n\n  public static async create(options: RecordsQueryOptions): Promise<RecordsQuery> {\n    const descriptor: RecordsQueryDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Query,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      filter           : Records.normalizeFilter(options.filter),\n      dateSort         : options.dateSort,\n      pagination       : options.pagination,\n    };\n\n    if (options.filter.published === false) {\n      if (options.dateSort === DateSort.PublishedAscending || options.dateSort === DateSort.PublishedDescending) {\n        throw new DwnError(\n          DwnErrorCode.RecordsQueryCreateFilterPublishedSortInvalid,\n          `queries must not filter for \\`published:false\\` and sort by ${options.dateSort}`\n        );\n      }\n    }\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    const signer = options.signer;\n    let authorization;\n    if (signer) {\n      authorization = await Message.createAuthorization({\n        descriptor,\n        signer,\n        protocolRole   : options.protocolRole,\n        delegatedGrant : options.delegatedGrant\n      });\n    }\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsQuery(message);\n  }\n\n  /**\n   * Authorizes the delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeDelegate(messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = await PermissionGrant.parse(this.message.authorization!.authorDelegatedGrant!);\n    await RecordsGrantAuthorization.authorizeQueryOrSubscribe({\n      incomingMessage : this.message,\n      expectedGrantee : this.signer!,\n      expectedGrantor : this.author!,\n      permissionGrant : delegatedGrant,\n      messageStore\n    });\n  }\n}\n", "import { Encoder } from './encoder.js';\nimport { PassThrough, Readable } from 'readable-stream';\n\n/**\n * Utility class for readable data stream, intentionally named to disambiguate from ReadableStream, readable-stream, Readable etc.\n */\nexport class DataStream {\n  /**\n   * Reads the entire readable stream given into array of bytes.\n   */\n  public static async toBytes(readableStream: Readable): Promise<Uint8Array> {\n    return new Promise((resolve, reject) => {\n      const chunks: any[] = [];\n      readableStream.on('data', chunk => {\n        chunks.push(chunk);\n      });\n\n      readableStream.on('end', () => {\n        const uint8Array = DataStream.concatenateArrayOfBytes(chunks);\n        resolve(uint8Array);\n      });\n\n      readableStream.on('error', reject);\n    });\n  }\n\n  /**\n   * Reads the entire readable stream and JSON parses it into an object.\n   */\n  public static async toObject(readableStream: Readable): Promise<object> {\n    const contentBytes = await DataStream.toBytes(readableStream);\n    const contentObject = Encoder.bytesToObject(contentBytes);\n    return contentObject;\n  }\n\n  /**\n   * Concatenates the array of bytes given into one Uint8Array.\n   */\n  private static concatenateArrayOfBytes(arrayOfBytes: Uint8Array[]): Uint8Array {\n    // sum of individual array lengths\n    const totalLength = arrayOfBytes.reduce((accumulatedValue, currentValue) => accumulatedValue + currentValue.length, 0);\n\n    const result = new Uint8Array(totalLength);\n\n    let length = 0;\n    for (const bytes of arrayOfBytes) {\n      result.set(bytes, length);\n      length += bytes.length;\n    }\n\n    return result;\n  }\n\n  /**\n   * Creates a readable stream from the bytes given.\n   */\n  public static fromBytes(bytes: Uint8Array): Readable {\n    // chunk up the bytes to simulate a more real-world like behavior\n    const chunkLength = 100_000;\n    let currentIndex = 0;\n    const readableStream = new Readable({\n      read(_size): void {\n        // if this is the last chunk\n        if (currentIndex + chunkLength > bytes.length) {\n          this.push(bytes.subarray(currentIndex));\n          this.push(null);\n        } else {\n          this.push(bytes.subarray(currentIndex, currentIndex + chunkLength));\n\n          currentIndex = currentIndex + chunkLength;\n        }\n      }\n    });\n\n    return readableStream;\n  }\n\n  /**\n   * Creates a readable stream from the object given.\n   */\n  public static fromObject(object: Record<string, any>): Readable {\n    const bytes = Encoder.objectToBytes(object);\n    return DataStream.fromBytes(bytes);\n  }\n\n  /**\n   * Duplicates the given data stream into the number of streams specified so that multiple handlers can consume the same data stream.\n   */\n  public static duplicateDataStream(dataStream: Readable, count: number): Readable[] {\n    const streams: Readable[] = [];\n    for (let i = 0; i < count; i++) {\n      const passThrough = new PassThrough();\n      dataStream.pipe(passThrough);\n      streams.push(passThrough as unknown as Readable);\n    }\n\n    return streams;\n  }\n}", "import type { MessagesReadReplyEntry } from '../types/messages-types.js';\nimport type { PaginationCursor } from '../types/query-types.js';\nimport type { ProtocolsConfigureMessage } from '../types/protocols-types.js';\nimport type { RecordsReadReplyEntry } from '../types/records-types.js';\nimport type { GenericMessageReply, MessageSubscription, QueryResultEntry } from '../types/message-types.js';\n\nexport function messageReplyFromError(e: unknown, code: number): GenericMessageReply {\n\n  const detail = e instanceof Error ? e.message : 'Error';\n\n  return { status: { code, detail } };\n}\n\n/**\n * Catch-all message reply type. It is recommended to use GenericMessageReply or a message-specific reply type wherever possible.\n */\nexport type UnionMessageReply = GenericMessageReply & {\n  /**\n   * A container for the data returned from a `RecordsRead` or `MessagesRead`.\n   * Mutually exclusive with (`entries` + `cursor`) and `subscription`.\n   */\n  entry?: MessagesReadReplyEntry & RecordsReadReplyEntry;\n\n  /**\n   * Resulting message entries or events returned from the invocation of the corresponding message.\n   * e.g. the resulting messages from a RecordsQuery, or array of messageCid strings for MessagesQuery\n   * Mutually exclusive with `record`.\n   */\n  entries?: QueryResultEntry[] | ProtocolsConfigureMessage[] | string[];\n\n  /**\n   * A cursor for pagination if applicable (e.g. RecordsQuery).\n   * Mutually exclusive with `record`.\n   */\n  cursor?: PaginationCursor;\n\n  /**\n   * A subscription object if a subscription was requested.\n   */\n  subscription?: MessageSubscription;\n};", "import type { Filter } from '../types/query-types.js';\nimport type { MessagesFilter } from '../types/messages-types.js';\n\nimport { FilterUtility } from './filter.js';\nimport { normalizeProtocolUrl } from './url.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { Records } from './records.js';\nimport { isEmptyObject, removeUndefinedProperties } from './object.js';\n\n\n/**\n * Class containing Messages related utility methods.\n */\nexport class Messages {\n  /**\n   * Normalizes/fixes the formatting of the given filters (such as URLs) so that they provide a consistent search experience.\n   */\n  public static normalizeFilters(filters: MessagesFilter[]): MessagesFilter[] {\n\n    const messagesQueryFilters: MessagesFilter[] = [];\n\n    // normalize each filter, and only add non-empty filters to the returned array\n    for (const filter of filters) {\n      // normalize the protocol URL if it exists\n      const protocol = filter.protocol !== undefined ? normalizeProtocolUrl(filter.protocol) : undefined;\n\n      const messagesFilter = {\n        ...filter,\n        protocol,\n      };\n\n      // remove any empty filter properties and do not add if empty\n      removeUndefinedProperties(messagesFilter);\n      if (!isEmptyObject(messagesFilter)) {\n        messagesQueryFilters.push(messagesFilter);\n      }\n    }\n\n    return messagesQueryFilters;\n  }\n\n  /**\n   *  Converts an incoming array of MessagesFilter into an array of Filter usable by MessageLog.\n   *\n   * @param filters An array of MessagesFilter\n   * @returns {Filter[]} an array of generic Filter able to be used when querying.\n   */\n  public static convertFilters(filters: MessagesFilter[]): Filter[] {\n\n    const messagesQueryFilters: Filter[] = [];\n\n    // convert each filter individually by the specific type of filter it is\n    // we must check for the type of filter in a specific order to make a reductive decision as to which filters need converting\n    // first we check for `MessagesRecordsFilter` fields for conversion\n    // otherwise it is `MessagesMessageFilter` fields for conversion\n    for (const filter of filters) {\n      // extract the protocol tag filter from the incoming message record filter\n      // this filters for permission grants, requests and revocations associated with a targeted protocol\n      // since permissions are their own protocol, we added an additional tag index when writing the permission messages\n      // so that we can filter for permission records here\n      const permissionRecordsFilter = this.constructPermissionRecordsFilter(filter);\n      if (permissionRecordsFilter) {\n        messagesQueryFilters.push(permissionRecordsFilter);\n      }\n\n      messagesQueryFilters.push(this.convertFilter(filter));\n    }\n\n    return messagesQueryFilters;\n  }\n\n  /**\n   * Constructs a filter that gets associated permission records if protocol is in the given filter.\n   */\n  private static constructPermissionRecordsFilter(filter: MessagesFilter): Filter | undefined {\n    const { protocol, messageTimestamp } = filter;\n    if (protocol !== undefined) {\n      const taggedFilter = {\n        protocol: PermissionsProtocol.uri,\n        ...Records.convertTagsFilter({ protocol })\n      } as Filter;\n\n      if (messageTimestamp != undefined) {\n        // if we filter by message timestamp, we also want to filter the permission messages by the same timestamp range\n        const messageTimestampFilter = FilterUtility.convertRangeCriterion(messageTimestamp);\n        if (messageTimestampFilter) {\n          taggedFilter.messageTimestamp = messageTimestampFilter;\n        }\n      }\n\n      return taggedFilter;\n    }\n  }\n\n  /**\n   * Converts an external-facing filter model into an internal-facing filer model used by data store.\n   */\n  private static convertFilter(filter: MessagesFilter): Filter {\n    const filterCopy = { ...filter } as Filter;\n\n    const { messageTimestamp } = filter;\n    const messageTimestampFilter = messageTimestamp ? FilterUtility.convertRangeCriterion(messageTimestamp) : undefined;\n    if (messageTimestampFilter) {\n      filterCopy.messageTimestamp = messageTimestampFilter;\n      delete filterCopy.dateUpdated;\n    }\n    return filterCopy as Filter;\n  }\n}", "import type { DataEncodedRecordsWriteMessage } from '../types/records-types.js';\nimport type { PermissionConditions, PermissionRequestData, PermissionScope } from '../types/permission-types.js';\n\nimport { Encoder } from '../utils/encoder.js';\nimport { Message } from '../core/message.js';\n\n\n/**\n * A class representing a Permission Request for a more convenient abstraction.\n */\nexport class PermissionRequest {\n\n  /**\n   * The ID of the permission request, which is the record ID DWN message.\n   */\n  public readonly id: string;\n\n  /**\n   * The requester for of the permission.\n   */\n  public readonly requester: string;\n\n  /**\n   * Optional string that communicates what the requested grant would be used for.\n   */\n  public readonly description?: string;\n\n  /**\n   * Whether the requested grant is delegated or not.\n   * If `true`, the `requestor` will be able to act as the grantor of the permission within the scope of the requested grant.\n   */\n  public readonly delegated?: boolean;\n\n  /**\n   * The scope of the allowed access.\n   */\n  public readonly scope: PermissionScope;\n\n  /**\n   * Optional conditions that must be met when the requested grant is used.\n   */\n  public readonly conditions?: PermissionConditions;\n\n  public static async parse(message: DataEncodedRecordsWriteMessage): Promise<PermissionRequest> {\n    const permissionRequest = new PermissionRequest(message);\n    return permissionRequest;\n  }\n\n  private constructor(message: DataEncodedRecordsWriteMessage) {\n    // properties derived from the generic DWN message properties\n    this.id = message.recordId;\n    this.requester = Message.getSigner(message)!;\n\n    // properties from the data payload itself.\n    const permissionRequestEncodedData = message.encodedData;\n    const permissionRequestData = Encoder.base64UrlToObject(permissionRequestEncodedData) as PermissionRequestData;\n    this.delegated = permissionRequestData.delegated;\n    this.description = permissionRequestData.description;\n    this.scope = permissionRequestData.scope;\n    this.conditions = permissionRequestData.conditions;\n  }\n}\n\n", "import type { GenericMessage } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { ProtocolDefinition } from '../types/protocols-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { DataEncodedRecordsWriteMessage, RecordsWriteMessage } from '../types/records-types.js';\nimport type { PermissionConditions, PermissionGrantData, PermissionRequestData, PermissionRevocationData, PermissionScope, RecordsPermissionScope } from '../types/permission-types.js';\n\nimport { Encoder } from '../utils/encoder.js';\nimport { PermissionGrant } from './permission-grant.js';\nimport { PermissionRequest } from './permission-request.js';\nimport { RecordsWrite } from '../../src/interfaces/records-write.js';\nimport { Time } from '../utils/time.js';\nimport { validateJsonSchema } from '../schema-validator.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, validateProtocolUrlNormalized } from '../utils/url.js';\n\n/**\n * Options for creating a permission request.\n */\nexport type PermissionRequestCreateOptions = {\n  /**\n   * The signer of the request.\n   */\n  signer?: Signer;\n\n  dateRequested?: string;\n\n  // remaining properties are contained within the data payload of the record\n\n  description?: string;\n  delegated: boolean;\n  scope: PermissionScope;\n  conditions?: PermissionConditions;\n};\n\n/**\n * Options for creating a permission grant.\n */\nexport type PermissionGrantCreateOptions = {\n  /**\n   * The signer of the grant.\n   */\n  signer?: Signer;\n  grantedTo: string;\n  dateGranted?: string;\n\n  // remaining properties are contained within the data payload of the record\n\n  /**\n   * Expire time in UTC ISO-8601 format with microsecond precision.\n   */\n  dateExpires: string;\n  requestId?: string;\n  description?: string;\n  delegated?: boolean;\n  scope: PermissionScope;\n  conditions?: PermissionConditions;\n};\n\n/**\n * Options for creating a permission revocation.\n */\nexport type PermissionRevocationCreateOptions = {\n  /**\n   * The signer of the grant.\n   */\n  signer?: Signer;\n  /**\n   * The PermissionGrant this revocation is for.\n   */\n  grant: PermissionGrant;\n  dateRevoked?: string;\n\n  // remaining properties are contained within the data payload of the record\n\n  description?: string;\n};\n\n/**\n * This is a first-class DWN protocol for managing permission grants of a given DWN.\n */\nexport class PermissionsProtocol {\n  /**\n   * The URI of the DWN Permissions protocol.\n   */\n  public static readonly uri = 'https://tbd.website/dwn/permissions';\n\n  /**\n   * The protocol path of the `request` record.\n   */\n  public static readonly requestPath = 'request';\n\n  /**\n   * The protocol path of the `grant` record.\n   */\n  public static readonly grantPath = 'grant';\n\n  /**\n   * The protocol path of the `revocation` record.\n   */\n  public static readonly revocationPath = 'grant/revocation';\n\n  /**\n   * The definition of the Permissions protocol.\n   */\n  public static readonly definition: ProtocolDefinition = {\n    published : true,\n    protocol  : PermissionsProtocol.uri,\n    types     : {\n      request: {\n        dataFormats: ['application/json']\n      },\n      grant: {\n        dataFormats: ['application/json']\n      },\n      revocation: {\n        dataFormats: ['application/json']\n      }\n    },\n    structure: {\n      request: {\n        $size: {\n          max: 10000\n        },\n        $actions: [\n          {\n            who : 'anyone',\n            can : ['create']\n          }\n        ]\n      },\n      grant: {\n        $size: {\n          max: 10000\n        },\n        $actions: [\n          {\n            who : 'recipient',\n            of  : 'grant',\n            can : ['read', 'query']\n          }\n        ],\n        revocation: {\n          $size: {\n            max: 10000\n          },\n          $actions: [\n            {\n              who : 'anyone',\n              can : ['read']\n            }\n          ]\n        }\n      }\n    }\n  };\n\n  public static parseRequest(base64UrlEncodedRequest: string): PermissionRequestData {\n    return Encoder.base64UrlToObject(base64UrlEncodedRequest);\n  }\n\n  /**\n   * Convenience method to create a permission request.\n   */\n  public static async createRequest(options: PermissionRequestCreateOptions): Promise<{\n    recordsWrite: RecordsWrite,\n    permissionRequestData: PermissionRequestData,\n    permissionRequestBytes: Uint8Array,\n    dataEncodedMessage: DataEncodedRecordsWriteMessage,\n  }> {\n\n    if (this.isRecordPermissionScope(options.scope) && options.scope.protocol === undefined) {\n      throw new DwnError(\n        DwnErrorCode.PermissionsProtocolCreateRequestRecordsScopeMissingProtocol,\n        'Permission request for Records must have a scope with a `protocol` property'\n      );\n    }\n\n    const scope = PermissionsProtocol.normalizePermissionScope(options.scope);\n\n    const permissionRequestData: PermissionRequestData = {\n      description : options.description,\n      delegated   : options.delegated,\n      scope,\n      conditions  : options.conditions,\n    };\n\n    // If the request is scoped to a protocol, the protocol tag must be included with the record.\n    // This is done in order to ensure a subset message query filtered to a protocol includes the permission requests associated with it.\n    let permissionTags = undefined;\n    if (this.hasProtocolScope(scope)) {\n      permissionTags = {\n        protocol: scope.protocol\n      };\n    }\n\n    const permissionRequestBytes = Encoder.objectToBytes(permissionRequestData);\n    const recordsWrite = await RecordsWrite.create({\n      signer           : options.signer,\n      messageTimestamp : options.dateRequested,\n      protocol         : PermissionsProtocol.uri,\n      protocolPath     : PermissionsProtocol.requestPath,\n      dataFormat       : 'application/json',\n      data             : permissionRequestBytes,\n      tags             : permissionTags,\n    });\n\n    const dataEncodedMessage: DataEncodedRecordsWriteMessage = {\n      ...recordsWrite.message,\n      encodedData: Encoder.bytesToBase64Url(permissionRequestBytes)\n    };\n\n    return {\n      recordsWrite,\n      permissionRequestData,\n      permissionRequestBytes,\n      dataEncodedMessage\n    };\n  }\n\n  /**\n   * Convenience method to create a permission grant.\n   */\n  public static async createGrant(options: PermissionGrantCreateOptions): Promise<{\n    recordsWrite: RecordsWrite,\n    permissionGrantData: PermissionGrantData,\n    permissionGrantBytes: Uint8Array,\n    dataEncodedMessage: DataEncodedRecordsWriteMessage,\n  }> {\n\n    if (this.isRecordPermissionScope(options.scope) && options.scope.protocol === undefined) {\n      throw new DwnError(\n        DwnErrorCode.PermissionsProtocolCreateGrantRecordsScopeMissingProtocol,\n        'Permission grants for Records must have a scope with a `protocol` property'\n      );\n    }\n\n    const scope = PermissionsProtocol.normalizePermissionScope(options.scope);\n\n    const permissionGrantData: PermissionGrantData = {\n      dateExpires : options.dateExpires,\n      requestId   : options.requestId,\n      description : options.description,\n      delegated   : options.delegated,\n      scope,\n      conditions  : options.conditions,\n    };\n\n    // If the grant is scoped to a protocol, the protocol tag must be included with the record.\n    // This is done in order to ensure a subset message query filtered to a protocol includes the permission grants associated with it.\n    let permissionTags = undefined;\n    if (this.hasProtocolScope(scope)) {\n      permissionTags = {\n        protocol: scope.protocol\n      };\n    }\n\n    const permissionGrantBytes = Encoder.objectToBytes(permissionGrantData);\n    const recordsWrite = await RecordsWrite.create({\n      signer           : options.signer,\n      messageTimestamp : options.dateGranted,\n      dateCreated      : options.dateGranted,\n      recipient        : options.grantedTo,\n      protocol         : PermissionsProtocol.uri,\n      protocolPath     : PermissionsProtocol.grantPath,\n      dataFormat       : 'application/json',\n      data             : permissionGrantBytes,\n      tags             : permissionTags,\n    });\n\n    const dataEncodedMessage: DataEncodedRecordsWriteMessage = {\n      ...recordsWrite.message,\n      encodedData: Encoder.bytesToBase64Url(permissionGrantBytes)\n    };\n\n    return {\n      recordsWrite,\n      permissionGrantData,\n      permissionGrantBytes,\n      dataEncodedMessage\n    };\n  }\n\n  /**\n   * Convenience method to create a permission revocation.\n   */\n  public static async createRevocation(options: PermissionRevocationCreateOptions): Promise<{\n    recordsWrite: RecordsWrite,\n    permissionRevocationData: PermissionRevocationData,\n    permissionRevocationBytes: Uint8Array,\n    dataEncodedMessage: DataEncodedRecordsWriteMessage,\n  }> {\n    const permissionRevocationData: PermissionRevocationData = {\n      description: options.description,\n    };\n\n    const grantId = options.grant.id;\n\n    // if the grant was scoped to a protocol, the protocol tag must be included in the revocation\n    // This is done in order to ensure a subset message query filtered to a protocol includes the permission revocations associated with it.\n    //\n    // NOTE: the added tag is validated against the original grant when the revocation is processed by the DWN.\n    let permissionTags = undefined;\n    if (this.hasProtocolScope(options.grant.scope)) {\n      const protocol = normalizeProtocolUrl(options.grant.scope.protocol);\n      permissionTags = { protocol };\n    }\n\n    const permissionRevocationBytes = Encoder.objectToBytes(permissionRevocationData);\n    const recordsWrite = await RecordsWrite.create({\n      signer          : options.signer,\n      parentContextId : grantId, // NOTE: since the grant is the root record, its record ID is also the context ID\n      protocol        : PermissionsProtocol.uri,\n      protocolPath    : PermissionsProtocol.revocationPath,\n      dataFormat      : 'application/json',\n      data            : permissionRevocationBytes,\n      tags            : permissionTags,\n    });\n\n    const dataEncodedMessage: DataEncodedRecordsWriteMessage = {\n      ...recordsWrite.message,\n      encodedData: Encoder.bytesToBase64Url(permissionRevocationBytes)\n    };\n\n    return {\n      recordsWrite,\n      permissionRevocationData,\n      permissionRevocationBytes,\n      dataEncodedMessage\n    };\n  }\n\n  /**\n   * Validates the given Permissions protocol RecordsWrite. It can be a request, grant, or revocation.\n   */\n  public static validateSchema(recordsWriteMessage: RecordsWriteMessage, dataBytes: Uint8Array): void {\n    const dataString = Encoder.bytesToString(dataBytes);\n    const dataObject = JSON.parse(dataString);\n    if (recordsWriteMessage.descriptor.protocolPath === PermissionsProtocol.requestPath) {\n      const permissionRequestData = dataObject as PermissionRequestData;\n      validateJsonSchema('PermissionRequestData', permissionRequestData);\n\n      // more nuanced validation that are annoying/difficult to do using JSON schema\n      PermissionsProtocol.validateScopeAndTags(permissionRequestData.scope, recordsWriteMessage);\n    } else if (recordsWriteMessage.descriptor.protocolPath === PermissionsProtocol.grantPath) {\n      validateJsonSchema('PermissionGrantData', dataObject);\n\n      // more nuanced validation that are annoying/difficult to do using JSON schema\n      const permissionGrantData = dataObject as PermissionGrantData;\n      PermissionsProtocol.validateScopeAndTags(permissionGrantData.scope, recordsWriteMessage);\n      Time.validateTimestamp(permissionGrantData.dateExpires);\n    } else if (recordsWriteMessage.descriptor.protocolPath === PermissionsProtocol.revocationPath) {\n      validateJsonSchema('PermissionRevocationData', dataObject);\n    } else {\n      // defensive programming, should not be unreachable externally\n      throw new DwnError(\n        DwnErrorCode.PermissionsProtocolValidateSchemaUnexpectedRecord,\n        `Unexpected permission record: ${recordsWriteMessage.descriptor.protocolPath}`\n      );\n    }\n  }\n\n\n\n  /**\n   * Fetches PermissionGrant with the specified `recordID`.\n   * @returns the PermissionGrant matching the `recordId` specified.\n   * @throws {Error} if PermissionGrant does not exist\n   */\n  public static async fetchGrant(\n    tenant: string,\n    messageStore: MessageStore,\n    permissionGrantId: string,\n  ): Promise<PermissionGrant> {\n\n    const grantQuery = {\n      recordId          : permissionGrantId,\n      isLatestBaseState : true\n    };\n    const { messages } = await messageStore.query(tenant, [grantQuery]);\n    const possibleGrantMessage: GenericMessage | undefined = messages[0];\n\n    const dwnInterface = possibleGrantMessage?.descriptor.interface;\n    const dwnMethod = possibleGrantMessage?.descriptor.method;\n\n    if (dwnInterface !== DwnInterfaceName.Records ||\n        dwnMethod !== DwnMethodName.Write ||\n        (possibleGrantMessage as RecordsWriteMessage).descriptor.protocolPath !== PermissionsProtocol.grantPath) {\n      throw new DwnError(\n        DwnErrorCode.GrantAuthorizationGrantMissing,\n        `Could not find permission grant with record ID ${permissionGrantId}.`\n      );\n    }\n\n    const permissionGrantMessage = possibleGrantMessage as DataEncodedRecordsWriteMessage;\n    const permissionGrant = await PermissionGrant.parse(permissionGrantMessage);\n\n    return permissionGrant;\n  }\n\n  /**\n   * Gets the scope from the given permission record.\n   * If the record is a revocation, the scope is fetched from the grant that is being revoked.\n   *\n   * @param messageStore The message store to fetch the grant for a revocation.\n   */\n  public static async getScopeFromPermissionRecord(\n    tenant: string,\n    messageStore:MessageStore,\n    incomingMessage: DataEncodedRecordsWriteMessage,\n  ): Promise<PermissionScope> {\n    if (incomingMessage.descriptor.protocol !== PermissionsProtocol.uri) {\n      throw new DwnError(\n        DwnErrorCode.PermissionsProtocolGetScopeInvalidProtocol,\n        `Unexpected protocol for permission record: ${incomingMessage.descriptor.protocol}`\n      );\n    }\n\n    if (incomingMessage.descriptor.protocolPath === PermissionsProtocol.revocationPath) {\n      const grant = await PermissionsProtocol.fetchGrant(tenant, messageStore, incomingMessage.descriptor.parentId!);\n      return grant.scope;\n    } else if (incomingMessage.descriptor.protocolPath === PermissionsProtocol.grantPath) {\n      const grant = await PermissionGrant.parse(incomingMessage);\n      return grant.scope;\n    } else {\n      // if the record is not a grant or revocation, it must be a request\n      const request = await PermissionRequest.parse(incomingMessage);\n      return request.scope;\n    }\n  }\n\n  /**\n   * Normalizes the given permission scope if needed.\n   * @returns The normalized permission scope.\n   */\n  private static normalizePermissionScope(permissionScope: PermissionScope): PermissionScope {\n    const scope = { ...permissionScope };\n\n    if (PermissionsProtocol.hasProtocolScope(scope)) {\n      scope.protocol = normalizeProtocolUrl(scope.protocol);\n    }\n\n    return scope;\n  }\n\n  /**\n   * Type guard to determine if the scope is a record permission scope.\n   */\n  private static isRecordPermissionScope(scope: PermissionScope): scope is RecordsPermissionScope {\n    return scope.interface === 'Records';\n  }\n\n  /**\n   * Type guard to determine if the permission is a protocol-scoped\n   */\n  public static hasProtocolScope(scope: PermissionScope): scope is PermissionScope & { protocol: string } {\n    return 'protocol' in scope && scope.protocol !== undefined;\n  }\n\n  /**\n   * Validates that tags must include a protocol tag that matches the scoped protocol.\n   */\n  private static validateTags(requestOrGrant: RecordsWriteMessage, scopedProtocol: string): void {\n    // the protocol tag must be included with the record.\n    if (requestOrGrant.descriptor.tags === undefined || requestOrGrant.descriptor.tags.protocol === undefined) {\n      throw new DwnError(\n        DwnErrorCode.PermissionsProtocolValidateScopeMissingProtocolTag,\n        'Permission grants must have a `tags` property that contains a protocol tag'\n      );\n    }\n\n    // The protocol tag must match the protocol in the scope\n    const taggedProtocol = requestOrGrant.descriptor.tags.protocol as string;\n    if (taggedProtocol !== scopedProtocol) {\n      throw new DwnError(\n        DwnErrorCode.PermissionsProtocolValidateScopeProtocolMismatch,\n        `Permission grants must have a scope with a protocol that matches the tagged protocol: ${taggedProtocol}`\n      );\n    }\n  }\n\n  /**\n   * Validates scope and tags of the given permission request or grant.\n   */\n  private static validateScopeAndTags(scope: PermissionScope, requestOrGrant: RecordsWriteMessage): void {\n    // scoped protocol validations\n    if (this.hasProtocolScope(scope)) {\n      validateProtocolUrlNormalized(scope.protocol);\n\n      this.validateTags(requestOrGrant, scope.protocol);\n    }\n\n    // if the scope is not a record permission scope, no additional validation is required\n    if (!this.isRecordPermissionScope(scope)) {\n      return;\n    }\n    // otherwise this is a record permission scope, more validation needed below\n\n    // `contextId` and `protocolPath` are mutually exclusive\n    if (scope.contextId !== undefined && scope.protocolPath !== undefined) {\n      throw new DwnError(\n        DwnErrorCode.PermissionsProtocolValidateScopeContextIdProhibitedProperties,\n        'Permission grants cannot have both `contextId` and `protocolPath` present'\n      );\n    }\n  }\n};", "import type { GenericMessage } from '../types/message-types.js';\nimport type { MessagesPermissionScope } from '../types/permission-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { PermissionGrant } from '../protocols/permission-grant.js';\nimport type { ProtocolsConfigureMessage } from '../types/protocols-types.js';\nimport type { DataEncodedRecordsWriteMessage, RecordsDeleteMessage, RecordsWriteMessage } from '../types/records-types.js';\nimport type { MessagesQueryMessage, MessagesReadMessage, MessagesSubscribeMessage } from '../types/messages-types.js';\n\nimport { DwnInterfaceName } from '../enums/dwn-interface-method.js';\nimport { GrantAuthorization } from './grant-authorization.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\nexport class MessagesGrantAuthorization {\n\n  /**\n   * Authorizes a MessagesReadMessage using the given permission grant.\n   * @param messageStore Used to check if the given grant has been revoked; and to fetch related RecordsWrites if needed.\n   */\n  public static async authorizeMessagesRead(input: {\n    messagesReadMessage: MessagesReadMessage,\n    messageToRead: GenericMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      messagesReadMessage, messageToRead, expectedGrantor, expectedGrantee, permissionGrant, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: messagesReadMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    const scope = permissionGrant.scope as MessagesPermissionScope;\n    await MessagesGrantAuthorization.verifyScope(expectedGrantor, messageToRead, scope, messageStore);\n  }\n\n  /**\n   * Authorizes the scope of a permission grant for MessagesQuery or MessagesSubscribe.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public static async authorizeQueryOrSubscribe(input: {\n    incomingMessage: MessagesQueryMessage | MessagesSubscribeMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      incomingMessage, expectedGrantor, expectedGrantee, permissionGrant, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    // if the grant is scoped to a specific protocol, ensure that all of the query filters must include that protocol\n    if (PermissionsProtocol.hasProtocolScope(permissionGrant.scope)) {\n      const scopedProtocol = permissionGrant.scope.protocol;\n      for (const filter of incomingMessage.descriptor.filters) {\n        if (filter.protocol !== scopedProtocol) {\n          throw new DwnError(\n            DwnErrorCode.MessagesGrantAuthorizationMismatchedProtocol,\n            `The protocol ${filter.protocol} does not match the scoped protocol ${scopedProtocol}`\n          );\n        }\n      }\n    }\n  }\n\n  /**\n   * Verifies the given record against the scope of the given grant.\n   */\n  private static async verifyScope(\n    tenant: string,\n    messageToGet: GenericMessage,\n    incomingScope: MessagesPermissionScope,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    if (incomingScope.protocol === undefined) {\n      // if no protocol is specified in the scope, then the grant is for all records\n      return;\n    }\n\n    if (messageToGet.descriptor.interface === DwnInterfaceName.Records) {\n      // if the message is a Records interface message, get the RecordsWrite message associated with the record\n      const recordsMessage = messageToGet as RecordsWriteMessage | RecordsDeleteMessage;\n      const recordsWriteMessage = Records.isRecordsWrite(recordsMessage) ? recordsMessage :\n        await RecordsWrite.fetchNewestRecordsWrite(messageStore, tenant, recordsMessage.descriptor.recordId);\n\n      if (recordsWriteMessage.descriptor.protocol === incomingScope.protocol) {\n        // the record protocol matches the incoming scope protocol\n        return;\n      }\n\n      // we check if the protocol is the internal PermissionsProtocol for further validation\n      if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri) {\n        // get the permission scope from the permission message\n        const permissionScope = await PermissionsProtocol.getScopeFromPermissionRecord(\n          tenant,\n          messageStore,\n          recordsWriteMessage as DataEncodedRecordsWriteMessage\n        );\n\n        if (PermissionsProtocol.hasProtocolScope(permissionScope) && permissionScope.protocol === incomingScope.protocol) {\n          // the permissions record scoped protocol matches the incoming scope protocol\n          return;\n        }\n      }\n    } else if (messageToGet.descriptor.interface === DwnInterfaceName.Protocols) {\n      // if the message is a protocol message, it must be a `ProtocolConfigure` message\n      const protocolsConfigureMessage = messageToGet as ProtocolsConfigureMessage;\n      const configureProtocol = protocolsConfigureMessage.descriptor.definition.protocol;\n      if (configureProtocol === incomingScope.protocol) {\n        // the configured protocol matches the incoming scope protocol\n        return;\n      }\n    }\n\n    throw new DwnError(DwnErrorCode.MessagesReadVerifyScopeFailed, 'record message failed scope authorization');\n  }\n}", "import type { PaginationCursor } from '../types/query-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { MessagesFilter, MessagesQueryDescriptor, MessagesQueryMessage } from '../types/messages-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { Messages } from '../utils/messages.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { validateProtocolUrlNormalized } from '../utils/url.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type MessagesQueryOptions = {\n  signer: Signer;\n  filters?: MessagesFilter[];\n  cursor?: PaginationCursor;\n  messageTimestamp?: string;\n  permissionGrantId?: string;\n};\n\nexport class MessagesQuery extends AbstractMessage<MessagesQueryMessage>{\n\n  public static async parse(message: MessagesQueryMessage): Promise<MessagesQuery> {\n    Message.validateJsonSchema(message);\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n\n    for (const filter of message.descriptor.filters) {\n      if ('protocol' in filter && filter.protocol !== undefined) {\n        validateProtocolUrlNormalized(filter.protocol);\n      }\n    }\n\n    return new MessagesQuery(message);\n  }\n\n  public static async create(options: MessagesQueryOptions): Promise<MessagesQuery> {\n    const descriptor: MessagesQueryDescriptor = {\n      interface        : DwnInterfaceName.Messages,\n      method           : DwnMethodName.Query,\n      filters          : options.filters ? Messages.normalizeFilters(options.filters) : [],\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      cursor           : options.cursor,\n    };\n\n    removeUndefinedProperties(descriptor);\n\n    const { permissionGrantId, signer } = options;\n    const authorization = await Message.createAuthorization({\n      descriptor,\n      signer,\n      permissionGrantId\n    });\n\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new MessagesQuery(message);\n  }\n}", "import type { DidResolver } from '@web5/dids';\nimport type { EventLog } from '../types/event-log.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { MessagesQueryMessage, MessagesQueryReply } from '../types/messages-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { Messages } from '../utils/messages.js';\nimport { MessagesGrantAuthorization } from '../core/messages-grant-authorization.js';\nimport { MessagesQuery } from '../interfaces/messages-query.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\n\nexport class MessagesQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private eventLog: EventLog) { }\n\n  public async handle({\n    tenant,\n    message\n  }: {tenant: string, message: MessagesQueryMessage}): Promise<MessagesQueryReply> {\n    let messagesQuery: MessagesQuery;\n\n    try {\n      messagesQuery = await MessagesQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await MessagesQueryHandler.authorizeMessagesQuery(tenant, messagesQuery, this.messageStore);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // an empty array of filters means no filtering and all events are returned\n    const eventFilters = Messages.convertFilters(message.descriptor.filters);\n    const { events, cursor } = await this.eventLog.queryEvents(tenant, eventFilters, message.descriptor.cursor);\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : events,\n      cursor\n    };\n  }\n\n  private static async authorizeMessagesQuery(tenant: string, messagesQuery: MessagesQuery, messageStore: MessageStore): Promise<void> {\n    // if `MessagesQuery` author is the same as the target tenant, we can directly grant access\n    if (messagesQuery.author === tenant) {\n      return;\n    } else if (messagesQuery.author !== undefined && messagesQuery.signaturePayload!.permissionGrantId !== undefined) {\n      const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, messagesQuery.signaturePayload!.permissionGrantId);\n      await MessagesGrantAuthorization.authorizeQueryOrSubscribe({\n        incomingMessage : messagesQuery.message,\n        expectedGrantor : tenant,\n        expectedGrantee : messagesQuery.author,\n        permissionGrant,\n        messageStore\n      });\n    } else {\n      throw new DwnError(DwnErrorCode.MessagesQueryAuthorizationFailed, 'message failed authorization');\n    }\n  }\n}\n", "import type { Signer } from '../types/signer.js';\nimport type { MessagesReadDescriptor, MessagesReadMessage } from '../types/messages-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Cid } from '../utils/cid.js';\nimport { Message } from '../core/message.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type MessagesReadOptions = {\n  messageCid: string;\n  signer: Signer;\n  messageTimestamp?: string;\n  permissionGrantId?: string;\n};\n\nexport class MessagesRead extends AbstractMessage<MessagesReadMessage> {\n  public static async parse(message: MessagesReadMessage): Promise<MessagesRead> {\n    Message.validateJsonSchema(message);\n    this.validateMessageCid(message.descriptor.messageCid);\n\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new MessagesRead(message);\n  }\n\n  public static async create(options: MessagesReadOptions): Promise<MessagesRead> {\n    const descriptor: MessagesReadDescriptor = {\n      interface        : DwnInterfaceName.Messages,\n      method           : DwnMethodName.Read,\n      messageCid       : options.messageCid,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n    };\n\n    const { signer, permissionGrantId } = options;\n    const authorization = await Message.createAuthorization({\n      descriptor,\n      signer,\n      permissionGrantId,\n    });\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n    MessagesRead.validateMessageCid(options.messageCid);\n\n    return new MessagesRead(message);\n  }\n\n  /**\n   * validates the provided cid\n   * @param messageCid - the cid in question\n   * @throws {DwnError} if an invalid cid is found.\n   */\n  private static validateMessageCid(messageCid: string): void {\n    try {\n      Cid.parseCid(messageCid);\n    } catch (_) {\n      throw new DwnError(DwnErrorCode.MessagesReadInvalidCid, `${messageCid} is not a valid CID`);\n    }\n  }\n}", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '@web5/dids';\nimport type { GenericMessage } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsQueryReplyEntry } from '../types/records-types.js';\nimport type { MessagesReadMessage, MessagesReadReply, MessagesReadReplyEntry } from '../types/messages-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DataStream } from '../utils/data-stream.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { MessagesGrantAuthorization } from '../core/messages-grant-authorization.js';\nimport { MessagesRead } from '../interfaces/messages-read.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { Records } from '../utils/records.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\ntype HandleArgs = { tenant: string, message: MessagesReadMessage };\n\nexport class MessagesReadHandler implements MethodHandler {\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) {}\n\n  public async handle({ tenant, message }: HandleArgs): Promise<MessagesReadReply> {\n    let messagesRead: MessagesRead;\n\n    try {\n      messagesRead = await MessagesRead.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    const messageResult = await this.messageStore.get(tenant, message.descriptor.messageCid);\n    if (messageResult === undefined) {\n      return { status: { code: 404, detail: 'Not Found' } };\n    }\n\n    try {\n      await MessagesReadHandler.authorizeMessagesRead(tenant, messagesRead, messageResult, this.messageStore);\n    } catch (error) {\n      return messageReplyFromError(error, 401);\n    }\n\n    // If the message is a RecordsWrite, we include the data in the response if it is available\n    const entry: MessagesReadReplyEntry = { message: messageResult, messageCid: message.descriptor.messageCid };\n    if (Records.isRecordsWrite(messageResult)) {\n      const recordsWrite = entry.message as RecordsQueryReplyEntry;\n      // RecordsWrite specific handling, if MessageStore has embedded `encodedData` return it with the entry.\n      // we store `encodedData` along with the message if the data is below a certain threshold.\n      if (recordsWrite.encodedData !== undefined) {\n        const dataBytes = Encoder.base64UrlToBytes(recordsWrite.encodedData);\n        entry.data = DataStream.fromBytes(dataBytes);\n        delete recordsWrite.encodedData;\n      } else {\n        // otherwise check the data store for the associated data\n        const result = await this.dataStore.get(tenant, recordsWrite.recordId, recordsWrite.descriptor.dataCid);\n        if (result?.dataStream !== undefined) {\n          entry.data = result.dataStream;\n        }\n      }\n    }\n\n    return {\n      status: { code: 200, detail: 'OK' },\n      entry\n    };\n  }\n\n  /**\n   * @param messageStore Used to fetch related permission grant, permission revocation, and/or RecordsWrites for permission scope validation.\n   */\n  private static async authorizeMessagesRead(\n    tenant: string,\n    messagesRead: MessagesRead,\n    matchedMessage: GenericMessage,\n    messageStore: MessageStore\n  ): Promise<void> {\n\n    if (messagesRead.author === tenant) {\n      // If the author is the tenant, no further authorization is needed\n      return;\n    } else if (messagesRead.author !== undefined && messagesRead.signaturePayload!.permissionGrantId !== undefined) {\n      // if the author is not the tenant and the message has a permissionGrantId, we need to authorize the grant\n      const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, messagesRead.signaturePayload!.permissionGrantId);\n      await MessagesGrantAuthorization.authorizeMessagesRead({\n        messagesReadMessage : messagesRead.message,\n        messageToRead       : matchedMessage,\n        expectedGrantor     : tenant,\n        expectedGrantee     : messagesRead.author,\n        permissionGrant,\n        messageStore\n      });\n    } else {\n      throw new DwnError(DwnErrorCode.MessagesReadAuthorizationFailed, 'protocol message failed authorization');\n    }\n  }\n}", "import type { MessagesFilter } from '../types/messages-types.js';\nimport type { Signer } from '../types/signer.js';\nimport type { MessagesSubscribeDescriptor, MessagesSubscribeMessage } from '../types/messages-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { validateProtocolUrlNormalized } from '../utils/url.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\n\nexport type MessagesSubscribeOptions = {\n  signer: Signer;\n  messageTimestamp?: string;\n  filters?: MessagesFilter[]\n  permissionGrantId?: string;\n};\n\nexport class MessagesSubscribe extends AbstractMessage<MessagesSubscribeMessage> {\n  public static async parse(message: MessagesSubscribeMessage): Promise<MessagesSubscribe> {\n    Message.validateJsonSchema(message);\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n\n    for (const filter of message.descriptor.filters) {\n      if ('protocol' in filter && filter.protocol !== undefined) {\n        validateProtocolUrlNormalized(filter.protocol);\n      }\n    }\n\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n    return new MessagesSubscribe(message);\n  }\n\n  /**\n   * Creates a MessagesSubscribe message.\n   *\n   * @throws {DwnError} if json schema validation fails.\n   */\n  public static async create(\n    options: MessagesSubscribeOptions\n  ): Promise<MessagesSubscribe> {\n    const currentTime = Time.getCurrentTimestamp();\n\n    const descriptor: MessagesSubscribeDescriptor = {\n      interface        : DwnInterfaceName.Messages,\n      method           : DwnMethodName.Subscribe,\n      filters          : options.filters ?? [],\n      messageTimestamp : options.messageTimestamp ?? currentTime,\n    };\n\n    removeUndefinedProperties(descriptor);\n    const { permissionGrantId, signer } = options;\n    const authorization = await Message.createAuthorization({\n      descriptor,\n      signer,\n      permissionGrantId\n    });\n\n    const message: MessagesSubscribeMessage = { descriptor, authorization };\n    Message.validateJsonSchema(message);\n    return new MessagesSubscribe(message);\n  }\n}\n", "import type { DidResolver } from '@web5/dids';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { EventListener, EventStream } from '../types/subscriptions.js';\nimport type { MessagesSubscribeMessage, MessagesSubscribeReply, MessageSubscriptionHandler } from '../types/messages-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { FilterUtility } from '../utils/filter.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { Messages } from '../utils/messages.js';\nimport { MessagesGrantAuthorization } from '../core/messages-grant-authorization.js';\nimport { MessagesSubscribe } from '../interfaces/messages-subscribe.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nexport class MessagesSubscribeHandler implements MethodHandler {\n  constructor(\n    private didResolver: DidResolver,\n    private messageStore: MessageStore,\n    private eventStream?: EventStream\n  ) {}\n\n  public async handle({\n    tenant,\n    message,\n    subscriptionHandler\n  }: {\n    tenant: string;\n    message: MessagesSubscribeMessage;\n    subscriptionHandler: MessageSubscriptionHandler;\n  }): Promise<MessagesSubscribeReply> {\n    if (this.eventStream === undefined) {\n      return messageReplyFromError(new DwnError(\n        DwnErrorCode.MessagesSubscribeEventStreamUnimplemented,\n        'Subscriptions are not supported'\n      ), 501);\n    }\n\n    let messagesSubscribe: MessagesSubscribe;\n    try {\n      messagesSubscribe = await MessagesSubscribe.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await MessagesSubscribeHandler.authorizeMessagesSubscribe(tenant, messagesSubscribe, this.messageStore);\n    } catch (error) {\n      return messageReplyFromError(error, 401);\n    }\n\n    const { filters } = message.descriptor;\n    const messagesFilters = Messages.convertFilters(filters);\n    const messageCid = await Message.getCid(message);\n\n    const listener: EventListener = (eventTenant, event, eventIndexes):void => {\n      if (tenant === eventTenant && FilterUtility.matchAnyFilter(eventIndexes, messagesFilters)) {\n        subscriptionHandler(event);\n      }\n    };\n\n    const subscription = await this.eventStream.subscribe(tenant, messageCid, listener);\n\n    return {\n      status: { code: 200, detail: 'OK' },\n      subscription,\n    };\n  }\n\n  private static async authorizeMessagesSubscribe(tenant: string, messagesSubscribe: MessagesSubscribe, messageStore: MessageStore): Promise<void> {\n    // if `MessagesSubscribe` author is the same as the target tenant, we can directly grant access\n    if (messagesSubscribe.author === tenant) {\n      return;\n    } else if (messagesSubscribe.author !== undefined && messagesSubscribe.signaturePayload!.permissionGrantId !== undefined) {\n      const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, messagesSubscribe.signaturePayload!.permissionGrantId);\n      await MessagesGrantAuthorization.authorizeQueryOrSubscribe({\n        incomingMessage : messagesSubscribe.message,\n        expectedGrantor : tenant,\n        expectedGrantee : messagesSubscribe.author,\n        permissionGrant,\n        messageStore\n      });\n    } else {\n      throw new DwnError(DwnErrorCode.MessagesSubscribeAuthorizationFailed, 'message failed authorization');\n    }\n  }\n}\n", "import type { DataEncodedRecordsWriteMessage } from '../types/records-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { ProtocolDefinition, ProtocolRuleSet, ProtocolsConfigureDescriptor, ProtocolsConfigureMessage } from '../types/protocols-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport Ajv from 'ajv/dist/2020.js';\nimport { Message } from '../core/message.js';\nimport { PermissionGrant } from '../protocols/permission-grant.js';\nimport { ProtocolsGrantAuthorization } from '../core/protocols-grant-authorization.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\nimport { ProtocolAction, ProtocolActor } from '../types/protocols-types.js';\n\nexport type ProtocolsConfigureOptions = {\n  messageTimestamp?: string;\n  definition: ProtocolDefinition;\n  signer: Signer;\n  /**\n   * The delegated grant invoked to sign on behalf of the logical author, which is the grantor of the delegated grant.\n   */\n  delegatedGrant?: DataEncodedRecordsWriteMessage;\n  permissionGrantId?: string;\n};\n\nexport class ProtocolsConfigure extends AbstractMessage<ProtocolsConfigureMessage> {\n  public static async parse(message: ProtocolsConfigureMessage): Promise<ProtocolsConfigure> {\n    Message.validateJsonSchema(message);\n    ProtocolsConfigure.validateProtocolDefinition(message.descriptor.definition);\n    await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new ProtocolsConfigure(message);\n  }\n\n  public static async create(options: ProtocolsConfigureOptions): Promise<ProtocolsConfigure> {\n    const descriptor: ProtocolsConfigureDescriptor = {\n      interface        : DwnInterfaceName.Protocols,\n      method           : DwnMethodName.Configure,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      definition       : ProtocolsConfigure.normalizeDefinition(options.definition)\n    };\n\n    const authorization = await Message.createAuthorization({\n      descriptor,\n      signer            : options.signer,\n      delegatedGrant    : options.delegatedGrant,\n      permissionGrantId : options.permissionGrantId\n    });\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n    ProtocolsConfigure.validateProtocolDefinition(message.descriptor.definition);\n\n    const protocolsConfigure = new ProtocolsConfigure(message);\n    return protocolsConfigure;\n  }\n\n  /**\n   * Authorizes the author-delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeAuthorDelegate(messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = await PermissionGrant.parse(this.message.authorization.authorDelegatedGrant!);\n    await ProtocolsGrantAuthorization.authorizeConfigure({\n      protocolsConfigureMessage : this.message,\n      expectedGrantor           : this.author!,\n      expectedGrantee           : this.signer!,\n      permissionGrant           : delegatedGrant,\n      messageStore\n    });\n  }\n\n  /**\n   * Performs validation on the given protocol definition that are not easy to do using a JSON schema.\n   */\n  private static validateProtocolDefinition(definition: ProtocolDefinition): void {\n    const { protocol, types } = definition;\n\n    // validate protocol url\n    validateProtocolUrlNormalized(protocol);\n\n    // validate schema url normalized\n    for (const typeName in types) {\n      const schema = types[typeName].schema;\n      if (schema !== undefined) {\n        validateSchemaUrlNormalized(schema);\n      }\n    }\n\n    // validate `structure\n    ProtocolsConfigure.validateStructure(definition);\n  }\n\n  private static validateStructure(definition: ProtocolDefinition): void {\n\n    // gather all declared record types\n    const recordTypes = Object.keys(definition.types);\n\n    // gather all roles\n    const roles = ProtocolsConfigure.fetchAllRolePathsRecursively('', definition.structure, []);\n\n    // validate the entire rule set structure recursively\n    ProtocolsConfigure.validateRuleSetRecursively({\n      ruleSet             : definition.structure,\n      ruleSetProtocolPath : '',\n      recordTypes,\n      roles\n    });\n  }\n\n  /**\n   * Parses the given rule set hierarchy to get all the role protocol paths.\n   * @throws DwnError if the hierarchy depth goes beyond 10 levels.\n   */\n  private static fetchAllRolePathsRecursively(ruleSetProtocolPath: string, ruleSet: ProtocolRuleSet, roles: string[]): string[] {\n    // Limit the depth of the record hierarchy to 10 levels\n    // There is opportunity to optimize here to avoid repeated string splitting\n    if (ruleSetProtocolPath.split('/').length > 10) {\n      throw new DwnError(DwnErrorCode.ProtocolsConfigureRecordNestingDepthExceeded, 'Record nesting depth exceeded 10 levels.');\n    }\n\n    for (const recordType in ruleSet) {\n      // ignore non-nested-record properties\n      if (recordType.startsWith('$')) {\n        continue;\n      }\n\n      const childRuleSet = ruleSet[recordType];\n\n      let childRuleSetProtocolPath;\n      if (ruleSetProtocolPath === '') {\n        childRuleSetProtocolPath = recordType;\n      } else {\n        childRuleSetProtocolPath = `${ruleSetProtocolPath}/${recordType}`;\n      }\n\n      // if this is a role record, add it to the list, else continue to traverse\n      if (childRuleSet.$role) {\n        roles.push(childRuleSetProtocolPath);\n      } else {\n        ProtocolsConfigure.fetchAllRolePathsRecursively(childRuleSetProtocolPath, childRuleSet, roles);\n      }\n    }\n\n    return roles;\n  }\n\n  /**\n   * Validates the given rule set structure then recursively validates its nested child rule sets.\n   */\n  private static validateRuleSetRecursively(\n    input: { ruleSet: ProtocolRuleSet, ruleSetProtocolPath: string, recordTypes: string[], roles: string[] }\n  ): void {\n    const { ruleSet, ruleSetProtocolPath, recordTypes, roles } = input;\n\n    // Validate $actions in the rule set\n    if (ruleSet.$size !== undefined) {\n      const { min = 0, max } = ruleSet.$size;\n\n      if (max !== undefined && max < min) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidSize,\n          `Invalid size range found: max limit ${max} less than min limit ${min} at protocol path '${ruleSetProtocolPath}'`\n        );\n      }\n    }\n\n    if (ruleSet.$tags) {\n      const ajv = new Ajv.default();\n      const { $allowUndefinedTags, $requiredTags, ...tagProperties } = ruleSet.$tags;\n\n      // we validate each tag's expected schema to ensure it is a valid JSON schema\n      for (const tag in tagProperties) {\n        const tagSchemaDefinition = tagProperties[tag];\n\n        if (!ajv.validateSchema(tagSchemaDefinition)) {\n          const schemaError = ajv.errorsText(ajv.errors, { dataVar: `${ruleSetProtocolPath}/$tags/${tag}` });\n          throw new DwnError(DwnErrorCode.ProtocolsConfigureInvalidTagSchema, `tags schema validation error: ${schemaError}`);\n        }\n      }\n    }\n\n    // validate each action rule\n    const actionRules = ruleSet.$actions ?? [];\n    for (let i = 0; i < actionRules.length; i++) {\n      const actionRule = actionRules[i];\n\n      // Validate the `role` property of an `action` if exists.\n      if (actionRule.role !== undefined) {\n        // make sure the role contains a valid protocol paths to a role record\n        if (!roles.includes(actionRule.role)) {\n          throw new DwnError(\n            DwnErrorCode.ProtocolsConfigureRoleDoesNotExistAtGivenPath,\n            `Role in action ${JSON.stringify(actionRule)} for rule set ${ruleSetProtocolPath} does not exist.`\n          );\n        } else {\n          // it is a role record, we ensure that if any of the `can` actions are 'read' type of actions ('read', 'query', 'subscribe'),\n          // that they are all present.\n          const readActions = [ProtocolAction.Read, ProtocolAction.Query, ProtocolAction.Subscribe];\n          if (readActions.find( action => actionRule.can.includes(action)) && !readActions.every(action => actionRule.can.includes(action))) {\n            throw new DwnError(\n              DwnErrorCode.ProtocolsConfigureRoleReadActionMissing,\n              `Role in action ${JSON.stringify(actionRule)} for rule set ${ruleSetProtocolPath} must contain all read actions (${readActions.join(', ')}).`\n            );\n          }\n        }\n      }\n\n      // Validate that if `who` is set to `anyone` then `of` is not set\n      if (actionRule.who === 'anyone' && actionRule.of) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidActionOfNotAllowed,\n          `'of' is not allowed at rule set protocol path (${ruleSetProtocolPath})`\n        );\n      }\n\n      // Validate that if `who === recipient` and `of === undefined`, then `can` can only contain `co-update`, `co-delete`, and `co-prune`.\n      // We do not allow `read`, `write`, or `query` in the `can` array because:\n      // - `read` - Recipients are always allowed to `read`.\n      // - `write` - Entails ability to create and update.\n      //             Since `of` is undefined, it implies the recipient of THIS record,\n      //             there is no 'recipient' until this record has been created, so it makes no sense to allow recipient to write this record.\n      // - `query` - Only authorized using roles, so allowing direct recipients to query is outside the scope.\n      if (actionRule.who === ProtocolActor.Recipient && actionRule.of === undefined) {\n\n        // throw if `can` contains a value that is not `co-update`, `co-delete`, or `co-prune`\n        const hasDisallowedAction = actionRule.can.some(\n          action => ![ProtocolAction.CoUpdate, ProtocolAction.CoDelete, ProtocolAction.CoPrune].includes(action as ProtocolAction)\n        );\n        if (hasDisallowedAction) {\n          throw new DwnError(\n            DwnErrorCode.ProtocolsConfigureInvalidRecipientOfAction,\n            'Rules for `recipient` without `of` property must have `can` containing only `co-update`, `co-delete`, and `co-prune`.'\n          );\n        }\n      }\n\n      // Validate that if `who` is set to `author` then `of` is set\n      if (actionRule.who === ProtocolActor.Author && !actionRule.of) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidActionMissingOf,\n          `'of' is required when 'author' is specified as 'who'`\n        );\n      }\n\n      // validate that if `can` contains `update` or `delete`, it must also contain `create`\n      if (actionRule.can !== undefined) {\n        if (actionRule.can.includes(ProtocolAction.Update) && !actionRule.can.includes(ProtocolAction.Create)) {\n          throw new DwnError(\n            DwnErrorCode.ProtocolsConfigureInvalidActionUpdateWithoutCreate,\n            `Action rule ${JSON.stringify(actionRule)} contains 'update' action but missing the required 'create' action.`\n          );\n        }\n\n        if (actionRule.can.includes(ProtocolAction.Delete) && !actionRule.can.includes(ProtocolAction.Create)) {\n          throw new DwnError(\n            DwnErrorCode.ProtocolsConfigureInvalidActionDeleteWithoutCreate,\n            `Action rule ${JSON.stringify(actionRule)} contains 'delete' action but missing the required 'create' action.`\n          );\n        }\n      }\n\n      // Validate that there are no duplicate actors or roles in the remaining action rules:\n      // ie. no two action rules can have the same combination of `who` + `of` or `role`.\n      // NOTE: we only need to check the remaining action rules that have yet to go through action rule validation loop, as a perf shortcut.\n      for (let j = i + 1; j < actionRules.length; j++) {\n        const otherActionRule = actionRules[j];\n\n        if (actionRule.who !== undefined) {\n          if (actionRule.who === otherActionRule.who && actionRule.of === otherActionRule.of) {\n            throw new DwnError(\n              DwnErrorCode.ProtocolsConfigureDuplicateActorInRuleSet,\n              `More than one action rule per actor ${actionRule.who} of ${actionRule.of} not allowed within a rule set: ${JSON.stringify(actionRule)}`\n            );\n          }\n        } else {\n          // else implicitly a role-based action rule\n\n          if (actionRule.role === otherActionRule.role) {\n            throw new DwnError(\n              DwnErrorCode.ProtocolsConfigureDuplicateRoleInRuleSet,\n              `More than one action rule per role ${actionRule.role} not allowed within a rule set: ${JSON.stringify(actionRule)}`\n            );\n          }\n        }\n      }\n    }\n\n    // Validate nested rule sets\n    for (const recordType in ruleSet) {\n      if (recordType.startsWith('$')) {\n        continue;\n      }\n\n      if (!recordTypes.includes(recordType)) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolsConfigureInvalidRuleSetRecordType,\n          `Rule set ${recordType} is not declared as an allowed type in the protocol definition.`\n        );\n      }\n\n      const childRuleSet = ruleSet[recordType];\n\n      let childRuleSetProtocolPath;\n      if (ruleSetProtocolPath === '') {\n        childRuleSetProtocolPath = recordType; // case of initial definition structure\n      } else {\n        childRuleSetProtocolPath = `${ruleSetProtocolPath}/${recordType}`;\n      }\n\n      ProtocolsConfigure.validateRuleSetRecursively({\n        ruleSet             : childRuleSet,\n        ruleSetProtocolPath : childRuleSetProtocolPath,\n        recordTypes,\n        roles\n      });\n    }\n  }\n\n  private static normalizeDefinition(definition: ProtocolDefinition): ProtocolDefinition {\n    const typesCopy = { ...definition.types };\n\n    // Normalize schema url\n    for (const typeName in typesCopy) {\n      const schema = typesCopy[typeName].schema;\n      if (schema !== undefined) {\n        typesCopy[typeName].schema = normalizeSchemaUrl(schema);\n      }\n    }\n\n    return {\n      ...definition,\n      protocol : normalizeProtocolUrl(definition.protocol),\n      types    : typesCopy,\n    };\n  }\n}\n", "import type { MessageStore } from '../types/message-store.js';\nimport type { PermissionGrant } from '../protocols/permission-grant.js';\nimport type { ProtocolPermissionScope } from '../types/permission-types.js';\nimport type { ProtocolsConfigureMessage, ProtocolsQueryMessage } from '../types/protocols-types.js';\n\nimport { GrantAuthorization } from './grant-authorization.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\n\nexport class ProtocolsGrantAuthorization {\n  /**\n   * Authorizes the given ProtocolsConfigure in the scope of the DID given.\n   */\n  public static async authorizeConfigure(input: {\n    protocolsConfigureMessage: ProtocolsConfigureMessage,\n    expectedGrantor: string,\n    expectedGrantee: string,\n    permissionGrant: PermissionGrant,\n    messageStore: MessageStore,\n  }): Promise<void> {\n    const {\n      protocolsConfigureMessage, expectedGrantor, expectedGrantee, permissionGrant, messageStore\n    } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: protocolsConfigureMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    ProtocolsGrantAuthorization.verifyScope(protocolsConfigureMessage, permissionGrant.scope as ProtocolPermissionScope);\n  }\n\n  /**\n   * Authorizes the scope of a permission grant for a ProtocolsQuery message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public static async authorizeQuery(input: {\n    expectedGrantor: string,\n    expectedGrantee: string,\n    incomingMessage: ProtocolsQueryMessage;\n    permissionGrant: PermissionGrant;\n    messageStore: MessageStore;\n  }): Promise<void> {\n    const { expectedGrantee, expectedGrantor, incomingMessage, permissionGrant, messageStore } = input;\n\n    await GrantAuthorization.performBaseValidation({\n      incomingMessage: incomingMessage,\n      expectedGrantor,\n      expectedGrantee,\n      permissionGrant,\n      messageStore\n    });\n\n    // If the grant specifies a protocol, the query must specify the same protocol.\n    const permissionScope = permissionGrant.scope as ProtocolPermissionScope;\n    const protocolInGrant = permissionScope.protocol;\n    const protocolInMessage = incomingMessage.descriptor.filter?.protocol;\n    if (protocolInGrant !== undefined && protocolInMessage !== protocolInGrant) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolsGrantAuthorizationQueryProtocolScopeMismatch,\n        `Grant protocol scope ${protocolInGrant} does not match protocol in message ${protocolInMessage}`\n      );\n    }\n  }\n\n  /**\n   * Verifies a ProtocolsConfigure against the scope of the given grant.\n   */\n  private static verifyScope(\n    protocolsConfigureMessage: ProtocolsConfigureMessage,\n    grantScope: ProtocolPermissionScope\n  ): void {\n\n    // if the grant scope does not specify a protocol, then it is am unrestricted grant\n    if (grantScope.protocol === undefined) {\n      return;\n    }\n\n    if (grantScope.protocol !== protocolsConfigureMessage.descriptor.definition.protocol) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolsGrantAuthorizationScopeProtocolMismatch,\n        `Grant scope specifies different protocol than what appears in the configure message.`\n      );\n    }\n  }\n}", "import type { PublicJwk } from './jose-types.js';\nimport type { AuthorizationModel, GenericMessage, GenericMessageReply } from './message-types.js';\nimport type { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type ProtocolsConfigureDescriptor = {\n  interface : DwnInterfaceName.Protocols;\n  method: DwnMethodName.Configure;\n  messageTimestamp: string;\n  definition: ProtocolDefinition;\n};\n\nexport type ProtocolDefinition = {\n  protocol: string;\n  /**\n   * Denotes if this Protocol Definition can be returned by unauthenticated or unauthorized `ProtocolsQuery`.\n   */\n  published: boolean;\n  types: ProtocolTypes;\n  structure: {\n    [key: string]: ProtocolRuleSet;\n  }\n};\n\nexport type ProtocolType = {\n  schema?: string,\n  dataFormats?: string[],\n};\n\nexport type ProtocolTypes = {\n  [key: string]: ProtocolType;\n};\n\nexport enum ProtocolActor {\n  Anyone = 'anyone',\n  Author = 'author',\n  Recipient = 'recipient'\n}\n\nexport enum ProtocolAction {\n  CoDelete = 'co-delete',\n  CoPrune = 'co-prune',\n  CoUpdate = 'co-update',\n  Create = 'create',\n  Delete = 'delete',\n  Prune = 'prune',\n  Query = 'query',\n  Read = 'read',\n  Subscribe = 'subscribe',\n  Update = 'update'\n}\n\n/**\n * Rules defining which actors may access a record at the given protocol path.\n * Rules take three forms, e.g.:\n * 1. Anyone can create.\n *   {\n *     who: 'anyone',\n *     can: ['create']\n *   }\n *\n * 2. Author of protocolPath can create; OR\n *    Recipient of protocolPath can write.\n *   {\n *     who: 'recipient'\n *     of: 'requestForQuote',\n *     can: ['create']\n *   }\n *\n * 3. Role can create.\n *   {\n *     role: 'friend',\n *     can: ['create']\n *   }\n */\nexport type ProtocolActionRule = {\n  /**\n   * May be 'anyone' | 'author' | 'recipient'.\n   * If `who` === 'anyone', then `of` must be omitted. Otherwise `of` must be present.\n   * Mutually exclusive with `role`\n   */\n  who?: string,\n\n  /**\n   * The protocol path of a role record type marked with $role: true.\n   * Mutually exclusive with `who`\n   */\n  role?: string;\n\n  /**\n   * Protocol path.\n   * Must be present if `who` === 'author' or 'recipient'\n   */\n  of?: string;\n\n  /**\n   * Array of actions that the actor/role can perform.\n   * See {ProtocolAction} for possible values.\n   * 'query' and 'subscribe' are only supported for `role` rules.\n   */\n  can: string[];\n};\n/**\n * Config for protocol-path encryption scheme.\n */\nexport type ProtocolPathEncryption = {\n\n  /**\n   * The ID of the root key that derives the public key at this protocol path for encrypting the symmetric key used for data encryption.\n   */\n  rootKeyId: string;\n\n  /**\n   * Public key for encrypting the symmetric key used for data encryption.\n   */\n  publicKeyJwk: PublicJwk;\n};\n\nexport type ProtocolRuleSet = {\n  /**\n   * Encryption setting for objects that are in this protocol path.\n   */\n  $encryption?: ProtocolPathEncryption;\n  $actions?: ProtocolActionRule[];\n\n  /**\n   * If true, this marks a record as a `role` that may used within a context.\n   * The recipient of a $role record may invoke their role by setting `protocolRole` property to the protocol path of the $role record.\n   */\n  $role?: boolean;\n\n  /**\n   * If $size is set, the record size in bytes must be within the limits.\n   */\n  $size?: {\n    min?: number,\n    max?: number\n  }\n\n  /**\n   * If $tags is set, the record must conform to the tag rules.\n   */\n  $tags?: {\n    /** array of required tags */\n    $requiredTags?: string[],\n    /** allow properties other than those explicitly listed. defaults to false  */\n    $allowUndefinedTags?: boolean;\n\n    [key: string]: any;\n  }\n\n  // JSON Schema verifies that properties other than properties prefixed with $ will actually have type ProtocolRuleSet\n  [key: string]: any;\n};\n\nexport type ProtocolsConfigureMessage = GenericMessage & {\n  authorization: AuthorizationModel; // overriding `GenericMessage` with `authorization` being required\n  descriptor: ProtocolsConfigureDescriptor;\n};\n\nexport type ProtocolsQueryFilter = {\n  protocol: string,\n};\n\nexport type ProtocolsQueryDescriptor = {\n  interface : DwnInterfaceName.Protocols,\n  method: DwnMethodName.Query;\n  messageTimestamp: string;\n  filter?: ProtocolsQueryFilter\n};\n\nexport type ProtocolsQueryMessage = GenericMessage & {\n  descriptor: ProtocolsQueryDescriptor;\n};\n\nexport type ProtocolsQueryReply = GenericMessageReply & {\n  entries?: ProtocolsConfigureMessage[];\n};\n", "import type { DidResolver } from '@web5/dids';\nimport type { EventLog } from '../types/event-log.js';\nimport type { EventStream } from '../types/subscriptions.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { ProtocolsConfigureMessage } from '../types/protocols-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { ProtocolsConfigure } from '../interfaces/protocols-configure.js';\nimport { ProtocolsGrantAuthorization } from '../core/protocols-grant-authorization.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class ProtocolsConfigureHandler implements MethodHandler {\n\n  constructor(\n    private didResolver: DidResolver,\n    private messageStore: MessageStore,\n    private eventLog: EventLog,\n    private eventStream?: EventStream\n  ) { }\n\n  public async handle({\n    tenant,\n    message,\n  }: {tenant: string, message: ProtocolsConfigureMessage }): Promise<GenericMessageReply> {\n    let protocolsConfigure: ProtocolsConfigure;\n    try {\n      protocolsConfigure = await ProtocolsConfigure.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await ProtocolsConfigureHandler.authorizeProtocolsConfigure(tenant, protocolsConfigure, this.messageStore);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // attempt to get existing protocol\n    const query = {\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      protocol  : message.descriptor.definition.protocol\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n\n    // find newest message, and if the incoming message is the newest\n    let newestMessage = await Message.getNewestMessage(existingMessages);\n    let incomingMessageIsNewest = false;\n    if (newestMessage === undefined || await Message.isNewer(message, newestMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    }\n\n    // write the incoming message to DB if incoming message is newest\n    let messageReply: GenericMessageReply;\n    if (incomingMessageIsNewest) {\n      const indexes = ProtocolsConfigureHandler.constructIndexes(protocolsConfigure);\n\n      await this.messageStore.put(tenant, message, indexes);\n      const messageCid = await Message.getCid(message);\n      await this.eventLog.append(tenant, messageCid, indexes);\n\n      // only emit if the event stream is set\n      if (this.eventStream !== undefined) {\n        this.eventStream.emit(tenant, { message }, indexes);\n      }\n\n      messageReply = {\n        status: { code: 202, detail: 'Accepted' }\n      };\n    } else {\n      messageReply = {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    // delete all existing records that are smaller\n    const deletedMessageCids: string[] = [];\n    for (const message of existingMessages) {\n      if (await Message.isNewer(newestMessage, message)) {\n        const messageCid = await Message.getCid(message);\n        deletedMessageCids.push(messageCid);\n\n        await this.messageStore.delete(tenant, messageCid);\n      }\n    }\n\n    await this.eventLog.deleteEventsByCid(tenant, deletedMessageCids);\n\n    return messageReply;\n  };\n\n  static constructIndexes(protocolsConfigure: ProtocolsConfigure): { [key: string]: string | boolean } {\n    // strip out `definition` as it is not indexable\n    const { definition, ...propertiesToIndex } = protocolsConfigure.message.descriptor;\n    const { author } = protocolsConfigure;\n\n    const indexes: { [key: string]: string | boolean } = {\n      ...propertiesToIndex,\n      author    : author!,\n      protocol  : definition.protocol, // retain protocol url from `definition`,\n      published : definition.published // retain published state from definition\n    };\n\n    return indexes;\n  }\n\n  private static async authorizeProtocolsConfigure(tenant: string, protocolConfigure: ProtocolsConfigure, messageStore: MessageStore): Promise<void> {\n\n    if (protocolConfigure.isSignedByAuthorDelegate) {\n      await protocolConfigure.authorizeAuthorDelegate(messageStore);\n    }\n\n    if (protocolConfigure.author === tenant) {\n      return;\n    } else if (protocolConfigure.author !== undefined && protocolConfigure.signaturePayload!.permissionGrantId !== undefined) {\n      const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, protocolConfigure.signaturePayload!.permissionGrantId);\n      await ProtocolsGrantAuthorization.authorizeConfigure({\n        protocolsConfigureMessage : protocolConfigure.message,\n        expectedGrantor           : tenant,\n        expectedGrantee           : protocolConfigure.author,\n        permissionGrant,\n        messageStore\n      });\n    } else {\n      throw new DwnError(DwnErrorCode.ProtocolsConfigureAuthorizationFailed, 'message failed authorization');\n    }\n  }\n}", "import type { AuthorizationModel } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { ProtocolsQueryDescriptor, ProtocolsQueryFilter, ProtocolsQueryMessage } from '../types/protocols-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { ProtocolsGrantAuthorization } from '../core/protocols-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { normalizeProtocolUrl, validateProtocolUrlNormalized } from '../utils/url.js';\n\nexport type ProtocolsQueryOptions = {\n  messageTimestamp?: string;\n  filter?: ProtocolsQueryFilter,\n  signer?: Signer;\n  permissionGrantId?: string;\n};\n\nexport class ProtocolsQuery extends AbstractMessage<ProtocolsQueryMessage> {\n\n  public static async parse(message: ProtocolsQueryMessage): Promise<ProtocolsQuery> {\n    if (message.authorization !== undefined) {\n      await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    if (message.descriptor.filter !== undefined) {\n      validateProtocolUrlNormalized(message.descriptor.filter.protocol);\n    }\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new ProtocolsQuery(message);\n  }\n\n  public static async create(options: ProtocolsQueryOptions): Promise<ProtocolsQuery> {\n\n    const descriptor: ProtocolsQueryDescriptor = {\n      interface        : DwnInterfaceName.Protocols,\n      method           : DwnMethodName.Query,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      filter           : options.filter ? ProtocolsQuery.normalizeFilter(options.filter) : undefined,\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    let authorization: AuthorizationModel | undefined;\n    if (options.signer !== undefined) {\n      authorization = await Message.createAuthorization({\n        descriptor,\n        signer            : options.signer,\n        permissionGrantId : options.permissionGrantId\n      });\n    }\n\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    const protocolsQuery = new ProtocolsQuery(message);\n    return protocolsQuery;\n  }\n\n  static normalizeFilter(filter: ProtocolsQueryFilter): ProtocolsQueryFilter {\n    return {\n      ...filter,\n      protocol: normalizeProtocolUrl(filter.protocol),\n    };\n  }\n\n  public async authorize(tenant: string, messageStore: MessageStore): Promise<void> {\n    // if author is the same as the target tenant, we can directly grant access\n    if (this.author === tenant) {\n      return;\n    } else if (this.author !== undefined && this.signaturePayload!.permissionGrantId) {\n      const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, this.signaturePayload!.permissionGrantId);\n      await ProtocolsGrantAuthorization.authorizeQuery({\n        expectedGrantor : tenant,\n        expectedGrantee : this.author,\n        incomingMessage : this.message,\n        permissionGrant,\n        messageStore\n      });\n    } else {\n      throw new DwnError(\n        DwnErrorCode.ProtocolsQueryUnauthorized,\n        'The ProtocolsQuery failed authorization'\n      );\n    }\n  }\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '@web5/dids';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply } from '../types/protocols-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DwnErrorCode } from '../core/dwn-error.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolsQuery } from '../interfaces/protocols-query.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\n\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class ProtocolsQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore,private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: ProtocolsQueryMessage}): Promise<ProtocolsQueryReply> {\n\n    let protocolsQuery: ProtocolsQuery;\n    try {\n      protocolsQuery = await ProtocolsQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await protocolsQuery.authorize(tenant, this.messageStore);\n    } catch (error: any) {\n\n      // return public ProtocolsConfigures if query fails with a certain authentication or authorization code\n      if (error.code === DwnErrorCode.AuthenticateJwsMissing || // unauthenticated\n        error.code === DwnErrorCode.ProtocolsQueryUnauthorized ||\n        error.code === DwnErrorCode.ProtocolsGrantAuthorizationQueryProtocolScopeMismatch\n      ) {\n\n        const entries: ProtocolsConfigureMessage[] = await this.fetchPublishedProtocolsConfigure(tenant, protocolsQuery);\n        return {\n          status: { code: 200, detail: 'OK' },\n          entries\n        };\n      } else {\n        return messageReplyFromError(error, 401);\n      }\n    }\n\n    const query = {\n      ...message.descriptor.filter,\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure\n    };\n    removeUndefinedProperties(query);\n\n    const { messages } = await this.messageStore.query(tenant, [ query ]);\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : messages as ProtocolsConfigureMessage[]\n    };\n  };\n\n  /**\n   * Fetches only published `ProtocolsConfigure`.\n   */\n  private async fetchPublishedProtocolsConfigure(tenant: string, protocolsQuery: ProtocolsQuery): Promise<ProtocolsConfigureMessage[]> {\n    // fetch all published `ProtocolConfigure` matching the query\n    const filter = {\n      ...protocolsQuery.message.descriptor.filter,\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      published : true\n    };\n    const { messages: publishedProtocolsConfigure } = await this.messageStore.query(tenant, [ filter ]);\n    return publishedProtocolsConfigure as ProtocolsConfigureMessage[];\n  }\n}\n", "import type { Filter } from '../types/query-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { RecordsDelete } from '../interfaces/records-delete.js';\nimport type { RecordsQuery } from '../interfaces/records-query.js';\nimport type { RecordsRead } from '../interfaces/records-read.js';\nimport type { RecordsSubscribe } from '../interfaces/records-subscribe.js';\nimport type { RecordsWriteMessage } from '../types/records-types.js';\nimport type { ProtocolActionRule, ProtocolDefinition, ProtocolRuleSet, ProtocolsConfigureMessage, ProtocolType, ProtocolTypes } from '../types/protocols-types.js';\n\nimport Ajv from 'ajv/dist/2020.js';\nimport { FilterUtility } from '../utils/filter.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnError, DwnErrorCode } from './dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { ProtocolAction, ProtocolActor } from '../types/protocols-types.js';\n\nexport class ProtocolAuthorization {\n\n  /**\n   * Performs validation on the structure of RecordsWrite messages that use a protocol.\n   * @throws {Error} if validation fails.\n   */\n  public static async validateReferentialIntegrity(\n    tenant: string,\n    incomingMessage: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      incomingMessage.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // verify declared protocol type exists in protocol and that it conforms to type specification\n    ProtocolAuthorization.verifyType(\n      incomingMessage.message,\n      protocolDefinition.types\n    );\n\n    // validate `protocolPath`\n    await ProtocolAuthorization.verifyProtocolPathAndContextId(\n      tenant,\n      incomingMessage,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const ruleSet = ProtocolAuthorization.getRuleSet(\n      incomingMessage.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // Validate as a role record if the incoming message is writing a role record\n    await ProtocolAuthorization.verifyAsRoleRecordIfNeeded(\n      tenant,\n      incomingMessage,\n      ruleSet,\n      messageStore,\n    );\n\n    // Verify size limit\n    ProtocolAuthorization.verifySizeLimit(incomingMessage, ruleSet);\n\n    // Verify protocol tags\n    ProtocolAuthorization.verifyTagsIfNeeded(incomingMessage, ruleSet);\n  }\n\n  /**\n   * Performs protocol-based authorization against the incoming RecordsWrite message.\n   * @throws {Error} if authorization fails.\n   */\n  public static async authorizeWrite(\n    tenant: string,\n    incomingMessage: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    const existingInitialWrite = await ProtocolAuthorization.fetchInitialWrite(tenant, incomingMessage.message.recordId, messageStore);\n\n    let recordChain;\n    if (existingInitialWrite === undefined) {\n      // NOTE: we can assume this message is an initial write because an existing initial write does not exist.\n      // Additionally, we check further down in the `RecordsWriteHandler` if the incoming message is an initialWrite,\n      // so we don't check explicitly here to avoid an unnecessary duplicate check.\n      recordChain = await ProtocolAuthorization.constructRecordChain(tenant, incomingMessage.message.descriptor.parentId, messageStore);\n    } else {\n      recordChain = await ProtocolAuthorization.constructRecordChain(tenant, incomingMessage.message.recordId, messageStore);\n    }\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      incomingMessage.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const ruleSet = ProtocolAuthorization.getRuleSet(\n      incomingMessage.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      incomingMessage.message.descriptor.protocol!,\n      incomingMessage.message.contextId!,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions in the rule set\n    await ProtocolAuthorization.authorizeAgainstAllowedActions(\n      tenant,\n      incomingMessage,\n      ruleSet,\n      recordChain,\n      messageStore,\n    );\n  }\n\n  /**\n   * Performs protocol-based authorization against the incoming `RecordsRead` message.\n   * @param newestRecordsWrite The latest RecordsWrite associated with the recordId being read.\n   * @throws {Error} if authorization fails.\n   */\n  public static async authorizeRead(\n    tenant: string,\n    incomingMessage: RecordsRead,\n    newestRecordsWrite: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    // fetch record chain\n    const recordChain: RecordsWriteMessage[] =\n      await ProtocolAuthorization.constructRecordChain(tenant, newestRecordsWrite.message.recordId, messageStore);\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      newestRecordsWrite.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const ruleSet = ProtocolAuthorization.getRuleSet(\n      newestRecordsWrite.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      newestRecordsWrite.message.descriptor.protocol!,\n      newestRecordsWrite.message.contextId!,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions in the rule set\n    await ProtocolAuthorization.authorizeAgainstAllowedActions(\n      tenant,\n      incomingMessage,\n      ruleSet,\n      recordChain,\n      messageStore,\n    );\n  }\n\n  public static async authorizeQueryOrSubscribe(\n    tenant: string,\n    incomingMessage: RecordsQuery | RecordsSubscribe,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    const { protocol, protocolPath, contextId } = incomingMessage.message.descriptor.filter;\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      protocol!, // `authorizeQueryOrSubscribe` is only called if `protocol` is present\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const ruleSet = ProtocolAuthorization.getRuleSet(\n      protocolPath!, // presence of `protocolPath` is verified in `parse()`\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      protocol!,\n      contextId,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions in the rule set\n    await ProtocolAuthorization.authorizeAgainstAllowedActions(\n      tenant,\n      incomingMessage,\n      ruleSet,\n      [], // record chain is not relevant to queries or subscriptions\n      messageStore,\n    );\n  }\n\n  /**\n   * Performs protocol-based authorization against the incoming `RecordsDelete` message.\n   * @param recordsWrite A `RecordsWrite` of the record being deleted.\n   */\n  public static async authorizeDelete(\n    tenant: string,\n    incomingMessage: RecordsDelete,\n    recordsWrite: RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<void> {\n\n    // fetch record chain\n    const recordChain: RecordsWriteMessage[] =\n      await ProtocolAuthorization.constructRecordChain(tenant, incomingMessage.message.descriptor.recordId, messageStore);\n\n    // fetch the protocol definition\n    const protocolDefinition = await ProtocolAuthorization.fetchProtocolDefinition(\n      tenant,\n      recordsWrite.message.descriptor.protocol!,\n      messageStore,\n    );\n\n    // get the rule set for the inbound message\n    const ruleSet = ProtocolAuthorization.getRuleSet(\n      recordsWrite.message.descriptor.protocolPath!,\n      protocolDefinition,\n    );\n\n    // If the incoming message has `protocolRole` in the descriptor, validate the invoked role\n    await ProtocolAuthorization.verifyInvokedRole(\n      tenant,\n      incomingMessage,\n      recordsWrite.message.descriptor.protocol!,\n      recordsWrite.message.contextId!,\n      protocolDefinition,\n      messageStore,\n    );\n\n    // verify method invoked against the allowed actions in the rule set\n    await ProtocolAuthorization.authorizeAgainstAllowedActions(\n      tenant,\n      incomingMessage,\n      ruleSet,\n      recordChain,\n      messageStore,\n    );\n  }\n\n  /**\n   * Fetches the protocol definition based on the protocol specified in the given message.\n   */\n  private static async fetchProtocolDefinition(\n    tenant: string,\n    protocolUri: string,\n    messageStore: MessageStore\n  ): Promise<ProtocolDefinition> {\n    // if first-class protocol, return the definition from const object directly without going to data store\n    if (protocolUri === PermissionsProtocol.uri) {\n      return PermissionsProtocol.definition;\n    }\n\n    // fetch the corresponding protocol definition\n    const query: Filter = {\n      interface : DwnInterfaceName.Protocols,\n      method    : DwnMethodName.Configure,\n      protocol  : protocolUri\n    };\n    const { messages: protocols } = await messageStore.query(tenant, [query]);\n\n    if (protocols.length === 0) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationProtocolNotFound, `unable to find protocol definition for ${protocolUri}`);\n    }\n\n    const protocolMessage = protocols[0] as ProtocolsConfigureMessage;\n    return protocolMessage.descriptor.definition;\n  }\n\n  /**\n   * Constructs the chain of EXISTING records in the datastore where the first record is the root initial `RecordsWrite` of the record chain\n   * and last record is the initial `RecordsWrite` of the descendant record specified.\n   * @param descendantRecordId The ID of the descendent record to start constructing the record chain from by repeatedly looking up the parent.\n   * @returns the record chain where each record is represented by its initial `RecordsWrite`;\n   *          returns empty array if `descendantRecordId` is `undefined`.\n   * @throws {DwnError} if `descendantRecordId` is defined but any initial `RecordsWrite` is not found in the chain of records.\n   */\n  private static async constructRecordChain(\n    tenant: string,\n    descendantRecordId: string | undefined,\n    messageStore: MessageStore\n  ) : Promise<RecordsWriteMessage[]> {\n\n    if (descendantRecordId === undefined) {\n      return [];\n    }\n\n    const recordChain: RecordsWriteMessage[] = [];\n\n    // keep walking up the chain from the inbound message's parent, until there is no more parent\n    let currentRecordId: string | undefined = descendantRecordId;\n    while (currentRecordId !== undefined) {\n\n      const initialWrite = await ProtocolAuthorization.fetchInitialWrite(tenant, currentRecordId, messageStore);\n\n      // RecordsWrite needed should be available since we perform necessary checks at the time of writes,\n      // eg. check the immediate parent in `verifyProtocolPathAndContextId` at the time of writing,\n      // so if this condition is triggered, it means there is an unexpected bug that caused an incomplete chain.\n      // We add additional defensive check here because returning an unexpected/incorrect record chain could lead to security vulnerabilities.\n      if (initialWrite === undefined) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolAuthorizationParentNotFoundConstructingRecordChain,\n          `Unexpected error that should never trigger: no parent found with ID ${currentRecordId} when constructing record chain.`\n        );\n      }\n\n      recordChain.push(initialWrite);\n      currentRecordId = initialWrite.descriptor.parentId;\n    }\n\n    return recordChain.reverse(); // root record first\n  }\n\n  /**\n   * Fetches the initial RecordsWrite message associated with the given (tenant + recordId).\n   */\n  private static async fetchInitialWrite(\n    tenant: string,\n    recordId: string,\n    messageStore: MessageStore\n  ): Promise<RecordsWriteMessage | undefined> {\n\n    const query: Filter = {\n      interface : DwnInterfaceName.Records,\n      method    : DwnMethodName.Write,\n      recordId  : recordId\n    };\n    const { messages } = await messageStore.query(tenant, [query]);\n\n    if (messages.length === 0) {\n      return undefined;\n    }\n\n    const initialWrite = await RecordsWrite.getInitialWrite(messages);\n    return initialWrite;\n  }\n\n  /**\n   * Gets the rule set corresponding to the given protocolPath.\n   */\n  private static getRuleSet(\n    protocolPath: string,\n    protocolDefinition: ProtocolDefinition,\n  ): ProtocolRuleSet {\n    const ruleSet = ProtocolAuthorization.getRuleSetAtProtocolPath(protocolPath, protocolDefinition);\n    if (ruleSet === undefined) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationMissingRuleSet,\n        `No rule set defined for protocolPath ${protocolPath}`);\n    }\n    return ruleSet;\n  }\n\n  /**\n   * Verifies the `protocolPath` declared in the given message (if it is a RecordsWrite) matches the path of actual record chain.\n   * @throws {DwnError} if fails verification.\n   */\n  private static async verifyProtocolPathAndContextId(\n    tenant: string,\n    inboundMessage: RecordsWrite,\n    messageStore: MessageStore\n  ): Promise<void> {\n    const declaredProtocolPath = inboundMessage.message.descriptor.protocolPath!;\n    const declaredTypeName = ProtocolAuthorization.getTypeName(declaredProtocolPath);\n\n    const parentId = inboundMessage.message.descriptor.parentId;\n    if (parentId === undefined) {\n      if (declaredProtocolPath !== declaredTypeName) {\n        throw new DwnError(\n          DwnErrorCode.ProtocolAuthorizationParentlessIncorrectProtocolPath,\n          `Declared protocol path '${declaredProtocolPath}' is not valid for records with no parent'.`\n        );\n      }\n\n      return;\n    }\n\n    // Else `parentId` is defined, so we need to verify both protocolPath and contextId\n\n    // fetch the parent message\n    const protocol = inboundMessage.message.descriptor.protocol!;\n    const query: Filter = {\n      isLatestBaseState : true, // NOTE: this filter is critical, to ensure are are not returning a deleted parent\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      protocol,\n      recordId          : parentId\n    };\n    const { messages: parentMessages } = await messageStore.query(tenant, [query]);\n    const parentMessage = (parentMessages as RecordsWriteMessage[])[0];\n\n    // verifying protocolPath of incoming message is a child of the parent message's protocolPath\n    const parentProtocolPath = parentMessage?.descriptor?.protocolPath;\n    const expectedProtocolPath = `${parentProtocolPath}/${declaredTypeName}`;\n    if (expectedProtocolPath !== declaredProtocolPath) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationIncorrectProtocolPath,\n        `Could not find matching parent record to verify declared protocol path '${declaredProtocolPath}'.`\n      );\n    }\n\n    // verifying contextId of incoming message is a child of the parent message's contextId\n    const expectedContextId = `${parentMessage.contextId}/${inboundMessage.message.recordId}`;\n    const actualContextId = inboundMessage.message.contextId;\n    if (actualContextId !== expectedContextId) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationIncorrectContextId,\n        `Declared contextId '${actualContextId}' is not the same as expected: '${expectedContextId}'.`\n      );\n    }\n\n  }\n\n  /**\n   * Verifies the `dataFormat` and `schema` declared in the given message (if it is a RecordsWrite) matches dataFormat\n   * and schema of the type in the given protocol.\n   * @throws {DwnError} if fails verification.\n   */\n  private static verifyType(\n    inboundMessage: RecordsWriteMessage,\n    protocolTypes: ProtocolTypes,\n  ): void {\n\n    const typeNames = Object.keys(protocolTypes);\n    const declaredProtocolPath = inboundMessage.descriptor.protocolPath!;\n    const declaredTypeName = ProtocolAuthorization.getTypeName(declaredProtocolPath);\n    if (!typeNames.includes(declaredTypeName)) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationInvalidType,\n        `record with type ${declaredTypeName} not allowed in protocol`);\n    }\n\n    const protocolPath = inboundMessage.descriptor.protocolPath!;\n    // existence of `protocolType` has already been verified\n    const typeName = ProtocolAuthorization.getTypeName(protocolPath);\n    const protocolType: ProtocolType = protocolTypes[typeName];\n\n    // no `schema` specified in protocol definition means that any schema is allowed\n    const { schema } = inboundMessage.descriptor;\n    if (protocolType.schema !== undefined && protocolType.schema !== schema) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationInvalidSchema,\n        `type '${typeName}' must have schema '${protocolType.schema}', \\\n        instead has '${schema}'`\n      );\n    }\n\n    // no `dataFormats` specified in protocol definition means that all dataFormats are allowed\n    const { dataFormat } = inboundMessage.descriptor;\n    if (protocolType.dataFormats !== undefined && !protocolType.dataFormats.includes(dataFormat)) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationIncorrectDataFormat,\n        `type '${typeName}' must have data format in (${protocolType.dataFormats}), \\\n        instead has '${dataFormat}'`\n      );\n    }\n  }\n\n  /**\n   * Check if the incoming message is invoking a role. If so, validate the invoked role.\n   */\n  private static async verifyInvokedRole(\n    tenant: string,\n    incomingMessage: RecordsDelete | RecordsQuery | RecordsRead | RecordsSubscribe | RecordsWrite,\n    protocolUri: string,\n    contextId: string | undefined,\n    protocolDefinition: ProtocolDefinition,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    const protocolRole = incomingMessage.signaturePayload?.protocolRole;\n\n    // Only verify role if there is a role being invoked\n    if (protocolRole === undefined) {\n      return;\n    }\n\n    const roleRuleSet = ProtocolAuthorization.getRuleSetAtProtocolPath(protocolRole, protocolDefinition);\n    if (roleRuleSet === undefined || !roleRuleSet.$role) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationNotARole,\n        `Protocol path ${protocolRole} does not match role record type.`\n      );\n    }\n\n    // Construct a filter to fetch the invoked role record\n    const roleRecordFilter: Filter = {\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      protocol          : protocolUri,\n      protocolPath      : protocolRole,\n      recipient         : incomingMessage.author!,\n      isLatestBaseState : true,\n    };\n\n    const ancestorSegmentCountOfRolePath = protocolRole.split('/').length - 1;\n    if (contextId === undefined && ancestorSegmentCountOfRolePath > 0) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationMissingContextId,\n        'Could not verify role because contextId is missing.'\n      );\n    }\n\n    // Compute `contextId` prefix filter for fetching the invoked role record if the role path is not at the root level.\n    // e.g. if invoked role path is `Thread/Participant`, and the `contextId` of the message is `threadX/messageY/attachmentZ`,\n    // then we need to add a prefix filter as `threadX` for the `contextId`\n    // because the `contextId` of the Participant record would be in the form of be `threadX/participantA`\n    if (ancestorSegmentCountOfRolePath > 0) {\n      const contextIdSegments = contextId!.split('/'); // NOTE: currently contextId segment count is never shorter than the role path count.\n      const contextIdPrefix = contextIdSegments.slice(0, ancestorSegmentCountOfRolePath).join('/');\n      const contextIdPrefixFilter = FilterUtility.constructPrefixFilterAsRangeFilter(contextIdPrefix);\n\n      roleRecordFilter.contextId = contextIdPrefixFilter;\n    }\n\n\n    const { messages: matchingMessages } = await messageStore.query(tenant, [roleRecordFilter]);\n\n    if (matchingMessages.length === 0) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound,\n        `No matching role record found for protocol path ${protocolRole}`\n      );\n    }\n  }\n\n  /**\n   * Returns all the ProtocolActions that would authorized the incoming message\n   * (but we still need to later verify if there is a rule defined that matches one of the actions).\n   * NOTE: the reason why there could be multiple actions is because:\n   * - In case of an initial RecordsWrite, the RecordsWrite can be authorized by an allow `create` or `write` rule.\n   * - In case of a non-initial RecordsWrite by the original record author, the RecordsWrite can be authorized by a `write` or `co-update` rule.\n   *\n   * It is important to recognize that the `write` access that allowed the original record author to create the record maybe revoked\n   * (e.g. by role revocation) by the time a \"non-initial\" write by the same author is attempted.\n   */\n  private static async getActionsSeekingARuleMatch(\n    tenant: string,\n    incomingMessage: RecordsDelete | RecordsQuery | RecordsRead | RecordsSubscribe | RecordsWrite,\n    messageStore: MessageStore,\n  ): Promise<ProtocolAction[]> {\n\n    switch (incomingMessage.message.descriptor.method) {\n    case DwnMethodName.Delete:\n      const recordsDelete = incomingMessage as RecordsDelete;\n      const recordId = recordsDelete.message.descriptor.recordId;\n      const initialWrite = await RecordsWrite.fetchInitialRecordsWrite(messageStore, tenant, recordId);\n\n      // if there is no initial write, then no action rule can authorize the incoming message, because we won't know who the original author is\n      // NOTE: purely defensive programming: currently not reachable\n      // because RecordsDelete handler already have an existence check prior to this method being called.\n      if (initialWrite === undefined) {\n        return [];\n      }\n\n      const actionsThatWouldAuthorizeDelete = [];\n      const prune = recordsDelete.message.descriptor.prune;\n      if (prune) {\n        actionsThatWouldAuthorizeDelete.push(ProtocolAction.CoPrune);\n\n        // A prune by the original record author can also be authorized by a 'prune' rule.\n        if (incomingMessage.author === initialWrite.author) {\n          actionsThatWouldAuthorizeDelete.push(ProtocolAction.Prune);\n        }\n      } else {\n        actionsThatWouldAuthorizeDelete.push(ProtocolAction.CoDelete);\n\n        // A delete by the original record author can also be authorized by a 'delete' rule.\n        if (incomingMessage.author === initialWrite.author) {\n          actionsThatWouldAuthorizeDelete.push(ProtocolAction.Delete);\n        }\n      }\n\n      return actionsThatWouldAuthorizeDelete;\n\n    case DwnMethodName.Query:\n      return [ProtocolAction.Query];\n\n    case DwnMethodName.Read:\n      return [ProtocolAction.Read];\n\n    case DwnMethodName.Subscribe:\n      return [ProtocolAction.Subscribe];\n\n    case DwnMethodName.Write:\n      const incomingRecordsWrite = incomingMessage as RecordsWrite;\n\n      if (await incomingRecordsWrite.isInitialWrite()) {\n        return [ProtocolAction.Create];\n      } else {\n        // else incoming RecordsWrite not an initial write\n\n        const recordId = (incomingMessage as RecordsWrite).message.recordId;\n        const initialWrite = await RecordsWrite.fetchInitialRecordsWrite(messageStore, tenant, recordId);\n\n        // if there is no initial write to update from, then no action rule can authorize the incoming message\n        if (initialWrite === undefined) {\n          return [];\n        }\n\n        if (incomingMessage.author === initialWrite.author) {\n        // 'update' or 'co-update' action authorizes the incoming message\n          return [ProtocolAction.CoUpdate, ProtocolAction.Update];\n        } else {\n          // An update by someone who is not the record author can only be authorized by a 'co-update' rule.\n          return [ProtocolAction.CoUpdate];\n        }\n      }\n    }\n\n    // purely defensive programming: should not be reachable\n    // setting to empty array will prevent any message from being authorized\n    return [];\n  }\n\n  /**\n   * Verifies the given message is authorized by one of the action rules in the given protocol rule set.\n   * @throws {Error} if action not allowed.\n   */\n  private static async authorizeAgainstAllowedActions(\n    tenant: string,\n    incomingMessage: RecordsDelete | RecordsQuery | RecordsRead | RecordsSubscribe | RecordsWrite,\n    ruleSet: ProtocolRuleSet,\n    recordChain: RecordsWriteMessage[],\n    messageStore: MessageStore,\n  ): Promise<void> {\n    const incomingMessageMethod = incomingMessage.message.descriptor.method;\n    const actionsSeekingARuleMatch = await ProtocolAuthorization.getActionsSeekingARuleMatch(tenant, incomingMessage, messageStore);\n    const author = incomingMessage.author;\n    const actionRules = ruleSet.$actions;\n\n    // NOTE: We have already checked that the message is not from tenant, owner, or permission grant authorized prior to this method being called.\n\n    if (actionRules === undefined) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationActionRulesNotFound,\n        `no action rule defined for Records${incomingMessageMethod}, ${author} is unauthorized`\n      );\n    }\n\n    const invokedRole = incomingMessage.signaturePayload?.protocolRole;\n\n    // Iterate through the action rules to find a rule that authorizes the incoming message.\n    for (const actionRule of actionRules) {\n      // If the action rule does not have an allowed action that matches an action that can authorize the message, skip to evaluate next action rule.\n      const ruleHasAMatchingAllowedAction = actionRule.can.some(allowedAction => actionsSeekingARuleMatch.includes(allowedAction as ProtocolAction));\n      if (!ruleHasAMatchingAllowedAction) {\n        continue;\n      }\n\n      // Code reaches here means this action rule has an allowed action that matches the action of the message.\n      // The remaining code checks the actor/author of the incoming message.\n\n      // If the action rule allows `anyone`, then no further checks are needed.\n      if (actionRule.who === ProtocolActor.Anyone) {\n        return;\n      }\n\n      // Since not `anyone` is allowed in this action rule, we will need to check the author of the incoming message,\n      // if the author of incoming message is not defined, this action rule cannot authorize the incoming message.\n      if (author === undefined) {\n        continue;\n      }\n\n      // go through role validation path if a role is invoked by the incoming message\n      if (invokedRole !== undefined) {\n        // When a protocol role is being invoked, we require that there is a matching `role` rule.\n        if (actionRule.role === invokedRole) {\n          // role is successfully invoked\n          return;\n        } else {\n          continue;\n        }\n      }\n\n      // else we go through the actor (`who`) validation\n\n      // If `of` is not set, handle it as a special case\n      // NOTE: `of` is always set if `who` is set to `author` (we do this check in `validateRuleSetRecursively()`)\n      if (actionRule.who === ProtocolActor.Recipient && actionRule.of === undefined) {\n        // If the action rule specifies a recipient without `of` and the incoming message is authenticated:\n\n        // Author must be recipient of the record being accessed\n        let recordsWriteMessage: RecordsWriteMessage;\n        if (incomingMessage.message.descriptor.method === DwnMethodName.Write) {\n          recordsWriteMessage = incomingMessage.message as RecordsWriteMessage;\n        } else {\n          // else the incoming message must be a `RecordsDelete` because only `co-update`, `co-delete`, `co-prune` are allowed recipient actions,\n          // (we do this check in `validateRuleSetRecursively()`)\n          // and we have already checked that the incoming message is not a `RecordsWrite` above which covers `co-update` path.\n          recordsWriteMessage = recordChain[recordChain.length - 1];\n        }\n\n        if (recordsWriteMessage.descriptor.recipient === author) {\n          return;\n        } else {\n          continue;\n        }\n      }\n\n      // validate the actor is allowed by the current action rule\n      const ancestorRuleSuccess: boolean = await ProtocolAuthorization.checkActor(author, actionRule, recordChain);\n      if (ancestorRuleSuccess) {\n        return;\n      }\n    }\n\n    // No action rules were satisfied, message is not authorized\n    throw new DwnError(\n      DwnErrorCode.ProtocolAuthorizationActionNotAllowed,\n      `Inbound message action Records${incomingMessageMethod} by author ${incomingMessage.author} not allowed.`\n    );\n  }\n\n  /**\n   * Verifies that writes adhere to the $size constraints if provided\n   * @throws {Error} if size is exceeded.\n   */\n  private static verifySizeLimit(\n    incomingMessage: RecordsWrite,\n    ruleSet: ProtocolRuleSet\n  ): void {\n    const { min = 0, max } = ruleSet.$size || {};\n\n    const dataSize = incomingMessage.message.descriptor.dataSize;\n\n    if (dataSize < min) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationMinSizeInvalid, `data size ${dataSize} is less than allowed ${min}`);\n    }\n\n    if (max === undefined) {\n      return;\n    }\n\n    if (dataSize > max) {\n      throw new DwnError(DwnErrorCode.ProtocolAuthorizationMaxSizeInvalid, `data size ${dataSize} is more than allowed ${max}`);\n    }\n  }\n\n  private static verifyTagsIfNeeded(\n    incomingMessage: RecordsWrite,\n    ruleSet: ProtocolRuleSet\n  ): void {\n    if (ruleSet.$tags !== undefined) {\n      const { tags = {}, protocol, protocolPath } = incomingMessage.message.descriptor;\n\n      const { $allowUndefinedTags, $requiredTags, ...properties } = ruleSet.$tags;\n\n      // if $allowUndefinedTags is set to false and there are properties not defined in the schema, an error is thrown\n      const additionalProperties = $allowUndefinedTags || false;\n\n      // if $requiredTags is set, all required tags must be present\n      const required = $requiredTags || [];\n\n      const ajv = new Ajv.default();\n      const compiledTags = ajv.compile({\n        type: 'object',\n        properties,\n        required,\n        additionalProperties,\n      });\n\n      const validSchema = compiledTags(tags);\n      if (!validSchema) {\n        // the `dataVar` is used to add a qualifier to the error message.\n        // For example. If the error is related to a tag `status` in a protocol `https://example.protocol` with the protocolPath `example/path`\n        // the error would be described as `https://example.protocol/example/path/$tags/status'\n        // without this decorator it would show up as `data/status` which may be confusing.\n        const schemaError = ajv.errorsText(compiledTags.errors, { dataVar: `${protocol}/${protocolPath}/$tags` });\n        throw new DwnError(DwnErrorCode.ProtocolAuthorizationTagsInvalidSchema, `tags schema validation error: ${schemaError}`);\n      }\n    }\n  }\n\n  /**\n   * If the given RecordsWrite is not a role record, this method does nothing and succeeds immediately.\n   *\n   * Else it verifies the validity of the given `RecordsWrite` as a role record, including:\n   * 1. The same role has not been assigned to the same entity/recipient.\n   */\n  private static async verifyAsRoleRecordIfNeeded(\n    tenant: string,\n    incomingMessage: RecordsWrite,\n    ruleSet: ProtocolRuleSet,\n    messageStore: MessageStore,\n  ): Promise<void> {\n    if (!ruleSet.$role) {\n      return;\n    }\n\n    // else this is a role record\n\n    const incomingRecordsWrite = incomingMessage;\n    const recipient = incomingRecordsWrite.message.descriptor.recipient;\n    if (recipient === undefined) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationRoleMissingRecipient,\n        'Role records must have a recipient'\n      );\n    }\n\n    const protocolPath = incomingRecordsWrite.message.descriptor.protocolPath!;\n    const filter: Filter = {\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true,\n      protocol          : incomingRecordsWrite.message.descriptor.protocol!,\n      protocolPath,\n      recipient,\n    };\n\n    const parentContextId = Records.getParentContextFromOfContextId(incomingRecordsWrite.message.contextId)!;\n\n    // if this is not the root record, add a prefix filter to the query\n    if (parentContextId !== '') {\n      const prefixFilter = FilterUtility.constructPrefixFilterAsRangeFilter(parentContextId);\n      filter.contextId = prefixFilter;\n    }\n\n    const { messages: matchingMessages } = await messageStore.query(tenant, [filter]);\n    const matchingRecords = matchingMessages as RecordsWriteMessage[];\n    const matchingRecordsExceptIncomingRecordId = matchingRecords.filter((recordsWriteMessage) =>\n      recordsWriteMessage.recordId !== incomingRecordsWrite.message.recordId\n    );\n    if (matchingRecordsExceptIncomingRecordId.length > 0) {\n      throw new DwnError(\n        DwnErrorCode.ProtocolAuthorizationDuplicateRoleRecipient,\n        `DID '${recipient}' is already recipient of a role record at protocol path '${protocolPath} under the parent context ${parentContextId}.`\n      );\n    }\n  }\n\n  private static getRuleSetAtProtocolPath(protocolPath: string, protocolDefinition: ProtocolDefinition): ProtocolRuleSet | undefined {\n    const protocolPathArray = protocolPath.split('/');\n    let currentRuleSet: ProtocolRuleSet = protocolDefinition.structure;\n    let i = 0;\n    while (i < protocolPathArray.length) {\n      const currentTypeName = protocolPathArray[i];\n      const nextRuleSet: ProtocolRuleSet | undefined = currentRuleSet[currentTypeName];\n\n      if (nextRuleSet === undefined) {\n        return undefined;\n      }\n\n      currentRuleSet = nextRuleSet;\n      i++;\n    }\n\n    return currentRuleSet;\n  }\n\n  /**\n   * Checks if the `who: 'author' | 'recipient'` action rule has a matching record in the record chain.\n   * @returns `true` if the action rule is satisfied; `false` otherwise.\n   */\n  private static async checkActor(\n    author: string,\n    actionRule: ProtocolActionRule,\n    recordChain: RecordsWriteMessage[],\n  ): Promise<boolean> {\n    // find a message with matching protocolPath\n    const ancestorRecordsWrite = recordChain.find((recordsWriteMessage) =>\n      recordsWriteMessage.descriptor.protocolPath === actionRule.of!\n    );\n\n    if (ancestorRecordsWrite === undefined) {\n      // If this is reached, there is likely an issue with the protocol definition.\n      // The protocolPath to the actionRule should start with actionRule.of\n      // consider moving this check to ProtocolsConfigure message ingestion\n      return false;\n    }\n\n    if (actionRule.who === ProtocolActor.Recipient) {\n      // author of the incoming message must be the recipient of the ancestor message\n      return author === ancestorRecordsWrite.descriptor.recipient;\n    } else { // actionRule.who === ProtocolActor.Author\n      // author of the incoming message must be the author of the ancestor message\n      const ancestorAuthor = (await RecordsWrite.parse(ancestorRecordsWrite)).author;\n      return author === ancestorAuthor;\n    }\n  }\n\n  private static getTypeName(protocolPath: string): string {\n    return protocolPath.split('/').slice(-1)[0];\n  }\n}", "import type { KeyValues } from '../types/query-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { DataEncodedRecordsWriteMessage, RecordsDeleteDescriptor, RecordsDeleteMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { PermissionGrant } from '../protocols/permission-grant.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type RecordsDeleteOptions = {\n  recordId: string;\n  messageTimestamp?: string;\n  protocolRole?: string;\n  signer: Signer;\n\n  /**\n   * Denotes if all the descendent records should be purged. Defaults to `false`.\n   */\n  prune?: boolean\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DataEncodedRecordsWriteMessage;\n};\n\nexport class RecordsDelete extends AbstractMessage<RecordsDeleteMessage> {\n\n  public static async parse(message: RecordsDeleteMessage): Promise<RecordsDelete> {\n    let signaturePayload;\n    if (message.authorization !== undefined) {\n      signaturePayload = await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    await Records.validateDelegatedGrantReferentialIntegrity(message, signaturePayload);\n\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    const recordsDelete = new RecordsDelete(message);\n    return recordsDelete;\n  }\n\n  /**\n   * Creates a RecordsDelete message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.messageTimestamp If `undefined`, it will be auto-filled with current time.\n   */\n  public static async create(options: RecordsDeleteOptions): Promise<RecordsDelete> {\n    const recordId = options.recordId;\n    const currentTime = Time.getCurrentTimestamp();\n\n    const descriptor: RecordsDeleteDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Delete,\n      messageTimestamp : options.messageTimestamp ?? currentTime,\n      recordId,\n      prune            : options.prune ?? false\n    };\n\n    const authorization = await Message.createAuthorization({\n      descriptor,\n      signer         : options.signer,\n      protocolRole   : options.protocolRole,\n      delegatedGrant : options.delegatedGrant\n    });\n    const message: RecordsDeleteMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsDelete(message);\n  }\n\n  /**\n   * Indexed properties needed for MessageStore indexing.\n   */\n  public constructIndexes(\n    initialWrite: RecordsWriteMessage,\n  ): KeyValues {\n    const message = this.message;\n    const descriptor = { ...message.descriptor };\n\n    // we add the immutable properties from the initial RecordsWrite message in order to use them when querying relevant deletes.\n    const { protocol, protocolPath, recipient, schema, parentId, dateCreated } = initialWrite.descriptor;\n\n    const indexes: { [key:string]: string | boolean | undefined } = {\n      isLatestBaseState : true,\n      protocol, protocolPath, recipient, schema, parentId, dateCreated,\n      contextId         : initialWrite.contextId,\n      author            : this.author!,\n      ...descriptor\n    };\n    removeUndefinedProperties(indexes);\n\n    return indexes as KeyValues;\n  }\n\n  /*\n   * Authorizes the delegate who signed the message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeDelegate(recordsWriteToDelete: RecordsWriteMessage, messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = await PermissionGrant.parse(this.message.authorization!.authorDelegatedGrant!);\n    await RecordsGrantAuthorization.authorizeDelete({\n      recordsDeleteMessage : this.message,\n      recordsWriteToDelete,\n      expectedGrantor      : this.author!,\n      expectedGrantee      : this.signer!,\n      permissionGrant      : delegatedGrant,\n      messageStore\n    });\n  }\n}\n", "import type { StorageController } from '../store/storage-controller.js';\nimport type { ManagedResumableTask, ResumableTaskStore } from '../types/resumable-task-store.js';\n\nexport enum ResumableTaskName {\n  RecordsDelete = 'RecordsDelete',\n}\n\nexport type ResumableTask = {\n  name: ResumableTaskName;\n  data: any;\n};\n\n\nexport class ResumableTaskManager {\n\n  /**\n   * The frequency at which the automatic timeout extension is requested for a resumable task.\n   */\n  public static readonly timeoutExtensionFrequencyInSeconds = 30;\n\n  private resumableTaskBatchSize = 100;\n  private resumableTaskHandlers: { [key:string]: (taskData: any) => Promise<void> };\n\n  public constructor(private resumableTaskStore: ResumableTaskStore, storageController: StorageController) {\n    // assign resumable task handlers\n    this.resumableTaskHandlers = {\n      // NOTE: The arrow function is IMPORTANT here, else the `this` context will be lost within the invoked method.\n      // e.g. code within performRecordsDelete() won't know `this` refers to the `storageController` instance.\n      [ResumableTaskName.RecordsDelete]: async (task): Promise<void> => await storageController.performRecordsDelete(task),\n    };\n  }\n\n  /**\n   * Runs a new resumable task.\n   */\n  public async run(task: ResumableTask): Promise<void> {\n    const timeoutInSeconds = ResumableTaskManager.timeoutExtensionFrequencyInSeconds * 2; // give ample time for extension to take place\n\n    // register the new resumable task before running it so that it can be resumed if it times out for any reason\n    const managedResumableTask = await this.resumableTaskStore.register(task, timeoutInSeconds);\n    await this.runWithAutomaticTimeoutExtension(managedResumableTask);\n  }\n\n  /**\n   * Runs a resumable task with automatic timeout extension.\n   * Deletes the task from the resumable task store once it is completed.\n   */\n  private async runWithAutomaticTimeoutExtension(managedTask: ManagedResumableTask): Promise<void> {\n    const timeoutInSeconds = ResumableTaskManager.timeoutExtensionFrequencyInSeconds * 2; // give ample time for extension to take place\n\n    let timer!: ReturnType<typeof setInterval>;\n    try {\n      // start a timer loop to keep extending the timeout of the task until it is completed\n      timer = setInterval(() => {\n        this.resumableTaskStore.extend(managedTask.id, timeoutInSeconds);\n      }, ResumableTaskManager.timeoutExtensionFrequencyInSeconds * 1000);\n\n      const handler = this.resumableTaskHandlers[managedTask.task.name];\n      await handler(managedTask.task.data);\n      await this.resumableTaskStore.delete(managedTask.id);\n    } finally {\n      ResumableTaskManager.clearTimeoutExtensionTimer(timer);\n    }\n  }\n\n  /**\n   * Removes the specified timeout extension loop timer.\n   * NOTE: created mainly for testing purposes so we can spy on this specific method without needing to filter out other `clearInterval` calls.\n   * NOTE: using `ReturnType` utility type to avoid using node.js specific type, because `setInterval` returns a `number` in browser environments.\n   */\n  public static clearTimeoutExtensionTimer(timer: ReturnType<typeof setInterval>): void {\n    clearInterval(timer);\n  }\n\n  /**\n   * Resumes the execution of resumable tasks until all are completed successfully.\n   */\n  public async resumeTasksAndWaitForCompletion(): Promise<void> {\n    while (true) {\n      const resumableTasks = await this.resumableTaskStore.grab(this.resumableTaskBatchSize);\n\n      if (resumableTasks === undefined || resumableTasks.length === 0) {\n        break;\n      }\n\n      // Handle this batch of tasks before grabbing the next batch.\n      await this.retryTasksUntilCompletion(resumableTasks);\n    }\n  }\n\n  /**\n   * Repeatedly retry the given tasks until all are completed successfully.\n   */\n  private async retryTasksUntilCompletion(resumableTasks: ManagedResumableTask[]): Promise<void> {\n\n    let managedTasks = resumableTasks;\n    while (managedTasks.length > 0) {\n      const managedTasksCopy = managedTasks;\n      managedTasks = [];\n\n      const allTaskPromises = managedTasksCopy.map(async (managedTask) => {\n        try {\n          await this.runWithAutomaticTimeoutExtension(managedTask);\n        } catch (error) {\n          console.error('Error while running resumable task:', error);\n          console.error('Resumable task:', resumableTasks);\n          managedTasks.push(managedTask);\n        }\n      });\n\n      await Promise.all(allTaskPromises);\n    }\n  }\n}", "import type { DidResolver } from '@web5/dids';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsDeleteMessage } from '../types/records-types.js';\nimport type { ResumableTaskManager } from '../core/resumable-task-manager.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DwnInterfaceName } from '../enums/dwn-interface-method.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsDelete } from '../interfaces/records-delete.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { ResumableTaskName } from '../core/resumable-task-manager.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nexport class RecordsDeleteHandler implements MethodHandler {\n\n  constructor(\n    private didResolver: DidResolver,\n    private messageStore: MessageStore,\n    private resumableTaskManager: ResumableTaskManager,\n  ) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: RecordsDeleteMessage}): Promise<GenericMessageReply> {\n    let recordsDelete: RecordsDelete;\n    try {\n      recordsDelete = await RecordsDelete.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      await authenticate(message.authorization, this.didResolver);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get existing records matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.descriptor.recordId\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n\n    // find which message is the newest, and if the incoming message is the newest\n    const newestExistingMessage = await Message.getNewestMessage(existingMessages);\n\n    if (!Records.canPerformDeleteAgainstRecord(message, newestExistingMessage)) {\n      return {\n        status: { code: 404, detail: 'Not Found' }\n      };\n    }\n\n    // if the incoming message is not the newest, return Conflict\n    const incomingDeleteIsNewest = await Message.isNewer(message, newestExistingMessage!);\n    if (!incomingDeleteIsNewest) {\n      return {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    // authorization\n    try {\n      // NOTE: We need a RecordsWrite (doesn't have to be initial) to access the immutable properties for delete processing,\n      // but if the latest record state is a RecordsDelete (ie. when we are pruning a non-prune delete),\n      // we'd need to use the initial write because RecordsDelete does not contain the immutable properties needed for processing.\n      const initialWrite = await RecordsWrite.fetchInitialRecordsWrite(this.messageStore, tenant, message.descriptor.recordId);\n\n      await RecordsDeleteHandler.authorizeRecordsDelete(\n        tenant,\n        recordsDelete,\n        initialWrite!,\n        this.messageStore\n      );\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    await this.resumableTaskManager.run({\n      name : ResumableTaskName.RecordsDelete,\n      data : { tenant, message }\n    });\n\n    const messageReply = {\n      status: { code: 202, detail: 'Accepted' }\n    };\n    return messageReply;\n  };\n\n  /**\n   * Authorizes a RecordsDelete message.\n   *\n   * @param recordsWrite A RecordsWrite of the record to be deleted.\n   */\n  private static async authorizeRecordsDelete(\n    tenant: string,\n    recordsDelete: RecordsDelete,\n    recordsWrite: RecordsWrite,\n    messageStore: MessageStore\n  ): Promise<void> {\n\n    if (Message.isSignedByAuthorDelegate(recordsDelete.message)) {\n      await recordsDelete.authorizeDelegate(recordsWrite.message, messageStore);\n    }\n\n    if (recordsDelete.author === tenant) {\n      return;\n    } else if (recordsWrite.message.descriptor.protocol !== undefined) {\n      await ProtocolAuthorization.authorizeDelete(tenant, recordsDelete, recordsWrite, messageStore);\n    } else {\n      throw new DwnError(\n        DwnErrorCode.RecordsDeleteAuthorizationFailed,\n        'RecordsDelete message failed authorization'\n      );\n    }\n  }\n};\n", "export type QueryOptions = {\n  sortProperty: string;\n  sortDirection?: SortDirection;\n  limit?: number;\n  cursor?: PaginationCursor;\n};\n\nexport enum SortDirection {\n  Descending = -1,\n  Ascending = 1\n}\n\nexport type KeyValues = { [key:string]: string | number | boolean | string[] | number[] };\n\nexport type EqualFilter = string | number | boolean;\n\nexport type OneOfFilter = EqualFilter[];\n\nexport type RangeValue = string | number;\n\n/**\n * \"greater than\" or \"greater than or equal to\" range condition. `gt` and `gte` are mutually exclusive.\n */\nexport type GT = ({ gt: RangeValue } & { gte?: never }) | ({ gt?: never } & { gte: RangeValue });\n\n/**\n * \"less than\" or \"less than or equal to\" range condition. `lt`, `lte` are mutually exclusive.\n */\nexport type LT = ({ lt: RangeValue } & { lte?: never }) | ({ lt?: never } & { lte: RangeValue });\n\n/**\n * Ranger filter. 1 condition is required.\n */\nexport type RangeFilter = (GT | LT) & Partial<GT> & Partial<LT>;\n\nexport type StartsWithFilter = {\n  startsWith: string;\n};\n\nexport type FilterValue = EqualFilter | OneOfFilter | RangeFilter;\n\nexport type Filter = {\n  [property: string]: FilterValue;\n};\n\nexport type RangeCriterion = {\n  /**\n   * Inclusive starting date-time.\n   */\n  from?: string;\n\n  /**\n   * Inclusive end date-time.\n   */\n  to?: string;\n};\n\nexport type PaginationCursor = {\n  messageCid: string;\n  value: string | number;\n};", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '@web5/dids';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { Filter, PaginationCursor } from '../types/query-types.js';\nimport type { GenericMessage, MessageSort } from '../types/message-types.js';\nimport type { RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DateSort } from '../types/records-types.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsQuery } from '../interfaces/records-query.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { SortDirection } from '../types/query-types.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class RecordsQueryHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: {tenant: string, message: RecordsQueryMessage}): Promise<RecordsQueryReply> {\n    let recordsQuery: RecordsQuery;\n    try {\n      recordsQuery = await RecordsQuery.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    let recordsWrites: RecordsQueryReplyEntry[];\n    let cursor: PaginationCursor | undefined;\n    // if this is an anonymous query and the filter supports published records, query only published records\n    if (Records.filterIncludesPublishedRecords(recordsQuery.message.descriptor.filter) && recordsQuery.author === undefined) {\n      const results = await this.fetchPublishedRecords(tenant, recordsQuery);\n      recordsWrites = results.messages as RecordsQueryReplyEntry[];\n      cursor = results.cursor;\n    } else {\n      // authentication and authorization\n      try {\n        await authenticate(message.authorization!, this.didResolver);\n\n        await RecordsQueryHandler.authorizeRecordsQuery(tenant, recordsQuery, this.messageStore);\n      } catch (e) {\n        return messageReplyFromError(e, 401);\n      }\n\n      if (recordsQuery.author === tenant) {\n        const results = await this.fetchRecordsAsOwner(tenant, recordsQuery);\n        recordsWrites = results.messages as RecordsQueryReplyEntry[];\n        cursor = results.cursor;\n      } else {\n        const results = await this.fetchRecordsAsNonOwner(tenant, recordsQuery);\n        recordsWrites = results.messages as RecordsQueryReplyEntry[];\n        cursor = results.cursor;\n      }\n    }\n\n    // attach initial write if returned RecordsWrite is not initial write\n    for (const recordsWrite of recordsWrites) {\n      if (!await RecordsWrite.isInitialWrite(recordsWrite)) {\n        const initialWriteQueryResult = await this.messageStore.query(\n          tenant,\n          [{ recordId: recordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]\n        );\n        const initialWrite = initialWriteQueryResult.messages[0] as RecordsQueryReplyEntry;\n        delete initialWrite.encodedData; // defensive measure but technically optional because we do this when an update RecordsWrite takes place\n        recordsWrite.initialWrite = initialWrite;\n      }\n    }\n\n    return {\n      status  : { code: 200, detail: 'OK' },\n      entries : recordsWrites,\n      cursor\n    };\n  }\n\n  /**\n   * Convert an incoming DateSort to a sort type accepted by MessageStore\n   * Defaults to 'dateCreated' in Descending order if no sort is supplied.\n   *\n   * @param dateSort the optional DateSort from the RecordsQuery message descriptor.\n   * @returns {MessageSort} for MessageStore sorting.\n   */\n  private convertDateSort(dateSort?: DateSort): MessageSort {\n    switch (dateSort) {\n    case DateSort.CreatedAscending:\n      return { dateCreated: SortDirection.Ascending };\n    case DateSort.CreatedDescending:\n      return { dateCreated: SortDirection.Descending };\n    case DateSort.PublishedAscending:\n      return { datePublished: SortDirection.Ascending };\n    case DateSort.PublishedDescending:\n      return { datePublished: SortDirection.Descending };\n    default:\n      return { dateCreated: SortDirection.Ascending };\n    }\n  }\n\n  /**\n   * Fetches the records as the owner of the DWN with no additional filtering.\n   */\n  private async fetchRecordsAsOwner(\n    tenant: string,\n    recordsQuery: RecordsQuery\n  ): Promise<{ messages: GenericMessage[], cursor?: PaginationCursor }> {\n    const { dateSort, filter, pagination } = recordsQuery.message.descriptor;\n    // fetch all published records matching the query\n    const queryFilter = {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true\n    };\n\n    const messageSort = this.convertDateSort(dateSort);\n    return this.messageStore.query(tenant, [ queryFilter ], messageSort, pagination);\n  }\n\n  /**\n   * Fetches the records as a non-owner.\n   *\n   * Filters can support returning both published and unpublished records,\n   * as well as explicitly only published or only unpublished records.\n   *\n   * A) BOTH published and unpublished:\n   *    1. published records; and\n   *    2. unpublished records intended for the query author (where `recipient` is the query author); and\n   *    3. unpublished records authorized by a protocol rule.\n   *\n   * B) PUBLISHED:\n   *    1. only published records;\n   *\n   * C) UNPUBLISHED:\n   *    1. unpublished records intended for the query author (where `recipient` is the query author); and\n   *    2. unpublished records authorized by a protocol rule.\n   *\n   */\n  private async fetchRecordsAsNonOwner(\n    tenant: string, recordsQuery: RecordsQuery\n  ): Promise<{ messages: GenericMessage[], cursor?: PaginationCursor }> {\n    const { dateSort, pagination, filter } = recordsQuery.message.descriptor;\n    const filters = [];\n    if (Records.filterIncludesPublishedRecords(filter)) {\n      filters.push(RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery));\n    }\n\n    if (Records.filterIncludesUnpublishedRecords(filter)) {\n      if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsQuery.author!)) {\n        filters.push(RecordsQueryHandler.buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery));\n      }\n\n      if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload!)) {\n        filters.push(RecordsQueryHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery));\n      }\n\n      if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsQuery.author!)) {\n        filters.push(RecordsQueryHandler.buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery));\n      }\n    }\n\n    const messageSort = this.convertDateSort(dateSort);\n    return this.messageStore.query(tenant, filters, messageSort, pagination );\n  }\n\n  /**\n   * Fetches only published records.\n   */\n  private async fetchPublishedRecords(\n    tenant: string, recordsQuery: RecordsQuery\n  ): Promise<{ messages: GenericMessage[], cursor?: PaginationCursor }> {\n    const { dateSort, pagination } = recordsQuery.message.descriptor;\n    const filter = RecordsQueryHandler.buildPublishedRecordsFilter(recordsQuery);\n    const messageSort = this.convertDateSort(dateSort);\n    return this.messageStore.query(tenant, [ filter ], messageSort, pagination);\n  }\n\n  private static buildPublishedRecordsFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    // fetch all published records matching the query\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      published         : true,\n      isLatestBaseState : true\n    };\n  }\n\n  /**\n   * Creates a filter for unpublished records that are intended for the query author (where `recipient` is the author).\n   */\n  private static buildUnpublishedRecordsForQueryAuthorFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    // include records where recipient is query author\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      recipient         : recordsQuery.author!,\n      isLatestBaseState : true,\n      published         : false\n    };\n  }\n\n  /**\n   * Creates a filter for unpublished records that are within the specified protocol.\n   * Validation that `protocol` and other required protocol-related fields occurs before this method.\n   */\n  private static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true,\n      published         : false\n    };\n  }\n\n  /**\n   * Creates a filter for only unpublished records where the author is the same as the query author.\n   */\n  private static buildUnpublishedRecordsByQueryAuthorFilter(recordsQuery: RecordsQuery): Filter {\n    const { dateSort, filter } = recordsQuery.message.descriptor;\n    // include records where author is the same as the query author\n    return {\n      ...Records.convertFilter(filter, dateSort),\n      author            : recordsQuery.author!,\n      interface         : DwnInterfaceName.Records,\n      method            : DwnMethodName.Write,\n      isLatestBaseState : true,\n      published         : false\n    };\n  }\n\n  /**\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  private static async authorizeRecordsQuery(\n    tenant: string,\n    recordsQuery: RecordsQuery,\n    messageStore: MessageStore\n  ): Promise<void> {\n\n    if (Message.isSignedByAuthorDelegate(recordsQuery.message)) {\n      await recordsQuery.authorizeDelegate(messageStore);\n    }\n\n    // NOTE: not all RecordsQuery messages require protocol authorization even if the filter includes protocol-related fields,\n    // this is because we dynamically filter out records that the caller is not authorized to see.\n    // Currently only run protocol authorization if message deliberately invokes a protocol role.\n    if (Records.shouldProtocolAuthorize(recordsQuery.signaturePayload!)) {\n      await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsQuery, messageStore);\n    }\n  }\n}\n", "import type { MessageStore } from '../types//message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { DataEncodedRecordsWriteMessage, RecordsFilter , RecordsReadDescriptor, RecordsReadMessage, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { PermissionGrant } from '../protocols/permission-grant.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport type RecordsReadOptions = {\n  filter: RecordsFilter;\n  messageTimestamp?: string;\n  signer?: Signer;\n  permissionGrantId?: string;\n  /**\n   * Used when authorizing protocol records.\n   * The protocol path to the role record type whose recipient is the author of this RecordsRead\n   */\n  protocolRole?: string;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DataEncodedRecordsWriteMessage;\n};\n\nexport class RecordsRead extends AbstractMessage<RecordsReadMessage> {\n\n  public static async parse(message: RecordsReadMessage): Promise<RecordsRead> {\n    let signaturePayload;\n    if (message.authorization !== undefined) {\n      signaturePayload = await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    await Records.validateDelegatedGrantReferentialIntegrity(message, signaturePayload);\n\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    const recordsRead = new RecordsRead(message);\n    return recordsRead;\n  }\n\n  /**\n   * Creates a RecordsRead message.\n   * @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.\n   * @param options.date If `undefined`, it will be auto-filled with current time.\n   *\n   * @throws {DwnError} when a combination of required RecordsReadOptions are missing\n   */\n  public static async create(options: RecordsReadOptions): Promise<RecordsRead> {\n    const { filter, signer, permissionGrantId, protocolRole } = options;\n    const currentTime = Time.getCurrentTimestamp();\n\n    const descriptor: RecordsReadDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Read,\n      filter           : Records.normalizeFilter(filter),\n      messageTimestamp : options.messageTimestamp ?? currentTime,\n    };\n\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    let authorization = undefined;\n    if (signer !== undefined) {\n      authorization = await Message.createAuthorization({\n        descriptor,\n        signer,\n        permissionGrantId,\n        protocolRole,\n        delegatedGrant: options.delegatedGrant\n      });\n    }\n    const message: RecordsReadMessage = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsRead(message);\n  }\n\n  /**\n   * Authorizes the delegate who signed this message.\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public async authorizeDelegate(matchedRecordsWrite: RecordsWriteMessage, messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = await PermissionGrant.parse(this.message.authorization!.authorDelegatedGrant!);\n    await RecordsGrantAuthorization.authorizeRead({\n      recordsReadMessage          : this.message,\n      recordsWriteMessageToBeRead : matchedRecordsWrite,\n      expectedGrantor             : this.author!,\n      expectedGrantee             : this.signer!,\n      permissionGrant             : delegatedGrant,\n      messageStore\n    });\n  }\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '@web5/dids';\nimport type { Filter } from '../types/query-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsDeleteMessage, RecordsQueryReplyEntry, RecordsReadMessage, RecordsReadReply } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { DataStream } from '../utils/data-stream.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { RecordsRead } from '../interfaces/records-read.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class RecordsReadHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private dataStore: DataStore) { }\n\n  public async handle({\n    tenant,\n    message\n  }: { tenant: string, message: RecordsReadMessage }): Promise<RecordsReadReply> {\n\n    let recordsRead: RecordsRead;\n    try {\n      recordsRead = await RecordsRead.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication\n    try {\n      if (recordsRead.author !== undefined) {\n        await authenticate(message.authorization!, this.didResolver);\n      }\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get the latest active messages matching the supplied filter\n    const query: Filter = {\n      // NOTE: we don't filter by `method` so that we get both RecordsWrite and RecordsDelete messages\n      interface         : DwnInterfaceName.Records,\n      isLatestBaseState : true,\n      ...Records.convertFilter(message.descriptor.filter)\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n    if (existingMessages.length === 0) {\n      return {\n        status: { code: 404, detail: 'Not Found' }\n      };\n    } else if (existingMessages.length > 1) {\n      return messageReplyFromError(new DwnError(\n        DwnErrorCode.RecordsReadReturnedMultiple,\n        'Multiple records exist for the RecordsRead filter'\n      ), 400);\n    }\n\n    const matchedMessage = existingMessages[0];\n\n    // if the matched message is a RecordsDelete, we mark the record as not-found and return both the RecordsDelete and the initial RecordsWrite\n    // TODO: https://github.com/TBD54566975/dwn-sdk-js/issues/819:\n    // Consider performing authorization checks like when records exists before returning RecordsDelete and initial RecordsWrite of a deleted record\n    if (matchedMessage.descriptor.method === DwnMethodName.Delete) {\n      const recordsDeleteMessage = matchedMessage as RecordsDeleteMessage;\n      const initialWrite = await RecordsWrite.fetchInitialRecordsWriteMessage(this.messageStore, tenant, recordsDeleteMessage.descriptor.recordId);\n      return {\n        status : { code: 404, detail: 'Not Found' },\n        entry  : {\n          recordsDelete: recordsDeleteMessage,\n          initialWrite\n        }\n      };\n    }\n\n    // else the matched message is a RecordsWrite\n    const matchedRecordsWrite = matchedMessage as RecordsQueryReplyEntry;\n\n    try {\n      await RecordsReadHandler.authorizeRecordsRead(tenant, recordsRead, await RecordsWrite.parse(matchedRecordsWrite), this.messageStore);\n    } catch (error) {\n      return messageReplyFromError(error, 401);\n    }\n\n    let data;\n    if (matchedRecordsWrite.encodedData !== undefined) {\n      const dataBytes = Encoder.base64UrlToBytes(matchedRecordsWrite.encodedData);\n      data = DataStream.fromBytes(dataBytes);\n      delete matchedRecordsWrite.encodedData;\n    } else {\n      const result = await this.dataStore.get(tenant, matchedRecordsWrite.recordId, matchedRecordsWrite.descriptor.dataCid);\n      if (result?.dataStream === undefined) {\n        return {\n          status: { code: 404, detail: 'Not Found' }\n        };\n      }\n      data = result.dataStream;\n    }\n\n    const recordsReadReply: RecordsReadReply = {\n      status : { code: 200, detail: 'OK' },\n      entry  : {\n        recordsWrite: matchedRecordsWrite,\n        data\n      }\n    };\n\n    // attach initial write if latest RecordsWrite is not initial write\n    if (!await RecordsWrite.isInitialWrite(matchedRecordsWrite)) {\n      const initialWriteQueryResult = await this.messageStore.query(\n        tenant,\n        [{ recordId: matchedRecordsWrite.recordId, isLatestBaseState: false, method: DwnMethodName.Write }]\n      );\n      const initialWrite = initialWriteQueryResult.messages[0] as RecordsQueryReplyEntry;\n      delete initialWrite.encodedData; // just defensive because technically should already be deleted when a later RecordsWrite is written\n      recordsReadReply.entry!.initialWrite = initialWrite;\n    }\n\n    return recordsReadReply;\n  };\n\n  /**\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  private static async authorizeRecordsRead(\n    tenant: string,\n    recordsRead: RecordsRead,\n    matchedRecordsWrite: RecordsWrite,\n    messageStore: MessageStore\n  ): Promise<void> {\n    if (Message.isSignedByAuthorDelegate(recordsRead.message)) {\n      await recordsRead.authorizeDelegate(matchedRecordsWrite.message, messageStore);\n    }\n\n    const { descriptor } = matchedRecordsWrite.message;\n\n    // if author is the same as the target tenant, we can directly grant access\n    if (recordsRead.author === tenant) {\n      return;\n    } else if (descriptor.published === true) {\n      // authentication is not required for published data\n      return;\n    } else if (recordsRead.author !== undefined &&\n      (recordsRead.author === descriptor.recipient || recordsRead.author === matchedRecordsWrite.author)\n    ) {\n      // The recipient or author of a message may always read it\n      return;\n    } else if (recordsRead.author !== undefined && recordsRead.signaturePayload!.permissionGrantId !== undefined) {\n      const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, recordsRead.signaturePayload!.permissionGrantId);\n      await RecordsGrantAuthorization.authorizeRead({\n        recordsReadMessage          : recordsRead.message,\n        recordsWriteMessageToBeRead : matchedRecordsWrite.message,\n        expectedGrantor             : tenant,\n        expectedGrantee             : recordsRead.author,\n        permissionGrant,\n        messageStore\n      });\n    } else if (descriptor.protocol !== undefined) {\n      await ProtocolAuthorization.authorizeRead(tenant, recordsRead, matchedRecordsWrite, messageStore);\n    } else {\n      throw new DwnError(DwnErrorCode.RecordsReadAuthorizationFailed, 'message failed authorization');\n    }\n  }\n}\n", "import type { MessageStore } from '../types/message-store.js';\nimport type { Signer } from '../types/signer.js';\nimport type { DataEncodedRecordsWriteMessage, RecordsFilter, RecordsSubscribeDescriptor, RecordsSubscribeMessage } from '../types/records-types.js';\n\nimport { AbstractMessage } from '../core/abstract-message.js';\nimport { Message } from '../core/message.js';\nimport { PermissionGrant } from '../protocols/permission-grant.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { removeUndefinedProperties } from '../utils/object.js';\nimport { Time } from '../utils/time.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\nimport { validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';\n\nexport type RecordsSubscribeOptions = {\n  messageTimestamp?: string;\n  filter: RecordsFilter;\n  signer?: Signer;\n  protocolRole?: string;\n\n  /**\n   * The delegated grant to sign on behalf of the logical author, which is the grantor (`grantedBy`) of the delegated grant.\n   */\n  delegatedGrant?: DataEncodedRecordsWriteMessage;\n};\n\n/**\n * A class representing a RecordsSubscribe DWN message.\n */\nexport class RecordsSubscribe extends AbstractMessage<RecordsSubscribeMessage> {\n\n  public static async parse(message: RecordsSubscribeMessage): Promise<RecordsSubscribe> {\n    let signaturePayload;\n    if (message.authorization !== undefined) {\n      signaturePayload = await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);\n    }\n\n    await Records.validateDelegatedGrantReferentialIntegrity(message, signaturePayload);\n\n    if (signaturePayload?.protocolRole !== undefined) {\n      if (message.descriptor.filter.protocolPath === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsSubscribeFilterMissingRequiredProperties,\n          'Role-authorized subscriptions must include `protocolPath` in the filter'\n        );\n      }\n    }\n    if (message.descriptor.filter.protocol !== undefined) {\n      validateProtocolUrlNormalized(message.descriptor.filter.protocol);\n    }\n    if (message.descriptor.filter.schema !== undefined) {\n      validateSchemaUrlNormalized(message.descriptor.filter.schema);\n    }\n    Time.validateTimestamp(message.descriptor.messageTimestamp);\n\n    return new RecordsSubscribe(message);\n  }\n\n  public static async create(options: RecordsSubscribeOptions): Promise<RecordsSubscribe> {\n    const descriptor: RecordsSubscribeDescriptor = {\n      interface        : DwnInterfaceName.Records,\n      method           : DwnMethodName.Subscribe,\n      messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),\n      filter           : Records.normalizeFilter(options.filter),\n    };\n\n    // delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:\n    // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n    removeUndefinedProperties(descriptor);\n\n    // only generate the `authorization` property if signature input is given\n    const signer = options.signer;\n    let authorization;\n    if (signer) {\n      authorization = await Message.createAuthorization({\n        descriptor,\n        signer,\n        protocolRole   : options.protocolRole,\n        delegatedGrant : options.delegatedGrant\n      });\n    }\n    const message = { descriptor, authorization };\n\n    Message.validateJsonSchema(message);\n\n    return new RecordsSubscribe(message);\n  }\n\n  /**\n * Authorizes the delegate who signed the message.\n * @param messageStore Used to check if the grant has been revoked.\n */\n  public async authorizeDelegate(messageStore: MessageStore): Promise<void> {\n    const delegatedGrant = await PermissionGrant.parse(this.message.authorization!.authorDelegatedGrant!);\n    await RecordsGrantAuthorization.authorizeQueryOrSubscribe({\n      incomingMessage : this.message,\n      expectedGrantor : this.author!,\n      expectedGrantee : this.signer!,\n      permissionGrant : delegatedGrant,\n      messageStore\n    });\n  }\n}\n", "import type { DidResolver } from '@web5/dids';\nimport type { Filter } from '../types/query-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { EventListener, EventStream } from '../types/subscriptions.js';\nimport type { RecordEvent, RecordsSubscribeMessage, RecordsSubscribeReply, RecordSubscriptionHandler } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { FilterUtility } from '../utils/filter.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsSubscribe } from '../interfaces/records-subscribe.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\nexport class RecordsSubscribeHandler implements MethodHandler {\n\n  constructor(private didResolver: DidResolver, private messageStore: MessageStore, private eventStream?: EventStream) { }\n\n  public async handle({\n    tenant,\n    message,\n    subscriptionHandler\n  }: {\n    tenant: string,\n    message: RecordsSubscribeMessage,\n    subscriptionHandler: RecordSubscriptionHandler,\n  }): Promise<RecordsSubscribeReply> {\n    if (this.eventStream === undefined) {\n      return messageReplyFromError(new DwnError(\n        DwnErrorCode.RecordsSubscribeEventStreamUnimplemented,\n        'Subscriptions are not supported'\n      ), 501);\n    }\n\n    let recordsSubscribe: RecordsSubscribe;\n    try {\n      recordsSubscribe = await RecordsSubscribe.parse(message);\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    let filters:Filter[] = [];\n    // if this is an anonymous subscribe and the filter supports published records, subscribe to only published records\n    if (Records.filterIncludesPublishedRecords(recordsSubscribe.message.descriptor.filter) && recordsSubscribe.author === undefined) {\n      // build filters for a stream of published records\n      filters = [ RecordsSubscribeHandler.buildPublishedRecordsFilter(recordsSubscribe) ];\n      // delete the undefined authorization property else the code will encounter the following IPLD issue when attempting to generate CID:\n      // Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded\n      delete message.authorization;\n    } else {\n      // authentication and authorization\n      try {\n        await authenticate(message.authorization!, this.didResolver);\n        await RecordsSubscribeHandler.authorizeRecordsSubscribe(tenant, recordsSubscribe, this.messageStore);\n      } catch (error) {\n        return messageReplyFromError(error, 401);\n      }\n\n      if (recordsSubscribe.author === tenant) {\n        // if the subscribe author is the tenant, filter as owner.\n        filters = await RecordsSubscribeHandler.filterAsOwner(recordsSubscribe);\n      } else {\n        // otherwise build filters based on published records, permissions, or protocol rules\n        filters = await RecordsSubscribeHandler.filterAsNonOwner(recordsSubscribe);\n      }\n    }\n\n    const listener: EventListener = (eventTenant, event, eventIndexes):void => {\n      if (tenant === eventTenant && FilterUtility.matchAnyFilter(eventIndexes, filters)) {\n        // the filters check for interface and method\n        // if matched the message is either a `RecordsWriteMessage` or `RecordsDeleteMessage` so we cast the event to a `RecordEvent`\n        subscriptionHandler(event as RecordEvent);\n      }\n    };\n\n    const messageCid = await Message.getCid(message);\n    const subscription = await this.eventStream.subscribe(tenant, messageCid, listener);\n    return {\n      status: { code: 200, detail: 'OK' },\n      subscription\n    };\n  }\n\n  /**\n   * Subscribe to records as the owner of the DWN with no additional filtering.\n   */\n  private static async filterAsOwner(RecordsSubscribe: RecordsSubscribe): Promise<Filter[]> {\n    const { filter } = RecordsSubscribe.message.descriptor;\n\n    const subscribeFilter = {\n      ...Records.convertFilter(filter),\n      interface : DwnInterfaceName.Records,\n      method    : [ DwnMethodName.Write, DwnMethodName.Delete ], // we filter for both write and delete so that subscriber can update state.\n    };\n\n    return [ subscribeFilter ];\n  }\n\n  /**\n   * Creates filters in order to subscribe to records as a non-owner.\n   *\n   * Filters can support emitting messages for both published and unpublished records,\n   * as well as explicitly only published or only unpublished records.\n   *\n   * A) BOTH published and unpublished:\n   *    1. published records; and\n   *    2. unpublished records intended for the subscription author (where `recipient` is the subscription author); and\n   *    3. unpublished records authorized by a protocol rule.\n   *\n   * B) PUBLISHED:\n   *    1. only published records;\n   *\n   * C) UNPUBLISHED:\n   *    1. unpublished records intended for the subscription author (where `recipient` is the subscription author); and\n   *    2. unpublished records authorized by a protocol rule.\n   */\n  private static async filterAsNonOwner(\n    recordsSubscribe: RecordsSubscribe\n  ): Promise<Filter[]> {\n    const filters:Filter[] = [];\n    const { filter } = recordsSubscribe.message.descriptor;\n    if (Records.filterIncludesPublishedRecords(filter)) {\n      filters.push(RecordsSubscribeHandler.buildPublishedRecordsFilter(recordsSubscribe));\n    }\n\n    if (Records.filterIncludesUnpublishedRecords(filter)) {\n      if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsSubscribe.author!)) {\n        filters.push(RecordsSubscribeHandler.buildUnpublishedRecordsBySubscribeAuthorFilter(recordsSubscribe));\n      }\n\n      if (Records.shouldProtocolAuthorize(recordsSubscribe.signaturePayload!)) {\n        filters.push(RecordsSubscribeHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsSubscribe));\n      }\n\n      if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsSubscribe.author!)) {\n        filters.push(RecordsSubscribeHandler.buildUnpublishedRecordsForSubscribeAuthorFilter(recordsSubscribe));\n      }\n    }\n    return filters;\n  }\n\n  /**\n   * Creates a filter for all published records matching the subscribe\n   */\n  private static buildPublishedRecordsFilter(recordsSubscribe: RecordsSubscribe): Filter {\n    return {\n      ...Records.convertFilter(recordsSubscribe.message.descriptor.filter),\n      interface : DwnInterfaceName.Records,\n      method    : [ DwnMethodName.Write, DwnMethodName.Delete ],\n      published : true,\n    };\n  }\n\n  /**\n   * Creates a filter for unpublished records that are intended for the subscribe author (where `recipient` is the author).\n   */\n  private static buildUnpublishedRecordsForSubscribeAuthorFilter(recordsSubscribe: RecordsSubscribe): Filter {\n    // include records where recipient is subscribe author\n    return {\n      ...Records.convertFilter(recordsSubscribe.message.descriptor.filter),\n      interface : DwnInterfaceName.Records,\n      method    : [ DwnMethodName.Write, DwnMethodName.Delete ],\n      recipient : recordsSubscribe.author!,\n      published : false\n    };\n  }\n\n  /**\n   * Creates a filter for unpublished records that are within the specified protocol.\n   * Validation that `protocol` and other required protocol-related fields occurs before this method.\n   */\n  private static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsSubscribe: RecordsSubscribe): Filter {\n    return {\n      ...Records.convertFilter(recordsSubscribe.message.descriptor.filter),\n      interface : DwnInterfaceName.Records,\n      method    : [ DwnMethodName.Write, DwnMethodName.Delete ],\n      published : false\n    };\n  }\n\n  /**\n   * Creates a filter for only unpublished records where the author is the same as the subscribe author.\n   */\n  private static buildUnpublishedRecordsBySubscribeAuthorFilter(recordsSubscribe: RecordsSubscribe): Filter {\n    // include records where author is the same as the subscribe author\n    return {\n      ...Records.convertFilter(recordsSubscribe.message.descriptor.filter),\n      author    : recordsSubscribe.author!,\n      interface : DwnInterfaceName.Records,\n      method    : [ DwnMethodName.Write, DwnMethodName.Delete ],\n      published : false\n    };\n  }\n\n  /**\n   * @param messageStore Used to check if the grant has been revoked.\n   */\n  public static async authorizeRecordsSubscribe(\n    tenant: string,\n    recordsSubscribe: RecordsSubscribe,\n    messageStore: MessageStore\n  ): Promise<void> {\n\n    if (Message.isSignedByAuthorDelegate(recordsSubscribe.message)) {\n      await recordsSubscribe.authorizeDelegate(messageStore);\n    }\n\n    // NOTE: not all RecordsSubscribe messages require protocol authorization even if the filter includes protocol-related fields,\n    // this is because we dynamically filter out records that the caller is not authorized to see.\n    // Currently only run protocol authorization if message deliberately invokes a protocol role.\n    if (Records.shouldProtocolAuthorize(recordsSubscribe.signaturePayload!)) {\n      await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsSubscribe, messageStore);\n    }\n  }\n}\n", "export class DwnConstant {\n  /**\n   * The maximum size of raw data that will be returned as `encodedData`.\n   *\n   * We chose 30k, as after encoding it would give plenty of headroom up to the 65k limit in most SQL variants.\n   * We currently encode using base64url which is a 33% increase in size.\n   */\n  public static readonly maxDataSizeAllowedToBeEncoded = 30_000;\n}", "import type { DataStore } from '../types/data-store.js';\nimport type { EventLog } from '../types/event-log.js';\nimport type { EventStream } from '../types/subscriptions.js';\nimport type { GenericMessage } from '../types/message-types.js';\nimport type { MessageStore } from '../types/message-store.js';\nimport type { RecordsDeleteMessage, RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { DwnConstant } from '../core/dwn-constant.js';\nimport { Message } from '../core/message.js';\nimport { Records } from '../utils/records.js';\nimport { RecordsDelete } from '../interfaces/records-delete.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\n\nexport type ResumableRecordsDeleteData = {\n  tenant: string;\n  message: RecordsDeleteMessage;\n};\n\n/**\n * A class that provides an abstraction for the usage of MessageStore, DataStore, and EventLog.\n */\nexport class StorageController {\n\n  private messageStore: MessageStore;\n  private dataStore: DataStore;\n  private eventLog: EventLog;\n  private eventStream?: EventStream;\n\n  public constructor({ messageStore, dataStore, eventLog, eventStream }: {\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    eventLog: EventLog,\n    eventStream?: EventStream}\n  ) {\n    this.messageStore = messageStore;\n    this.dataStore = dataStore;\n    this.eventLog = eventLog;\n    this.eventStream = eventStream;\n  }\n\n  public async performRecordsDelete({ tenant, message }: ResumableRecordsDeleteData): Promise<void> {\n    // get existing records matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.descriptor.recordId\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n\n    // find which message is the newest, and if the incoming message is the newest\n    const newestExistingMessage = await Message.getNewestMessage(existingMessages);\n\n    if (!Records.canPerformDeleteAgainstRecord(message, newestExistingMessage)) {\n      return;\n    }\n\n    // NOTE: code above is duplicated from `RecordsDeleteHandler` and is already performed if this was invoked by the `RecordsDeleteHandler`,\n    // But we repeat the logic for the code path when the ResumableTaskManager resumes the task.\n    // We make the two different code paths to share this same method to reduce code duplication, there might be a better way to refactor this.\n\n    const recordsDelete = await RecordsDelete.parse(message);\n    const initialWrite = await RecordsWrite.getInitialWrite(existingMessages);\n    const indexes = recordsDelete.constructIndexes(initialWrite);\n    const messageCid = await Message.getCid(message);\n    await this.messageStore.put(tenant, message, indexes);\n    await this.eventLog.append(tenant, messageCid, indexes);\n\n    // only emit if the event stream is set\n    if (this.eventStream !== undefined) {\n      this.eventStream.emit(tenant, { message, initialWrite }, indexes);\n    }\n\n    if (message.descriptor.prune) {\n      // purge/hard-delete all descendent records\n      await StorageController.purgeRecordDescendants(tenant, message.descriptor.recordId, this.messageStore, this.dataStore, this.eventLog);\n    }\n\n    // delete all existing messages that are not newest, except for the initial write\n    await StorageController.deleteAllOlderMessagesButKeepInitialWrite(\n      tenant, existingMessages, message, this.messageStore, this.dataStore, this.eventLog\n    );\n  }\n\n  /**\n   * Deletes the data referenced by the given message if needed.\n   * @param message The message to check if the data it references should be deleted.\n   */\n  private static async deleteFromDataStoreIfNeeded(\n    dataStore: DataStore,\n    tenant: string,\n    message: GenericMessage,\n    newestMessage: GenericMessage\n  ): Promise<void> {\n    if (message.descriptor.method !== DwnMethodName.Write) {\n      return;\n    }\n\n    const recordsWriteMessage = message as RecordsWriteMessage;\n\n    // Optional short-circuit optimization to avoid unnecessary data store call since the data should be encoded with the message itself in this case,\n    // but data store call is a no-op thus code still works correctly even if this short-circuit is removed.\n    if (recordsWriteMessage.descriptor.dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {\n      return;\n    }\n\n    // We must still keep the data if the newest message still references the same data.\n    if (recordsWriteMessage.descriptor.dataCid === (newestMessage as RecordsWriteMessage).descriptor.dataCid) {\n      return;\n    }\n\n    // Else we delete the data from the data store.\n    await dataStore.delete(tenant, recordsWriteMessage.recordId, recordsWriteMessage.descriptor.dataCid);\n  }\n\n  /**\n   * Purges (permanent hard-delete) all descendant's data of the given `recordId`.\n   */\n  public static async purgeRecordDescendants(\n    tenant: string,\n    recordId: string,\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    eventLog: EventLog\n  ): Promise<void> {\n    const filter = {\n      interface : DwnInterfaceName.Records,\n      parentId  : recordId\n    };\n    const { messages: childMessages } = await messageStore.query(tenant, [filter]);\n\n    // group the child messages by `recordId`\n    const recordIdToMessagesMap = new Map<string, GenericMessage[]>();\n    for (const message of childMessages) {\n      // get the recordId\n      let recordId;\n      if (Records.isRecordsWrite(message)) {\n        recordId = message.recordId;\n      } else {\n        recordId = (message as RecordsDeleteMessage).descriptor.recordId;\n      }\n\n      if (!recordIdToMessagesMap.has(recordId)) {\n        recordIdToMessagesMap.set(recordId, []);\n      }\n      recordIdToMessagesMap.get(recordId)!.push(message);\n    }\n\n    // purge all child's descendants first\n    for (const childRecordId of recordIdToMessagesMap.keys()) {\n      // purge the child's descendent messages first\n      await StorageController.purgeRecordDescendants(tenant, childRecordId, messageStore, dataStore, eventLog);\n    }\n\n    // then purge the child messages themselves\n    for (const childRecordId of recordIdToMessagesMap.keys()) {\n      await StorageController.purgeRecordMessages(tenant, recordIdToMessagesMap.get(childRecordId)!, messageStore, dataStore, eventLog);\n    }\n  }\n\n  /**\n   * Purges (permanent hard-delete) all messages of the SAME `recordId` given and their associated data and events.\n   * Assumes that the given `recordMessages` are all of the same `recordId`.\n   */\n  private static async purgeRecordMessages(\n    tenant: string,\n    recordMessages: GenericMessage[],\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    eventLog: EventLog\n  ): Promise<void> {\n    // delete the data from the data store first so no chance of orphaned data (not having a message referencing it) in case of server crash\n    // NOTE: only the `RecordsWrite` with latest timestamp can possibly have data associated with it so we do this filtering as an optimization\n    // NOTE: however there could still be no data associated with the `RecordsWrite` with newest timestamp, because either:\n    //       1. the data is encoded with the message itself; or\n    //       2. the newest `RecordsWrite` may not be the \"true\" latest state due to:\n    //          a. sync has yet to write the latest `RecordsWrite`; or\n    //          b. `recordMessages` maybe an incomplete page of results if the caller uses the paging in its query\n    // Calling dataStore.delete() is a no-op if the data is not found, so we are safe to call it redundantly.\n    const recordsWrites = recordMessages.filter((message) => message.descriptor.method === DwnMethodName.Write);\n    const newestRecordsWrite = (await Message.getNewestMessage(recordsWrites)) as RecordsWriteMessage;\n    await dataStore.delete(tenant, newestRecordsWrite.recordId, newestRecordsWrite.descriptor.dataCid);\n\n    // then delete all events associated with the record messages before deleting the messages so we don't have orphaned events\n    const messageCids = await Promise.all(recordMessages.map((message) => Message.getCid(message)));\n    await eventLog.deleteEventsByCid(tenant, messageCids);\n\n    // finally delete all record messages\n    await Promise.all(messageCids.map((messageCid) => messageStore.delete(tenant, messageCid)));\n  }\n\n  /**\n   * Deletes all messages in `existingMessages` that are older than the `newestMessage` in the given tenant,\n   * but keep the initial write write for future processing by ensuring its `isLatestBaseState` index is \"false\".\n   */\n  public static async deleteAllOlderMessagesButKeepInitialWrite(\n    tenant: string,\n    existingMessages: GenericMessage[],\n    newestMessage: GenericMessage,\n    messageStore: MessageStore,\n    dataStore: DataStore,\n    eventLog: EventLog\n  ): Promise<void> {\n    const deletedMessageCids: string[] = [];\n\n    // NOTE: under normal operation, there should only be at most two existing records per `recordId` (initial + a potential subsequent write/delete),\n    // but the DWN may crash before `delete()` is called below, so we use a loop as a tactic to clean up lingering data as needed\n    for (const message of existingMessages) {\n      const messageIsOld = await Message.isOlder(message, newestMessage);\n      if (messageIsOld) {\n        // the easiest implementation here is delete each old messages\n        // and re-create it with the right index (isLatestBaseState = 'false') if the message is the initial write,\n        // but there is room for better/more efficient implementation here\n\n        await StorageController.deleteFromDataStoreIfNeeded(dataStore, tenant, message, newestMessage);\n\n        // delete message from message store\n        const messageCid = await Message.getCid(message);\n        await messageStore.delete(tenant, messageCid);\n\n        // if the existing message is the initial write\n        // we actually need to keep it BUT, need to ensure the message is no longer marked as the latest state\n        const existingMessageIsInitialWrite = await RecordsWrite.isInitialWrite(message);\n        if (existingMessageIsInitialWrite) {\n          const existingRecordsWrite = await RecordsWrite.parse(message as RecordsWriteMessage);\n          const isLatestBaseState = false;\n          const indexes = await existingRecordsWrite.constructIndexes(isLatestBaseState);\n          const writeMessage = message as RecordsQueryReplyEntry;\n          delete writeMessage.encodedData;\n          await messageStore.put(tenant, writeMessage, indexes);\n        } else {\n          const messageCid = await Message.getCid(message);\n          deletedMessageCids.push(messageCid);\n        }\n      }\n\n      await eventLog.deleteEventsByCid(tenant, deletedMessageCids);\n    }\n  }\n}\n", "import type { DataStore } from '../types/data-store.js';\nimport type { DidResolver } from '@web5/dids';\nimport type { EventLog } from '../types/event-log.js';\nimport type { EventStream } from '../types/subscriptions.js';\nimport type { GenericMessageReply } from '../types/message-types.js';\nimport type { MessageStore } from '../types//message-store.js';\nimport type { MethodHandler } from '../types/method-handler.js';\nimport type { RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';\n\nimport { authenticate } from '../core/auth.js';\nimport { Cid } from '../utils/cid.js';\nimport { DataStream } from '../utils/data-stream.js';\nimport { DwnConstant } from '../core/dwn-constant.js';\nimport { Encoder } from '../utils/encoder.js';\nimport { Message } from '../core/message.js';\nimport { messageReplyFromError } from '../core/message-reply.js';\nimport { PermissionsProtocol } from '../protocols/permissions.js';\nimport { ProtocolAuthorization } from '../core/protocol-authorization.js';\nimport { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';\nimport { RecordsWrite } from '../interfaces/records-write.js';\nimport { StorageController } from '../store/storage-controller.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';\n\ntype HandlerArgs = { tenant: string, message: RecordsWriteMessage, dataStream?: _Readable.Readable};\n\nexport class RecordsWriteHandler implements MethodHandler {\n\n  constructor(\n    private didResolver: DidResolver,\n    private messageStore: MessageStore,\n    private dataStore: DataStore,\n    private eventLog: EventLog,\n    private eventStream?: EventStream\n  ) { }\n\n  public async handle({\n    tenant,\n    message,\n    dataStream\n  }: HandlerArgs): Promise<GenericMessageReply> {\n    let recordsWrite: RecordsWrite;\n    try {\n      recordsWrite = await RecordsWrite.parse(message);\n\n      // Protocol-authorized record specific validation\n      if (message.descriptor.protocol !== undefined) {\n        await ProtocolAuthorization.validateReferentialIntegrity(tenant, recordsWrite, this.messageStore);\n      }\n    } catch (e) {\n      return messageReplyFromError(e, 400);\n    }\n\n    // authentication & authorization\n    try {\n      await authenticate(message.authorization, this.didResolver);\n      await RecordsWriteHandler.authorizeRecordsWrite(tenant, recordsWrite, this.messageStore);\n    } catch (e) {\n      return messageReplyFromError(e, 401);\n    }\n\n    // get existing messages matching the `recordId`\n    const query = {\n      interface : DwnInterfaceName.Records,\n      recordId  : message.recordId\n    };\n    const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ]);\n\n    // if the incoming write is not the initial write, then it must not modify any immutable properties defined by the initial write\n    const newMessageIsInitialWrite = await recordsWrite.isInitialWrite();\n    let initialWrite: RecordsWriteMessage | undefined;\n    if (!newMessageIsInitialWrite) {\n      try {\n        initialWrite = await RecordsWrite.getInitialWrite(existingMessages);\n        RecordsWrite.verifyEqualityOfImmutableProperties(initialWrite, message);\n      } catch (e) {\n        return messageReplyFromError(e, 400);\n      }\n    }\n\n    const newestExistingMessage = await Message.getNewestMessage(existingMessages);\n\n    let incomingMessageIsNewest = false;\n    let newestMessage; // keep reference of newest message for pruning later\n    if (newestExistingMessage === undefined || await Message.isNewer(message, newestExistingMessage)) {\n      incomingMessageIsNewest = true;\n      newestMessage = message;\n    } else { // existing message is the same age or newer than the incoming message\n      newestMessage = newestExistingMessage;\n    }\n\n    if (!incomingMessageIsNewest) {\n      return {\n        status: { code: 409, detail: 'Conflict' }\n      };\n    }\n\n    try {\n      if (newestExistingMessage?.descriptor.method === DwnMethodName.Delete) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteNotAllowedAfterDelete,\n          'RecordsWrite is not allowed after a RecordsDelete.'\n        );\n      }\n\n      // NOTE: We want to perform additional validation before storing the RecordsWrite.\n      // This is necessary for core DWN RecordsWrite that needs additional processing and allows us to fail before the storing and post processing.\n      //\n      // Example: Ensures that the protocol tag of a permission revocation RecordsWrite and the parent grant's scoped protocol match.\n      await this.preProcessingForCoreRecordsWrite(tenant, message);\n\n      // NOTE: We allow isLatestBaseState to be true ONLY if the incoming message comes with data, or if the incoming message is NOT an initial write\n      // This would allow an initial write to be written to the DB without data, but having it not queryable,\n      // because query implementation filters on `isLatestBaseState` being `true`\n      // thus preventing a user's attempt to gain authorized access to data by referencing the dataCid of a private data in their initial writes,\n      // See: https://github.com/TBD54566975/dwn-sdk-js/issues/359 for more info\n      let isLatestBaseState = false;\n      let messageWithOptionalEncodedData = message as RecordsQueryReplyEntry;\n\n      if (dataStream !== undefined) {\n        messageWithOptionalEncodedData = await this.processMessageWithDataStream(tenant, message, dataStream);\n        isLatestBaseState = true;\n      } else {\n        // else data stream is NOT provided\n\n        // if the incoming message is not an initial write, and no dataStream is provided, we would allow it provided it passes validation\n        // processMessageWithoutDataStream() abstracts that logic\n        if (!newMessageIsInitialWrite) {\n          const newestExistingWrite = newestExistingMessage as RecordsQueryReplyEntry;\n          messageWithOptionalEncodedData = await this.processMessageWithoutDataStream(tenant, message, newestExistingWrite );\n          isLatestBaseState = true;\n        }\n      }\n\n      const indexes = await recordsWrite.constructIndexes(isLatestBaseState);\n      await this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);\n      await this.eventLog.append(tenant, await Message.getCid(message), indexes);\n\n      // NOTE: We only emit a `RecordsWrite` when the message is the latest base state.\n      // Because we allow a `RecordsWrite` which is not the latest state to be written, but not queried, we shouldn't emit it either.\n      // It will be emitted as a part of a subsequent next write, if it is the latest base state.\n      if (this.eventStream !== undefined && isLatestBaseState) {\n        this.eventStream.emit(tenant, { message, initialWrite }, indexes);\n      }\n    } catch (error) {\n      const e = error as any;\n      if (e.code !== undefined) {\n        if (e.code === DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious ||\n          e.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||\n          e.code === DwnErrorCode.RecordsWriteNotAllowedAfterDelete ||\n          e.code === DwnErrorCode.RecordsWriteDataCidMismatch ||\n          e.code === DwnErrorCode.RecordsWriteDataSizeMismatch ||\n          e.code.startsWith('PermissionsProtocolValidate') ||\n          e.code.startsWith('SchemaValidator')) {\n          return messageReplyFromError(error, 400);\n        }\n      }\n\n      // else throw\n      throw error;\n    }\n\n    const messageReply = {\n      // In order to discern between something that was accepted as a queryable write and something that was accepted\n      // as an initial state we use separate response codes. See https://github.com/TBD54566975/dwn-sdk-js/issues/695\n      // for more details.\n      status: (newMessageIsInitialWrite && dataStream === undefined) ?\n        { code: 204, detail: 'No Content' } :\n        { code: 202, detail: 'Accepted' }\n    };\n\n    // delete all existing messages of the same record that are not newest, except for the initial write\n    await StorageController.deleteAllOlderMessagesButKeepInitialWrite(\n      tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.eventLog\n    );\n\n    await this.postProcessingForCoreRecordsWrite(tenant, recordsWrite);\n\n    return messageReply;\n  };\n\n  /**\n   * Performs additional necessary validation before storing the RecordsWrite if it is a core DWN RecordsWrite that needs additional processing.\n   * For instance: a Permission revocation RecordsWrite.\n   */\n  private async preProcessingForCoreRecordsWrite(tenant: string, recordsWriteMessage: RecordsWriteMessage): Promise<void> {\n\n    // we validate the protocol tag of the revocation message against the grant's scoped protocol\n    // to do this we will fetch the grant, and compare the the scoped protocol value to the protocol tag of the revocation message\n    if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri &&\n      recordsWriteMessage.descriptor.protocolPath === PermissionsProtocol.revocationPath) {\n\n      // get the parentId of the revocation message, which is the permissionGrantId\n      // fetch the grant in order to get the grant's protocol\n      const permissionGrantId = recordsWriteMessage.descriptor.parentId!;\n      const grant = await PermissionsProtocol.fetchGrant(tenant, this.messageStore, permissionGrantId);\n\n      // get the protocol values of the revocation message from the protocol tag and the protocol from the grant scope if they are defined\n      // compare the two values ensuring they must match\n      const revokeTagProtocol = recordsWriteMessage.descriptor.tags?.protocol;\n      const grantProtocol = 'protocol' in grant.scope ? grant.scope.protocol : undefined;\n      if (grantProtocol !== revokeTagProtocol) {\n        throw new DwnError(\n          DwnErrorCode.PermissionsProtocolValidateRevocationProtocolTagMismatch,\n          `Revocation protocol ${revokeTagProtocol} does not match grant protocol ${grantProtocol}`\n        );\n      }\n    }\n  }\n\n  private static validateSchemaForCoreRecordsWrite(recordsWriteMessage: RecordsWriteMessage, dataBytes: Uint8Array): void {\n    if (recordsWriteMessage.descriptor.protocol === PermissionsProtocol.uri) {\n      PermissionsProtocol.validateSchema(recordsWriteMessage, dataBytes);\n    }\n  }\n\n  /**\n   * Performs additional necessary tasks if the RecordsWrite handled is a core DWN RecordsWrite that need additional processing.\n   * For instance: a Permission revocation RecordsWrite.\n   */\n  private async postProcessingForCoreRecordsWrite(tenant: string, recordsWrite: RecordsWrite): Promise<void> {\n    // If this message is a Permission revocation, we need to delete all grant-authorized messages with timestamp after revocation\n    // TODO: https://github.com/TBD54566975/dwn-sdk-js/issues/716\n    // This code is a direct copy and paste from the original PermissionsRevokeHandler (no longer exists),\n    // but it appears that there was no test for it and it does not look like the code worked:\n    // - not seeing `permissionGrantId` being an index\n    // - not seeing `this.dataStore` being called to delete actual data\n    // - test coverage is missing for the main delete logic\n    if (recordsWrite.message.descriptor.protocol === PermissionsProtocol.uri &&\n      recordsWrite.message.descriptor.protocolPath === PermissionsProtocol.revocationPath) {\n      const permissionGrantId = recordsWrite.message.descriptor.parentId!;\n      const grantAuthorizedMessagesQuery = {\n        permissionGrantId,\n        dateCreated: { gte: recordsWrite.message.descriptor.messageTimestamp },\n      };\n      const { messages: grantAuthorizedMessagesAfterRevoke } = await this.messageStore.query(tenant, [ grantAuthorizedMessagesQuery ]);\n      const grantAuthorizedMessageCidsAfterRevoke: string[] = [];\n      for (const grantAuthorizedMessage of grantAuthorizedMessagesAfterRevoke) {\n        const messageCid = await Message.getCid(grantAuthorizedMessage);\n        await this.messageStore.delete(tenant, messageCid);\n      }\n      this.eventLog.deleteEventsByCid(tenant, grantAuthorizedMessageCidsAfterRevoke);\n    }\n  }\n\n  /**\n   * Returns a `RecordsQueryReplyEntry` with a copy of the incoming message and the incoming data encoded to `Base64URL`.\n   */\n  public async cloneAndAddEncodedData(message: RecordsWriteMessage, dataBytes: Uint8Array):Promise<RecordsQueryReplyEntry> {\n    const recordsWrite: RecordsQueryReplyEntry = { ...message };\n    recordsWrite.encodedData = Encoder.bytesToBase64Url(dataBytes);\n    return recordsWrite;\n  }\n\n  private async processMessageWithDataStream(\n    tenant: string,\n    message: RecordsWriteMessage,\n    dataStream: _Readable.Readable,\n  ):Promise<RecordsQueryReplyEntry> {\n    let messageWithOptionalEncodedData: RecordsQueryReplyEntry = message;\n\n    // if data is below the threshold, we store it within MessageStore\n    if (message.descriptor.dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {\n      // validate data integrity before setting.\n      const dataBytes = await DataStream.toBytes(dataStream!);\n      const dataCid = await Cid.computeDagPbCidFromBytes(dataBytes);\n      RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, dataBytes.length);\n\n      RecordsWriteHandler.validateSchemaForCoreRecordsWrite(message, dataBytes);\n\n      messageWithOptionalEncodedData = await this.cloneAndAddEncodedData(message, dataBytes);\n    } else {\n      // split the dataStream into two: one for CID computation and one for storage\n      const [dataStreamCopy1, dataStreamCopy2] = DataStream.duplicateDataStream(dataStream, 2);\n\n      try {\n        // perform storage and CID computation in parallel\n        const [dataCid, DataStorePutResult] = await Promise.all([\n          Cid.computeDagPbCidFromStream(dataStreamCopy1),\n          this.dataStore.put(tenant, message.recordId, message.descriptor.dataCid, dataStreamCopy2)\n        ]);\n\n        RecordsWriteHandler.validateDataIntegrity(message.descriptor.dataCid, message.descriptor.dataSize, dataCid, DataStorePutResult.dataSize);\n      } catch (error) {\n        // unwind/delete data if we have issue with storage or the data failed integrity validation\n        await this.dataStore.delete(tenant, message.recordId, message.descriptor.dataCid);\n\n        throw error;\n      }\n    }\n\n    return messageWithOptionalEncodedData;\n  }\n\n  private async processMessageWithoutDataStream(\n    tenant: string,\n    message: RecordsWriteMessage,\n    newestExistingWrite: RecordsQueryReplyEntry,\n  ):Promise<RecordsQueryReplyEntry> {\n    const messageWithOptionalEncodedData: RecordsQueryReplyEntry = { ...message }; // clone\n    const { dataCid, dataSize } = message.descriptor;\n\n    // Since incoming message is not an initial write, and no dataStream is provided, we first check integrity against newest existing write.\n    // we preform the dataCid check in case a user attempts to gain access to data by referencing a different known dataCid,\n    // so we insure that the data is already associated with the existing newest message\n    // See: https://github.com/TBD54566975/dwn-sdk-js/issues/359 for more info\n    RecordsWriteHandler.validateDataIntegrity(dataCid, dataSize, newestExistingWrite.descriptor.dataCid, newestExistingWrite.descriptor.dataSize);\n\n    if (dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {\n      // we encode the data from the original write if it is smaller than the data-store threshold\n      if (newestExistingWrite.encodedData !== undefined) {\n        messageWithOptionalEncodedData.encodedData = newestExistingWrite.encodedData;\n      } else {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious,\n          `No dataStream was provided and unable to get data from previous message`\n        );\n      }\n    } else {\n      // else just make sure the data is in the data store\n\n      // attempt to retrieve the data from the previous message\n      const DataStoreGetResult = await this.dataStore.get(tenant, newestExistingWrite.recordId, message.descriptor.dataCid);\n\n      if (DataStoreGetResult === undefined) {\n        throw new DwnError(\n          DwnErrorCode.RecordsWriteMissingDataInPrevious,\n          `No dataStream was provided and unable to get data from previous message`\n        );\n      }\n    }\n\n    return messageWithOptionalEncodedData;\n  }\n\n  /**\n   * Validates the expected `dataCid` and `dataSize` in the descriptor vs the received data.\n   *\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataCidMismatch`\n   *                    if the data stream resulted in a data CID that mismatches with `dataCid` in the given message\n   * @throws {DwnError} with `DwnErrorCode.RecordsWriteDataSizeMismatch`\n   *                    if `dataSize` in `descriptor` given mismatches the actual data size\n   */\n  private static validateDataIntegrity(\n    expectedDataCid: string,\n    expectedDataSize: number,\n    actualDataCid: string,\n    actualDataSize: number\n  ): void {\n    if (expectedDataCid !== actualDataCid) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteDataCidMismatch,\n        `actual data CID ${actualDataCid} does not match dataCid in descriptor: ${expectedDataCid}`\n      );\n    }\n\n    if (expectedDataSize !== actualDataSize) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteDataSizeMismatch,\n        `actual data size ${actualDataSize} bytes does not match dataSize in descriptor: ${expectedDataSize}`\n      );\n    }\n  }\n\n  private static async authorizeRecordsWrite(tenant: string, recordsWrite: RecordsWrite, messageStore: MessageStore): Promise<void> {\n    // if owner signature is given (`owner` is not `undefined`), it must be the same as the tenant DID\n    if (recordsWrite.owner !== undefined && recordsWrite.owner !== tenant) {\n      throw new DwnError(\n        DwnErrorCode.RecordsWriteOwnerAndTenantMismatch,\n        `Owner ${recordsWrite.owner} must be the same as tenant ${tenant} when specified.`\n      );\n    }\n\n    if (recordsWrite.isSignedByAuthorDelegate) {\n      await recordsWrite.authorizeAuthorDelegate(messageStore);\n    }\n\n    if (recordsWrite.isSignedByOwnerDelegate) {\n      await recordsWrite.authorizeOwnerDelegate(messageStore);\n    }\n\n    if (recordsWrite.owner !== undefined) {\n      // if incoming message is a write retained by this tenant, we by-design always allow\n      // NOTE: the \"owner === tenant\" check is already done earlier in this method\n      return;\n    } else if (recordsWrite.author === tenant) {\n      // if author is the same as the target tenant, we can directly grant access\n      return;\n    } else if (recordsWrite.author !== undefined && recordsWrite.signaturePayload!.permissionGrantId !== undefined) {\n      const permissionGrant = await PermissionsProtocol.fetchGrant(tenant, messageStore, recordsWrite.signaturePayload!.permissionGrantId);\n      await RecordsGrantAuthorization.authorizeWrite({\n        recordsWriteMessage : recordsWrite.message,\n        expectedGrantor     : tenant,\n        expectedGrantee     : recordsWrite.author,\n        permissionGrant,\n        messageStore\n      });\n    } else if (recordsWrite.message.descriptor.protocol !== undefined) {\n      await ProtocolAuthorization.authorizeWrite(tenant, recordsWrite, messageStore);\n    } else {\n      throw new DwnError(DwnErrorCode.RecordsWriteAuthorizationFailed, 'message failed authorization');\n    }\n  }\n}\n", "export * from './types/did-core.js';\nexport * from './types/did-resolution.js';\nexport type * from './types/multibase.js';\nexport type * from './types/portable-did.js';\n\nexport * from './did.js';\nexport * from './did-error.js';\nexport * from './bearer-did.js';\n\nexport * from './methods/did-dht.js';\nexport * from './methods/did-ion.js';\nexport * from './methods/did-jwk.js';\nexport * from './methods/did-key.js';\nexport * from './methods/did-method.js';\nexport * from './methods/did-web.js';\n\nexport * from './resolver/resolver-cache-level.js';\nexport * from './resolver/resolver-cache-noop.js';\nexport * from './resolver/universal-resolver.js';\n\nexport * as utils from './utils.js';", "import { Jwk } from '@web5/crypto';\n\n/**\n * Represents metadata related to the process of DID dereferencing.\n *\n * This type includes fields that provide information about the outcome of a DID dereferencing operation,\n * including the content type of the returned resource and any errors that occurred during the dereferencing process.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-metadata | DID Core Specification, \u00A7 DID URL Dereferencing Metadata}\n */\nexport type DidDereferencingMetadata = {\n  /**\n   * The Media Type of the returned contentStream SHOULD be expressed using this property if\n   * dereferencing is successful.\n   */\n  contentType?: string;\n\n  /**\n   * The error code from the dereferencing process. This property is REQUIRED when there is an\n   * error in the dereferencing process. The value of this property MUST be a single keyword\n   * expressed as an ASCII string. The possible property values of this field SHOULD be registered\n   * in the {@link https://www.w3.org/TR/did-spec-registries/ | DID Specification Registries}.\n   * The DID Core specification defines the following common error values:\n   *\n   * - `invalidDidUrl`: The DID URL supplied to the DID URL dereferencing function does not conform\n   *                    to valid syntax.\n   * - `notFound`: The DID URL dereferencer was unable to find the `contentStream` resulting from\n   *               this dereferencing request.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-metadata | DID Core Specification, \u00A7 DID URL Dereferencing Metadata}\n   */\n  error?: string;\n\n  // Additional output metadata generated during DID Resolution.\n  [key: string]: any;\n}\n\n/**\n * Represents the options that can be used during the process of DID dereferencing.\n *\n * This interface allows the caller to specify preferences and additional parameters for the DID\n * dereferencing operation.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-options}\n */\nexport interface DidDereferencingOptions {\n  /** The Media Type that the caller prefers for contentStream. */\n  accept?: string;\n\n  /** Additional properties used during DID dereferencing. */\n  [key: string]: any;\n}\n\n/**\n * Represents the result of a DID dereferencing operation.\n *\n * This type encapsulates the outcomes of the DID URL dereferencing process, including metadata\n * about the dereferencing operation, the content stream retrieved (if any), and metadata about the\n * content stream.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core Specification, \u00A7 DID URL Dereferencing}\n */\nexport type DidDereferencingResult = {\n  /**\n   * A metadata structure consisting of values relating to the results of the DID URL dereferencing\n   * process. This structure is REQUIRED, and in the case of an error in the dereferencing process,\n   * this MUST NOT be empty. Properties defined by this specification are in 7.2.2 DID URL\n   * Dereferencing Metadata. If the dereferencing is not successful, this structure MUST contain an\n   * `error` property describing the error.\n   */\n  dereferencingMetadata: DidDereferencingMetadata;\n\n  /**\n   * If the `dereferencing` function was called and successful, this MUST contain a resource\n   * corresponding to the DID URL. The contentStream MAY be a resource such as:\n   *   - a DID document that is serializable in one of the conformant representations\n   *   - a Verification Method\n   *   - a service.\n   *   - any other resource format that can be identified via a Media Type and obtained through the\n   *     resolution process.\n   *\n   * If the dereferencing is unsuccessful, this value MUST be empty.\n   */\n  contentStream: DidResource | null;\n\n  /**\n   * If the dereferencing is successful, this MUST be a metadata structure, but the structure MAY be\n   * empty. This structure contains metadata about the contentStream. If the contentStream is a DID\n   * document, this MUST be a didDocumentMetadata structure as described in DID Resolution. If the\n   * dereferencing is unsuccessful, this output MUST be an empty metadata structure.\n   */\n  contentMetadata: DidDocumentMetadata;\n}\n\n/**\n * A set of data describing the Decentralized Identifierr (DID) subject.\n *\n * A DID Document contains information associated with the DID, such as cryptographic public keys\n * and service endpoints, enabling trustable interactions associated with the DID subject.\n *\n * - Cryptographic public keys - Used by the DID subject or a DID delegate to authenticate itself\n *                               and prove its association with the DID.\n * - Service endpoints - Used to communicate or interact with the DID subject or associated\n *                       entities. Examples include discovery, agent, social networking, file\n *                       storage, and verifiable credential repository services.\n *\n * A DID Document can be retrieved by resolving a DID, as described in\n * {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core Specification, \u00A7 DID Resolution}.\n */\nexport interface DidDocument {\n  /**\n   * A JSON-LD context link, which provides a JSON-LD processor with the information necessary to\n   * interpret the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'.\n   */\n  '@context'?: 'https://www.w3.org/ns/did/v1' | string | (string | Record<string, any>)[];\n\n  /**\n   * The DID Subject to which this DID Document pertains.\n   *\n   * The `id` property is REQUIRED and must be a valid DID.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-subject | DID Core Specification, \u00A7 DID Subject}\n   */\n  id: string;\n\n  /**\n   * A DID subject can have multiple identifiers for different purposes, or at different times.\n   * The assertion that two or more DIDs (or other types of URI) refer to the same DID subject can\n   * be made using the `alsoKnownAs` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#also-known-as | DID Core Specification, \u00A7 Also Known As}\n   */\n  alsoKnownAs?: string[];\n\n  /**\n   * A DID controller is an entity that is authorized to make changes to a DID document. Typically,\n   * only the DID Subject (i.e., the value of `id` property in the DID document) is authoritative.\n   * However, another DID can be specified as the DID controller, and when doing so, any\n   * verification methods contained in the DID document for the other DID should be accepted as\n   * authoritative.  In other words, proofs created by the controller DID should be considered\n   * equivalent to proofs created by the DID Subject.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-controller | DID Core Specification, \u00A7 DID Controller}\n   */\n  controller?: string | string[];\n\n  /**\n   * A DID document can express verification methods, such as cryptographic public keys, which can\n   * be used to authenticate or authorize interactions with the DID subject or associated parties.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n   */\n  verificationMethod?: DidVerificationMethod[];\n\n  /**\n   * The `assertionMethod` verification relationship is used to specify how the DID subject is\n   * expected to express claims, such as for the purposes of issuing a Verifiable Credential.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#assertion | DID Core Specification, \u00A7 Assertion}\n   */\n  assertionMethod?: (DidVerificationMethod | string)[];\n\n  /**\n   * The `authentication` verification relationship is used to specify how the DID subject is expected\n   * to be authenticated, for purposes such as logging into a website or engaging in any sort of\n   * challenge-response protocol.\n\n   * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, \u00A7 Authentication}\n   */\n  authentication?: (DidVerificationMethod | string)[];\n\n  /**\n   * The `keyAgreement` verification relationship is used to specify how an entity can generate\n   * encryption material in order to transmit confidential  information intended for the DID\n   * subject, such as for the purposes of establishing a secure communication channel with the\n   * recipient.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, \u00A7 Key Agreement}\n   */\n  keyAgreement?: (DidVerificationMethod | string)[];\n\n  /**\n   *  The `capabilityDelegation` verification relationship is used to specify a mechanism that might\n   * be used by the DID subject to delegate a cryptographic capability to another party, such as\n   * delegating the authority to access a specific HTTP API to a subordinate.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, \u00A7 Capability Delegation}\n   */\n  capabilityDelegation?: (DidVerificationMethod | string)[];\n\n  /**\n   * The `capabilityInvocation` verification relationship is used to specify a verification method\n   * that might be used by the DID subject to invoke a cryptographic capability, such as the\n   * authorization to update the DID Document.\n   */\n  capabilityInvocation?: (DidVerificationMethod | string)[];\n\n  /**\n   * Services are used in DID documents to express ways of communicating with the DID subject or\n   * associated entities. A service can be any type of service the DID subject wants to advertise,\n   * including decentralized identity management services for further discovery, authentication,\n   * authorization, or interaction.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, \u00A7 Services}\n   */\n  service?: DidService[];\n}\n\n/**\n * Represents metadata about the DID document resulting from a DID resolution operation.\n *\n * This metadata typically does not change between invocations of the `resolve` and\n * `resolveRepresentation` functions unless the DID document changes, as it represents metadata\n * about the DID document.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-document-metadata | DID Core Specification, \u00A7 DID Document Metadata}\n */\nexport interface DidDocumentMetadata {\n  /**\n   * Timestamp of the Create operation.\n   *\n   * The value of the property MUST be a string formatted as an XML Datetime normalized to\n   * UTC 00:00:00 and  without sub-second decimal precision. For example: `2020-12-20T19:17:47Z`.\n   */\n  created?: string;\n\n  /**\n   * Timestamp of the last Update operation for the document version which was resolved.\n   *\n   * The value of the property MUST follow the same formatting rules as the `created` property.\n   * The `updated` property is omitted if an Update operation has never been performed on the DID\n   * document. If an `updated` property exists, it can be the same value as the `created` property\n   * when the difference between the two timestamps is less than one second.\n   */\n  updated?: string;\n\n  /**\n   * Whether the DID has been deactivated.\n   *\n   * If a DID has been deactivated, DID document metadata MUST include this property with the\n   * boolean value `true`. If a DID has not been deactivated, this properrty is OPTIONAL, but if\n   * present, MUST have the boolean value `false`.\n   */\n  deactivated?: boolean;\n\n  /**\n   * Version ID of the last Update operation for the document version which was resolved.\n   */\n  versionId?: string;\n\n  /**\n   * Timestamp of the next Update operation if the resolved document version is not the latest\n   * version of the document.\n   *\n   * The value of the property MUST follow the same formatting rules as the `created` property.\n   */\n  nextUpdate?: string;\n\n  /**\n   * Version ID of the next Update operation if the resolved document version is not the latest\n   * version of the document.\n   */\n  nextVersionId?: string;\n\n  /**\n   * A DID method can define different forms of a DID that are logically equivalent. An example is\n   * when a DID takes one form prior to registration in a verifiable data registry and another form\n   * after such registration. In this case, the DID method specification might need to express one\n   * or more DIDs that are logically equivalent to the resolved DID as a property of the DID\n   * document. This is the purpose of the `equivalentId` property.\n   *\n   * A requesting party is expected to retain the values from the id and equivalentId properties to\n   * ensure any subsequent interactions with any of the values they contain are correctly handled as\n   * logically equivalent (e.g., retain all variants in a database so an interaction with any one\n   * maps to the same underlying account).\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-equivalentid | DID Core Specification, \u00A7 DID Document Metadata}\n  */\n equivalentId?: string[];\n\n /**\n  * The `canonicalId` property is identical to the `equivalentId` property except:\n  * - it is associated with a single value rather than a set\n  * - the DID is defined to be the canonical ID for the DID subject within the scope of the\n  *   containing DID document.\n  *\n  * A requesting party is expected to use the `canonicalId` value as its primary ID value for the\n  * DID subject and treat all other equivalent values as secondary aliases (e.g., update\n  * corresponding primary references in their systems to reflect the new canonical ID directive).\n  *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-canonicalid | DID Core Specification, \u00A7 DID Document Metadata}\n   */\n  canonicalId?: string;\n\n  // Additional output metadata generated during DID Resolution.\n  [key: string]: any;\n}\n\n/**\n * Represents metadata related to the result of a DID resolution operation.\n *\n * This type includes fields that provide information about the outcome of a DID resolution process,\n * including the content type of the returned DID document and any errors that occurred during the\n * resolution process.\n *\n * This metadata typically changes between invocations of the `resolve` and `resolveRepresentation`\n * functions, as it represents data about the resolution process itself.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution-metadata | DID Core Specification, \u00A7 DID Resolution Metadata}\n */\nexport type DidResolutionMetadata = {\n  /**\n   * The Media Type of the returned `didDocumentStream`.\n   *\n   * This property is REQUIRED if resolution is successful and if the `resolveRepresentation`\n   * function was called. This property MUST NOT be present if the `resolve` function was called.\n   * The value of this property MUST be an ASCII string that is the Media Type of the conformant\n   * representations. The caller of the `resolveRepresentation` function MUST use this value when\n   * determining how to parse and process the `didDocumentStream` returned by this function into the\n   * data model.\n   */\n  contentType?: string;\n\n  /**\n   * An error code indicating issues encountered during the DID Resolution or DID URL\n   * Dereferencing process.\n   *\n   * Defined error codes include:\n   *   - `internalError`: An unexpected error occurred during DID Resolution or DID URL\n   *                      dereferencing process.\n   *   - `invalidDid`: The provided DID is invalid.\n   *   - `methodNotSupported`: The DID method specified is not supported.\n   *   - `notFound`: The DID or DID URL does not exist.\n   *   - `representationNotSupported`: The DID document representation is not supported.\n   *   - Custom error codes can also be provided as strings.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-resolution-metadata | DID Core Specification, \u00A7 DID Resolution Metadata}\n   * @see {@link https://www.w3.org/TR/did-spec-registries/#error | DID Specification Registries, \u00A7 Error}\n   */\n  error?: string;\n\n  // Additional output metadata generated during DID Resolution.\n  [key: string]: any;\n};\n\n/**\n * DID Resolution input metadata.\n*\n* The DID Core specification defines the following common properties:\n*  - `accept`: The Media Type that the caller prefers for the returned representation of the DID\n*              Document.\n*\n* The possible properties within this structure and their possible values are registered in the\n* {@link https://www.w3.org/TR/did-spec-registries/#did-resolution-options | DID Specification Registries}.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options | DID Core Specification, \u00A7 DID Resolution Options}\n */\nexport interface DidResolutionOptions {\n  /**\n   * The Media Type that the caller prefers for the returned representation of the DID Document.\n   *\n   * This property is REQUIRED if the `resolveRepresentation` function was called. This property\n   * MUST NOT be present if the `resolve` function was called.\n   *\n   * The value of this property MUST be an ASCII string that is the Media Type of the conformant\n   * representations. The caller of the `resolveRepresentation` function MUST use this value when\n   * determining how to parse and process the `didDocumentStream` returned by this function into the\n   * data model.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options | DID Core Specification, \u00A7 DID Resolution Options}\n   */\n  accept?: string;\n\n  // Additional properties used during DID Resolution.\n  [key: string]: any;\n}\n\n/**\n * Represents the result of a Decentralized Identifier (DID) resolution operation.\n *\n * This type encapsulates the complete outcome of resolving a DID, including the resolution metadata,\n * the DID document (if resolution is successful), and metadata about the DID document.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core Specification, \u00A7 DID Resolution}\n */\nexport type DidResolutionResult = {\n  /**\n   * A JSON-LD context link, which provides the JSON-LD processor with the information necessary to\n   * interpret the resolution result JSON. The default context URL is\n   * 'https://w3id.org/did-resolution/v1'.\n   */\n  '@context'?: 'https://w3id.org/did-resolution/v1' | string | (string | Record<string, any>)[];\n\n  /**\n   * A metadata structure consisting of values relating to the results of the DID resolution\n   * process.\n   *\n   * This structure is REQUIRED, and in the case of an error in the resolution process,\n   * this MUST NOT be empty. If the resolution is not successful, this structure MUST contain an\n   * `error` property describing the error.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-didresolutionmetadata | DID Core Specification, \u00A7 DID Resolution Metadata}\n   */\n  didResolutionMetadata: DidResolutionMetadata;\n\n  /**\n   * The DID document resulting from the resolution process, if successful.\n   *\n   * If the `resolve` function was called and successful, this MUST contain a DID document\n   * corresponding to the DID. If the resolution is unsuccessful, this value MUST be empty.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocument | DID Core Specification, \u00A7 DID Document}\n   */\n  didDocument: DidDocument | null;\n\n  /**\n   * Metadata about the DID Document.\n   *\n   * This structure contains information about the DID Document like creation and update timestamps,\n   * deactivation status, versioning information, and other details relevant to the DID Document.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata | DID Core Specification, \u00A7 DID Document Metadata}\n   */\n  didDocumentMetadata: DidDocumentMetadata;\n};\n\n/**\n * A DID Resource is either a DID Document, a DID Verification method or a DID Service\n */\nexport type DidResource = DidDocument | DidService | DidVerificationMethod;\n\n/**\n * Services are used in DID documents to express ways of communicating with the DID subject or\n * associated entities. A service can be any type of service the DID subject wants to advertise.\n *\n * @see {@link https://www.w3.org/TR/did-core/#services}\n */\nexport type DidService = {\n  /**\n   * Identifier of the service.\n   *\n   * The `id` property is REQUIRED. It MUST be a URI conforming to\n   * {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986} and MUST be unique within the\n   * DID document.\n   */\n  id: string;\n\n  /**\n   * The type of service being described.\n   *\n   * The `type` property is REQUIRED. It MUST be a string. To maximize interoperability, the value\n   * SHOULD be registered in the\n   * {@link https://www.w3.org/TR/did-spec-registries/ | DID Specification Registries}. Examples of\n   * service types can be found in\n   * {@link https://www.w3.org/TR/did-spec-registries/#service-types | \u00A7 Service Types}.\n   */\n  type: string;\n\n  /**\n   * A URI that can be used to interact with the DID service.\n   *\n   * The value of the `serviceEndpoint` property MUST be a string, an object containing key/value\n   * pairs, or an array composed of strings or objects. All string values MUST be valid URIs\n   * conforming to {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986}.\n   */\n  serviceEndpoint: DidServiceEndpoint | DidServiceEndpoint[];\n\n  // DID methods MAY include additional service properties.\n  [key: string]: any;\n};\n\n/**\n * A service endpoint is a URI (Uniform Resource Identifier) that can be used to interact with the\n * DID service.\n *\n * The value of the `serviceEndpoint` property MUST be a string or an object containing key/value\n * pairs. All string values MUST be valid URIs conforming to\n * {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986}.\n *\n * @see {@link https://www.w3.org/TR/did-core/#dfn-serviceendpoint | RFC3986, \u00A7 5.4 Services}\n */\nexport type DidServiceEndpoint = string | Record<string, any>;\n\n/**\n * Represents a verification method in the context of a DID document.\n *\n * A verification method is a mechanism by which a DID controller can cryptographically assert proof\n * of ownership or control over a DID or DID document. This can include, but is not limited to,\n * cryptographic public keys or other data that can be used to authenticate or authorize actions.\n *\n * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n */\nexport interface DidVerificationMethod {\n  /**\n   * The identifier of the verification method, which must be a URI.\n   */\n  id: string;\n\n  /**\n   * The type of the verification method.\n   *\n   * To maximize interoperability this value SHOULD be one of the valid verification method types\n   * registered in the {@link https://www.w3.org/TR/did-spec-registries/#verification-method-types | DID Specification Registries}.\n   */\n  type: string;\n\n  /**\n   * The DID of the entity that controls this verification method.\n   */\n  controller: string;\n\n  /**\n   * (Optional) A public key in JWK format.\n   *\n   * A JSON Web Key (JWK) that conforms to {@link https://datatracker.ietf.org/doc/html/rfc7517 | RFC 7517}.\n   */\n  publicKeyJwk?: Jwk;\n\n  /**\n   * (Optional) A public key in Multibase format.\n   *\n   * A multibase key that conforms to the draft\n   * {@link https://datatracker.ietf.org/doc/draft-multiformats-multibase/ | Multibase specification}.\n   */\n  publicKeyMultibase?: string;\n}\n\n/**\n * Represents the various verification relationships defined in a DID document.\n *\n * These verification relationships indicate the intended usage of verification methods within a DID\n * document. Each relationship signifies a different purpose or context in which a verification\n * method can be used, such as authentication, assertionMethod, keyAgreement, capabilityDelegation,\n * and capabilityInvocation. The array provides a standardized set of relationship names for\n * consistent referencing and implementation across different DID methods.\n *\n * @see {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Specification, \u00A7 Verification Relationships}\n */\nexport enum DidVerificationRelationship {\n  /**\n   * Specifies how the DID subject is expected to be authenticated. This is commonly used for\n   * purposes like logging into a website or participating in challenge-response protocols.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, \u00A7 Authentication}\n   */\n  authentication = 'authentication',\n\n  /**\n   * Specifies how the DID subject is expected to express claims, such as for issuing Verifiable\n   * Credentials. This relationship is typically used when the DID subject is the issuer of a\n   * credential.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#assertion | DID Core Specification, \u00A7 Assertion}\n   */\n  assertionMethod = 'assertionMethod',\n\n  /**\n   * Specifies how an entity can generate encryption material to communicate confidentially with the\n   * DID subject. Often used in scenarios requiring secure communication channels.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, \u00A7 Key Agreement}\n   */\n  keyAgreement = 'keyAgreement',\n\n  /**\n   * Specifies a verification method used by the DID subject to invoke a cryptographic capability.\n   * This is frequently associated with authorization actions, like updating the DID Document.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#capability-invocation | DID Core Specification, \u00A7 Capability Invocation}\n   */\n  capabilityInvocation = 'capabilityInvocation',\n\n  /**\n   * Specifies a mechanism used by the DID subject to delegate a cryptographic capability to another\n   * party. This can include delegating access to a specific resource or API.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, \u00A7 Capability Delegation}\n   */\n  capabilityDelegation = 'capabilityDelegation',\n}", "import type { KeyValueStore } from '@web5/common';\n\nimport type { DidDereferencingOptions, DidDereferencingResult, DidResolutionOptions, DidResolutionResult } from './did-core.js';\n\n/**\n * Represents the interface for resolving a Decentralized Identifier (DID) to its corresponding DID\n * document.\n *\n * The `DidResolver` interface defines a single method, `resolve`, which takes a DID URL as input\n * and returns a `Promise` that resolves to a `DidResolutionResult`. This result contains the DID\n * document associated with the given DID, along with metadata about the resolution process.\n *\n * Implementations of this interface are expected to support resolution of DIDs according to the\n * specific rules and methods defined by the DID scheme in use.\n *\n * More information on DID URL dereferencing can be found in the\n * {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core specification}.\n *\n * @example\n * ```typescript\n * const resolutionResult = await didResolver.resolve('did:example:123456789abcdefghi');\n * ```\n */\nexport interface DidResolver {\n  /**\n   * Resolves a DID URI to a DID document and associated metadata.\n   *\n   * This function should resolve the DID URI in accordance with the relevant DID method\n   * specification, using the provided `options`.\n   *\n   * @param didUri - The DID URI to be resolved.\n   * @param options - Optional. The options used for resolving the DID.\n   * @returns A {@link DidResolutionResult} object containing the DID document and metadata or an\n   *          error.\n   */\n  resolve(didUrl: string, options?: DidResolutionOptions): Promise<DidResolutionResult>;\n}\n\n/**\n * Interface for cache implementations used by to store resolved DID documents.\n */\nexport interface DidResolverCache extends KeyValueStore<string, DidResolutionResult | void> {}\n\n/**\n * Represents the interface for dereferencing a DID URL to a specific resource within a DID\n * document.\n *\n * The `DidUrlDereferencer` interface defines a single method, `dereference`, which takes a DID URL\n * as input and returns a `Promise` that resolves to a `DidDereferencingResult`. This result\n * includes the dereferenced resource (if found) and metadata about the dereferencing process.\n *\n * Dereferencing a DID URL involves parsing the URL to identify the specific part of the DID\n * document being referenced, which could be a verification method, a service endpoint, or the\n * entire document itself.\n *\n * Implementations of this interface must adhere to the dereferencing mechanisms defined in the DID\n * Core specifications, handling various components of the DID URL including the DID itself, path,\n * query, and fragment.\n *\n * More information on DID URL dereferencing can be found in the\n * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}.\n *\n * @example\n * ```typescript\n * const dereferenceResult = await didUrlDereferencer.dereference('did:example:123456789abcdefghi#keys-1');\n * ```\n */\nexport interface DidUrlDereferencer {\n  /**\n   * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource.\n   *\n   * This method interprets the DID URL's components, which include the DID method, method-specific\n   * identifier, path, query, and fragment, and retrieves the related resource as per the DID Core\n   * specifications.\n   *\n   * @param didUrl - The DID URL string to dereference.\n   * @param options - Input options to the dereference function. Optional.\n   * @returns a {@link DidDereferencingResult}\n   */\n  dereference(didUrl: string, options?: DidDereferencingOptions): Promise<DidDereferencingResult>;\n}\n\n/**\n * A constant representing an empty DID Resolution Result. This object is used as the basis for a\n * result of DID resolution and is typically augmented with additional properties by the\n * DID method resolver.\n */\nexport const EMPTY_DID_RESOLUTION_RESULT: DidResolutionResult = {\n  '@context'            : 'https://w3id.org/did-resolution/v1',\n  didResolutionMetadata : {},\n  didDocument           : null,\n  didDocumentMetadata   : {},\n};", "/**\n * The `Did` class represents a Decentralized Identifier (DID) Uniform Resource Identifier (URI).\n *\n * This class provides a method for parsing a DID URI string into its component parts, as well as a\n * method for serializing a DID URI object into a string.\n *\n * A DID URI is composed of the following components:\n * - scheme\n * - method\n * - id\n * - path\n * - query\n * - fragment\n * - params\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-syntax | DID Core Specification, \u00A7 DID Syntax}\n */\nexport class Did {\n  /** Regular expression pattern for matching the method component of a DID URI. */\n  static readonly METHOD_PATTERN = '([a-z0-9]+)';\n  /** Regular expression pattern for matching percent-encoded characters in a method identifier. */\n  static readonly PCT_ENCODED_PATTERN = '(?:%[0-9a-fA-F]{2})';\n  /** Regular expression pattern for matching the characters allowed in a method identifier. */\n  static readonly ID_CHAR_PATTERN = `(?:[a-zA-Z0-9._-]|${Did.PCT_ENCODED_PATTERN})`;\n  /** Regular expression pattern for matching the method identifier component of a DID URI. */\n  static readonly METHOD_ID_PATTERN = `((?:${Did.ID_CHAR_PATTERN}*:)*(${Did.ID_CHAR_PATTERN}+))`;\n  /** Regular expression pattern for matching the path component of a DID URI. */\n  static readonly PATH_PATTERN = `(/[^#?]*)?`;\n  /** Regular expression pattern for matching the query component of a DID URI. */\n  static readonly QUERY_PATTERN = `([?][^#]*)?`;\n  /** Regular expression pattern for matching the fragment component of a DID URI. */\n  static readonly FRAGMENT_PATTERN = `(#.*)?`;\n  /** Regular expression pattern for matching all of the components of a DID URI. */\n  static readonly DID_URI_PATTERN = new RegExp(\n    `^did:(?<method>${Did.METHOD_PATTERN}):(?<id>${Did.METHOD_ID_PATTERN})(?<path>${Did.PATH_PATTERN})(?<query>${Did.QUERY_PATTERN})(?<fragment>${Did.FRAGMENT_PATTERN})$`\n  );\n\n  /**\n   * A string representation of the DID.\n   *\n   * A DID is a URI composed of three parts: the scheme `did:`, a method identifier, and a unique,\n   * method-specific identifier specified by the DID method.\n   *\n   * @example\n   * did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o\n   */\n  uri: string;\n\n  /**\n   * The name of the DID method.\n   *\n   * Examples of DID method names are `dht`, `jwk`, and `web`, among others.\n   */\n  method: string;\n\n  /**\n   * The DID method identifier.\n   *\n   * @example\n   * h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o\n   */\n  id: string;\n\n  /**\n      * Optional path component of the DID URI.\n      *\n      * @example\n      * did:web:tbd.website/path\n      */\n  path?: string;\n\n  /**\n      * Optional query component of the DID URI.\n      *\n      * @example\n      * did:web:tbd.website?versionId=1\n      */\n  query?: string;\n\n  /**\n   * Optional fragment component of the DID URI.\n   *\n   * @example\n   * did:web:tbd.website#key-1\n   */\n  fragment?: string;\n\n  /**\n    * Optional query parameters in the DID URI.\n    *\n    * @example\n    * did:web:tbd.website?service=files&relativeRef=/whitepaper.pdf\n    */\n  params?: Record<string, string>;\n\n  /**\n   * Constructs a new `Did` instance from individual components.\n   *\n   * @param params - An object containing the parameters to be included in the DID URI.\n   * @param params.method - The name of the DID method.\n   * @param params.id - The DID method identifier.\n   * @param params.path - Optional. The path component of the DID URI.\n   * @param params.query - Optional. The query component of the DID URI.\n   * @param params.fragment - Optional. The fragment component of the DID URI.\n   * @param params.params - Optional. The query parameters in the DID URI.\n   */\n  constructor({ method, id, path, query, fragment, params }: {\n    method: string,\n    id: string,\n    path?: string,\n    query?: string,\n    fragment?: string,\n    params?: Record<string, string>\n  }) {\n    this.uri = `did:${method}:${id}`;\n    this.method = method;\n    this.id = id;\n    this.path = path;\n    this.query = query;\n    this.fragment = fragment;\n    this.params = params;\n  }\n\n  /**\n   * Parses a DID URI string into its individual components.\n   *\n   * @example\n   * ```ts\n   * const did = Did.parse('did:example:123?service=agent&relativeRef=/credentials#degree');\n   *\n   * console.log(did.uri)      // Output: 'did:example:123'\n   * console.log(did.method)   // Output: 'example'\n   * console.log(did.id)       // Output: '123'\n   * console.log(did.query)    // Output: 'service=agent&relativeRef=/credentials'\n   * console.log(did.fragment) // Output: 'degree'\n   * console.log(did.params)   // Output: { service: 'agent', relativeRef: '/credentials' }\n   * ```\n   *\n   * @params didUri - The DID URI string to be parsed.\n   * @returns A `Did` object representing the parsed DID URI, or `null` if the input string is not a valid DID URI.\n   */\n  static parse(didUri: string): Did | null {\n    // Return null if the input string is empty or not provided.\n    if (!didUri) return null;\n\n    // Execute the regex pattern on the input string to extract URI components.\n    const match = Did.DID_URI_PATTERN.exec(didUri);\n\n    // If the pattern does not match, or if the required groups are not found, return null.\n    if (!match || !match.groups) return null;\n\n    // Extract the method, id, params, path, query, and fragment from the regex match groups.\n    const { method, id, path, query, fragment } = match.groups;\n\n    // Initialize a new Did object with the uri, method and id.\n    const did: Did = {\n      uri: `did:${method}:${id}`,\n      method,\n      id,\n    };\n\n    // If path is present, add it to the Did object.\n    if (path) did.path = path;\n\n    // If query is present, add it to the Did object, removing the leading '?'.\n    if (query) did.query = query.slice(1);\n\n    // If fragment is present, add it to the Did object, removing the leading '#'.\n    if (fragment) did.fragment = fragment.slice(1);\n\n    // If query params are present, parse them into a key-value object and add to the Did object.\n    if (query) {\n      const parsedParams = {} as Record<string, string>;\n      // Split the query string by '&' to get individual parameter strings.\n      const paramPairs = query.slice(1).split('&');\n      for (const pair of paramPairs) {\n        // Split each parameter string by '=' to separate keys and values.\n        const [key, value] = pair.split('=');\n        parsedParams[key] = value;\n      }\n      did.params = parsedParams;\n    }\n\n    return did;\n  }\n}", "/**\n * A custom error class for DID-related errors.\n */\nexport class DidError extends Error {\n  /**\n   * Constructs an instance of DidError, a custom error class for handling DID-related errors.\n   *\n   * @param code - A {@link DidErrorCode} representing the specific type of error encountered.\n   * @param message - A human-readable description of the error.\n   */\n  constructor(public code: DidErrorCode, message: string) {\n    super(`${code}: ${message}`);\n    this.name = 'DidError';\n\n    // Ensures that instanceof works properly, the correct prototype chain when using inheritance,\n    // and that V8 stack traces (like Chrome, Edge, and Node.js) are more readable and relevant.\n    Object.setPrototypeOf(this, new.target.prototype);\n\n    // Captures the stack trace in V8 engines (like Chrome, Edge, and Node.js).\n    // In non-V8 environments, the stack trace will still be captured.\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, DidError);\n    }\n  }\n}\n\n/**\n * An enumeration of possible DID error codes.\n */\nexport enum DidErrorCode {\n  /** The DID supplied does not conform to valid syntax. */\n  InvalidDid = 'invalidDid',\n\n  /** The supplied method name is not supported by the DID method and/or DID resolver implementation. */\n  MethodNotSupported = 'methodNotSupported',\n\n  /** An unexpected error occurred during the requested DID operation. */\n  InternalError = 'internalError',\n\n  /** The DID document supplied does not conform to valid syntax. */\n  InvalidDidDocument = 'invalidDidDocument',\n\n  /** The byte length of a DID document does not match the expected value. */\n  InvalidDidDocumentLength = 'invalidDidDocumentLength',\n\n  /** The DID URL supplied to the dereferencing function does not conform to valid syntax. */\n  InvalidDidUrl = 'invalidDidUrl',\n\n  /** The given proof of a previous DID is invalid */\n  InvalidPreviousDidProof = 'invalidPreviousDidProof',\n\n  /** An invalid public key is detected during a DID operation. */\n  InvalidPublicKey = 'invalidPublicKey',\n\n  /** The byte length of a public key does not match the expected value. */\n  InvalidPublicKeyLength = 'invalidPublicKeyLength',\n\n  /** An invalid public key type was detected during a DID operation. */\n  InvalidPublicKeyType = 'invalidPublicKeyType',\n\n  /** Verification of a signature failed during a DID operation. */\n  InvalidSignature = 'invalidSignature',\n\n  /** The DID resolver was unable to find the DID document resulting from the resolution request. */\n  NotFound = 'notFound',\n\n  /**\n   * The representation requested via the `accept` input metadata property is not supported by the\n   * DID method and/or DID resolver implementation.\n   */\n  RepresentationNotSupported = 'representationNotSupported',\n\n  /** The type of a public key is not supported by the DID method and/or DID resolver implementation. */\n  UnsupportedPublicKeyType = 'unsupportedPublicKeyType',\n}", "export * from './local-key-manager.js';\nexport * as utils from './utils.js';\nexport * from './utils.js';\n\nexport * from './algorithms/aes-ctr.js';\nexport * from './algorithms/aes-gcm.js';\nexport * from './algorithms/crypto-algorithm.js';\nexport * from './algorithms/ecdsa.js';\nexport * from './algorithms/eddsa.js';\nexport * from './algorithms/sha-2.js';\n\nexport * from './jose/jwe.js';\nexport * from './jose/jwk.js';\nexport * from './jose/jws.js';\nexport * from './jose/jwt.js';\nexport * from './jose/utils.js';\n\nexport * from './primitives/aes-ctr.js';\nexport * from './primitives/aes-gcm.js';\nexport * from './primitives/concat-kdf.js';\nexport * from './primitives/ed25519.js';\nexport * from './primitives/secp256r1.js';\nexport * from './primitives/pbkdf2.js';\nexport * from './primitives/secp256k1.js';\nexport * from './primitives/sha256.js';\nexport * from './primitives/x25519.js';\nexport * from './primitives/xchacha20.js';\nexport * from './primitives/xchacha20-poly1305.js';\n\nexport type * from './types/cipher.js';\nexport type * from './types/crypto-api.js';\nexport type * from './types/hasher.js';\nexport type * from './types/identifier.js';\nexport type * from './types/key-compressor.js';\nexport type * from './types/key-converter.js';\nexport type * from './types/key-deriver.js';\nexport type * from './types/key-generator.js';\nexport type * from './types/key-io.js';\nexport type * from './types/key-wrapper.js';\nexport type * from './types/params-direct.js';\nexport type * from './types/params-enclosed.js';\nexport type * from './types/params-kms.js';\nexport type * from './types/signer.js';", "export type * from './types.js';\n\nexport * from './cache.js';\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "import TTLCache from '@isaacs/ttlcache';\nexport { TTLCache as TtlCache };", "/**\n * Represents an array of a fixed length, preventing modifications to its size.\n *\n * The `FixedLengthArray` utility type transforms a standard array into a variant where\n * methods that could alter the length are omitted. It leverages TypeScript's advanced types,\n * such as conditional types and mapped types, to ensure that the array cannot be resized\n * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type\n * maintains all other characteristics of a standard array, including indexing, iteration,\n * and type checking for its elements.\n *\n * Note: The type does not prevent direct assignment to indices, even if it would exceed\n * the original length. However, such actions would lead to TypeScript type errors.\n *\n * @example\n * ```ts\n * // Declare a variable with a type of fixed-length array of three strings.\n * let myFixedLengthArray: FixedLengthArray< [string, string, string]>;\n *\n * // Array declaration tests\n * myFixedLengthArray = [ 'a', 'b', 'c' ];  // OK\n * myFixedLengthArray = [ 'a', 'b', 123 ];  // TYPE ERROR\n * myFixedLengthArray = [ 'a' ];            // LENGTH ERROR\n * myFixedLengthArray = [ 'a', 'b' ];       // LENGTH ERROR\n *\n * // Index assignment tests\n * myFixedLengthArray[1] = 'foo';           // OK\n * myFixedLengthArray[1000] = 'foo';        // INVALID INDEX ERROR\n *\n * // Methods that mutate array length\n * myFixedLengthArray.push('foo');          // MISSING METHOD ERROR\n * myFixedLengthArray.pop();                // MISSING METHOD ERROR\n *\n * // Direct length manipulation\n * myFixedLengthArray.length = 123;         // READ-ONLY ERROR\n *\n * // Destructuring\n * let [ a ] = myFixedLengthArray;          // OK\n * let [ a, b ] = myFixedLengthArray;       // OK\n * let [ a, b, c ] = myFixedLengthArray;    // OK\n * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR\n * ```\n *\n * @template T extends any[] - The array type to be transformed.\n */\nexport type FixedLengthArray<T extends any[]> =\n  Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>\n  & {\n    /**\n     * Custom iterator for the `FixedLengthArray` type.\n     *\n     * This iterator allows the `FixedLengthArray` to be used in standard iteration\n     * contexts, such as `for...of` loops and spread syntax. It ensures that even though\n     * the array is of a fixed length with disabled mutation methods, it still retains\n     * iterable behavior similar to a regular array.\n     *\n     * @returns An IterableIterator for the array items.\n     */\n    [Symbol.iterator]: () => IterableIterator<ArrayItems<T>>\n  };\n\n/** Helper types for {@link FixedLengthArray} */\ntype ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number;\ntype ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never;\n\n/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * Utility type that transforms a type `T` to have only certain keys `K` as required, while the\n * rest remain optional, except for keys specified in `O`, which are omitted entirely.\n *\n * This type is useful when you need a variation of a type where only specific properties are\n * required, and others are either optional or not included at all. It allows for more flexible type\n * definitions based on existing types without the need to redefine them.\n *\n * @template T - The original type to be transformed.\n * @template K - The keys of `T` that should be required.\n * @template O - The keys of `T` that should be omitted from the resulting type (optional).\n *\n * @example\n * ```ts\n * // Given an interface\n * interface Example {\n *   requiredProp: string;\n *   optionalProp?: number;\n *   anotherOptionalProp?: boolean;\n * }\n *\n * // Making 'optionalProp' required and omitting 'anotherOptionalProp'\n * type ModifiedExample = RequireOnly<Example, 'optionalProp', 'anotherOptionalProp'>;\n * // Result: { requiredProp?: string; optionalProp: number; }\n * ```\n */\nexport type RequireOnly<T, K extends keyof T, O extends keyof T = never> = Required<Pick<T, K>> & Omit<Partial<T>, O>;\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}\n\n/**\n * Utility type to extract the type resolved by a Promise.\n *\n * This type unwraps the type `T` from `Promise<T>` if `T` is a Promise, otherwise returns `T` as\n * is. It's useful in situations where you need to handle the type returned by a promise-based\n * function in a synchronous context, such as defining types for test vectors or handling return\n * types in non-async code blocks.\n *\n * @template T - The type to unwrap from the Promise.\n *\n * @example\n * ```ts\n * // For a Promise type, it extracts the resolved type.\n * type AsyncNumber = Promise<number>;\n * type UnwrappedNumber = UnwrapPromise<AsyncNumber>; // number\n *\n * // For a non-Promise type, it returns the type as is.\n * type StringValue = string;\n * type UnwrappedString = UnwrapPromise<StringValue>; // string\n * ```\n */\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;", "import type { Multibase } from 'multiformats';\n\nimport { base32z } from 'multiformats/bases/base32';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base32Z(data: string): Convert {\n    return new Convert(data, 'Base32Z');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase32Z(): string {\n    switch (this.format) {\n\n      case 'Uint8Array': {\n        return base32z.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base32Z': {\n        return base32z.baseDecode(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore<K = string, V = any> implements KeyValueStore<K, V> {\n  private store: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n\n  constructor({ db, location = 'DATASTORE' }: {\n    db?: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n    location?: string;\n  } = {}) {\n    this.store = db ?? new Level<K, V>(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: K): Promise<void> {\n    await this.store.del(key);\n  }\n\n  async get(key: K): Promise<V | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch (error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) return undefined;\n      throw error;\n    }\n  }\n\n  async set(key: K, value: V): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import { sha256 } from '@noble/hashes/sha256';\n\n/**\n * The `Sha256` class provides an interface for generating SHA-256 hash digests.\n *\n * This class utilizes the '@noble/hashes/sha256' function to generate hash digests\n * of the provided data. The SHA-256 algorithm is widely used in cryptographic\n * applications to produce a fixed-size 256-bit (32-byte) hash.\n *\n * The methods of this class are asynchronous and return Promises. They use the Uint8Array\n * type for input data and the resulting digest, ensuring a consistent interface\n * for binary data processing.\n *\n * @example\n * ```ts\n * const data = new Uint8Array([...]);\n * const hash = await Sha256.digest({ data });\n * ```\n */\nexport class Sha256 {\n  /**\n   * Generates a SHA-256 hash digest for the given data.\n   *\n   * @remarks\n   * This method produces a hash digest using the SHA-256 algorithm. The resultant digest\n   * is deterministic, meaning the same data will always produce the same hash, but\n   * is computationally infeasible to regenerate the original data from the hash.\n   *\n   * @example\n   * ```ts\n   * const data = new Uint8Array([...]);\n   * const hash = await Sha256.digest({ data });\n   * ```\n   *\n   * @param params - The parameters for the hashing operation.\n   * @param params.data - The data to hash, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the SHA-256 hash digest of the provided data as a Uint8Array.\n   */\n  public static async digest({ data }: {\n    data: Uint8Array;\n  }): Promise<Uint8Array> {\n    const hash = sha256(data);\n\n    return hash;\n  }\n}", "/**\n * Base class for all cryptographic algorithm implementations.\n */\nexport abstract class CryptoAlgorithm {}", "import type { Hasher } from '../types/hasher.js';\nimport type { DigestParams } from '../types/params-direct.js';\n\nimport { Sha256 } from '../primitives/sha256.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\n\n/**\n * The `Sha2DigestParams` interface defines the algorithm-specific parameters that should be\n * passed into the `digest()` method when using the SHA-2 algorithm.\n */\nexport interface Sha2DigestParams extends DigestParams {\n  /**\n   * A string defining the name of hash function to use. The value must be one of the following:\n   * - `\"SHA-256\"`: Generates a 256-bit digest.\n   */\n  algorithm: 'SHA-256';\n}\n\n/**\n * The `Sha2Algorithm` class is an implementation of the {@link Hasher | `Hasher`} interface for the\n * SHA-2 family of cryptographic hash functions. The `digest` method takes the algorithm identifier\n * of the hash function and arbitrary data as input and returns the hash digest of the data.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class Sha2Algorithm extends CryptoAlgorithm\n  implements Hasher<Sha2DigestParams> {\n\n  /**\n   * Generates a hash digest of the provided data.\n   *\n   * @remarks\n   * A digest is the output of the hash function. It's a fixed-size string of bytes\n   * that uniquely represents the data input into the hash function. The digest is often used for\n   * data integrity checks, as any alteration in the input data results in a significantly\n   * different digest.\n   *\n   * It takes the algorithm identifier of the hash function and data to digest as input and returns\n   * the digest of the data.\n   *\n   * @example\n   * ```ts\n   * const sha2 = new Sha2Algorithm();\n   * const data = new TextEncoder().encode('Messsage');\n   * const digest = await sha2.digest({ data });\n   * ```\n   *\n   * @param params - The parameters for the digest operation.\n   * @param params.algorithm - The name of hash function to use.\n   * @param params.data - The data to digest.\n   *\n   * @returns A Promise which will be fulfilled with the hash digest.\n   */\n  public async digest({ algorithm, data }: Sha2DigestParams): Promise<Uint8Array> {\n    switch (algorithm) {\n\n      case 'SHA-256': {\n        const hash = await Sha256.digest({ data });\n        return hash;\n      }\n    }\n\n  }\n}", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1P;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\n    a: BigInt(0), // equation params: a, b\n    b: BigInt(7), // Seem to be rigid: bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975\n    Fp, // Field's prime: 2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n\n    n: secp256k1N, // Curve order, total count of valid points in the field\n    // Base point (x, y) aka generator point\n    Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n    Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n    h: BigInt(1), // Cofactor\n    lowS: true, // Allow only low-S signatures by default in sign() and verify()\n    /**\n     * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n     * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n     * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n     * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n     */\n    endo: {\n      beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n      splitScalar: (k: bigint) => {\n        const n = secp256k1N;\n        const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n        const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n        const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n        const b2 = a1;\n        const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n        const c1 = divNearest(b2 * k, n);\n        const c2 = divNearest(-b1 * k, n);\n        let k1 = mod(k - c1 * a1 - c2 * a2, n);\n        let k2 = mod(-c1 * b1 - c2 * b2, n);\n        const k1neg = k1 > POW_2_128;\n        const k2neg = k2 > POW_2_128;\n        if (k1neg) k1 = n - k1;\n        if (k2neg) k2 = n - k2;\n        if (k1 > POW_2_128 || k2 > POW_2_128) {\n          throw new Error('splitScalar: Endomorphism failed, k=' + k);\n        }\n        return { k1neg, k1, k2neg, k2 };\n      },\n    },\n  },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = p.hasEvenY() ? d_ : modN(-d_);\n  return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n  const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  p.assertValidity();\n  return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(numTo32b(modN(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) return false;\n    const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n    const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\n\nexport const schnorr = /* @__PURE__ */ (() => ({\n  getPublicKey: schnorrGetPublicKey,\n  sign: schnorrSign,\n  verify: schnorrVerify,\n  utils: {\n    randomPrivateKey: secp256k1.utils.randomPrivateKey,\n    lift_x,\n    pointToBytes,\n    numberToBytesBE,\n    bytesToNumberBE,\n    taggedHash,\n    mod,\n  },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 8, false);\n  }\n  protected get(): [number, number, number, number, number, number, number, number] {\n    const { A, B, C, D, E, F, G, H } = this;\n    return [A, B, C, D, E, F, G, H];\n  }\n  // prettier-ignore\n  protected set(\n    A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n  ) {\n    this.A = A | 0;\n    this.B = B | 0;\n    this.C = C | 0;\n    this.D = D | 0;\n    this.E = E | 0;\n    this.F = F | 0;\n    this.G = G | 0;\n    this.H = H | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n    for (let i = 16; i < 64; i++) {\n      const W15 = SHA256_W[i - 15];\n      const W2 = SHA256_W[i - 2];\n      const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n      const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n      SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n    }\n    // Compression function main loop, 64 rounds\n    let { A, B, C, D, E, F, G, H } = this;\n    for (let i = 0; i < 64; i++) {\n      const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n      const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n      const T2 = (sigma0 + Maj(A, B, C)) | 0;\n      H = G;\n      G = F;\n      F = E;\n      E = (D + T1) | 0;\n      D = C;\n      C = B;\n      B = A;\n      A = (T1 + T2) | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    A = (A + this.A) | 0;\n    B = (B + this.B) | 0;\n    C = (C + this.C) | 0;\n    D = (D + this.D) | 0;\n    E = (E + this.E) | 0;\n    F = (F + this.F) | 0;\n    G = (G + this.G) | 0;\n    H = (H + this.H) | 0;\n    this.set(A, B, C, D, E, F, G, H);\n  }\n  protected roundClean() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends Hash<T> {\n  protected abstract process(buf: DataView, offset: number): void;\n  protected abstract get(): number[];\n  protected abstract set(...args: number[]): void;\n  abstract destroy(): void;\n  protected abstract roundClean(): void;\n  // For partial updates less than block size\n  protected buffer: Uint8Array;\n  protected view: DataView;\n  protected finished = false;\n  protected length = 0;\n  protected pos = 0;\n  protected destroyed = false;\n\n  constructor(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      // Fast path: we have at least one block in input, cast it to view and process\n      if (take === blockLen) {\n        const dataView = createView(data);\n        for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n        continue;\n      }\n      buffer.set(data.subarray(pos, pos + take), this.pos);\n      this.pos += take;\n      pos += take;\n      if (this.pos === blockLen) {\n        this.process(view, 0);\n        this.pos = 0;\n      }\n    }\n    this.length += data.length;\n    this.roundClean();\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    exists(this);\n    output(out, this);\n    this.finished = true;\n    // Padding\n    // We can avoid allocation of buffer for padding completely if it\n    // was previously not allocated here. But it won't change performance.\n    const { buffer, view, blockLen, isLE } = this;\n    let { pos } = this;\n    // append the bit '1' to the message\n    buffer[pos++] = 0b10000000;\n    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n    if (this.padOffset > blockLen - pos) {\n      this.process(view, 0);\n      pos = 0;\n    }\n    // Pad until full block byte with zeros\n    for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n    // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n    // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n    // So we just write lowest 64 bits of that value.\n    setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n    this.process(view, 0);\n    const oview = createView(out);\n    const len = this.outputLen;\n    // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should be aligned to 32bit');\n    const outLen = len / 4;\n    const state = this.get();\n    if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n    for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n  }\n  digest() {\n    const { buffer, outputLen } = this;\n    this.digestInto(buffer);\n    const res = buffer.slice(0, outputLen);\n    this.destroy();\n    return res;\n  }\n  _cloneInto(to?: T): T {\n    to ||= new (this.constructor as any)() as T;\n    to.set(...this.get());\n    const { blockLen, buffer, length, finished, destroyed, pos } = this;\n    to.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\n// copied from utils\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\n  if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n  if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\n// Other libraries would silently corrupt the data instead of throwing an error,\n// when they don't support it.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => void) {\n  let ts = Date.now();\n  for (let i = 0; i < iters; i++) {\n    cb(i);\n    // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n    const diff = Date.now() - ts;\n    if (diff >= 0 && diff < tick) continue;\n    await nextTick();\n    ts += diff;\n  }\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!isBytes(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\n    sum += a.length;\n  }\n  const res = new Uint8Array(sum);\n  for (let i = 0, pad = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n  xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n  xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\ndeclare const globalThis: Record<string, any> | undefined;\nexport const crypto =\n  typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  // pre-caching improves the speed 6x\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += hexes[bytes[i]];\n  }\n  return hex;\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 } as const;\nfunction asciiToBase16(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n  const array = new Uint8Array(al);\n  for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n    const n1 = asciiToBase16(hex.charCodeAt(hi));\n    const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n    if (n1 === undefined || n2 === undefined) {\n      const char = hex[hi] + hex[hi + 1];\n      throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n    }\n    array[ai] = n1 * 16 + n2;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!isBytes(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  let sum = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    if (!isBytes(a)) throw new Error('Uint8Array expected');\n    sum += a.length;\n  }\n  let res = new Uint8Array(sum);\n  let pad = 0;\n  for (let i = 0; i < arrays.length; i++) {\n    const a = arrays[i];\n    res.set(a, pad);\n    pad += a.length;\n  }\n  return res;\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\n    // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n    // since we always use positive integers here. It must always be empty:\n    // - add zero byte if exists\n    // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!ut.isBytes(data)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      if (this.is0()) {\n        // (0, 1, 0) aka ZERO is invalid in most contexts.\n        // In BLS, ZERO can be serialized, so we allow it.\n        // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n        if (CURVE.allowInfinityPoint && !Fp.is0(this.py)) return;\n        throw new Error('bad point: ZERO');\n      }\n      // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n      const { x, y } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(n);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.is0();\n      // If invZ was 0, we return zero point. However we still want to execute\n      // all operations, so we replace invZ with a random number, 1.\n      if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n      const ax = Fp.mul(x, iz);\n      const ay = Fp.mul(y, iz);\n      const zz = Fp.mul(z, iz);\n      if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || ut.isBytes(sg)) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends Hash<HMAC<T>> {\n  oHash: T;\n  iHash: T;\n  blockLen: number;\n  outputLen: number;\n  private finished = false;\n  private destroyed = false;\n\n  constructor(hash: CHash, _key: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_key);\n    this.iHash = hash.create() as T;\n    if (typeof this.iHash.update !== 'function')\n      throw new Error('Expected instance of class which extends utils.Hash');\n    this.blockLen = this.iHash.blockLen;\n    this.outputLen = this.iHash.outputLen;\n    const blockLen = this.blockLen;\n    const pad = new Uint8Array(blockLen);\n    // blockLen can be bigger than outputLen\n    pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n    this.iHash.update(pad);\n    // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n    this.oHash = hash.create() as T;\n    // Undo internal XOR && apply outer XOR\n    for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n    this.oHash.update(pad);\n    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\n    this.finished = true;\n    this.iHash.digestInto(out);\n    this.oHash.update(out);\n    this.oHash.digestInto(out);\n    this.destroy();\n  }\n  digest() {\n    const out = new Uint8Array(this.oHash.outputLen);\n    this.digestInto(out);\n    return out;\n  }\n  _cloneInto(to?: HMAC<T>): HMAC<T> {\n    // Create new instance without calling constructor since key already in state and we don't know it.\n    to ||= Object.create(Object.getPrototypeOf(this), {});\n    const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n    to = to as this;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    to.blockLen = blockLen;\n    to.outputLen = outputLen;\n    to.oHash = oHash._cloneInto(to.oHash);\n    to.iHash = iHash._cloneInto(to.iHash);\n    return to;\n  }\n  destroy() {\n    this.destroyed = true;\n    this.oHash.destroy();\n    this.iHash.destroy();\n  }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/**\n * Canonicalizes a given object according to RFC 8785 (https://tools.ietf.org/html/rfc8785),\n * which describes JSON Canonicalization Scheme (JCS). This function sorts the keys of the\n * object and its nested objects alphabetically and then returns a stringified version of it.\n * This method handles nested objects, array values, and null values appropriately.\n *\n * @param obj - The object to canonicalize.\n * @returns The stringified version of the input object with its keys sorted alphabetically\n * per RFC 8785.\n */\nexport function canonicalize(obj: { [key: string]: any }): string {\n  /**\n   * Recursively sorts the keys of an object.\n   *\n   * @param obj - The object whose keys are to be sorted.\n   * @returns A new object with sorted keys.\n   */\n  const sortObjKeys = (obj: { [key: string]: any }): { [key: string]: any } => {\n    if (obj !== null && typeof obj === 'object' && !Array.isArray(obj)) {\n      const sortedKeys = Object.keys(obj).sort();\n      const sortedObj: { [key: string]: any } = {};\n      for (const key of sortedKeys) {\n        // Recursively sort keys of nested objects.\n        sortedObj[key] = sortObjKeys(obj[key]);\n      }\n      return sortedObj;\n    }\n    return obj;\n  };\n\n  // Stringify and return the final sorted object.\n  const sortedObj = sortObjKeys(obj);\n  return JSON.stringify(sortedObj);\n}", "import { Convert, removeUndefinedProperties } from '@web5/common';\n\nimport { canonicalize } from './utils.js';\nimport { Sha256 } from '../primitives/sha256.js';\n\n/**\n * Constant defining the prefix for JSON Web Keys (JWK) key URIs in this library.\n *\n * The prefix 'urn:jwk:' makes it explicit that a string represents a JWK, referenced by a\n * {@link https://datatracker.ietf.org/doc/html/rfc3986 | URI} (Uniform Resource Identifier),\n * which ensures consistent key referencing across all Web5 Key Management System (KMS)\n * implementations.\n *\n * These key URIs take the form `urn:jwk:<JWK thumbprint>`, where the\n * {@link https://datatracker.ietf.org/doc/html/rfc7638 | JWK thumbprint}, derived from the JWK, is\n * unique to the key's material, unaffected by the order or optional properties in the JWK.\n */\nexport const KEY_URI_PREFIX_JWK = 'urn:jwk:';\n\n/**\n * JSON Web Key Operations\n *\n * The \"key_ops\" (key operations) parameter identifies the operation(s)\n * for which the key is intended to be used.  The \"key_ops\" parameter is\n * intended for use cases in which public, private, or symmetric keys\n * may be present.\n *\n * Its value is an array of key operation values.  Values defined by\n * {@link https://www.rfc-editor.org/rfc/rfc7517.html#section-4.3 | RFC 7517 Section 4.3} are:\n *\n * - \"decrypt\"    : Decrypt content and validate decryption, if applicable\n * - \"deriveBits\" : Derive bits not to be used as a key\n * - \"deriveKey\"  : Derive key\n * - \"encrypt\"    : Encrypt content\n * - \"sign\"       : Compute digital signature or MAC\n * - \"unwrapKey\"  : Decrypt key and validate decryption, if applicable\n * - \"verify\"     : Verify digital signature or MAC\n * - \"wrapKey\"    : Encrypt key\n *\n * Other values MAY be used.  The key operation values are case-\n * sensitive strings.  Duplicate key operation values MUST NOT be\n * present in the array.  Use of the \"key_ops\" member is OPTIONAL,\n * unless the application requires its presence.\n *\n * The \"use\" and \"key_ops\" JWK members SHOULD NOT be used together;\n * however, if both are used, the information they convey MUST be\n * consistent.  Applications should specify which of these members they\n * use, if either is to be used by the application.\n */\nexport type JwkOperation = 'encrypt' | 'decrypt' | 'sign' | 'verify' | 'deriveKey' | 'deriveBits' | 'wrapKey' | 'unwrapKey';\n\n/**\n * JSON Web Key Use\n *\n * The \"use\" (public key use) parameter identifies the intended use of\n * the public key.  The \"use\" parameter is employed to indicate whether\n * a public key is used for encrypting data or verifying the signature\n * on data.\n *\n * Values defined by {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4.2 | RFC 7517 Section 4.2} are:\n *\n * - \"sig\" (signature)\n * - \"enc\" (encryption)\n *\n * Other values MAY be used.  The \"use\" value is a case-sensitive\n * string.  Use of the \"use\" member is OPTIONAL, unless the application\n * requires its presence.\n *\n * The \"use\" and \"key_ops\" JWK members SHOULD NOT be used together;\n * however, if both are used, the information they convey MUST be\n * consistent.  Applications should specify which of these members they\n * use, if either is to be used by the application.\n *\n * When a key is used to wrap another key and a public key use\n * designation for the first key is desired, the \"enc\" (encryption) key\n * use value is used, since key wrapping is a kind of encryption.  The\n * \"enc\" value is also to be used for public keys used for key agreement\n * operations.\n */\nexport type JwkUse = 'sig' | 'enc' | string;\n\n/**\n * JSON Web Key Types\n */\nexport type JwkType =\n  /**\n   * Elliptic Curve\n   * Used with Elliptic Curve Digital Signature Algorithm (ECDSA) and Elliptic\n   * Curve Diffie-Hellman (ECDH), including secp256k1, P-256, P-384, and P-521.\n   */\n  | 'EC'\n  /**\n   * RSA\n   * Widely used for encryption and digital signatures. RSA keys are used in\n   * various algorithms like RS256, RS384, RS512, etc.\n   */\n  | 'RSA'\n  /**\n   * Octet sequence\n   * Used with symmetric signing (e.g., HMAC HS256, HS512, etc.) and\n   * symmetric encryption (e.g., A256CBC-HS512, A256GCM, etc.) algorithms.\n   */\n  | 'oct'\n  /**\n   * Octet string key pairs (OKP)\n   * A type of public key that is used with algorithms such as EdDSA (Ed25519 and\n   * Ed448 curves) and ECDH (X25519 and X448 curves).\n   */\n  | 'OKP'\n\n/**\n * JSON Web Key Elliptic Curve\n */\nexport type JwkNamedCurves =\n  // P-256 Curve\n  | 'P-256'\n  // P-384 Curve\n  | 'P-384'\n  // P-521 Curve\n  | 'P-521'\n  // Ed25519 signature algorithm key pairs\n  | 'Ed25519'\n  // Ed448 signature algorithm key pairs\n  | 'Ed448'\n  // X25519 function key pairs\n  | 'X25519'\n  // X448 function key pairs\n  | 'X448'\n  // SECG secp256k1 curve\n  | 'secp256k1';\n\n/**\n * JSON Web Key Parameters\n */\n\n/** Parameters used with any \"kty\" (key type) value. */\nexport type JwkParamsAnyKeyType = {\n  /** JWK Algorithm Parameter. The algorithm intended for use with the key. */\n  alg?: string;\n  /** JWK Extractable Parameter */\n  ext?: 'true' | 'false';\n  /** JWK Key Operations Parameter */\n  key_ops?: JwkOperation[];\n  /** JWK Key ID Parameter */\n  kid?: string;\n  /** JWK Key Type Parameter */\n  kty: JwkType;\n  /** JWK Public Key Use Parameter */\n  use?: JwkUse;\n  /** JWK X.509 Certificate Chain Parameter */\n  x5c?: string;\n  /** JWK X.509 Certificate SHA-1 Thumbprint Parameter */\n  x5t?: string;\n  /** JWK X.509 Certificate SHA-256 Thumbprint Parameter */\n  'x5t#S256'?: string;\n  /** JWK X.509 URL Parameter */\n  x5u?: string;\n}\n\n/** Parameters used with \"EC\" (elliptic curve) public keys. */\nexport type JwkParamsEcPublic = Omit<JwkParamsAnyKeyType, 'alg' | 'kty'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * ES256  : ECDSA using P-256 and SHA-256\n   * ES256K : ECDSA using secp256k1 curve and SHA-256\n   * ES384  : ECDSA using P-384 and SHA-384\n   * ES512  : ECDSA using P-521 and SHA-512\n   */\n  alg?: 'ES256' | 'ES256K' | 'ES384' | 'ES512';\n\n  /**\n   * Elliptic Curve key pair.\n   */\n  kty: 'EC';\n\n  /**\n   * The cryptographic curve used with the key.\n   * MUST be present for all EC public keys.\n   */\n  crv: 'secp256k1' | 'P-256' | 'P-384' | 'P-521';\n\n  /**\n   * The x-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC public keys\n   */\n  x: string;\n\n  /**\n   * The y-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present only for secp256k1 public keys.\n   */\n  y?: string;\n}\n\n/** Parameters used with \"EC\" (elliptic curve) private keys. */\nexport type JwkParamsEcPrivate = JwkParamsEcPublic & {\n  /**\n   * The d-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC private keys.\n   */\n  d: string;\n}\n\n/** Parameters used with \"OKP\" (octet key pair) public keys. */\nexport type JwkParamsOkpPublic =\n  Omit<JwkParamsAnyKeyType, 'kty' | 'alg' | 'crv'> &\n  Pick<JwkParamsEcPublic, 'x'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * EdDSA: Edwards Curve Digital Signature Algorithm\n   */\n  alg?: 'EdDSA';\n\n  /**\n   * The cryptographic curve used with the key.\n   * MUST be present for all OKP public keys.\n   */\n  crv: 'Ed25519' | 'Ed448' | 'X25519' | 'X448';\n\n  /**\n   * Key type\n   * OKP (Octet Key Pair) is defined for public key algorithms that use octet\n   * strings as private and public keys.\n   */\n  kty: 'OKP';\n}\n\n/** Parameters used with \"OKP\" (octet key pair) private keys. */\nexport type JwkParamsOkpPrivate = JwkParamsOkpPublic & {\n  /**\n   * The d-coordinate for the Edwards Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC private keys.\n   */\n  d: string;\n};\n\n/** Parameters used with \"oct\" (octet sequence) private keys. */\nexport type JwkParamsOctPrivate = Omit<JwkParamsAnyKeyType, 'alg' | 'kty'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * Used with symmetric signing (e.g., HMAC HS256, etc.) and\n   * symmetric encryption (e.g., A256GCM, etc.) algorithms.\n   */\n  alg?:\n    // AES CBC using 128-bit key\n    | 'A128CBC'\n    // AES CBC using 192-bit key\n    | 'A192CBC'\n    // AES CBC using 256-bit key\n    | 'A256CBC'\n    // AES CTR using 128-bit key\n    | 'A128CTR'\n    // AES CTR using 192-bit key\n    | 'A192CTR'\n    // AES CTR using 256-bit key\n    | 'A256CTR'\n    // AES GCM using a 128-bit key\n    | 'A128GCM'\n    // AES GCM using a 192-bit key\n    | 'A192GCM'\n    // AES GCM using a 256-bit key\n    | 'A256GCM'\n    // HMAC using SHA-256\n    | 'HS256'\n    // HMAC using SHA-384\n    | 'HS384'\n    // HMAC using SHA-512\n    | 'HS512'\n\n  /**\n   * The \"k\" (key value) parameter contains the value of the symmetric\n   * (or other single-valued) key.  It is represented as the base64url\n   * encoding of the octet sequence containing the key value.\n   */\n  k: string;\n\n  /**\n   * Key type\n   * oct (Octet Sequence) is defined for symmetric encryption and\n   * symmetric signature algorithms.\n   */\n  kty: 'oct';\n}\n\n/** Parameters Used with \"RSA\" public keys. */\nexport type JwkParamsRsaPublic = Omit<JwkParamsAnyKeyType, 'kty'> & {\n  /** Public exponent for RSA */\n  e: string;\n\n  /**\n   * Key type\n   * RSA is widely used for encryption and digital signatures.\n   */\n  kty: 'RSA';\n\n  /** Modulus for RSA */\n  n: string;\n};\n\n/** Parameters used with \"RSA\" private keys. */\nexport type JwkParamsRsaPrivate = JwkParamsRsaPublic & {\n  /** Private exponent for RSA */\n  d: string;\n  /** First prime factor for RSA */\n  p?: string;\n  /** Second prime factor for RSA */\n  q?: string;\n  /** First factor's CRT exponent for RSA */\n  dp?: string;\n  /** Second factor's CRT exponent for RSA */\n  dq?: string;\n  /** First CRT coefficient for RSA */\n  qi?: string;\n  /** Other primes information (optional in RFC 7518) */\n  oth?: {\n    /** Other primes' factor */\n    r: string;\n    /** Other primes' CRT exponent */\n    d: string;\n    /** Other primes' CRT coefficient */\n    t: string;\n  }[];\n};\n\n/** Parameters used with public keys in JWK format. */\nexport type PublicKeyJwk = JwkParamsEcPublic | JwkParamsOkpPublic | JwkParamsRsaPublic;\n\n/** Parameters used with private keys in JWK format. */\nexport type PrivateKeyJwk = JwkParamsEcPrivate | JwkParamsOkpPrivate | JwkParamsOctPrivate | JwkParamsRsaPrivate;\n\n/**\n * JSON Web Key ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK}).\n * \"RSA\", \"EC\", \"OKP\", and \"oct\" key types are supported.\n */\nexport interface Jwk {\n  // Common properties that apply to all key types.\n\n  /** JWK Algorithm Parameter. The algorithm intended for use with the key. */\n  alg?: string;\n  /** JWK Extractable Parameter */\n  ext?: 'true' | 'false';\n  /** JWK Key Operations Parameter */\n  key_ops?: JwkOperation[];\n  /** JWK Key ID Parameter */\n  kid?: string;\n  /** JWK Key Type Parameter */\n  kty: JwkType;\n  /** JWK Public Key Use Parameter */\n  use?: JwkUse;\n  /** JWK X.509 Certificate Chain Parameter */\n  x5c?: string;\n  /** JWK X.509 Certificate SHA-1 Thumbprint Parameter */\n  x5t?: string;\n  /** JWK X.509 Certificate SHA-256 Thumbprint Parameter */\n  'x5t#S256'?: string;\n  /** JWK X.509 URL Parameter */\n  x5u?: string;\n\n  // Elliptic Curve (EC or OKP) public key properties.\n\n  /** The cryptographic curve used with the key. */\n  crv?: string;\n  /** The x-coordinate for the Elliptic Curve point. */\n  x?: string;\n  /** The y-coordinate for the Elliptic Curve point. */\n  y?: string;\n\n  // Symmetric key properties.\n\n  /** The \"k\" (key value) parameter contains the value of the symmetric (or other single-valued) key. */\n  k?: string;\n\n  // RSA public key properties.\n\n  /** Public exponent for RSA */\n  e?: string;\n  /** Modulus for RSA */\n  n?: string;\n  /** First prime factor for RSA */\n  p?: string;\n  /** Second prime factor for RSA */\n  q?: string;\n  /** First factor's CRT exponent for RSA */\n  dp?: string;\n  /** Second factor's CRT exponent for RSA */\n  dq?: string;\n  /** First CRT coefficient for RSA */\n  qi?: string;\n  /** Other primes information (optional in RFC 7518) */\n  oth?: {\n    /** Other primes' factor */\n    r: string;\n    /** Other primes' CRT exponent */\n    d: string;\n    /** Other primes' CRT coefficient */\n    t: string;\n  }[];\n\n  // Elliptic Curve and RSA private key properties.\n\n  /** Private key component for EC, OKP, or RSA keys. */\n  d?: string;\n\n  // Additional public or private properties.\n  [key: string]: unknown;\n}\n\n/**\n * JSON Web Key Set ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK Set})\n *\n * @remarks\n * A JWK Set is a JSON object that represents a set of JWKs. The JSON object MUST have a \"keys\"\n * member, with its value being an array of JWKs.\n *\n * Additional members can be present in the JWK Set but member names MUST be unique. If not\n * understood by implementations encountering them, they MUST be ignored. Parameters for\n * representing additional properties of JWK Sets should either be registered in the IANA\n * \"JSON Web Key Set Parameters\" registry or be a value that contains a Collision-Resistant Name.\n */\nexport interface JwkSet {\n  /** Array of JWKs */\n  keys: Jwk[]\n}\n\n/**\n * Computes the thumbprint of a JSON Web Key (JWK) using the method\n * specified in RFC 7638. This function accepts RSA, EC, OKP, and oct keys\n * and returns the thumbprint as a base64url encoded SHA-256 hash of the\n * JWK's required members, serialized and sorted lexicographically.\n *\n * Purpose:\n * - Uniquely Identifying Keys: The thumbprint allows the unique\n *   identification of a specific JWK within a set of JWKs. It provides a\n *   deterministic way to generate a value that can be used as a key\n *   identifier (kid) or to match a specific key.\n *\n * - Simplifying Key Management: In systems where multiple keys are used,\n *   managing and identifying individual keys can become complex. The\n *   thumbprint method simplifies this by creating a standardized, unique\n *   identifier for each key.\n *\n * - Enabling Interoperability: By standardizing the method to compute a\n *   thumbprint, different systems can compute the same thumbprint value for\n *   a given JWK. This enables interoperability among systems that use JWKs.\n *\n * - Secure Comparison: The thumbprint provides a way to securely compare\n *   JWKs to determine if they are equivalent.\n *\n * @example\n * ```ts\n * const jwk: PublicKeyJwk = {\n *   'kty': 'EC',\n *   'crv': 'secp256k1',\n *   'x': '61iPYuGefxotzBdQZtDvv6cWHZmXrTTscY-u7Y2pFZc',\n *   'y': '88nPCVLfrAY9i-wg5ORcwVbHWC_tbeAd1JE2e0co0lU'\n * };\n *\n * const thumbprint = jwkThumbprint(jwk);\n * console.log(`JWK thumbprint: ${thumbprint}`);\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7638 | RFC7638} for\n * the specification of JWK thumbprint computation.\n *\n * @param jwk - The JSON Web Key for which the thumbprint will be computed.\n *              This must be an RSA, EC, OKP, or oct key.\n * @returns The thumbprint as a base64url encoded string.\n * @throws Throws an `Error` if the provided key type is unsupported.\n */\nexport async function computeJwkThumbprint({ jwk }: {\n  jwk: Jwk\n}): Promise<string> {\n  /** Step 1 - Normalization: The JWK is normalized to include only specific\n   * members and in lexicographic order.\n   */\n  const keyType = jwk.kty;\n  let normalizedJwk: Jwk;\n  if (keyType === 'EC') {\n    normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n  } else if (keyType === 'oct') {\n    normalizedJwk = { k: jwk.k, kty: jwk.kty };\n  } else if (keyType === 'OKP') {\n    normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n  } else if (keyType === 'RSA') {\n    normalizedJwk = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n  } else {\n    throw new Error(`Unsupported key type: ${keyType}`);\n  }\n  removeUndefinedProperties(normalizedJwk);\n\n  /** Step 2 - Serialization: The normalized JWK is serialized to a UTF-8\n   * representation of its JSON encoding. */\n  const serializedJwk = canonicalize(normalizedJwk);\n\n  /** Step 3 - Digest Calculation: A cryptographic hash function\n   * (SHA-256 is recommended) is applied to the serialized JWK,\n   * resulting in the thumbprint. */\n  const utf8Bytes = Convert.string(serializedJwk).toUint8Array();\n  const digest = await Sha256.digest({ data: utf8Bytes });\n\n  // Encode as Base64Url.\n  const thumbprint = Convert.uint8Array(digest).toBase64Url();\n\n  return thumbprint;\n}\n\n/**\n * Checks if the provided object is a valid elliptic curve private key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid EC private JWK; otherwise, false.\n */\nexport function isEcPrivateJwk(obj: unknown): obj is JwkParamsEcPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj && 'd' in obj)) return false;\n  if (obj.kty !== 'EC') return false;\n  if (typeof obj.d !== 'string') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid elliptic curve public key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid EC public JWK; otherwise, false.\n */\nexport function isEcPublicJwk(obj: unknown): obj is JwkParamsEcPublic {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj)) return false;\n  if ('d' in obj) return false;\n  if (obj.kty !== 'EC') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet sequence (symmetric key) in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid oct private JWK; otherwise, false.\n */\nexport function isOctPrivateJwk(obj: unknown): obj is JwkParamsOctPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'k' in obj)) return false;\n  if (obj.kty !== 'oct') return false;\n  if (typeof obj.k !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet key pair private key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid OKP private JWK; otherwise, false.\n */\nexport function isOkpPrivateJwk(obj: unknown): obj is JwkParamsOkpPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj && 'd' in obj)) return false;\n  if (obj.kty !== 'OKP') return false;\n  if (typeof obj.d !== 'string') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet key pair public key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid OKP public JWK; otherwise, false.\n */\nexport function isOkpPublicJwk(obj: unknown): obj is JwkParamsOkpPublic {\n  if (!obj || typeof obj !== 'object') return false;\n  if ('d' in obj) return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj)) return false;\n  if (obj.kty !== 'OKP') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid private key in JWK format of any supported type.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid private JWK; otherwise, false.\n */\nexport function isPrivateJwk(obj: unknown): obj is PrivateKeyJwk {\n  if (!obj || typeof obj !== 'object') return false;\n\n  const kty = (obj as { kty: string }).kty;\n\n  switch (kty) {\n    case 'EC':\n    case 'OKP':\n    case 'RSA':\n      return 'd' in obj;\n    case 'oct':\n      return 'k' in obj;\n    default:\n      return false;\n  }\n}\n\n/**\n * Checks if the provided object is a valid public key in JWK format of any supported type.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid public JWK; otherwise, false.\n */\nexport function isPublicJwk(obj: unknown): obj is PublicKeyJwk {\n  if (!obj || typeof obj !== 'object') return false;\n\n  const kty = (obj as { kty: string }).kty;\n\n  switch (kty) {\n    case 'EC':\n    case 'OKP':\n      return 'x' in obj && !('d' in obj);\n    case 'RSA':\n      return 'n' in obj && 'e' in obj && !('d' in obj);\n    default:\n      return false;\n  }\n}", "import type { AffinePoint } from '@noble/curves/abstract/weierstrass';\n\nimport { Convert } from '@web5/common';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Secp256k1` class provides a comprehensive suite of utilities for working with\n * the secp256k1 elliptic curve, commonly used in blockchain and cryptographic applications.\n * This class includes methods for key generation, conversion, signing, verification, and\n * Elliptic Curve Diffie-Hellman (ECDH) key agreement.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH.\n *\n * Key Features:\n * - Key Generation: Generate secp256k1 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n * - ECDSA Signing and Verification: Sign data and verify signatures with secp256k1 keys.\n * - Key Validation: Validate the mathematical correctness of secp256k1 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Secp256k1.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Secp256k1.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Secp256k1.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await Secp256k1.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // ECDSA Signing\n * const signature = await Secp256k1.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // ECDSA Signature Verification\n * const isValid = await Secp256k1.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey });\n * const compressedPublicKey = await Secp256k1.compressPublicKey({ publicKeyBytes });\n * const uncompressedPublicKey = await Secp256k1.decompressPublicKey({ publicKeyBytes });\n *\n * // Key Validation\n * const isPrivateKeyValid = await Secp256k1.validatePrivateKey({ privateKeyBytes });\n * const isPublicKeyValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Secp256k1 {\n  /**\n   * Adjusts an ECDSA signature to a normalized, low-S form.\n   *\n   * @remarks\n   * All ECDSA signatures, regardless of the curve, consist of two components, `r` and `s`, both of\n   * which are integers. The curve's order (the total number of points on the curve) is denoted by\n   * `n`. In a valid ECDSA signature, both `r` and `s` must be in the range [1, n-1]. However, due\n   * to the mathematical properties of ECDSA, if `(r, s)` is a valid signature, then `(r, n - s)` is\n   * also a valid signature for the same message and public key. In other words, for every\n   * signature, there's a \"mirror\" signature that's equally valid. For these elliptic curves:\n   *\n   * - Low S Signature: A signature where the `s` component is in the lower half of the range,\n   *                    specifically less than or equal to `n/2`.\n   *\n   * - High S Signature: This is where the `s` component is in the upper half of the range, greater\n   *                     than `n/2`.\n   *\n   * The practical implication is that a third-party can forge a second valid signature for the same\n   * message by negating the `s` component of the original signature, without any knowledge of the\n   * private key. This is known as a \"signature malleability\" attack.\n   *\n   * This type of forgery is not a problem in all systems, but it can be an issue in systems that\n   * rely on digital signature uniqueness to ensure transaction integrity. For example, in Bitcoin,\n   * transaction malleability is an issue because it allows for the modification of transaction\n   * identifiers (and potentially, transactions themselves) after they're signed but before they're\n   * confirmed in a block. By enforcing low `s` values, the Bitcoin network reduces the likelihood of\n   * this occurring, making the system more secure and predictable.\n   *\n   * For this reason, it's common practice to normalize ECDSA signatures to a low-S form. This\n   * form is considered standard and preferable in some systems and is known as the \"normalized\"\n   * form of the signature.\n   *\n   * This method takes a signature, and if it's high-S, returns the normalized low-S form. If the\n   * signature is already low-S, it's returned unmodified. It's important to note that this\n   * method does not change the validity of the signature but makes it compliant with systems that\n   * enforce low-S signatures.\n   *\n   * @example\n   * ```ts\n   * const signature = new Uint8Array([...]); // Your ECDSA signature\n   * const adjustedSignature = await Secp256k1.adjustSignatureToLowS({ signature });\n   * // Now 'adjustedSignature' is in the low-S form.\n   * ```\n   *\n   * @param params - The parameters for the signature adjustment.\n   * @param params.signature - The ECDSA signature as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the adjusted signature in low-S form as a `Uint8Array`.\n   */\n  public static async adjustSignatureToLowS({ signature }: {\n    signature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the signature to a `secp256k1.Signature` object.\n    const signatureObject = secp256k1.Signature.fromCompact(signature);\n\n    if (signatureObject.hasHighS()) {\n      // Adjust the signature to low-S format if it's high-S.\n      const adjustedSignatureObject = signatureObject.normalizeS();\n\n      // Convert the adjusted signature object back to a byte array.\n      const adjustedSignature = adjustedSignatureObject.toCompactRawBytes();\n\n      return adjustedSignature;\n\n    } else {\n      // Return the unmodified signature if it is already in low-S format.\n      return signature;\n    }\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a private key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object. The conversion involves extracting the\n   * elliptic curve point (x and y coordinates) from the private key and encoding\n   * them into base64url format, alongside other JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Secp256k1.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key in a byte array (Uint8Array) format and\n   * transforms it to a JWK object. It involves decoding the elliptic curve point\n   * (x and y coordinates) from the raw public key bytes and encoding them into\n   * base64url format, along with setting appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await Secp256k1.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided public key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: publicKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a public key to its compressed form.\n   *\n   * @remarks\n   * This method takes a public key represented as a byte array and compresses it. Public key\n   * compression is a process that reduces the size of the public key by removing the y-coordinate,\n   * making it more efficient for storage and transmission. The compressed key retains the same\n   * level of security as the uncompressed key.\n   *\n   * @example\n   * ```ts\n   * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes\n   * const compressedPublicKey = await Secp256k1.compressPublicKey({\n   *   publicKeyBytes: uncompressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key compression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the compressed public key as a Uint8Array.\n   */\n  public static async compressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the compressed form of the public key.\n    return point.toRawBytes(true);\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The derivation process involves converting the private key to a raw\n   * byte array, then computing the elliptic curve point (x and y coordinates) from this private\n   * key. These coordinates are then encoded into base64url format to construct the public key in\n   * JWK format.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the secp256k1 elliptic curve standards. This method is useful in cryptographic\n   * operations where a public key is needed for operations like signature verification, but only\n   * the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const publicKey = await Secp256k1.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Secp256k1.privateKeyToBytes({ privateKey: key });\n\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an ASN.1 DER encoded ECDSA signature to a compact R+S format.\n   *\n   * @remarks\n   * This method is used for converting an ECDSA signature from the ASN.1 DER encoding to the more\n   * compact R+S format. This conversion is often required when dealing with ECDSA signatures in\n   * certain cryptographic standards such as JWS (JSON Web Signature).\n   *\n   * The method decodes the DER-encoded signature, extracts the R and S values, and concatenates\n   * them into a single byte array. This process involves handling the ASN.1 structure to correctly\n   * parse the R and S values, considering padding and integer encoding specifics of DER.\n   *\n   * @example\n   * ```ts\n   * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature\n   * const signature = await Secp256k1.convertDerToCompactSignature({ derSignature });\n   * ```\n   *\n   * @param params - The parameters for the signature conversion.\n   * @param params.derSignature - The signature in ASN.1 DER format as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the signature in compact R+S format as a `Uint8Array`.\n   */\n  public static async convertDerToCompactSignature({ derSignature }: {\n    derSignature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the DER-encoded signature into a `secp256k1.Signature` object.\n    // This involves parsing the ASN.1 DER structure to extract the R and S components.\n    const signatureObject = secp256k1.Signature.fromDER(derSignature);\n\n    // Convert the signature object into compact R+S format, which concatenates the R and S values\n    // into a single byte array.\n    const compactSignature = signatureObject.toCompactRawBytes();\n\n    return  compactSignature;\n  }\n\n  /**\n   * Converts a public key to its uncompressed form.\n   *\n   * @remarks\n   * This method takes a compressed public key represented as a byte array and decompresses it.\n   * Public key decompression involves reconstructing the y-coordinate from the x-coordinate,\n   * resulting in the full public key. This method is used when the uncompressed key format is\n   * required for certain cryptographic operations or interoperability.\n   *\n   * @example\n   * ```ts\n   * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes\n   * const decompressedPublicKey = await Secp256k1.decompressPublicKey({\n   *   publicKeyBytes: compressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key decompression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the uncompressed public key as a Uint8Array.\n   */\n  public static async decompressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the uncompressed form of the public key.\n    return point.toRawBytes(false);\n  }\n\n  /**\n   * Generates a secp256k1 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the secp256k1\n   * elliptic curve. The key is generated using cryptographically secure random\n   * number generation to ensure its uniqueness and security. The resulting\n   * private key adheres to the JWK format, specifically tailored for secp256k1,\n   * making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The private key generated by this method includes the following components:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, derived from the private key, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, derived from the private key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in signin and key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Secp256k1.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = secp256k1.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Secp256k1.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from a secp256k1 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const publicKey = await Secp256k1.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    // Verify the provided JWK represents an elliptic curve (EC) secp256k1 private key.\n    if (!(isEcPrivateJwk(key) && key.crv === 'secp256k1')) {\n      throw new Error(`Secp256k1: The provided key is not a secp256k1 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a private key in JWK format and extracts its raw byte representation.\n   * It specifically focuses on the 'd' parameter of the JWK, which represents the private\n   * key component in base64url encoding. The method decodes this value into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC secp256k1 private key.\n    if (!isEcPrivateJwk(privateKey)) {\n      throw new Error(`Secp256k1: The provided key is not a valid EC private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'x' and 'y' parameters of the JWK\n   * (which represent the x and y coordinates of the elliptic curve point, respectively)\n   * from base64url format into a byte array. The method then concatenates these values,\n   * along with a prefix indicating the key format, to form the full public key.\n   *\n   * This function is particularly useful for use cases where the public key is needed\n   * in its raw byte format, such as for certain cryptographic operations or when\n   * interfacing with systems that require raw key formats.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // A Jwk public key object\n   * const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC secp256k1 public key, which must have a 'y' value.\n    if (!(isEcPublicJwk(publicKey) && publicKey.y)) {\n      throw new Error(`Secp256k1: The provided key is not a valid EC public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n    const x = Convert.base64Url(publicKey.x).toUint8Array();\n    const y = Convert.base64Url(publicKey.y).toUint8Array();\n\n    // Concatenate the prefix, x-coordinate, and y-coordinate as a single byte array.\n    const publicKeyBytes = new Uint8Array([...prefix, ...x, ...y]);\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256k1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk private key object for party A\n   * const publicKeyB = { ... }; // A Jwk public key object for party B\n   * const sharedSecret = await Secp256k1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`Secp256k1: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await Secp256k1.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await Secp256k1.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the compact representation shared secret between the public and private keys.\n    const sharedSecret = secp256k1.getSharedSecret(privateKeyABytes, publicKeyBBytes, true);\n\n    // Remove the leading byte that indicates the sign of the y-coordinate\n    // of the point on the elliptic curve.  See note above.\n    return sharedSecret.slice(1);\n  }\n\n  /**\n   * Generates an RFC6979-compliant ECDSA signature of given data using a secp256k1 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the ECDSA\n   * (Elliptic Curve Digital Signature Algorithm) signature algorithm, as defined in RFC6979.\n   * The data to be signed is first hashed using the SHA-256 algorithm, and this hash is then\n   * signed using the private key. The output is a digital signature in the form of a\n   * Uint8Array, which uniquely corresponds to both the data and the private key used for signing.\n   *\n   * This method is commonly used in cryptographic applications to ensure data integrity and\n   * authenticity. The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const signature = await Secp256k1.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ data, key }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    // Sign the provided data using the ECDSA algorithm.\n    // The `secp256k1.sign` operation returns a signature object with { r, s, recovery } properties.\n    const signatureObject = secp256k1.sign(digest, privateKeyBytes);\n\n    // Convert the signature object to Uint8Array.\n    const signature = signatureObject.toCompactRawBytes();\n\n    return signature;\n  }\n\n  /**\n   * Validates a given private key to ensure its compliance with the secp256k1 curve standards.\n   *\n   * @remarks\n   * This method checks whether a provided private key is a valid 32-byte number and falls within\n   * the range defined by the secp256k1 curve's order. It is essential for ensuring the private\n   * key's mathematical correctness in the context of secp256k1-based cryptographic operations.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key\n   * const isValid = await Secp256k1.validatePrivateKey({ privateKeyBytes });\n   * console.log(isValid); // true or false based on the key's validity\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.privateKeyBytes - The private key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the private key is valid.\n   */\n  public static async validatePrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    return secp256k1.utils.isValidPrivateKey(privateKeyBytes);\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the secp256k1 curve.\n   *\n   * @remarks\n   * This method checks if the provided public key represents a valid point on the secp256k1 curve.\n   * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity\n   * against the curve's parameters. A valid point must lie on the curve and meet specific\n   * mathematical criteria defined by the curve's equation.\n   *\n   * It's important to note that this method does not verify the key's ownership or whether it has\n   * been compromised; it solely focuses on the key's adherence to the curve's mathematical\n   * principles.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the secp256k1 curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating the public key's validity on\n   *          the secp256k1 curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n      // Decode Weierstrass points from key bytes.\n      const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Short Weierstrass curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC6979-compliant ECDSA signature against given data and a secp256k1 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure that it was generated by the holder of the\n   * corresponding private key and that the signed data has not been altered. The signature\n   * verification is performed using the ECDSA (Elliptic Curve Digital Signature Algorithm) as\n   * specified in RFC6979. The data to be verified is first hashed using the SHA-256 algorithm, and\n   * this hash is then used along with the public key to verify the signature.\n   *\n   * The method returns a boolean value indicating whether the signature is valid. A valid signature\n   * proves that the signed data was indeed signed by the owner of the private key corresponding to\n   * the provided public key and that the data has not been tampered with since it was signed.\n   *\n   * Note: The verification process does not consider the malleability of low-s signatures, which\n   * may be relevant in certain contexts, such as Bitcoin transactions.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isSignatureValid = await Secp256k1.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * console.log(isSignatureValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key used for verification, represented in JWK format.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    /** Perform the verification of the signature.\n     * This verify operation has the malleability check disabled. Guaranteed support\n     * for low-s signatures across languages is unlikely especially in the context\n     * of SSI. Notable Cloud KMS providers do not natively support it either. It is\n     * also worth noting that low-s signatures are a requirement for Bitcoin. */\n    const isValid = secp256k1.verify(signature, digest, publicKeyBytes, { lowS: false });\n\n    return isValid;\n  }\n\n  /**\n   * Returns the elliptic curve point (x and y coordinates) for a given secp256k1 key.\n   *\n   * @remarks\n   * This method extracts the elliptic curve point from a given secp256k1 key, whether\n   * it's a private or a public key. For a private key, the method first computes the\n   * corresponding public key and then extracts the x and y coordinates. For a public key,\n   * it directly returns these coordinates. The coordinates are represented as Uint8Array.\n   *\n   * The x and y coordinates represent the key's position on the elliptic curve and can be\n   * used in various cryptographic operations, such as digital signatures or key agreement\n   * protocols.\n   *\n   * @example\n   * ```ts\n   * // For a private key\n   * const privateKey = new Uint8Array([...]); // A 32-byte private key\n   * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256k1.getCurvePoint({ keyBytes: privateKey });\n   *\n   * // For a public key\n   * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key\n   * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256k1.getCurvePoint({ keyBytes: publicKey });\n   * ```\n   *\n   * @param params - The parameters for the curve point decoding operation.\n   * @param params.keyBytes - The key for which to get the elliptic curve point.\n   *                          Can be either a private key or a public key.\n   *                          The key should be passed as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to an object with properties 'x' and 'y',\n   *          each being a Uint8Array representing the x and y coordinates of the key point on the\n   *          elliptic curve.\n   */\n  private static async getCurvePoint({ keyBytes }: {\n    keyBytes: Uint8Array;\n  }): Promise<AffinePoint<Uint8Array>> {\n    // If key is a private key, first compute the public key.\n    if (keyBytes.byteLength === 32) {\n      keyBytes = secp256k1.getPublicKey(keyBytes);\n    }\n\n    // Decode Weierstrass affine point from key bytes.\n    const point = secp256k1.ProjectivePoint.fromHex(keyBytes);\n\n    // Get x- and y-coordinate values and convert to Uint8Array.\n    const x = numberToBytesBE(point.x, 32);\n    const y = numberToBytesBE(point.y, 32);\n\n    return { x, y };\n  }\n}", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { createCurve } from './_shortw_utils.js';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { Field } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport { createHasher } from './abstract/hash-to-curve.js';\n\n// NIST secp256r1 aka p256\n// https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-256\n\nconst Fp = Field(BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'));\nconst CURVE_A = Fp.create(BigInt('-3'));\nconst CURVE_B = BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b');\n\n// prettier-ignore\nexport const p256 = createCurve({\n  a: CURVE_A, // Equation params: a, b\n  b: CURVE_B,\n  Fp, // Field: 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n\n  // Curve order, total count of valid points in the field\n  n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n  // Base (generator) point (x, y)\n  Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n  Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n  h: BigInt(1),\n  lowS: false,\n} as const, sha256);\nexport const secp256r1 = p256;\n\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: CURVE_A,\n    B: CURVE_B,\n    Z: Fp.create(BigInt('-10')),\n  }))();\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(secp256r1.ProjectivePoint, (scalars: bigint[]) => mapSWU(scalars[0]), {\n    DST: 'P256_XMD:SHA-256_SSWU_RO_',\n    encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n    p: Fp.ORDER,\n    m: 1,\n    k: 128,\n    expand: 'xmd',\n    hash: sha256,\n  }))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "import type { AffinePoint } from '@noble/curves/abstract/weierstrass';\n\nimport { Convert } from '@web5/common';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256r1 } from '@noble/curves/p256';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Secp256r1` class provides a comprehensive suite of utilities for working with\n * the secp256r1 (aka P-256) elliptic curve, commonly used in blockchain and cryptographic\n * applications. This class includes methods for key generation, conversion, signing, verification,\n * and Elliptic Curve Diffie-Hellman (ECDH) key agreement.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH.\n *\n * Key Features:\n * - Key Generation: Generate secp256r1 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n * - ECDSA Signing and Verification: Sign data and verify signatures with secp256r1 keys.\n * - Key Validation: Validate the mathematical correctness of secp256r1 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Secp256r1.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Secp256r1.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Secp256r1.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await Secp256r1.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // ECDSA Signing\n * const signature = await Secp256r1.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // ECDSA Signature Verification\n * const isValid = await Secp256r1.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey });\n * const compressedPublicKey = await Secp256r1.compressPublicKey({ publicKeyBytes });\n * const uncompressedPublicKey = await Secp256r1.decompressPublicKey({ publicKeyBytes });\n *\n * // Key Validation\n * const isPrivateKeyValid = await Secp256r1.validatePrivateKey({ privateKeyBytes });\n * const isPublicKeyValid = await Secp256r1.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Secp256r1 {\n/**\n   * Adjusts an ECDSA signature to a normalized, low-S form.\n   *\n   * @remarks\n   * All ECDSA signatures, regardless of the curve, consist of two components, `r` and `s`, both of\n   * which are integers. The curve's order (the total number of points on the curve) is denoted by\n   * `n`. In a valid ECDSA signature, both `r` and `s` must be in the range [1, n-1]. However, due\n   * to the mathematical properties of ECDSA, if `(r, s)` is a valid signature, then `(r, n - s)` is\n   * also a valid signature for the same message and public key. In other words, for every\n   * signature, there's a \"mirror\" signature that's equally valid. For these elliptic curves:\n   *\n   * - Low S Signature: A signature where the `s` component is in the lower half of the range,\n   *                    specifically less than or equal to `n/2`.\n   *\n   * - High S Signature: This is where the `s` component is in the upper half of the range, greater\n   *                     than `n/2`.\n   *\n   * The practical implication is that a third-party can forge a second valid signature for the same\n   * message by negating the `s` component of the original signature, without any knowledge of the\n   * private key. This is known as a \"signature malleability\" attack.\n   *\n   * This type of forgery is not a problem in all systems, but it can be an issue in systems that\n   * rely on digital signature uniqueness to ensure transaction integrity. For example, in Bitcoin,\n   * transaction malleability is an issue because it allows for the modification of transaction\n   * identifiers (and potentially, transactions themselves) after they're signed but before they're\n   * confirmed in a block. By enforcing low `s` values, the Bitcoin network reduces the likelihood of\n   * this occurring, making the system more secure and predictable.\n   *\n   * For this reason, it's common practice to normalize ECDSA signatures to a low-S form. This\n   * form is considered standard and preferable in some systems and is known as the \"normalized\"\n   * form of the signature.\n   *\n   * This method takes a signature, and if it's high-S, returns the normalized low-S form. If the\n   * signature is already low-S, it's returned unmodified. It's important to note that this\n   * method does not change the validity of the signature but makes it compliant with systems that\n   * enforce low-S signatures.\n   *\n   * @example\n   * ```ts\n   * const signature = new Uint8Array([...]); // Your ECDSA signature\n   * const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature });\n   * // Now 'adjustedSignature' is in the low-S form.\n   * ```\n   *\n   * @param params - The parameters for the signature adjustment.\n   * @param params.signature - The ECDSA signature as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the adjusted signature in low-S form as a `Uint8Array`.\n   */\n  public static async adjustSignatureToLowS({ signature }: {\n    signature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the signature to a `Secp256r1.Signature` object.\n    const signatureObject = secp256r1.Signature.fromCompact(signature);\n\n    if (signatureObject.hasHighS()) {\n      // Adjust the signature to low-S format if it's high-S.\n      const adjustedSignatureObject = signatureObject.normalizeS();\n\n      // Convert the adjusted signature object back to a byte array.\n      const adjustedSignature = adjustedSignatureObject.toCompactRawBytes();\n\n      return adjustedSignature;\n\n    } else {\n      // Return the unmodified signature if it is already in low-S format.\n      return signature;\n    }\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a private key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object. The conversion involves extracting the\n   * elliptic curve point (x and y coordinates) from the private key and encoding\n   * them into base64url format, alongside other JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve points (x and y coordinates) for the provided private key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key in a byte array (Uint8Array) format and\n   * transforms it to a JWK object. It involves decoding the elliptic curve point\n   * (x and y coordinates) from the raw public key bytes and encoding them into\n   * base64url format, along with setting appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided public key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: publicKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a public key to its compressed form.\n   *\n   * @remarks\n   * This method takes a public key represented as a byte array and compresses it. Public key\n   * compression is a process that reduces the size of the public key by removing the y-coordinate,\n   * making it more efficient for storage and transmission. The compressed key retains the same\n   * level of security as the uncompressed key.\n   *\n   * @example\n   * ```ts\n   * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes\n   * const compressedPublicKey = await Secp256r1.compressPublicKey({\n   *   publicKeyBytes: uncompressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key compression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the compressed public key as a Uint8Array.\n   */\n  public static async compressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the compressed form of the public key.\n    return point.toRawBytes(true);\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The derivation process involves converting the private key to a raw\n   * byte array, then computing the elliptic curve point (x and y coordinates) from this private\n   * key. These coordinates are then encoded into base64url format to construct the public key in\n   * JWK format.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the secp256r1 elliptic curve standards. This method is useful in cryptographic\n   * operations where a public key is needed for operations like signature verification, but only\n   * the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const publicKey = await Secp256r1.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Secp256r1.privateKeyToBytes({ privateKey: key });\n\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an ASN.1 DER encoded ECDSA signature to a compact R+S format.\n   *\n   * @remarks\n   * This method is used for converting an ECDSA signature from the ASN.1 DER encoding to the more\n   * compact R+S format. This conversion is often required when dealing with ECDSA signatures in\n   * certain cryptographic standards such as JWS (JSON Web Signature).\n   *\n   * The method decodes the DER-encoded signature, extracts the R and S values, and concatenates\n   * them into a single byte array. This process involves handling the ASN.1 structure to correctly\n   * parse the R and S values, considering padding and integer encoding specifics of DER.\n   *\n   * @example\n   * ```ts\n   * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature\n   * const signature = await Secp256r1.convertDerToCompactSignature({ derSignature });\n   * ```\n   *\n   * @param params - The parameters for the signature conversion.\n   * @param params.derSignature - The signature in ASN.1 DER format as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the signature in compact R+S format as a `Uint8Array`.\n   */\n  public static async convertDerToCompactSignature({ derSignature }: {\n    derSignature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the DER-encoded signature into a `Secp256r1.Signature` object.\n    // This involves parsing the ASN.1 DER structure to extract the R and S components.\n    const signatureObject = secp256r1.Signature.fromDER(derSignature);\n\n    // Convert the signature object into compact R+S format, which concatenates the R and S values\n    // into a single byte array.\n    const compactSignature = signatureObject.toCompactRawBytes();\n\n    return  compactSignature;\n  }\n\n  /**\n   * Converts a public key to its uncompressed form.\n   *\n   * @remarks\n   * This method takes a compressed public key represented as a byte array and decompresses it.\n   * Public key decompression involves reconstructing the y-coordinate from the x-coordinate,\n   * resulting in the full public key. This method is used when the uncompressed key format is\n   * required for certain cryptographic operations or interoperability.\n   *\n   * @example\n   * ```ts\n   * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes\n   * const decompressedPublicKey = await Secp256r1.decompressPublicKey({\n   *   publicKeyBytes: compressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key decompression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the uncompressed public key as a Uint8Array.\n   */\n  public static async decompressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the uncompressed form of the public key.\n    return point.toRawBytes(false);\n  }\n\n  /**\n   * Generates a secp256r1 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the secp256r1\n   * elliptic curve. The key is generated using cryptographically secure random\n   * number generation to ensure its uniqueness and security. The resulting\n   * private key adheres to the JWK format, specifically tailored for secp256r1,\n   * making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The private key generated by this method includes the following components:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, derived from the private key, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, derived from the private key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in signin and key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Secp256r1.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = secp256r1.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from a secp256r1 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const publicKey = await Secp256r1.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    // Verify the provided JWK represents an elliptic curve (EC) secp256r1 private key.\n    if (!(isEcPrivateJwk(key) && key.crv === 'P-256')) {\n      throw new Error(`Secp256r1: The provided key is not a 'P-256' private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a private key in JWK format and extracts its raw byte representation.\n   * It specifically focuses on the 'd' parameter of the JWK, which represents the private\n   * key component in base64url encoding. The method decodes this value into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC P-256 private key.\n    if (!isEcPrivateJwk(privateKey)) {\n      throw new Error(`Secp256r1: The provided key is not a valid EC private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'x' and 'y' parameters of the JWK\n   * (which represent the x and y coordinates of the elliptic curve point, respectively)\n   * from base64url format into a byte array. The method then concatenates these values,\n   * along with a prefix indicating the key format, to form the full public key.\n   *\n   * This function is particularly useful for use cases where the public key is needed\n   * in its raw byte format, such as for certain cryptographic operations or when\n   * interfacing with systems that require raw key formats.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // A Jwk public key object\n   * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC P-256 public key, which must have a 'y' value.\n    if (!(isEcPublicJwk(publicKey) && publicKey.y)) {\n      throw new Error(`Secp256r1: The provided key is not a valid EC public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n    const x = Convert.base64Url(publicKey.x).toUint8Array();\n    const y = Convert.base64Url(publicKey.y).toUint8Array();\n\n    // Concatenate the prefix, x-coordinate, and y-coordinate as a single byte array.\n    const publicKeyBytes = new Uint8Array([...prefix, ...x, ...y]);\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256r1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256r1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk private key object for party A\n   * const publicKeyB = { ... }; // A Jwk public key object for party B\n   * const sharedSecret = await Secp256r1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`Secp256r1: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await Secp256r1.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await Secp256r1.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the compact representation shared secret between the public and private keys.\n    const sharedSecret = secp256r1.getSharedSecret(privateKeyABytes, publicKeyBBytes, true);\n\n    // Remove the leading byte that indicates the sign of the y-coordinate\n    // of the point on the elliptic curve.  See note above.\n    return sharedSecret.slice(1);\n  }\n\n  /**\n   * Generates an RFC6979-compliant ECDSA signature of given data using a secp256r1 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the ECDSA\n   * (Elliptic Curve Digital Signature Algorithm) signature algorithm, as defined in RFC6979.\n   * The data to be signed is first hashed using the SHA-256 algorithm, and this hash is then\n   * signed using the private key. The output is a digital signature in the form of a\n   * Uint8Array, which uniquely corresponds to both the data and the private key used for signing.\n   *\n   * This method is commonly used in cryptographic applications to ensure data integrity and\n   * authenticity. The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const signature = await Secp256r1.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ data, key }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    // Sign the provided data using the ECDSA algorithm.\n    // The `Secp256r1.sign` operation returns a signature object with { r, s, recovery } properties.\n    const signatureObject = secp256r1.sign(digest, privateKeyBytes);\n\n    // Convert the signature object to Uint8Array.\n    const signature = signatureObject.toCompactRawBytes();\n\n    return signature;\n  }\n\n  /**\n   * Validates a given private key to ensure its compliance with the secp256r1 curve standards.\n   *\n   * @remarks\n   * This method checks whether a provided private key is a valid 32-byte number and falls within\n   * the range defined by the secp256r1 curve's order. It is essential for ensuring the private\n   * key's mathematical correctness in the context of secp256r1-based cryptographic operations.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key\n   * const isValid = await Secp256r1.validatePrivateKey({ privateKeyBytes });\n   * console.log(isValid); // true or false based on the key's validity\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.privateKeyBytes - The private key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the private key is valid.\n   */\n  public static async validatePrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    return secp256r1.utils.isValidPrivateKey(privateKeyBytes);\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the secp256r1 curve.\n   *\n   * @remarks\n   * This method checks if the provided public key represents a valid point on the secp256r1 curve.\n   * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity\n   * against the curve's parameters. A valid point must lie on the curve and meet specific\n   * mathematical criteria defined by the curve's equation.\n   *\n   * It's important to note that this method does not verify the key's ownership or whether it has\n   * been compromised; it solely focuses on the key's adherence to the curve's mathematical\n   * principles.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Secp256r1.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the secp256r1 curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating the public key's validity on\n   *          the secp256r1 curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n      // Decode Weierstrass points from key bytes.\n      const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Short Weierstrass curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC6979-compliant ECDSA signature against given data and a secp256r1 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure that it was generated by the holder of the\n   * corresponding private key and that the signed data has not been altered. The signature\n   * verification is performed using the ECDSA (Elliptic Curve Digital Signature Algorithm) as\n   * specified in RFC6979. The data to be verified is first hashed using the SHA-256 algorithm, and\n   * this hash is then used along with the public key to verify the signature.\n   *\n   * The method returns a boolean value indicating whether the signature is valid. A valid signature\n   * proves that the signed data was indeed signed by the owner of the private key corresponding to\n   * the provided public key and that the data has not been tampered with since it was signed.\n   *\n   * Note: The verification process does not consider the malleability of low-s signatures, which\n   * may be relevant in certain contexts, such as Bitcoin transactions.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isSignatureValid = await Secp256r1.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * console.log(isSignatureValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key used for verification, represented in JWK format.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    /** Perform the verification of the signature.\n     * This verify operation has the malleability check disabled. Guaranteed support\n     * for low-s signatures across languages is unlikely especially in the context\n     * of SSI. Notable Cloud KMS providers do not natively support it either. It is\n     * also worth noting that low-s signatures are a requirement for Bitcoin. */\n    const isValid = secp256r1.verify(signature, digest, publicKeyBytes, { lowS: false });\n\n    return isValid;\n  }\n\n  /**\n   * Returns the elliptic curve point (x and y coordinates) for a given secp256r1 key.\n   *\n   * @remarks\n   * This method extracts the elliptic curve point from a given secp256r1 key, whether\n   * it's a private or a public key. For a private key, the method first computes the\n   * corresponding public key and then extracts the x and y coordinates. For a public key,\n   * it directly returns these coordinates. The coordinates are represented as Uint8Array.\n   *\n   * The x and y coordinates represent the key's position on the elliptic curve and can be\n   * used in various cryptographic operations, such as digital signatures or key agreement\n   * protocols.\n   *\n   * @example\n   * ```ts\n   * // For a private key\n   * const privateKey = new Uint8Array([...]); // A 32-byte private key\n   * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256r1.getCurvePoint({ keyBytes: privateKey });\n   *\n   * // For a public key\n   * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key\n   * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256r1.getCurvePoint({ keyBytes: publicKey });\n   * ```\n   *\n   * @param params - The parameters for the curve point decoding operation.\n   * @param params.keyBytes - The key for which to get the elliptic curve point.\n   *                          Can be either a private key or a public key.\n   *                          The key should be passed as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to an object with properties 'x' and 'y',\n   *          each being a Uint8Array representing the x and y coordinates of the key point on the\n   *          elliptic curve.\n   */\n  private static async getCurvePoint({ keyBytes }: {\n    keyBytes: Uint8Array;\n  }): Promise<AffinePoint<Uint8Array>> {\n    // If key is a private key, first compute the public key.\n    if (keyBytes.byteLength === 32) {\n      keyBytes = secp256r1.getPublicKey(keyBytes);\n    }\n\n    // Decode Weierstrass affine point from key bytes.\n    const point = secp256r1.ProjectivePoint.fromHex(keyBytes);\n\n    // Get x- and y-coordinate values and convert to Uint8Array.\n    const x = numberToBytesBE(point.x, 32);\n    const y = numberToBytesBE(point.y, 32);\n\n    return { x, y };\n  }\n}\n\nexport { Secp256r1 as P256 };", "import type { Jwk } from '../jose/jwk.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AsymmetricKeyGenerator } from '../types/key-generator.js';\nimport type { ComputePublicKeyParams, GenerateKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { Secp256k1 } from '../primitives/secp256k1.js';\nimport { Secp256r1 } from '../primitives/secp256r1.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `EcdsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the ECDSA algorithm.\n */\nexport interface EcdsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"ES256\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   * - `\"ES256K\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256k1\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256r1\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   */\n  algorithm: 'ES256' | 'ES256K' | 'secp256k1' | 'secp256r1';\n}\n\n/**\n * The `EcdsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Elliptic Curve Digital Signature Algorithm (ECDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EcdsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EcdsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             Signer<SignParams, VerifyParams> {\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.computePublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.computePublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = await ecdsa.generateKey({ algorithm: 'ES256K' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    EcdsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'ES256K':\n      case 'secp256k1': {\n        const privateKey = await Secp256k1.generateKey();\n        privateKey.alg = 'ES256K';\n        return privateKey;\n      }\n\n      case 'ES256':\n      case 'secp256r1': {\n        const privateKey = await Secp256r1.generateKey();\n        privateKey.alg = 'ES256';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an ECDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.getPublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.getPublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an ECDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await ecdsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.sign({ key, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.sign({ key, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an ECDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await ecdsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isEcPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) public key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.verify({ key, signature, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n}", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha512 } from '@noble/hashes/sha512';\nimport { concatBytes, randomBytes, utf8ToBytes } from '@noble/hashes/utils';\nimport { ExtPointType, twistedEdwards } from './abstract/edwards.js';\nimport { montgomery } from './abstract/montgomery.js';\nimport { Field, FpSqrtEven, isNegativeLE, mod, pow2 } from './abstract/modular.js';\nimport {\n  bytesToHex,\n  bytesToNumberLE,\n  ensureBytes,\n  equalBytes,\n  Hex,\n  numberToBytesLE,\n} from './abstract/utils.js';\nimport { createHasher, htfBasicOpts, expand_message_xmd } from './abstract/hash-to-curve.js';\nimport { AffinePoint, Group } from './abstract/curve.js';\n\n/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n */\n\nconst ED25519_P = BigInt(\n  '57896044618658097711785492504343953926634992332820282019728792003956564819949'\n);\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst ED25519_SQRT_M1 = BigInt(\n  '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _5n = BigInt(5);\n// prettier-ignore\nconst _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n\nfunction ed25519_pow_2_252_3(x: bigint) {\n  const P = ED25519_P;\n  const x2 = (x * x) % P;\n  const b2 = (x2 * x) % P; // x^3, 11\n  const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111\n  const b5 = (pow2(b4, _1n, P) * x) % P; // x^31\n  const b10 = (pow2(b5, _5n, P) * b5) % P;\n  const b20 = (pow2(b10, _10n, P) * b10) % P;\n  const b40 = (pow2(b20, _20n, P) * b20) % P;\n  const b80 = (pow2(b40, _40n, P) * b40) % P;\n  const b160 = (pow2(b80, _80n, P) * b80) % P;\n  const b240 = (pow2(b160, _80n, P) * b80) % P;\n  const b250 = (pow2(b240, _10n, P) * b10) % P;\n  const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P;\n  // ^ To pow to (p+3)/8, multiply it by x.\n  return { pow_p_5_8, b2 };\n}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\n  // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n  // set the three least significant bits of the first byte\n  bytes[0] &= 248; // 0b1111_1000\n  // and the most significant bit of the last to zero,\n  bytes[31] &= 127; // 0b0111_1111\n  // set the second most significant bit of the last byte to 1\n  bytes[31] |= 64; // 0b0100_0000\n  return bytes;\n}\n\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n  const P = ED25519_P;\n  const v3 = mod(v * v * v, P); // v\u00B3\n  const v7 = mod(v3 * v3 * v, P); // v\u2077\n  // (p+3)/8 and (p-5)/8\n  const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;\n  let x = mod(u * v3 * pow, P); // (uv\u00B3)(uv\u2077)^(p-5)/8\n  const vx2 = mod(v * x * x, P); // vx\u00B2\n  const root1 = x; // First root candidate\n  const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate\n  const useRoot1 = vx2 === u; // If vx\u00B2 = u (mod p), x is a square root\n  const useRoot2 = vx2 === mod(-u, P); // If vx\u00B2 = -u, set x <-- x * 2^((p-1)/4)\n  const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx\u00B2 = -u\u221A(-1)\n  if (useRoot1) x = root1;\n  if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n  if (isNegativeLE(x, P)) x = mod(-x, P);\n  return { isValid: useRoot1 || useRoot2, value: x };\n}\n\n// Just in case\nexport const ED25519_TORSION_SUBGROUP = [\n  '0100000000000000000000000000000000000000000000000000000000000000',\n  'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n  '0000000000000000000000000000000000000000000000000000000000000080',\n  '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n  'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n  '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n  '0000000000000000000000000000000000000000000000000000000000000000',\n  'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n];\n\nconst Fp = Field(ED25519_P, undefined, true);\n\nconst ed25519Defaults = {\n  // Param: a\n  a: BigInt(-1), // Fp.create(-1) is proper; our way still works and is faster\n  // d is equal to -121665/121666 over finite field.\n  // Negative number is P - number, and division is invert(number, P)\n  d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n  // Finite field \uD835\uDD3Dp over which we'll do calculations; 2n**255n - 19n\n  Fp,\n  // Subgroup order: how many points curve has\n  // 2n**252n + 27742317777372353535851937790883648493n;\n  n: BigInt('7237005577332262213973186563042994240857116359379907606001950938285454250989'),\n  // Cofactor\n  h: BigInt(8),\n  // Base point (x, y) aka generator point\n  Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n  Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n  hash: sha512,\n  randomBytes,\n  adjustScalarBytes,\n  // dom2\n  // Ratio of u to v. Allows us to combine inversion and square root. Uses algo from RFC8032 5.1.3.\n  // Constant-time, u/\u221Av\n  uvRatio,\n} as const;\n\nexport const ed25519 = /* @__PURE__ */ twistedEdwards(ed25519Defaults);\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n  if (ctx.length > 255) throw new Error('Context is too big');\n  return concatBytes(\n    utf8ToBytes('SigEd25519 no Ed25519 collisions'),\n    new Uint8Array([phflag ? 1 : 0, ctx.length]),\n    ctx,\n    data\n  );\n}\n\nexport const ed25519ctx = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n});\nexport const ed25519ph = /* @__PURE__ */ twistedEdwards({\n  ...ed25519Defaults,\n  domain: ed25519_domain,\n  prehash: sha512,\n});\n\nexport const x25519 = /* @__PURE__ */ (() =>\n  montgomery({\n    P: ED25519_P,\n    a: BigInt(486662),\n    montgomeryBits: 255, // n is 253 bits\n    nByteLength: 32,\n    Gu: BigInt(9),\n    powPminus2: (x: bigint): bigint => {\n      const P = ED25519_P;\n      // x^(p-2) aka x^(2^255-21)\n      const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n      return mod(pow2(pow_p_5_8, BigInt(3), P) * b2, P);\n    },\n    adjustScalarBytes,\n    randomBytes,\n  }))();\n\n/**\n * Converts ed25519 public key to x25519 public key. Uses formula:\n * * `(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)`\n * * `(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))`\n * @example\n *   const someonesPub = ed25519.getPublicKey(ed25519.utils.randomPrivateKey());\n *   const aPriv = x25519.utils.randomPrivateKey();\n *   x25519.getSharedSecret(aPriv, edwardsToMontgomeryPub(someonesPub))\n */\nexport function edwardsToMontgomeryPub(edwardsPub: Hex): Uint8Array {\n  const { y } = ed25519.ExtendedPoint.fromHex(edwardsPub);\n  const _1n = BigInt(1);\n  return Fp.toBytes(Fp.create((_1n + y) * Fp.inv(_1n - y)));\n}\nexport const edwardsToMontgomery = edwardsToMontgomeryPub; // deprecated\n\n/**\n * Converts ed25519 secret key to x25519 secret key.\n * @example\n *   const someonesPub = x25519.getPublicKey(x25519.utils.randomPrivateKey());\n *   const aPriv = ed25519.utils.randomPrivateKey();\n *   x25519.getSharedSecret(edwardsToMontgomeryPriv(aPriv), someonesPub)\n */\nexport function edwardsToMontgomeryPriv(edwardsPriv: Uint8Array): Uint8Array {\n  const hashed = ed25519Defaults.hash(edwardsPriv.subarray(0, 32));\n  return ed25519Defaults.adjustScalarBytes(hashed).subarray(0, 32);\n}\n\n// Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)\n// NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since\n// SageMath returns different root first and everything falls apart\n\nconst ELL2_C1 = (Fp.ORDER + BigInt(3)) / BigInt(8); // 1. c1 = (q + 3) / 8       # Integer arithmetic\n\nconst ELL2_C2 = Fp.pow(_2n, ELL2_C1); // 2. c2 = 2^c1\nconst ELL2_C3 = Fp.sqrt(Fp.neg(Fp.ONE)); // 3. c3 = sqrt(-1)\nconst ELL2_C4 = (Fp.ORDER - BigInt(5)) / BigInt(8); // 4. c4 = (q - 5) / 8       # Integer arithmetic\nconst ELL2_J = BigInt(486662);\n\n// prettier-ignore\nfunction map_to_curve_elligator2_curve25519(u: bigint) {\n  let tv1 = Fp.sqr(u);       //  1.  tv1 = u^2\n  tv1 = Fp.mul(tv1, _2n);       //  2.  tv1 = 2 * tv1\n  let xd = Fp.add(tv1, Fp.ONE); //  3.   xd = tv1 + 1         # Nonzero: -1 is square (mod p), tv1 is not\n  let x1n = Fp.neg(ELL2_J);  //  4.  x1n = -J              # x1 = x1n / xd = -J / (1 + 2 * u^2)\n  let tv2 = Fp.sqr(xd);      //  5.  tv2 = xd^2\n  let gxd = Fp.mul(tv2, xd);    //  6.  gxd = tv2 * xd        # gxd = xd^3\n  let gx1 = Fp.mul(tv1, ELL2_J); //  7.  gx1 = J * tv1         # x1n + J * xd\n  gx1 = Fp.mul(gx1, x1n);       //  8.  gx1 = gx1 * x1n       # x1n^2 + J * x1n * xd\n  gx1 = Fp.add(gx1, tv2);       //  9.  gx1 = gx1 + tv2       # x1n^2 + J * x1n * xd + xd^2\n  gx1 = Fp.mul(gx1, x1n);       //  10. gx1 = gx1 * x1n       # x1n^3 + J * x1n^2 * xd + x1n * xd^2\n  let tv3 = Fp.sqr(gxd);     //  11. tv3 = gxd^2\n  tv2 = Fp.sqr(tv3);         //  12. tv2 = tv3^2           # gxd^4\n  tv3 = Fp.mul(tv3, gxd);       //  13. tv3 = tv3 * gxd       # gxd^3\n  tv3 = Fp.mul(tv3, gx1);       //  14. tv3 = tv3 * gx1       # gx1 * gxd^3\n  tv2 = Fp.mul(tv2, tv3);       //  15. tv2 = tv2 * tv3       # gx1 * gxd^7\n  let y11 = Fp.pow(tv2, ELL2_C4); //  16. y11 = tv2^c4        # (gx1 * gxd^7)^((p - 5) / 8)\n  y11 = Fp.mul(y11, tv3);       //  17. y11 = y11 * tv3       # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8)\n  let y12 = Fp.mul(y11, ELL2_C3); //  18. y12 = y11 * c3\n  tv2 = Fp.sqr(y11);         //  19. tv2 = y11^2\n  tv2 = Fp.mul(tv2, gxd);       //  20. tv2 = tv2 * gxd\n  let e1 = Fp.eql(tv2, gx1); //  21.  e1 = tv2 == gx1\n  let y1 = Fp.cmov(y12, y11, e1); //  22.  y1 = CMOV(y12, y11, e1)  # If g(x1) is square, this is its sqrt\n  let x2n = Fp.mul(x1n, tv1);   //  23. x2n = x1n * tv1       # x2 = x2n / xd = 2 * u^2 * x1n / xd\n  let y21 = Fp.mul(y11, u);     //  24. y21 = y11 * u\n  y21 = Fp.mul(y21, ELL2_C2);   //  25. y21 = y21 * c2\n  let y22 = Fp.mul(y21, ELL2_C3); //  26. y22 = y21 * c3\n  let gx2 = Fp.mul(gx1, tv1);   //  27. gx2 = gx1 * tv1       # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)\n  tv2 = Fp.sqr(y21);         //  28. tv2 = y21^2\n  tv2 = Fp.mul(tv2, gxd);       //  29. tv2 = tv2 * gxd\n  let e2 = Fp.eql(tv2, gx2); //  30.  e2 = tv2 == gx2\n  let y2 = Fp.cmov(y22, y21, e2); //  31.  y2 = CMOV(y22, y21, e2)  # If g(x2) is square, this is its sqrt\n  tv2 = Fp.sqr(y1);          //  32. tv2 = y1^2\n  tv2 = Fp.mul(tv2, gxd);       //  33. tv2 = tv2 * gxd\n  let e3 = Fp.eql(tv2, gx1); //  34.  e3 = tv2 == gx1\n  let xn = Fp.cmov(x2n, x1n, e3); //  35.  xn = CMOV(x2n, x1n, e3)  # If e3, x = x1, else x = x2\n  let y = Fp.cmov(y2, y1, e3);  //  36.   y = CMOV(y2, y1, e3)    # If e3, y = y1, else y = y2\n  let e4 = Fp.isOdd(y);         //  37.  e4 = sgn0(y) == 1        # Fix sign of y\n  y = Fp.cmov(y, Fp.neg(y), e3 !== e4); //  38.   y = CMOV(y, -y, e3 XOR e4)\n  return { xMn: xn, xMd: xd, yMn: y, yMd: _1n }; //  39. return (xn, xd, y, 1)\n}\n\nconst ELL2_C1_EDWARDS = FpSqrtEven(Fp, Fp.neg(BigInt(486664))); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\n  const { xMn, xMd, yMn, yMd } = map_to_curve_elligator2_curve25519(u); //  1.  (xMn, xMd, yMn, yMd) =\n  // map_to_curve_elligator2_curve25519(u)\n  let xn = Fp.mul(xMn, yMd); //  2.  xn = xMn * yMd\n  xn = Fp.mul(xn, ELL2_C1_EDWARDS); //  3.  xn = xn * c1\n  let xd = Fp.mul(xMd, yMn); //  4.  xd = xMd * yMn    # xn / xd = c1 * xM / yM\n  let yn = Fp.sub(xMn, xMd); //  5.  yn = xMn - xMd\n  let yd = Fp.add(xMn, xMd); //  6.  yd = xMn + xMd    # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)\n  let tv1 = Fp.mul(xd, yd); //  7. tv1 = xd * yd\n  let e = Fp.eql(tv1, Fp.ZERO); //  8.   e = tv1 == 0\n  xn = Fp.cmov(xn, Fp.ZERO, e); //  9.  xn = CMOV(xn, 0, e)\n  xd = Fp.cmov(xd, Fp.ONE, e); //  10. xd = CMOV(xd, 1, e)\n  yn = Fp.cmov(yn, Fp.ONE, e); //  11. yn = CMOV(yn, 1, e)\n  yd = Fp.cmov(yd, Fp.ONE, e); //  12. yd = CMOV(yd, 1, e)\n\n  const inv = Fp.invertBatch([xd, yd]); // batch division\n  return { x: Fp.mul(xn, inv[0]), y: Fp.mul(yn, inv[1]) }; //  13. return (xn, xd, yn, yd)\n}\n\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    ed25519.ExtendedPoint,\n    (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n    {\n      DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',\n      encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha512,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n\nfunction assertRstPoint(other: unknown) {\n  if (!(other instanceof RistPoint)) throw new Error('RistrettoPoint expected');\n}\n\n// \u221A(-1) aka \u221A(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// \u221A(ad - 1)\nconst SQRT_AD_MINUS_ONE = BigInt(\n  '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / \u221A(a-d)\nconst INVSQRT_A_MINUS_D = BigInt(\n  '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d\u00B2\nconst ONE_MINUS_D_SQ = BigInt(\n  '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)\u00B2\nconst D_MINUS_ONE_SQ = BigInt(\n  '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/\u221A(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');\nconst bytes255ToNumberLE = (bytes: Uint8Array) =>\n  ed25519.CURVE.Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\ntype ExtendedPoint = ExtPointType;\n\n// Computes Elligator map for Ristretto\n// https://ristretto.group/formulas/elligator.html\nfunction calcElligatorRistrettoMap(r0: bigint): ExtendedPoint {\n  const { d } = ed25519.CURVE;\n  const P = ed25519.CURVE.Fp.ORDER;\n  const mod = ed25519.CURVE.Fp.create;\n  const r = mod(SQRT_M1 * r0 * r0); // 1\n  const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2\n  let c = BigInt(-1); // 3\n  const D = mod((c - d * r) * mod(r + d)); // 4\n  let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5\n  let s_ = mod(s * r0); // 6\n  if (!isNegativeLE(s_, P)) s_ = mod(-s_);\n  if (!Ns_D_is_sq) s = s_; // 7\n  if (!Ns_D_is_sq) c = r; // 8\n  const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9\n  const s2 = s * s;\n  const W0 = mod((s + s) * D); // 10\n  const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11\n  const W2 = mod(_1n - s2); // 12\n  const W3 = mod(_1n + s2); // 13\n  return new ed25519.ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n}\n\n/**\n * Each ed25519/ExtendedPoint has 8 different equivalent points. This can be\n * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.\n * Ristretto point operates in X:Y:Z:T extended coordinates like ExtendedPoint,\n * but it should work in its own namespace: do not combine those two.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-ristretto255-decaf448\n */\nclass RistPoint implements Group<RistPoint> {\n  static BASE: RistPoint;\n  static ZERO: RistPoint;\n  // Private property to discourage combining ExtendedPoint + RistrettoPoint\n  // Always use Ristretto encoding/decoding instead.\n  constructor(private readonly ep: ExtendedPoint) {}\n\n  static fromAffine(ap: AffinePoint<bigint>) {\n    return new RistPoint(ed25519.ExtendedPoint.fromAffine(ap));\n  }\n\n  /**\n   * Takes uniform output of 64-byte hash function like sha512 and converts it to `RistrettoPoint`.\n   * The hash-to-group operation applies Elligator twice and adds the results.\n   * **Note:** this is one-way map, there is no conversion from point to hash.\n   * https://ristretto.group/formulas/elligator.html\n   * @param hex 64-byte output of a hash function\n   */\n  static hashToCurve(hex: Hex): RistPoint {\n    hex = ensureBytes('ristrettoHash', hex, 64);\n    const r1 = bytes255ToNumberLE(hex.slice(0, 32));\n    const R1 = calcElligatorRistrettoMap(r1);\n    const r2 = bytes255ToNumberLE(hex.slice(32, 64));\n    const R2 = calcElligatorRistrettoMap(r2);\n    return new RistPoint(R1.add(R2));\n  }\n\n  /**\n   * Converts ristretto-encoded string to ristretto point.\n   * https://ristretto.group/formulas/decoding.html\n   * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n   */\n  static fromHex(hex: Hex): RistPoint {\n    hex = ensureBytes('ristrettoHex', hex, 32);\n    const { a, d } = ed25519.CURVE;\n    const P = ed25519.CURVE.Fp.ORDER;\n    const mod = ed25519.CURVE.Fp.create;\n    const emsg = 'RistrettoPoint.fromHex: the hex is not valid encoding of RistrettoPoint';\n    const s = bytes255ToNumberLE(hex);\n    // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.\n    // 3. Check that s is non-negative, or else abort\n    if (!equalBytes(numberToBytesLE(s, 32), hex) || isNegativeLE(s, P)) throw new Error(emsg);\n    const s2 = mod(s * s);\n    const u1 = mod(_1n + a * s2); // 4 (a is -1)\n    const u2 = mod(_1n - a * s2); // 5\n    const u1_2 = mod(u1 * u1);\n    const u2_2 = mod(u2 * u2);\n    const v = mod(a * d * u1_2 - u2_2); // 6\n    const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7\n    const Dx = mod(I * u2); // 8\n    const Dy = mod(I * Dx * v); // 9\n    let x = mod((s + s) * Dx); // 10\n    if (isNegativeLE(x, P)) x = mod(-x); // 10\n    const y = mod(u1 * Dy); // 11\n    const t = mod(x * y); // 12\n    if (!isValid || isNegativeLE(t, P) || y === _0n) throw new Error(emsg);\n    return new RistPoint(new ed25519.ExtendedPoint(x, y, _1n, t));\n  }\n\n  /**\n   * Encodes ristretto point to Uint8Array.\n   * https://ristretto.group/formulas/encoding.html\n   */\n  toRawBytes(): Uint8Array {\n    let { ex: x, ey: y, ez: z, et: t } = this.ep;\n    const P = ed25519.CURVE.Fp.ORDER;\n    const mod = ed25519.CURVE.Fp.create;\n    const u1 = mod(mod(z + y) * mod(z - y)); // 1\n    const u2 = mod(x * y); // 2\n    // Square root always exists\n    const u2sq = mod(u2 * u2);\n    const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3\n    const D1 = mod(invsqrt * u1); // 4\n    const D2 = mod(invsqrt * u2); // 5\n    const zInv = mod(D1 * D2 * t); // 6\n    let D: bigint; // 7\n    if (isNegativeLE(t * zInv, P)) {\n      let _x = mod(y * SQRT_M1);\n      let _y = mod(x * SQRT_M1);\n      x = _x;\n      y = _y;\n      D = mod(D1 * INVSQRT_A_MINUS_D);\n    } else {\n      D = D2; // 8\n    }\n    if (isNegativeLE(x * zInv, P)) y = mod(-y); // 9\n    let s = mod((z - y) * D); // 10 (check footer's note, no sqrt(-a))\n    if (isNegativeLE(s, P)) s = mod(-s);\n    return numberToBytesLE(s, 32); // 11\n  }\n\n  toHex(): string {\n    return bytesToHex(this.toRawBytes());\n  }\n\n  toString(): string {\n    return this.toHex();\n  }\n\n  // Compare one point to another.\n  equals(other: RistPoint): boolean {\n    assertRstPoint(other);\n    const { ex: X1, ey: Y1 } = this.ep;\n    const { ex: X2, ey: Y2 } = other.ep;\n    const mod = ed25519.CURVE.Fp.create;\n    // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)\n    const one = mod(X1 * Y2) === mod(Y1 * X2);\n    const two = mod(Y1 * Y2) === mod(X1 * X2);\n    return one || two;\n  }\n\n  add(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.add(other.ep));\n  }\n\n  subtract(other: RistPoint): RistPoint {\n    assertRstPoint(other);\n    return new RistPoint(this.ep.subtract(other.ep));\n  }\n\n  multiply(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiply(scalar));\n  }\n\n  multiplyUnsafe(scalar: bigint): RistPoint {\n    return new RistPoint(this.ep.multiplyUnsafe(scalar));\n  }\n\n  double(): RistPoint {\n    return new RistPoint(this.ep.double());\n  }\n\n  negate(): RistPoint {\n    return new RistPoint(this.ep.negate());\n  }\n}\nexport const RistrettoPoint = /* @__PURE__ */ (() => {\n  if (!RistPoint.BASE) RistPoint.BASE = new RistPoint(ed25519.ExtendedPoint.BASE);\n  if (!RistPoint.ZERO) RistPoint.ZERO = new RistPoint(ed25519.ExtendedPoint.ZERO);\n  return RistPoint;\n})();\n\n// Hashing to ristretto255. https://www.rfc-editor.org/rfc/rfc9380#appendix-B\nexport const hashToRistretto255 = (msg: Uint8Array, options: htfBasicOpts) => {\n  const d = options.DST;\n  const DST = typeof d === 'string' ? utf8ToBytes(d) : d;\n  const uniform_bytes = expand_message_xmd(msg, DST, 64, sha512);\n  const P = RistPoint.hashToCurve(uniform_bytes);\n  return P;\n};\nexport const hash_to_ristretto255 = hashToRistretto255; // legacy\n", "import { SHA2 } from './_sha2.js';\nimport u64 from './_u64.js';\nimport { wrapConstructor } from './utils.js';\n\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => u64.split([\n  '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n  '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n  '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n  '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n  '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n  '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n  '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n  '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n  '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n  '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n  '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n  '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n  '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n  '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n  '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n  '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n  '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n  '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n  '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n  '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\n\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends SHA2<SHA512> {\n  // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n  // Also looks cleaner and easier to verify with spec.\n  // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x6a09e667 | 0;\n  Al = 0xf3bcc908 | 0;\n  Bh = 0xbb67ae85 | 0;\n  Bl = 0x84caa73b | 0;\n  Ch = 0x3c6ef372 | 0;\n  Cl = 0xfe94f82b | 0;\n  Dh = 0xa54ff53a | 0;\n  Dl = 0x5f1d36f1 | 0;\n  Eh = 0x510e527f | 0;\n  El = 0xade682d1 | 0;\n  Fh = 0x9b05688c | 0;\n  Fl = 0x2b3e6c1f | 0;\n  Gh = 0x1f83d9ab | 0;\n  Gl = 0xfb41bd6b | 0;\n  Hh = 0x5be0cd19 | 0;\n  Hl = 0x137e2179 | 0;\n\n  constructor() {\n    super(128, 64, 16, false);\n  }\n  // prettier-ignore\n  protected get(): [\n    number, number, number, number, number, number, number, number,\n    number, number, number, number, number, number, number, number\n  ] {\n    const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n  }\n  // prettier-ignore\n  protected set(\n    Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n    Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n  ) {\n    this.Ah = Ah | 0;\n    this.Al = Al | 0;\n    this.Bh = Bh | 0;\n    this.Bl = Bl | 0;\n    this.Ch = Ch | 0;\n    this.Cl = Cl | 0;\n    this.Dh = Dh | 0;\n    this.Dl = Dl | 0;\n    this.Eh = Eh | 0;\n    this.El = El | 0;\n    this.Fh = Fh | 0;\n    this.Fl = Fl | 0;\n    this.Gh = Gh | 0;\n    this.Gl = Gl | 0;\n    this.Hh = Hh | 0;\n    this.Hl = Hl | 0;\n  }\n  protected process(view: DataView, offset: number) {\n    // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n    for (let i = 0; i < 16; i++, offset += 4) {\n      SHA512_W_H[i] = view.getUint32(offset);\n      SHA512_W_L[i] = view.getUint32((offset += 4));\n    }\n    for (let i = 16; i < 80; i++) {\n      // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n      const W15h = SHA512_W_H[i - 15] | 0;\n      const W15l = SHA512_W_L[i - 15] | 0;\n      const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n      const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n      // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n      const W2h = SHA512_W_H[i - 2] | 0;\n      const W2l = SHA512_W_L[i - 2] | 0;\n      const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n      const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n      // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n      const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n      const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n      SHA512_W_H[i] = SUMh | 0;\n      SHA512_W_L[i] = SUMl | 0;\n    }\n    let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n    // Compression function main loop, 80 rounds\n    for (let i = 0; i < 80; i++) {\n      // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n      const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n      const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n      //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n      const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n      const CHIl = (El & Fl) ^ (~El & Gl);\n      // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n      // prettier-ignore\n      const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n      const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n      const T1l = T1ll | 0;\n      // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n      const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n      const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n      const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n      const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n      Hh = Gh | 0;\n      Hl = Gl | 0;\n      Gh = Fh | 0;\n      Gl = Fl | 0;\n      Fh = Eh | 0;\n      Fl = El | 0;\n      ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n      Dh = Ch | 0;\n      Dl = Cl | 0;\n      Ch = Bh | 0;\n      Cl = Bl | 0;\n      Bh = Ah | 0;\n      Bl = Al | 0;\n      const All = u64.add3L(T1l, sigma0l, MAJl);\n      Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n      Al = All | 0;\n    }\n    // Add the compressed chunk to the current hash value\n    ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n    ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n    ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n    ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n    ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n    ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n    ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n    ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n    this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n  }\n  protected roundClean() {\n    SHA512_W_H.fill(0);\n    SHA512_W_L.fill(0);\n  }\n  destroy() {\n    this.buffer.fill(0);\n    this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n  }\n}\n\nclass SHA512_224 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x8c3d37c8 | 0;\n  Al = 0x19544da2 | 0;\n  Bh = 0x73e19966 | 0;\n  Bl = 0x89dcd4d6 | 0;\n  Ch = 0x1dfab7ae | 0;\n  Cl = 0x32ff9c82 | 0;\n  Dh = 0x679dd514 | 0;\n  Dl = 0x582f9fcf | 0;\n  Eh = 0x0f6d2b69 | 0;\n  El = 0x7bd44da8 | 0;\n  Fh = 0x77e36f73 | 0;\n  Fl = 0x04c48942 | 0;\n  Gh = 0x3f9d85a8 | 0;\n  Gl = 0x6a1d36c8 | 0;\n  Hh = 0x1112e6ad | 0;\n  Hl = 0x91d692a1 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\nclass SHA512_256 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0x22312194 | 0;\n  Al = 0xfc2bf72c | 0;\n  Bh = 0x9f555fa3 | 0;\n  Bl = 0xc84c64c2 | 0;\n  Ch = 0x2393b86b | 0;\n  Cl = 0x6f53b151 | 0;\n  Dh = 0x96387719 | 0;\n  Dl = 0x5940eabd | 0;\n  Eh = 0x96283ee2 | 0;\n  El = 0xa88effe3 | 0;\n  Fh = 0xbe5e1e25 | 0;\n  Fl = 0x53863992 | 0;\n  Gh = 0x2b0199fc | 0;\n  Gl = 0x2c85b8aa | 0;\n  Hh = 0x0eb72ddc | 0;\n  Hl = 0x81c52ca2 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 32;\n  }\n}\n\nclass SHA384 extends SHA512 {\n  // h -- high 32 bits, l -- low 32 bits\n  Ah = 0xcbbb9d5d | 0;\n  Al = 0xc1059ed8 | 0;\n  Bh = 0x629a292a | 0;\n  Bl = 0x367cd507 | 0;\n  Ch = 0x9159015a | 0;\n  Cl = 0x3070dd17 | 0;\n  Dh = 0x152fecd8 | 0;\n  Dl = 0xf70e5939 | 0;\n  Eh = 0x67332667 | 0;\n  El = 0xffc00b31 | 0;\n  Fh = 0x8eb44a87 | 0;\n  Fl = 0x68581511 | 0;\n  Gh = 0xdb0c2e0d | 0;\n  Gl = 0x64f98fa7 | 0;\n  Hh = 0x47b5481d | 0;\n  Hl = 0xbefa4fa4 | 0;\n\n  constructor() {\n    super();\n    this.outputLen = 48;\n  }\n}\n\nexport const sha512 = /* @__PURE__ */ wrapConstructor(() => new SHA512());\nexport const sha512_224 = /* @__PURE__ */ wrapConstructor(() => new SHA512_224());\nexport const sha512_256 = /* @__PURE__ */ wrapConstructor(() => new SHA512_256());\nexport const sha384 = /* @__PURE__ */ wrapConstructor(() => new SHA384());\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\n  if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n  return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; i++) {\n    const { h, l } = fromBig(lst[i], le);\n    [Ah[i], Al[i]] = [h, l];\n  }\n  return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number) => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah: number, Al: number, Bh: number, Bl: number) {\n  const l = (Al >>> 0) + (Bl >>> 0);\n  return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\n// prettier-ignore\nconst u64 = {\n  fromBig, split, toBig,\n  shrSH, shrSL,\n  rotrSH, rotrSL, rotrBH, rotrBL,\n  rotr32H, rotr32L,\n  rotlSH, rotlSL, rotlBH, rotlBL,\n  add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Twisted Edwards curve. The formula is: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\nimport { mod } from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes, FHash, Hex } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8);\n\n// Edwards curves must declare params a & d.\nexport type CurveType = BasicCurve<bigint> & {\n  a: bigint; // curve param a\n  d: bigint; // curve param d\n  hash: FHash; // Hashing\n  randomBytes: (bytesLength?: number) => Uint8Array; // CSPRNG\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array; // clears bits to get valid field elemtn\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array; // Used for hashing\n  uvRatio?: (u: bigint, v: bigint) => { isValid: boolean; value: bigint }; // Ratio \u221A(u/v)\n  prehash?: FHash; // RFC 8032 pre-hashing of messages to sign() / verify()\n  mapToCurve?: (scalar: bigint[]) => AffinePoint<bigint>; // for hash-to-curve standard\n};\n\n// verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\nconst VERIFY_DEFAULT = { zip215: true };\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    curve,\n    {\n      hash: 'function',\n      a: 'bigint',\n      d: 'bigint',\n      randomBytes: 'function',\n    },\n    {\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      uvRatio: 'function',\n      mapToCurve: 'function',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...opts } as const);\n}\n\n// Instance of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointType extends Group<ExtPointType> {\n  readonly ex: bigint;\n  readonly ey: bigint;\n  readonly ez: bigint;\n  readonly et: bigint;\n  get x(): bigint;\n  get y(): bigint;\n  assertValidity(): void;\n  multiply(scalar: bigint): ExtPointType;\n  multiplyUnsafe(scalar: bigint): ExtPointType;\n  isSmallOrder(): boolean;\n  isTorsionFree(): boolean;\n  clearCofactor(): ExtPointType;\n  toAffine(iz?: bigint): AffinePoint<bigint>;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n}\n// Static methods of Extended Point with coordinates in X, Y, Z, T\nexport interface ExtPointConstructor extends GroupConstructor<ExtPointType> {\n  new (x: bigint, y: bigint, z: bigint, t: bigint): ExtPointType;\n  fromAffine(p: AffinePoint<bigint>): ExtPointType;\n  fromHex(hex: Hex): ExtPointType;\n  fromPrivateKey(privateKey: Hex): ExtPointType;\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  sign: (message: Hex, privateKey: Hex, options?: { context?: Hex }) => Uint8Array;\n  verify: (\n    sig: Hex,\n    message: Hex,\n    publicKey: Hex,\n    options?: { context?: Hex; zip215: boolean }\n  ) => boolean;\n  ExtendedPoint: ExtPointConstructor;\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    getExtendedPublicKey: (key: Hex) => {\n      head: Uint8Array;\n      prefix: Uint8Array;\n      scalar: bigint;\n      point: ExtPointType;\n      pointBytes: Uint8Array;\n    };\n  };\n};\n\n// It is not generic twisted curve for now, but ed25519/ed448 generic implementation\nexport function twistedEdwards(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const {\n    Fp,\n    n: CURVE_ORDER,\n    prehash: prehash,\n    hash: cHash,\n    randomBytes,\n    nByteLength,\n    h: cofactor,\n  } = CURVE;\n  const MASK = _2n << (BigInt(nByteLength * 8) - _1n);\n  const modP = Fp.create; // Function overrides\n\n  // sqrt(u/v)\n  const uvRatio =\n    CURVE.uvRatio ||\n    ((u: bigint, v: bigint) => {\n      try {\n        return { isValid: true, value: Fp.sqrt(u * Fp.inv(v)) };\n      } catch (e) {\n        return { isValid: false, value: _0n };\n      }\n    });\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes); // NOOP\n  const domain =\n    CURVE.domain ||\n    ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n      if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n      return data;\n    }); // NOOP\n  const inBig = (n: bigint) => typeof n === 'bigint' && _0n < n; // n in [1..]\n  const inRange = (n: bigint, max: bigint) => inBig(n) && inBig(max) && n < max; // n in [1..max-1]\n  const in0MaskRange = (n: bigint) => n === _0n || inRange(n, MASK); // n in [0..MASK-1]\n  function assertInRange(n: bigint, max: bigint) {\n    // n in [1..max-1]\n    if (inRange(n, max)) return n;\n    throw new Error(`Expected valid scalar < ${max}, got ${typeof n} ${n}`);\n  }\n  function assertGE0(n: bigint) {\n    // n in [0..CURVE_ORDER-1]\n    return n === _0n ? n : assertInRange(n, CURVE_ORDER); // GE = prime subgroup, not full group\n  }\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function isPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ExtendedPoint expected');\n  }\n  // Extended Point works in extended coordinates: (x, y, z, t) \u220B (x=x/z, y=y/z, t=xy).\n  // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n  class Point implements ExtPointType {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n    static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n\n    constructor(\n      readonly ex: bigint,\n      readonly ey: bigint,\n      readonly ez: bigint,\n      readonly et: bigint\n    ) {\n      if (!in0MaskRange(ex)) throw new Error('x required');\n      if (!in0MaskRange(ey)) throw new Error('y required');\n      if (!in0MaskRange(ez)) throw new Error('z required');\n      if (!in0MaskRange(et)) throw new Error('t required');\n    }\n\n    get x(): bigint {\n      return this.toAffine().x;\n    }\n    get y(): bigint {\n      return this.toAffine().y;\n    }\n\n    static fromAffine(p: AffinePoint<bigint>): Point {\n      if (p instanceof Point) throw new Error('extended point not allowed');\n      const { x, y } = p || {};\n      if (!in0MaskRange(x) || !in0MaskRange(y)) throw new Error('invalid affine point');\n      return new Point(x, y, _1n, modP(x * y));\n    }\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.ez));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n    // Not required for fromHex(), which always creates valid points.\n    // Could be useful for fromAffine().\n    assertValidity(): void {\n      const { a, d } = CURVE;\n      if (this.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n      // Equation in affine coordinates: ax\u00B2 + y\u00B2 = 1 + dx\u00B2y\u00B2\n      // Equation in projective coordinates (X/Z, Y/Z, Z):  (aX\u00B2 + Y\u00B2)Z\u00B2 = Z\u2074 + dX\u00B2Y\u00B2\n      const { ex: X, ey: Y, ez: Z, et: T } = this;\n      const X2 = modP(X * X); // X\u00B2\n      const Y2 = modP(Y * Y); // Y\u00B2\n      const Z2 = modP(Z * Z); // Z\u00B2\n      const Z4 = modP(Z2 * Z2); // Z\u2074\n      const aX2 = modP(X2 * a); // aX\u00B2\n      const left = modP(Z2 * modP(aX2 + Y2)); // (aX\u00B2 + Y\u00B2)Z\u00B2\n      const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z\u2074 + dX\u00B2Y\u00B2\n      if (left !== right) throw new Error('bad point: equation left != right (1)');\n      // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n      const XY = modP(X * Y);\n      const ZT = modP(Z * T);\n      if (XY !== ZT) throw new Error('bad point: equation left != right (2)');\n    }\n\n    // Compare one point to another.\n    equals(other: Point): boolean {\n      isPoint(other);\n      const { ex: X1, ey: Y1, ez: Z1 } = this;\n      const { ex: X2, ey: Y2, ez: Z2 } = other;\n      const X1Z2 = modP(X1 * Z2);\n      const X2Z1 = modP(X2 * Z1);\n      const Y1Z2 = modP(Y1 * Z2);\n      const Y2Z1 = modP(Y2 * Z1);\n      return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n    }\n\n    protected is0(): boolean {\n      return this.equals(Point.ZERO);\n    }\n\n    negate(): Point {\n      // Flips point sign to a negative one (-x, y in affine coords)\n      return new Point(modP(-this.ex), this.ey, this.ez, modP(-this.et));\n    }\n\n    // Fast algo for doubling Extended Point.\n    // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n    // Cost: 4M + 4S + 1*a + 6add + 1*2.\n    double(): Point {\n      const { a } = CURVE;\n      const { ex: X1, ey: Y1, ez: Z1 } = this;\n      const A = modP(X1 * X1); // A = X12\n      const B = modP(Y1 * Y1); // B = Y12\n      const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12\n      const D = modP(a * A); // D = a*A\n      const x1y1 = X1 + Y1;\n      const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B\n      const G = D + B; // G = D+B\n      const F = G - C; // F = G-C\n      const H = D - B; // H = D-B\n      const X3 = modP(E * F); // X3 = E*F\n      const Y3 = modP(G * H); // Y3 = G*H\n      const T3 = modP(E * H); // T3 = E*H\n      const Z3 = modP(F * G); // Z3 = F*G\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    // Fast algo for adding 2 Extended Points.\n    // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n    // Cost: 9M + 1*a + 1*d + 7add.\n    add(other: Point) {\n      isPoint(other);\n      const { a, d } = CURVE;\n      const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;\n      const { ex: X2, ey: Y2, ez: Z2, et: T2 } = other;\n      // Faster algo for adding 2 Extended Points when curve's a=-1.\n      // http://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-4\n      // Cost: 8M + 8add + 2*2.\n      // Note: It does not check whether the `other` point is valid.\n      if (a === BigInt(-1)) {\n        const A = modP((Y1 - X1) * (Y2 + X2));\n        const B = modP((Y1 + X1) * (Y2 - X2));\n        const F = modP(B - A);\n        if (F === _0n) return this.double(); // Same point. Tests say it doesn't affect timing\n        const C = modP(Z1 * _2n * T2);\n        const D = modP(T1 * _2n * Z2);\n        const E = D + C;\n        const G = B + A;\n        const H = D - C;\n        const X3 = modP(E * F);\n        const Y3 = modP(G * H);\n        const T3 = modP(E * H);\n        const Z3 = modP(F * G);\n        return new Point(X3, Y3, Z3, T3);\n      }\n      const A = modP(X1 * X2); // A = X1*X2\n      const B = modP(Y1 * Y2); // B = Y1*Y2\n      const C = modP(T1 * d * T2); // C = T1*d*T2\n      const D = modP(Z1 * Z2); // D = Z1*Z2\n      const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B\n      const F = D - C; // F = D-C\n      const G = D + C; // G = D+C\n      const H = modP(B - a * A); // H = B-a*A\n      const X3 = modP(E * F); // X3 = E*F\n      const Y3 = modP(G * H); // Y3 = G*H\n      const T3 = modP(E * H); // T3 = E*H\n      const Z3 = modP(F * G); // Z3 = F*G\n\n      return new Point(X3, Y3, Z3, T3);\n    }\n\n    subtract(other: Point): Point {\n      return this.add(other.negate());\n    }\n\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, Point.normalizeZ);\n    }\n\n    // Constant-time multiplication.\n    multiply(scalar: bigint): Point {\n      const { p, f } = this.wNAF(assertInRange(scalar, CURVE_ORDER));\n      return Point.normalizeZ([p, f])[0];\n    }\n\n    // Non-constant-time multiplication. Uses double-and-add algorithm.\n    // It's faster, but should only be used when you don't care about\n    // an exposed private key e.g. sig verification.\n    // Does NOT allow scalars higher than CURVE.n.\n    multiplyUnsafe(scalar: bigint): Point {\n      let n = assertGE0(scalar); // 0 <= scalar < CURVE.n\n      if (n === _0n) return I;\n      if (this.equals(I) || n === _1n) return this;\n      if (this.equals(G)) return this.wNAF(n).p;\n      return wnaf.unsafeLadder(this, n);\n    }\n\n    // Checks if point is of small order.\n    // If you add something to small order point, you will have \"dirty\"\n    // point with torsion component.\n    // Multiplies point by cofactor and checks if the result is 0.\n    isSmallOrder(): boolean {\n      return this.multiplyUnsafe(cofactor).is0();\n    }\n\n    // Multiplies point by curve order and checks if the result is 0.\n    // Returns `false` is the point is dirty.\n    isTorsionFree(): boolean {\n      return wnaf.unsafeLadder(this, CURVE_ORDER).is0();\n    }\n\n    // Converts Extended point to default (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    toAffine(iz?: bigint): AffinePoint<bigint> {\n      const { ex: x, ey: y, ez: z } = this;\n      const is0 = this.is0();\n      if (iz == null) iz = is0 ? _8n : (Fp.inv(z) as bigint); // 8 was chosen arbitrarily\n      const ax = modP(x * iz);\n      const ay = modP(y * iz);\n      const zz = modP(z * iz);\n      if (is0) return { x: _0n, y: _1n };\n      if (zz !== _1n) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n\n    clearCofactor(): Point {\n      const { h: cofactor } = CURVE;\n      if (cofactor === _1n) return this;\n      return this.multiplyUnsafe(cofactor);\n    }\n\n    // Converts hash string or Uint8Array to Point.\n    // Uses algo from RFC8032 5.1.3.\n    static fromHex(hex: Hex, zip215 = false): Point {\n      const { d, a } = CURVE;\n      const len = Fp.BYTES;\n      hex = ensureBytes('pointHex', hex, len); // copy hex to a new array\n      const normed = hex.slice(); // copy again, we'll manipulate it\n      const lastByte = hex[len - 1]; // select last byte\n      normed[len - 1] = lastByte & ~0x80; // clear last bit\n      const y = ut.bytesToNumberLE(normed);\n      if (y === _0n) {\n        // y=0 is allowed\n      } else {\n        // RFC8032 prohibits >= p, but ZIP215 doesn't\n        if (zip215) assertInRange(y, MASK); // zip215=true [1..P-1] (2^255-19-1 for ed25519)\n        else assertInRange(y, Fp.ORDER); // zip215=false [1..MASK-1] (2^256-1 for ed25519)\n      }\n\n      // Ed25519: x\u00B2 = (y\u00B2-1)/(dy\u00B2+1) mod p. Ed448: x\u00B2 = (y\u00B2-1)/(dy\u00B2-1) mod p. Generic case:\n      // ax\u00B2+y\u00B2=1+dx\u00B2y\u00B2 => y\u00B2-1=dx\u00B2y\u00B2-ax\u00B2 => y\u00B2-1=x\u00B2(dy\u00B2-a) => x\u00B2=(y\u00B2-1)/(dy\u00B2-a)\n      const y2 = modP(y * y); // denominator is always non-0 mod p.\n      const u = modP(y2 - _1n); // u = y\u00B2 - 1\n      const v = modP(d * y2 - a); // v = d y\u00B2 + 1.\n      let { isValid, value: x } = uvRatio(u, v); // \u221A(u/v)\n      if (!isValid) throw new Error('Point.fromHex: invalid y coordinate');\n      const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper\n      const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n      if (!zip215 && x === _0n && isLastByteOdd)\n        // if x=0 and x_0 = 1, fail\n        throw new Error('Point.fromHex: x=0 and x_0=1');\n      if (isLastByteOdd !== isXOdd) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n      return Point.fromAffine({ x, y });\n    }\n    static fromPrivateKey(privKey: Hex) {\n      return getExtendedPublicKey(privKey).point;\n    }\n    toRawBytes(): Uint8Array {\n      const { x, y } = this.toAffine();\n      const bytes = ut.numberToBytesLE(y, Fp.BYTES); // each y has 2 x values (x, -y)\n      bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0; // when compressing, it's enough to store y\n      return bytes; // and use the last byte to encode sign of x\n    }\n    toHex(): string {\n      return ut.bytesToHex(this.toRawBytes()); // Same as toRawBytes, but returns string.\n    }\n  }\n  const { BASE: G, ZERO: I } = Point;\n  const wnaf = wNAF(Point, nByteLength * 8);\n\n  function modN(a: bigint) {\n    return mod(a, CURVE_ORDER);\n  }\n  // Little-endian SHA512 with modulo n\n  function modN_LE(hash: Uint8Array): bigint {\n    return modN(ut.bytesToNumberLE(hash));\n  }\n\n  /** Convenience method that creates public key and other stuff. RFC8032 5.1.5 */\n  function getExtendedPublicKey(key: Hex) {\n    const len = nByteLength;\n    key = ensureBytes('private key', key, len);\n    // Hash private key with curve's hash function to produce uniformingly random input\n    // Check byte lengths: ensure(64, h(ensure(32, key)))\n    const hashed = ensureBytes('hashed private key', cHash(key), 2 * len);\n    const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE\n    const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)\n    const scalar = modN_LE(head); // The actual private scalar\n    const point = G.multiply(scalar); // Point on Edwards curve aka public key\n    const pointBytes = point.toRawBytes(); // Uint8Array representation\n    return { head, prefix, scalar, point, pointBytes };\n  }\n\n  // Calculates EdDSA pub key. RFC8032 5.1.5. Privkey is hashed. Use first half with 3 bits cleared\n  function getPublicKey(privKey: Hex): Uint8Array {\n    return getExtendedPublicKey(privKey).pointBytes;\n  }\n\n  // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n  function hashDomainToScalar(context: Hex = new Uint8Array(), ...msgs: Uint8Array[]) {\n    const msg = ut.concatBytes(...msgs);\n    return modN_LE(cHash(domain(msg, ensureBytes('context', context), !!prehash)));\n  }\n\n  /** Signs message with privateKey. RFC8032 5.1.6 */\n  function sign(msg: Hex, privKey: Hex, options: { context?: Hex } = {}): Uint8Array {\n    msg = ensureBytes('message', msg);\n    if (prehash) msg = prehash(msg); // for ed25519ph etc.\n    const { prefix, scalar, pointBytes } = getExtendedPublicKey(privKey);\n    const r = hashDomainToScalar(options.context, prefix, msg); // r = dom2(F, C) || prefix || PH(M)\n    const R = G.multiply(r).toRawBytes(); // R = rG\n    const k = hashDomainToScalar(options.context, R, pointBytes, msg); // R || A || PH(M)\n    const s = modN(r + k * scalar); // S = (r + k * s) mod L\n    assertGE0(s); // 0 <= s < l\n    const res = ut.concatBytes(R, ut.numberToBytesLE(s, Fp.BYTES));\n    return ensureBytes('result', res, nByteLength * 2); // 64-byte signature\n  }\n\n  const verifyOpts: { context?: Hex; zip215?: boolean } = VERIFY_DEFAULT;\n  function verify(sig: Hex, msg: Hex, publicKey: Hex, options = verifyOpts): boolean {\n    const { context, zip215 } = options;\n    const len = Fp.BYTES; // Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n    sig = ensureBytes('signature', sig, 2 * len); // An extended group equation is checked.\n    msg = ensureBytes('message', msg);\n    if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n    const s = ut.bytesToNumberLE(sig.slice(len, 2 * len));\n    // zip215: true is good for consensus-critical apps and allows points < 2^256\n    // zip215: false follows RFC8032 / NIST186-5 and restricts points to CURVE.p\n    let A, R, SB;\n    try {\n      A = Point.fromHex(publicKey, zip215);\n      R = Point.fromHex(sig.slice(0, len), zip215);\n      SB = G.multiplyUnsafe(s); // 0 <= s < l is done inside\n    } catch (error) {\n      return false;\n    }\n    if (!zip215 && A.isSmallOrder()) return false;\n\n    const k = hashDomainToScalar(context, R.toRawBytes(), A.toRawBytes(), msg);\n    const RkA = R.add(A.multiplyUnsafe(k));\n    // [8][S]B = [8]R + [8][k]A'\n    return RkA.subtract(SB).clearCofactor().equals(Point.ZERO);\n  }\n\n  G._setWindowSize(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n\n  const utils = {\n    getExtendedPublicKey,\n    // ed25519 private keys are uniform 32b. No need to check for modulo bias, like in secp256k1.\n    randomPrivateKey: (): Uint8Array => randomBytes(Fp.BYTES),\n\n    /**\n     * We're doing scalar multiplication (used in getPublicKey etc) with precomputed BASE_POINT\n     * values. This slows down first getPublicKey() by milliseconds (see Speed section),\n     * but allows to speed-up subsequent getPublicKey() calls up to 20x.\n     * @param windowSize 2, 4, 8, 16\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3));\n      return point;\n    },\n  };\n\n  return {\n    CURVE,\n    getPublicKey,\n    sign,\n    verify,\n    ExtendedPoint: Point,\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { mod, pow } from './modular.js';\nimport { bytesToNumberLE, ensureBytes, numberToBytesLE, validateObject } from './utils.js';\n\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\ntype Hex = string | Uint8Array;\n\nexport type CurveType = {\n  P: bigint; // finite field prime\n  nByteLength: number;\n  adjustScalarBytes?: (bytes: Uint8Array) => Uint8Array;\n  domain?: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n  a: bigint;\n  montgomeryBits: number;\n  powPminus2?: (x: bigint) => bigint;\n  xyToU?: (x: bigint, y: bigint) => bigint;\n  Gu: bigint;\n  randomBytes?: (bytesLength?: number) => Uint8Array;\n};\nexport type CurveFn = {\n  scalarMult: (scalar: Hex, u: Hex) => Uint8Array;\n  scalarMultBase: (scalar: Hex) => Uint8Array;\n  getSharedSecret: (privateKeyA: Hex, publicKeyB: Hex) => Uint8Array;\n  getPublicKey: (privateKey: Hex) => Uint8Array;\n  utils: { randomPrivateKey: () => Uint8Array };\n  GuBytes: Uint8Array;\n};\n\nfunction validateOpts(curve: CurveType) {\n  validateObject(\n    curve,\n    {\n      a: 'bigint',\n    },\n    {\n      montgomeryBits: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n      adjustScalarBytes: 'function',\n      domain: 'function',\n      powPminus2: 'function',\n      Gu: 'bigint',\n    }\n  );\n  // Set defaults\n  return Object.freeze({ ...curve } as const);\n}\n\n// NOTE: not really montgomery curve, just bunch of very specific methods for X25519/X448 (RFC 7748, https://www.rfc-editor.org/rfc/rfc7748)\n// Uses only one coordinate instead of two\nexport function montgomery(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef);\n  const { P } = CURVE;\n  const modP = (n: bigint) => mod(n, P);\n  const montgomeryBits = CURVE.montgomeryBits;\n  const montgomeryBytes = Math.ceil(montgomeryBits / 8);\n  const fieldLen = CURVE.nByteLength;\n  const adjustScalarBytes = CURVE.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n  const powPminus2 = CURVE.powPminus2 || ((x: bigint) => pow(x, P - BigInt(2), P));\n\n  // cswap from RFC7748. But it is not from RFC7748!\n  /*\n    cswap(swap, x_2, x_3):\n         dummy = mask(swap) AND (x_2 XOR x_3)\n         x_2 = x_2 XOR dummy\n         x_3 = x_3 XOR dummy\n         Return (x_2, x_3)\n  Where mask(swap) is the all-1 or all-0 word of the same length as x_2\n   and x_3, computed, e.g., as mask(swap) = 0 - swap.\n  */\n  function cswap(swap: bigint, x_2: bigint, x_3: bigint): [bigint, bigint] {\n    const dummy = modP(swap * (x_2 - x_3));\n    x_2 = modP(x_2 - dummy);\n    x_3 = modP(x_3 + dummy);\n    return [x_2, x_3];\n  }\n\n  // Accepts 0 as well\n  function assertFieldElement(n: bigint): bigint {\n    if (typeof n === 'bigint' && _0n <= n && n < P) return n;\n    throw new Error('Expected valid scalar 0 < scalar < CURVE.P');\n  }\n\n  // x25519 from 4\n  // The constant a24 is (486662 - 2) / 4 = 121665 for curve25519/X25519\n  const a24 = (CURVE.a - BigInt(2)) / BigInt(4);\n  /**\n   *\n   * @param pointU u coordinate (x) on Montgomery Curve 25519\n   * @param scalar by which the point would be multiplied\n   * @returns new Point on Montgomery curve\n   */\n  function montgomeryLadder(pointU: bigint, scalar: bigint): bigint {\n    const u = assertFieldElement(pointU);\n    // Section 5: Implementations MUST accept non-canonical values and process them as\n    // if they had been reduced modulo the field prime.\n    const k = assertFieldElement(scalar);\n    const x_1 = u;\n    let x_2 = _1n;\n    let z_2 = _0n;\n    let x_3 = u;\n    let z_3 = _1n;\n    let swap = _0n;\n    let sw: [bigint, bigint];\n    for (let t = BigInt(montgomeryBits - 1); t >= _0n; t--) {\n      const k_t = (k >> t) & _1n;\n      swap ^= k_t;\n      sw = cswap(swap, x_2, x_3);\n      x_2 = sw[0];\n      x_3 = sw[1];\n      sw = cswap(swap, z_2, z_3);\n      z_2 = sw[0];\n      z_3 = sw[1];\n      swap = k_t;\n\n      const A = x_2 + z_2;\n      const AA = modP(A * A);\n      const B = x_2 - z_2;\n      const BB = modP(B * B);\n      const E = AA - BB;\n      const C = x_3 + z_3;\n      const D = x_3 - z_3;\n      const DA = modP(D * A);\n      const CB = modP(C * B);\n      const dacb = DA + CB;\n      const da_cb = DA - CB;\n      x_3 = modP(dacb * dacb);\n      z_3 = modP(x_1 * modP(da_cb * da_cb));\n      x_2 = modP(AA * BB);\n      z_2 = modP(E * (AA + modP(a24 * E)));\n    }\n    // (x_2, x_3) = cswap(swap, x_2, x_3)\n    sw = cswap(swap, x_2, x_3);\n    x_2 = sw[0];\n    x_3 = sw[1];\n    // (z_2, z_3) = cswap(swap, z_2, z_3)\n    sw = cswap(swap, z_2, z_3);\n    z_2 = sw[0];\n    z_3 = sw[1];\n    // z_2^(p - 2)\n    const z2 = powPminus2(z_2);\n    // Return x_2 * (z_2^(p - 2))\n    return modP(x_2 * z2);\n  }\n\n  function encodeUCoordinate(u: bigint): Uint8Array {\n    return numberToBytesLE(modP(u), montgomeryBytes);\n  }\n\n  function decodeUCoordinate(uEnc: Hex): bigint {\n    // Section 5: When receiving such an array, implementations of X25519\n    // MUST mask the most significant bit in the final byte.\n    const u = ensureBytes('u coordinate', uEnc, montgomeryBytes);\n    if (fieldLen === 32) u[31] &= 127; // 0b0111_1111\n    return bytesToNumberLE(u);\n  }\n  function decodeScalar(n: Hex): bigint {\n    const bytes = ensureBytes('scalar', n);\n    const len = bytes.length;\n    if (len !== montgomeryBytes && len !== fieldLen)\n      throw new Error(`Expected ${montgomeryBytes} or ${fieldLen} bytes, got ${len}`);\n    return bytesToNumberLE(adjustScalarBytes(bytes));\n  }\n  function scalarMult(scalar: Hex, u: Hex): Uint8Array {\n    const pointU = decodeUCoordinate(u);\n    const _scalar = decodeScalar(scalar);\n    const pu = montgomeryLadder(pointU, _scalar);\n    // The result was not contributory\n    // https://cr.yp.to/ecdh.html#validate\n    if (pu === _0n) throw new Error('Invalid private or public key received');\n    return encodeUCoordinate(pu);\n  }\n  // Computes public key from private. By doing scalar multiplication of base point.\n  const GuBytes = encodeUCoordinate(CURVE.Gu);\n  function scalarMultBase(scalar: Hex): Uint8Array {\n    return scalarMult(scalar, GuBytes);\n  }\n\n  return {\n    scalarMult,\n    scalarMultBase,\n    getSharedSecret: (privateKey: Hex, publicKey: Hex) => scalarMult(privateKey, publicKey),\n    getPublicKey: (privateKey: Hex): Uint8Array => scalarMultBase(privateKey),\n    utils: { randomPrivateKey: () => CURVE.randomBytes!(CURVE.nByteLength) },\n    GuBytes: GuBytes,\n  };\n}\n", "import { Convert } from '@web5/common';\nimport { ed25519, edwardsToMontgomeryPub, edwardsToMontgomeryPriv, x25519 } from '@noble/curves/ed25519';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Ed25519` class provides a comprehensive suite of utilities for working with the Ed25519\n * elliptic curve, widely used in modern cryptographic applications. This class includes methods for\n * key generation, conversion, signing, verification, and public key derivation.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * follows the guidelines and specifications outlined in RFC8032 for EdDSA (Edwards-curve Digital\n * Signature Algorithm) operations.\n *\n * Key Features:\n * - Key Generation: Generate Ed25519 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - Signing and Verification: Sign data and verify signatures with Ed25519 keys.\n * - Key Validation: Validate the mathematical correctness of Ed25519 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Ed25519.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Ed25519.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Ed25519.getPublicKey({ key: privateKey })); // Output: true\n *\n * // EdDSA Signing\n * const signature = await Ed25519.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // EdDSA Signature Verification\n * const isValid = await Ed25519.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n * const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n *\n * // Key Validation\n * const isPublicKeyValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Ed25519 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a private key as a byte array (Uint8Array) for the Curve25519 curve in\n   * Twisted Edwards form and transforms it into a JWK object. The process involves first deriving\n   * the public key from the private key, then encoding both the private and public keys into\n   * base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'Ed25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The computed public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Ed25519.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Derive the public key from the private key.\n    const publicKeyBytes  = ed25519.getPublicKey(privateKeyBytes);\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      crv : 'Ed25519',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'OKP',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key as a byte array (Uint8Array) for the Curve25519 curve in\n   * Twisted Edwards form and transforms it into a JWK object. The process involves encoding the\n   * public key bytes into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `x`: The public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await X25519.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'Ed25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Derives the public key in JWK format from a given Ed25519 private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format.  The derivation process involves converting the private key to a\n   * raw byte array and then computing the corresponding public key on the Curve25519 curve in\n   * Twisted Edwards form. The public key is then encoded into base64url format to construct\n   * a JWK representation.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const publicKey = await Ed25519.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the computed public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Ed25519.privateKeyToBytes({ privateKey: key });\n\n    // Derive the public key from the private key.\n    const publicKeyBytes  = ed25519.getPublicKey(privateKeyBytes);\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'Ed25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an Ed25519 private key to its X25519 counterpart.\n   *\n   * @remarks\n   * This method enables the use of the same key pair for both digital signature (Ed25519)\n   * and key exchange (X25519) operations. It takes an Ed25519 private key and converts it\n   * to the corresponding X25519 format, facilitating interoperability between signing\n   * and encryption protocols.\n   *\n   * @example\n   * ```ts\n   * const ed25519PrivateKey = { ... }; // An Ed25519 private key in JWK format\n   * const x25519PrivateKey = await Ed25519.convertPrivateKeyToX25519({\n   *   privateKey: ed25519PrivateKey\n   * });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The Ed25519 private key to convert, in JWK format.\n   *\n   * @returns A Promise that resolves to the X25519 private key in JWK format.\n   */\n  public static async convertPrivateKeyToX25519({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Jwk> {\n    // Convert the provided Ed25519 private key to bytes.\n    const ed25519PrivateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n\n    // Convert the Ed25519 private key to an X25519 private key.\n    const x25519PrivateKeyBytes = edwardsToMontgomeryPriv(ed25519PrivateKeyBytes);\n\n    // Derive the X25519 public key from the X25519 private key.\n    const x25519PublicKeyBytes = x25519.getPublicKey(x25519PrivateKeyBytes);\n\n    // Construct the X25519 private key in JWK format.\n    const x25519PrivateKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      d   : Convert.uint8Array(x25519PrivateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(x25519PublicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    x25519PrivateKey.kid = await computeJwkThumbprint({ jwk: x25519PrivateKey });\n\n    return x25519PrivateKey;\n  }\n\n  /**\n   * Converts an Ed25519 public key to its X25519 counterpart.\n   *\n   * @remarks\n   * This method enables the use of the same key pair for both digital signature (Ed25519)\n   * and key exchange (X25519) operations. It takes an Ed25519 public key and converts it\n   * to the corresponding X25519 format, facilitating interoperability between signing\n   * and encryption protocols.\n   *\n   * @example\n   * ```ts\n   * const ed25519PublicKey = { ... }; // An Ed25519 public key in JWK format\n   * const x25519PublicKey = await Ed25519.convertPublicKeyToX25519({\n   *   publicKey: ed25519PublicKey\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The Ed25519 public key to convert, in JWK format.\n   *\n   * @returns A Promise that resolves to the X25519 public key in JWK format.\n   */\n  public static async convertPublicKeyToX25519({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const ed25519PublicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n\n    // Verify Edwards public key is valid.\n    const isValid = await Ed25519.validatePublicKey({ publicKeyBytes: ed25519PublicKeyBytes });\n    if (!isValid) {\n      throw new Error('Ed25519: Invalid public key.');\n    }\n\n    // Convert the Ed25519 public key to an X25519 private key.\n    const x25519PublicKeyBytes = edwardsToMontgomeryPub(ed25519PublicKeyBytes);\n\n    // Construct the X25519 private key in JWK format.\n    const x25519PublicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(x25519PublicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    x25519PublicKey.kid = await computeJwkThumbprint({ jwk: x25519PublicKey });\n\n    return x25519PublicKey;\n  }\n\n  /**\n   * Generates an Ed25519 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the Curve25519 elliptic curve in\n   * Twisted Edwards form. The key generation process involves using cryptographically secure\n   * random number generation to ensure the uniqueness and security of the key. The resulting\n   * private key adheres to the JWK format making it compatible with common cryptographic\n   * standards and easy to use in various cryptographic processes.\n   *\n   * The generated private key in JWK format includes the following components:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'Ed25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Ed25519.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = ed25519.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Ed25519.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an Ed25519 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 100 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const publicKey = await Ed25519.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n  // Verify the provided JWK represents an octet key pair (OKP) Ed25519 private key.\n    if (!(isOkpPrivateJwk(key) && key.crv === 'Ed25519')) {\n      throw new Error(`Ed25519: The provided key is not an Ed25519 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a private key in JWK format and extracts its raw byte representation.\n   *\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'd' parameter of the JWK\n   * from base64url format into a byte array.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An Ed25519 private key in JWK format\n   * const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP private key.\n    if (!isOkpPrivateJwk(privateKey)) {\n      throw new Error(`Ed25519: The provided key is not a valid OKP private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary form.\n   * The conversion process involves decoding the 'x' parameter of the JWK (which represent the\n   * x coordinate of the elliptic curve point) from base64url format into a byte array.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // An Ed25519 public key in JWK format\n   * const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP public key.\n    if (!isOkpPublicJwk(publicKey)) {\n      throw new Error(`Ed25519: The provided key is not a valid OKP public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const publicKeyBytes = Convert.base64Url(publicKey.x).toUint8Array();\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Generates an RFC8032-compliant EdDSA signature of given data using an Ed25519 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the EdDSA\n   * (Edwards-curve Digital Signature Algorithm) as defined in RFC8032. It\n   * involves converting the private key from JWK format to a byte array and then employing\n   * the Ed25519 algorithm to sign the data. The output is a digital signature in the form\n   * of a Uint8Array, uniquely corresponding to both the data and the private key used for\n   * signing.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const signature = await Ed25519.sign({ key: privateKey, data });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey: key });\n\n    // Sign the provided data using the EdDSA algorithm.\n    const signature = ed25519.sign(data, privateKeyBytes);\n\n    return signature;\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the Edwards curve.\n   *\n   * @remarks\n   * This method decodes the Edwards points from the key bytes and asserts their validity on the\n   * Curve25519 curve in Twisted Edwards form. If the points are not valid, the method returns\n   * false. If the points are valid, the method returns true.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the Edwards curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the public key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the key\n   *          corresponds to a valid point on the Edwards curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n    // Decode Edwards points from key bytes.\n      const point = ed25519.ExtendedPoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Twisted Edwards curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC8032-compliant EdDSA signature against given data using an Ed25519 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure its authenticity and integrity.\n   * It uses the EdDSA (Edwards-curve Digital Signature Algorithm) as specified in RFC8032.\n   * The verification process involves converting the public key from JWK format to a raw\n   * byte array and using the Ed25519 algorithm to validate the signature against the provided data.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // A Jwk object representing an Ed25519 public key\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isValid = await Ed25519.verify({ key: publicKey, signature, data });\n   * console.log(isValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key in JWK format used for verification.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: key });\n\n    // Perform the verification of the signature.\n    const isValid = ed25519.verify(signature, data, publicKeyBytes);\n\n    return isValid;\n  }\n}", "import type { Jwk } from '../jose/jwk.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AsymmetricKeyGenerator } from '../types/key-generator.js';\nimport type {\n  SignParams,\n  VerifyParams,\n  GenerateKeyParams,\n  GetPublicKeyParams,\n  ComputePublicKeyParams,\n} from '../types/params-direct.js';\n\nimport { Ed25519 } from '../primitives/ed25519.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `EdDsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the EdDSA algorithm.\n */\nexport interface EdDsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"Ed25519\"`: EdDSA using the Ed25519 curve.\n   */\n  algorithm: 'Ed25519';\n}\n\n/**\n * The `EdDsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Edwards-curve Digital Signature Algorithm (EdDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EdDsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EdDsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             Signer<SignParams, VerifyParams> {\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.computePublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = await eddsa.generateKey({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  async generateKey({ algorithm }:\n    EdDsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'Ed25519': {\n        const privateKey = await Ed25519.generateKey();\n        privateKey.alg = 'EdDSA';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an EdDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 100 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.getPublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an EdDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await eddsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.sign({ key, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an EdDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await eddsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isOkpPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) public key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n}", "import { KeyValueStore, MemoryStore } from '@web5/common';\n\nimport type { Jwk } from './jose/jwk.js';\nimport type { Hasher } from './types/hasher.js';\nimport type { Signer } from './types/signer.js';\nimport type { CryptoApi } from './types/crypto-api.js';\nimport type { KeyIdentifier } from './types/identifier.js';\nimport type { KeyImporterExporter } from './types/key-io.js';\nimport type { KeyGenerator, AsymmetricKeyGenerator } from './types/key-generator.js';\nimport type { GetPublicKeyParams, SignParams, VerifyParams } from './types/params-direct.js';\nimport type {\n  KmsSignParams,\n  KmsDigestParams,\n  KmsVerifyParams,\n  KmsExportKeyParams,\n  KmsGetKeyUriParams,\n  KmsImportKeyParams,\n  KmsGenerateKeyParams,\n  KmsGetPublicKeyParams,\n} from './types/params-kms.js';\n\nimport { Sha2Algorithm } from './algorithms/sha-2.js';\nimport { EcdsaAlgorithm } from './algorithms/ecdsa.js';\nimport { EdDsaAlgorithm } from './algorithms/eddsa.js';\nimport { CryptoAlgorithm } from './algorithms/crypto-algorithm.js';\nimport { computeJwkThumbprint, isPrivateJwk, KEY_URI_PREFIX_JWK } from './jose/jwk.js';\n\n/**\n * `supportedAlgorithms` is an object mapping algorithm names to their respective implementations\n * Each entry in this map specifies the algorithm name and its associated properties, including the\n * implementation class and any relevant names or identifiers for the algorithm. This structure\n * allows for easy retrieval and instantiation of algorithm implementations based on the algorithm\n * name or key specification. It facilitates the support of multiple algorithms within the\n * `LocalKeyManager` class.\n */\nconst supportedAlgorithms = {\n  'Ed25519': {\n    implementation : EdDsaAlgorithm,\n    names          : ['Ed25519'],\n  },\n  'secp256k1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256K', 'secp256k1'],\n  },\n  'secp256r1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256', 'secp256r1'],\n  },\n  'SHA-256': {\n    implementation : Sha2Algorithm,\n    names          : ['SHA-256']\n  }\n} satisfies {\n  [key: string]: {\n    implementation : typeof CryptoAlgorithm;\n    names          : string[];\n  }\n};\n\n/* Helper type for `supportedAlgorithms`. */\ntype SupportedAlgorithm = keyof typeof supportedAlgorithms;\n\n/* Helper type for `supportedAlgorithms` implementations. */\ntype AlgorithmConstructor = typeof supportedAlgorithms[SupportedAlgorithm]['implementation'];\n\n/**\n * The `LocalKeyManagerParams` interface specifies the parameters for initializing an instance of\n * `LocalKeyManager`. It allows the optional inclusion of a `KeyValueStore` instance for key\n * management. If not provided, a default `MemoryStore` instance will be used for storing keys in\n * memory. Note that the `MemoryStore` is not persistent and will be cleared when the application\n * exits.\n */\nexport type LocalKeyManagerParams = {\n  /**\n   * An optional property to specify a custom `KeyValueStore` instance for key management. If not\n   * provided, {@link LocalKeyManager | `LocalKeyManager`} uses a default `MemoryStore` instance.\n   * This store is responsible for managing cryptographic keys, allowing them to be retrieved,\n   * stored, and managed during cryptographic operations.\n   */\n  keyStore?: KeyValueStore<KeyIdentifier, Jwk>;\n};\n\n/**\n * The `LocalKeyManagerDigestParams` interface defines the algorithm-specific parameters that should\n * be passed into the {@link LocalKeyManager.digest | `LocalKeyManager.digest()`} method.\n */\nexport interface LocalKeyManagerDigestParams extends KmsDigestParams {\n  /**\n   * A string defining the name of hash function to use. The value must be one of the following:\n   * - `\"SHA-256\"`: Generates a 256-bit digest.\n   */\n  algorithm: 'SHA-256';\n}\n\n/**\n * The `LocalKeyManagerGenerateKeyParams` interface defines the algorithm-specific parameters that\n * should be passed into the {@link LocalKeyManager.generateKey | `LocalKeyManager.generateKey()`}\n * method when generating a key in the local KMS.\n */\nexport interface LocalKeyManagerGenerateKeyParams extends KmsGenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"Ed25519\"`\n   * - `\"secp256k1\"`\n   */\n  algorithm: 'Ed25519' | 'secp256k1' | 'secp256r1';\n}\n\nexport class LocalKeyManager implements\n    CryptoApi,\n    KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams> {\n\n  /**\n   * A private map that stores instances of cryptographic algorithm implementations. Each key in\n   * this map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class\n   * that implements a specific cryptographic algorithm. This map is used to cache and reuse\n   * instances for performance optimization, ensuring that each algorithm is instantiated only once.\n   */\n  private _algorithmInstances: Map<AlgorithmConstructor, InstanceType<typeof CryptoAlgorithm>> = new Map();\n\n  /**\n   * The `_keyStore` private variable in `LocalKeyManager` is a `KeyValueStore` instance used for\n   * storing and managing cryptographic keys. It allows the `LocalKeyManager` class to save,\n   * retrieve, and handle keys efficiently within the local Key Management System (KMS) context.\n   * This variable can be configured to use different storage backends, like in-memory storage or\n   * persistent storage, providing flexibility in key management according to the application's\n   * requirements.\n   */\n  private _keyStore: KeyValueStore<KeyIdentifier, Jwk>;\n\n  constructor(params?: LocalKeyManagerParams) {\n    this._keyStore = params?.keyStore ?? new MemoryStore<KeyIdentifier, Jwk>();\n  }\n\n  /**\n   * Generates a hash digest of the provided data.\n   *\n   * @remarks\n   * A digest is the output of the hash function. It's a fixed-size string of bytes\n   * that uniquely represents the data input into the hash function. The digest is often used for\n   * data integrity checks, as any alteration in the input data results in a significantly\n   * different digest.\n   *\n   * It takes the algorithm identifier of the hash function and data to digest as input and returns\n   * the digest of the data.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const data = new Uint8Array([...]);\n   * const digest = await keyManager.digest({ algorithm: 'SHA-256', data });\n   * ```\n   *\n   * @param params - The parameters for the digest operation.\n   * @param params.algorithm - The name of hash function to use.\n   * @param params.data - The data to digest.\n   *\n   * @returns A Promise which will be fulfilled with the hash digest.\n   */\n  public async digest({ algorithm, data }:\n    LocalKeyManagerDigestParams\n  ): Promise<Uint8Array> {\n    // Get the hash function implementation based on the specified `algorithm` parameter.\n    const hasher = this.getAlgorithm({ algorithm }) as Hasher<KmsDigestParams>;\n\n    // Compute the hash.\n    const hash = await hasher.digest({ algorithm, data });\n\n    return hash;\n  }\n\n  /**\n   * Exports a private key identified by the provided key URI from the local KMS.\n   *\n   * @remarks\n   * This method retrieves the key from the key store and returns it. It is primarily used\n   * for extracting keys for backup or transfer purposes.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const privateKey = await keyManager.exportKey({ keyUri });\n   * ```\n   *\n   * @param params - Parameters for exporting the key.\n   * @param params.keyUri - The key URI identifying the key to export.\n   *\n   * @returns A Promise resolving to the JWK representation of the exported key.\n   */\n  public async exportKey({ keyUri }:\n    KmsExportKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    return privateKey;\n  }\n\n  /**\n   * Generates a new cryptographic key in the local KMS with the specified algorithm and returns a\n   * unique key URI which can be used to reference the key in subsequent operations.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * console.log(keyUri); // Outputs the key URI\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation, defined in `SupportedAlgorithm`.\n   *\n   * @returns A Promise that resolves to the key URI, a unique identifier for the generated key.\n   */\n  public async generateKey({ algorithm }:\n    LocalKeyManagerGenerateKeyParams\n  ): Promise<KeyIdentifier> {\n    // Get the key generator implementation based on the specified `algorithm` parameter.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as KeyGenerator<LocalKeyManagerGenerateKeyParams, Jwk>;\n\n    // Generate the key.\n    const key = await keyGenerator.generateKey({ algorithm });\n\n    if (key?.kid === undefined) {\n      throw new Error('Generated key is missing a required property: kid');\n    }\n\n    // Construct the key URI.\n    const keyUri = `${KEY_URI_PREFIX_JWK}${key.kid}`;\n\n    // Store the key in the key store.\n    await this._keyStore.set(keyUri, key);\n\n    return keyUri;\n  }\n\n  /**\n   * Computes the Key URI for a given public JWK (JSON Web Key).\n   *\n   * @remarks\n   * This method generates a {@link https://datatracker.ietf.org/doc/html/rfc3986 | URI}\n   * (Uniform Resource Identifier) for the given JWK, which uniquely identifies the key across all\n   * `CryptoApi` implementations. The key URI is constructed by appending the\n   * {@link https://datatracker.ietf.org/doc/html/rfc7638 | JWK thumbprint} to the prefix\n   * `urn:jwk:`. The JWK thumbprint is deterministically computed from the JWK and is consistent\n   * regardless of property order or optional property inclusion in the JWK. This ensures that the\n   * same key material represented as a JWK will always yield the same thumbprint, and therefore,\n   * the same key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * const keyUriFromPublicKey = await keyManager.getKeyUri({ key: publicKey });\n   * console.log(keyUri === keyUriFromPublicKey); // Outputs `true`\n   * ```\n   *\n   * @param params - The parameters for getting the key URI.\n   * @param params.key - The JWK for which to compute the key URI.\n   *\n   * @returns A Promise that resolves to the key URI as a string.\n   */\n  public async getKeyUri({ key }:\n    KmsGetKeyUriParams\n  ): Promise<KeyIdentifier> {\n    // Compute the JWK thumbprint.\n    const jwkThumbprint = await computeJwkThumbprint({ jwk: key });\n\n    // Construct the key URI by appending the JWK thumbprint to the key URI prefix.\n    const keyUri = `${KEY_URI_PREFIX_JWK}${jwkThumbprint}`;\n\n    return keyUri;\n  }\n\n  /**\n   * Retrieves the public key associated with a previously generated private key, identified by\n   * the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key.\n   * @param params.keyUri - The key URI of the private key to retrieve the public key for.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ keyUri }:\n    KmsGetPublicKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the key generator based on the algorithm name.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator<LocalKeyManagerGenerateKeyParams, Jwk, GetPublicKeyParams>;\n\n    // Get the public key properties from the private JWK.\n    const publicKey = await keyGenerator.getPublicKey({ key: privateKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Imports a private key into the local KMS.\n   *\n   * @remarks\n   * This method stores the provided JWK in the key store, making it available for subsequent\n   * cryptographic operations. It is particularly useful for initializing the KMS with pre-existing\n   * keys or for restoring keys from backups.\n   *\n   * Note that, if defined, the `kid` (key ID) property of the JWK is used as the key URI for the\n   * imported key. If the `kid` property is not provided, the key URI is computed from the JWK\n   * thumbprint of the key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const privateKey = { ... } // A private key in JWK format\n   * const keyUri = await keyManager.importKey({ key: privateKey });\n   * ```\n   *\n   * @param params - Parameters for importing the key.\n   * @param params.key - The private key to import to in JWK format.\n   *\n   * @returns A Promise resolving to the key URI, uniquely identifying the imported key.\n   */\n  public async importKey({ key }:\n    KmsImportKeyParams\n  ): Promise<KeyIdentifier> {\n    if (!isPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be a private key in JWK format.');\n\n    // Make a deep copy of the key to avoid mutating the original.\n    const privateKey = structuredClone(key);\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    privateKey.kid ??= await computeJwkThumbprint({ jwk: privateKey });\n\n    // Compute the key URI for the key.\n    const keyUri = await this.getKeyUri({ key: privateKey });\n\n    // Store the key in the key store.\n    await this._keyStore.set(keyUri, privateKey);\n\n    return keyUri;\n  }\n\n  /**\n   * Signs the provided data using the private key identified by the provided key URI.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * private key identified by the provided key URI to sign the provided data. The signature can\n   * later be verified by parties with access to the corresponding public key, ensuring that the\n   * data has not been tampered with and was indeed signed by the holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.keyUri - The key URI of the private key to use for signing.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ keyUri, data }:\n    KmsSignParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Sign the data.\n    const signature = signer.sign({ data, key: privateKey });\n\n    return signature;\n  }\n\n  /**\n   * Verifies a digital signature associated the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * provided key to check the validity of a digital signature against the original data. It\n   * confirms whether the signature was created by the holder of the corresponding private key and\n   * that the data has not been tampered with.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * const isSignatureValid = await keyManager.verify({ keyUri, data, signature });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    KmsVerifyParams\n  ): Promise<boolean> {\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Verify the signature.\n    const isSignatureValid = signer.verify({ key, signature, data });\n\n    return isSignatureValid;\n  }\n\n  /**\n   * Retrieves an algorithm implementation instance based on the provided algorithm name.\n   *\n   * @remarks\n   * This method checks if the requested algorithm is supported and returns a cached instance\n   * if available. If an instance does not exist, it creates and caches a new one. This approach\n   * optimizes performance by reusing algorithm instances across cryptographic operations.\n   *\n   * @example\n   * ```ts\n   * const signer = this.getAlgorithm({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for retrieving the algorithm implementation.\n   * @param params.algorithm - The name of the algorithm to retrieve.\n   *\n   * @returns An instance of the requested algorithm implementation.\n   *\n   * @throws Error if the requested algorithm is not supported.\n   */\n  private getAlgorithm({ algorithm }: {\n    algorithm: SupportedAlgorithm;\n  }): InstanceType<typeof CryptoAlgorithm> {\n    // Check if algorithm is supported.\n    const AlgorithmImplementation = supportedAlgorithms[algorithm]?.['implementation'];\n    if (!AlgorithmImplementation) {\n      throw new Error(`Algorithm not supported: ${algorithm}`);\n    }\n\n    // Check if instance already exists for the `AlgorithmImplementation`.\n    if (!this._algorithmInstances.has(AlgorithmImplementation)) {\n    // If not, create a new instance and store it in the cache\n      this._algorithmInstances.set(AlgorithmImplementation, new AlgorithmImplementation());\n    }\n\n    // Return the cached instance\n    return this._algorithmInstances.get(AlgorithmImplementation)!;\n  }\n\n  /**\n   * Determines the name of the algorithm based on the key's properties.\n   *\n   * @remarks\n   * This method facilitates the identification of the correct algorithm for cryptographic\n   * operations based on the `alg` or `crv` properties of a {@link Jwk | JWK}.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // Public key in JWK format\n   * const algorithm = this.getAlgorithmName({ key: publicKey });\n   * ```\n   *\n   * @param params - The parameters for determining the algorithm name.\n   * @param params.key - A JWK containing the `alg` or `crv` properties.\n   *\n   * @returns The name of the algorithm associated with the key.\n   *\n   * @throws Error if the algorithm cannot be determined from the provided input.\n   */\n  private getAlgorithmName({ key }: {\n    key: { alg?: string, crv?: string };\n  }): SupportedAlgorithm {\n    const algProperty = key.alg;\n    const crvProperty = key.crv;\n\n    for (const algName in supportedAlgorithms) {\n      const algorithmInfo = supportedAlgorithms[algName as SupportedAlgorithm];\n      if (algProperty && algorithmInfo.names.includes(algProperty)) {\n        return algName as SupportedAlgorithm;\n      } else if (crvProperty && algorithmInfo.names.includes(crvProperty)) {\n        return algName as SupportedAlgorithm;\n      }\n    }\n\n    throw new Error(`Unable to determine algorithm based on provided input: alg=${algProperty}, crv=${crvProperty}`);\n  }\n\n  /**\n   * Retrieves a private key from the key store based on the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const privateKey = this.getPrivateKey({ keyUri: 'urn:jwk:...' });\n   * ```\n   *\n   * @param params - Parameters for retrieving the private key.\n   * @param params.keyUri - The key URI identifying the private key to retrieve.\n   *\n   * @returns A Promise resolving to the JWK representation of the private key.\n   *\n   * @throws Error if the key is not found in the key store.\n   */\n  private async getPrivateKey({ keyUri }: {\n    keyUri: KeyIdentifier;\n  }): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this._keyStore.get(keyUri);\n\n    if (!privateKey) {\n      throw new Error(`Key not found: ${keyUri}`);\n    }\n\n    return privateKey;\n  }\n}", "import type { Jwk } from './jose/jwk.js';\n\nimport { crypto } from '@noble/hashes/crypto';\nimport { randomBytes as nobleRandomBytes } from '@noble/hashes/utils';\n\n/**\n * Checks whether the properties object provided contains the specified property.\n *\n * @example\n * ```ts\n * const obj = { a: 'Bob', t: 30 };\n * checkRequiredProperty({ property: 'a', inObject: obj }); // No error\n * checkRequiredProperty({ property: 'z', inObject: obj }); // Throws TypeError\n * ```\n *\n * @param params - The parameters for the check.\n * @param params.property - Property key to check for.\n * @param params.properties - Properties object to check within.\n * @returns void\n * @throws {TypeError} If the property is not a key in the properties object.\n */\nexport function checkRequiredProperty(params: {\n  property: string,\n  inObject: object\n}): void {\n  if (!params || params.property === undefined || params.inObject === undefined) {\n    throw new TypeError(`One or more required parameters missing: 'property, properties'`);\n  }\n  const { property, inObject } = params;\n  if (!(property in inObject)) {\n    throw new TypeError(`Required parameter missing: '${property}'`);\n  }\n}\n\n/**\n * Checks whether the property specified is a member of the list of valid properties.\n *\n * @example\n * ```ts\n * const property = 'color';\n * const allowedProperties = ['size', 'shape', 'color'];\n * checkValidProperty({ property, allowedProperties }); // No error\n * checkValidProperty({ property: 'weight', allowedProperties }); // Throws TypeError\n * ```\n *\n * @param property Property key to check for.\n * @param allowedProperties Properties Array, Map, or Set to check within.\n * @returns void\n * @throws {TypeError} If the property is not a member of the allowedProperties Array, Map, or Set.\n */\nexport function checkValidProperty(params: {\n  property: string, allowedProperties: ReadonlyArray<string> | Array<string> | Map<string, unknown> | Set<string>\n}): void {\n  if (!params || params.property === undefined || params.allowedProperties === undefined) {\n    throw new TypeError(`One or more required parameters missing: 'property, allowedProperties'`);\n  }\n  const { property, allowedProperties } = params;\n  if (\n    (Array.isArray(allowedProperties) && !allowedProperties.includes(property)) ||\n    (allowedProperties instanceof Set && !allowedProperties.has(property)) ||\n    (allowedProperties instanceof Map && !allowedProperties.has(property))\n  ) {\n    const validProperties = Array.from((allowedProperties instanceof Map) ? allowedProperties.keys() : allowedProperties).join(', ');\n    throw new TypeError(`Out of range: '${property}'. Must be one of '${validProperties}'`);\n  }\n}\n\n/**\n * Determines the JOSE algorithm identifier of the digital signature algorithm based on the `alg` or\n * `crv` property of a {@link Jwk | JWK}.\n *\n * If the `alg` property is present, its value takes precedence and is returned. Otherwise, the\n * `crv` property is used to determine the algorithm.\n *\n * @memberof CryptoUtils\n * @see {@link https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms | JOSE Algorithms}\n * @see {@link https://datatracker.ietf.org/doc/draft-ietf-jose-fully-specified-algorithms/ | Fully-Specified Algorithms for JOSE and COSE}\n *\n * @example\n * ```ts\n * const publicKey: Jwk = {\n *   \"kty\": \"OKP\",\n *   \"crv\": \"Ed25519\",\n *   \"x\": \"FEJG7OakZi500EydXxuE8uMc8uaAzEJkmQeG8khXANw\"\n * }\n * const algorithm = getJoseSignatureAlgorithmFromPublicKey(publicKey);\n * console.log(algorithm); // Output: \"EdDSA\"\n * ```\n * @param publicKey - A JWK containing the `alg` and/or `crv` properties.\n * @returns The name of the algorithm associated with the key.\n * @throws Error if the algorithm cannot be determined from the provided input.\n */\nexport function getJoseSignatureAlgorithmFromPublicKey(publicKey: Jwk): string {\n  const curveToJoseAlgorithm: Record<string, string> = {\n    'Ed25519'   : 'EdDSA',\n    'P-256'     : 'ES256',\n    'P-384'     : 'ES384',\n    'P-521'     : 'ES512',\n    'secp256k1' : 'ES256K',\n  };\n\n  // If the key contains an `alg` property that matches a JOSE registered algorithm identifier,\n  // return its value.\n  if (publicKey.alg && Object.values(curveToJoseAlgorithm).includes(publicKey.alg)) {\n    return publicKey.alg;\n  }\n\n  // If the key contains a `crv` property, return the corresponding algorithm.\n  if (publicKey.crv && Object.keys(curveToJoseAlgorithm).includes(publicKey.crv)) {\n    return curveToJoseAlgorithm[publicKey.crv];\n  }\n\n  throw new Error(\n    `Unable to determine algorithm based on provided input: alg=${publicKey.alg}, crv=${publicKey.crv}. ` +\n    `Supported 'alg' values: ${Object.values(curveToJoseAlgorithm).join(', ')}. ` +\n    `Supported 'crv' values: ${Object.keys(curveToJoseAlgorithm).join(', ')}.`\n  );\n}\n\n/**\n * Checks if the Web Crypto API is supported in the current runtime environment.\n *\n * @remarks\n * The function uses `globalThis` to provide a universal reference to the global\n * scope, regardless of the environment. `globalThis` is a standard feature introduced\n * in ECMAScript 2020 that is agnostic to the underlying JavaScript environment, making\n * the code portable across browser, Node.js, and Web Workers environments.\n *\n * In a web browser, `globalThis` is equivalent to the `window` object. In Node.js, it\n * is equivalent to the `global` object, and in Web Workers, it corresponds to `self`.\n *\n * This method checks for the `crypto` object and its `subtle` property on the global scope\n * to determine the availability of the Web Crypto API. If both are present, the API is\n * supported; otherwise, it is not.\n *\n * @example\n * ```ts\n * if (isWebCryptoSupported()) {\n *   console.log('Crypto operations can be performed');\n * } else {\n *   console.log('Crypto operations are not supported in this environment');\n * }\n * ```\n *\n * @returns A boolean indicating whether the Web Crypto API is supported in the current environment.\n */\nexport function isWebCryptoSupported(): boolean {\n  if (globalThis.crypto && globalThis.crypto.subtle) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Generates secure pseudorandom values of the specified length using\n * `crypto.getRandomValues`, which defers to the operating system.\n *\n * @memberof CryptoUtils\n * @remarks\n * This function is a wrapper around `randomBytes` from the '@noble/hashes'\n * package. It's designed to be cryptographically strong, suitable for\n * generating initialization vectors, nonces, and other random values.\n *\n * @see {@link https://www.npmjs.com/package/@noble/hashes | @noble/hashes on NPM} for more\n * information about the underlying implementation.\n *\n * @example\n * ```ts\n * const bytes = randomBytes(32); // Generates 32 random bytes\n * ```\n *\n * @param bytesLength - The number of bytes to generate.\n * @returns A Uint8Array containing the generated random bytes.\n */\nexport function randomBytes(bytesLength: number): Uint8Array {\n  return nobleRandomBytes(bytesLength);\n}\n\n/**\n * Generates a UUID (Universally Unique Identifier) using a\n * cryptographically strong random number generator following\n * the version 4 format, as specified in RFC 4122.\n *\n * A version 4 UUID is a randomly generated UUID. The 13th character\n * is set to '4' to denote version 4, and the 17th character is one\n * of '8', '9', 'A', or 'B' to comply with the variant 1 format of\n * UUIDs (the high bits are set to '10').\n *\n * The UUID is a 36 character string, including hyphens, and looks like this:\n * xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx\n *\n * Note that while UUIDs are not guaranteed to be unique, they are\n * practically unique\" given the large number of possible UUIDs and\n * the randomness of generation.\n * @memberof CryptoUtils\n * @example\n * ```ts\n * const uuid = randomUuid();\n * console.log(uuid); // Outputs a version 4 UUID, e.g., '123e4567-e89b-12d3-a456-426655440000'\n * ```\n *\n * @returns A string containing a randomly generated, 36 character long v4 UUID.\n */\nexport function randomUuid(): string {\n  const uuid = crypto.randomUUID();\n\n  return uuid;\n}\n\n\n/**\n * Generates a secure random PIN (Personal Identification Number) of a\n * specified length.\n *\n * This function ensures that the generated PIN is cryptographically secure and\n * uniformly distributed by using rejection sampling. It repeatedly generates\n * random numbers until it gets one in the desired range [0, max]. This avoids\n * bias introduced by simply taking the modulus or truncating the number.\n *\n * Note: The function can generate PINs of 3 to 10 digits in length.\n * Any request for a PIN outside this range will result in an error.\n *\n * Example usage:\n *\n * ```ts\n * const pin = randomPin({ length: 4 });\n * console.log(pin); // Outputs a 4-digit PIN, e.g., \"0231\"\n * ```\n * @memberof CryptoUtils\n * @param options - The options object containing the desired length of the generated PIN.\n * @param options.length - The desired length of the generated PIN. The value should be\n *                         an integer between 3 and 8 inclusive.\n *\n * @returns A string representing the generated PIN. The PIN will be zero-padded\n *          to match the specified length, if necessary.\n *\n * @throws Will throw an error if the requested PIN length is less than 3 or greater than 8.\n */\nexport function randomPin({ length }: { length: number }): string {\n  if (3 > length || length > 10) {\n    throw new Error('randomPin() can securely generate a PIN between 3 to 10 digits.');\n  }\n\n  const max = Math.pow(10, length) - 1;\n\n  let pin;\n\n  if (length <= 6) {\n    const rejectionRange = Math.pow(10, length);\n    do {\n      // Adjust the byte generation based on length.\n      const randomBuffer = randomBytes(Math.ceil(length / 2) );  // 2 digits per byte.\n      const view = new DataView(randomBuffer.buffer);\n      // Convert the buffer to integer and take modulus based on length.\n      pin = view.getUint16(0, false) % rejectionRange;\n    } while (pin > max);\n  } else {\n    const rejectionRange = Math.pow(10, 10); // For max 10 digit number.\n    do {\n    // Generates 4 random bytes.\n      const randomBuffer = randomBytes(4);\n      // Create a DataView to read from the randomBuffer.\n      const view = new DataView(randomBuffer.buffer);\n      // Transform bytes to number (big endian).\n      pin = view.getUint32(0, false) % rejectionRange;\n    } while (pin > max);  // Reject if the number is outside the desired range.\n  }\n\n  // Pad the PIN with leading zeros to the desired length.\n  return pin.toString().padStart(length, '0');\n}\n\n/** Utility functions for cryptographic operations. */\nexport const CryptoUtils = {\n  /** Generates a secure random PIN (Personal Identification Number) of a specified length. */\n  randomPin,\n  /** Generates a UUID following the version 4 format, as specified in RFC 4122. */\n  randomUuid,\n  /** Generates secure pseudorandom values of the specified length using `crypto.getRandomValues`, which defers to the operating system. */\n  randomBytes,\n  /** Checks if the Web Crypto API is supported in the current runtime environment. */\n  isWebCryptoSupported,\n  /** Determines the JOSE algorithm identifier of the digital signature algorithm based on the `alg` or `crv` property of a {@link Jwk | JWK}. */\n  getJoseSignatureAlgorithmFromPublicKey,\n  /** Checks whether the property specified is a member of the list of valid properties. */\n  checkValidProperty,\n  /** Checks whether the properties object provided contains the specified property. */\n  checkRequiredProperty\n};", "export {};\n//# sourceMappingURL=jwe.js.map", "export {};\n//# sourceMappingURL=jws.js.map", "export {};\n//# sourceMappingURL=jwt.js.map", "import { Convert } from '@web5/common';\nimport { x25519 } from '@noble/curves/ed25519';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `X25519` class provides a comprehensive suite of utilities for working with the X25519\n * elliptic curve, widely used for key agreement protocols and cryptographic applications. It\n * provides methods for key generation, conversion, and Elliptic Curve Diffie-Hellman (ECDH)\n * key agreement,  all aligned with standard cryptographic practices.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats,\n * making it versatile for various cryptographic tasks. It adheres to RFC6090 for ECDH, ensuring\n * secure and effective handling of keys and cryptographic operations.\n *\n * Key Features:\n * - Key Generation: Generate X25519 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await X25519.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await X25519.computePublicKey({ key: privateKey });\n * console.log(publicKey === await X25519.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await X25519.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await X25519.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await X25519.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class X25519 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a private key as a byte array (Uint8Array) for the X25519 elliptic curve\n   * and transforms it into a JWK object. The process involves first deriving the public key from\n   * the private key, then encoding both the private and public keys into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await X25519.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Derive the public key from the private key.\n    const publicKeyBytes  = x25519.getPublicKey(privateKeyBytes);\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key as a byte array (Uint8Array) for the X25519 elliptic curve\n   * and transforms it into a JWK object. The conversion process involves encoding the public\n   * key bytes into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `x`: The public key, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await X25519.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Derives the public key in JWK format from a given X25519 private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format.  The derivation process involves converting the private key to a\n   * raw byte array and then computing the corresponding public key on the Curve25519 curve.\n   * The public key is then encoded into base64url format to construct a JWK representation.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the Curve25519 elliptic curve in Twisted Edwards form standards. This method is\n   * useful in cryptographic operations where a public key is needed for operations like signature\n   * verification, but only the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an X25519 private key\n   * const publicKey = await X25519.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await X25519.privateKeyToBytes({ privateKey: key });\n\n    // Derive the public key from the private key.\n    const publicKeyBytes = x25519.getPublicKey(privateKeyBytes);\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Generates an X25519 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the X25519 elliptic curve.\n   * The key generation process involves using cryptographically secure random number generation\n   * to ensure the uniqueness and security of the key. The resulting private key adheres to the\n   * JWK format making it compatible with common cryptographic standards and easy to use in various\n   * cryptographic processes.\n   *\n   * The generated private key in JWK format includes the following components:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await X25519.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = x25519.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await X25519.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an X25519 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 500 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an X25519 private key\n   * const publicKey = await X25519.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n  // Verify the provided JWK represents an octet key pair (OKP) X25519 private key.\n    if (!(isOkpPrivateJwk(key) && key.crv === 'X25519')) {\n      throw new Error(`X25519: The provided key is not an X25519 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a private key in JWK format and extracts its raw byte representation.\n   *\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'd' parameter of the JWK\n   * from base64url format into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await X25519.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP private key.\n    if (!isOkpPrivateJwk(privateKey)) {\n      throw new Error(`X25519: The provided key is not a valid OKP private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary form.\n   * The conversion process involves decoding the 'x' parameter of the JWK (which represent the\n   * x coordinate of the elliptic curve point) from base64url format into a byte array.\n   *\n   * This conversion is essential for operations that require the public key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // An X25519 public key in JWK format\n   * const publicKeyBytes = await X25519.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP public key.\n    if (!isOkpPublicJwk(publicKey)) {\n      throw new Error(`X25519: The provided key is not a valid OKP public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const publicKeyBytes = Convert.base64Url(publicKey.x).toUint8Array();\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256k1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk object for party A\n   * const publicKeyB = { ... }; // A PublicKeyJwk object for party B\n   * const sharedSecret = await Secp256k1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`X25519: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await X25519.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await X25519.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the shared secret between the public and private keys.\n    const sharedSecret = x25519.getSharedSecret(privateKeyABytes, publicKeyBBytes);\n\n    return sharedSecret;\n  }\n}", "export type * from './types.js';\n\nexport * from './cache.js';\nexport * from './convert.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "import TTLCache from '@isaacs/ttlcache';\nexport { TTLCache as TtlCache };", "/**\n * Represents an array of a fixed length, preventing modifications to its size.\n *\n * The `FixedLengthArray` utility type transforms a standard array into a variant where\n * methods that could alter the length are omitted. It leverages TypeScript's advanced types,\n * such as conditional types and mapped types, to ensure that the array cannot be resized\n * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type\n * maintains all other characteristics of a standard array, including indexing, iteration,\n * and type checking for its elements.\n *\n * Note: The type does not prevent direct assignment to indices, even if it would exceed\n * the original length. However, such actions would lead to TypeScript type errors.\n *\n * @example\n * ```ts\n * // Declare a variable with a type of fixed-length array of three strings.\n * let myFixedLengthArray: FixedLengthArray< [string, string, string]>;\n *\n * // Array declaration tests\n * myFixedLengthArray = [ 'a', 'b', 'c' ];  // OK\n * myFixedLengthArray = [ 'a', 'b', 123 ];  // TYPE ERROR\n * myFixedLengthArray = [ 'a' ];            // LENGTH ERROR\n * myFixedLengthArray = [ 'a', 'b' ];       // LENGTH ERROR\n *\n * // Index assignment tests\n * myFixedLengthArray[1] = 'foo';           // OK\n * myFixedLengthArray[1000] = 'foo';        // INVALID INDEX ERROR\n *\n * // Methods that mutate array length\n * myFixedLengthArray.push('foo');          // MISSING METHOD ERROR\n * myFixedLengthArray.pop();                // MISSING METHOD ERROR\n *\n * // Direct length manipulation\n * myFixedLengthArray.length = 123;         // READ-ONLY ERROR\n *\n * // Destructuring\n * let [ a ] = myFixedLengthArray;          // OK\n * let [ a, b ] = myFixedLengthArray;       // OK\n * let [ a, b, c ] = myFixedLengthArray;    // OK\n * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR\n * ```\n *\n * @template T extends any[] - The array type to be transformed.\n */\nexport type FixedLengthArray<T extends any[]> =\n  Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>\n  & {\n    /**\n     * Custom iterator for the `FixedLengthArray` type.\n     *\n     * This iterator allows the `FixedLengthArray` to be used in standard iteration\n     * contexts, such as `for...of` loops and spread syntax. It ensures that even though\n     * the array is of a fixed length with disabled mutation methods, it still retains\n     * iterable behavior similar to a regular array.\n     *\n     * @returns An IterableIterator for the array items.\n     */\n    [Symbol.iterator]: () => IterableIterator<ArrayItems<T>>\n  };\n\n/** Helper types for {@link FixedLengthArray} */\ntype ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number;\ntype ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never;\n\n/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * Utility type that transforms a type `T` to have only certain keys `K` as required, while the\n * rest remain optional, except for keys specified in `O`, which are omitted entirely.\n *\n * This type is useful when you need a variation of a type where only specific properties are\n * required, and others are either optional or not included at all. It allows for more flexible type\n * definitions based on existing types without the need to redefine them.\n *\n * @template T - The original type to be transformed.\n * @template K - The keys of `T` that should be required.\n * @template O - The keys of `T` that should be omitted from the resulting type (optional).\n *\n * @example\n * ```ts\n * // Given an interface\n * interface Example {\n *   requiredProp: string;\n *   optionalProp?: number;\n *   anotherOptionalProp?: boolean;\n * }\n *\n * // Making 'optionalProp' required and omitting 'anotherOptionalProp'\n * type ModifiedExample = RequireOnly<Example, 'optionalProp', 'anotherOptionalProp'>;\n * // Result: { requiredProp?: string; optionalProp: number; }\n * ```\n */\nexport type RequireOnly<T, K extends keyof T, O extends keyof T = never> = Required<Pick<T, K>> & Omit<Partial<T>, O>;\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}\n\n/**\n * Utility type to extract the type resolved by a Promise.\n *\n * This type unwraps the type `T` from `Promise<T>` if `T` is a Promise, otherwise returns `T` as\n * is. It's useful in situations where you need to handle the type returned by a promise-based\n * function in a synchronous context, such as defining types for test vectors or handling return\n * types in non-async code blocks.\n *\n * @template T - The type to unwrap from the Promise.\n *\n * @example\n * ```ts\n * // For a Promise type, it extracts the resolved type.\n * type AsyncNumber = Promise<number>;\n * type UnwrappedNumber = UnwrapPromise<AsyncNumber>; // number\n *\n * // For a non-Promise type, it returns the type as is.\n * type StringValue = string;\n * type UnwrappedString = UnwrapPromise<StringValue>; // string\n * ```\n */\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;", "import type { Multibase } from 'multiformats';\n\nimport { base32z } from 'multiformats/bases/base32';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base32Z(data: string): Convert {\n    return new Convert(data, 'Base32Z');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase32Z(): string {\n    switch (this.format) {\n\n      case 'Uint8Array': {\n        return base32z.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base32Z': {\n        return base32z.baseDecode(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore<K = string, V = any> implements KeyValueStore<K, V> {\n  private store: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n\n  constructor({ db, location = 'DATASTORE' }: {\n    db?: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n    location?: string;\n  } = {}) {\n    this.store = db ?? new Level<K, V>(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: K): Promise<void> {\n    await this.store.del(key);\n  }\n\n  async get(key: K): Promise<V | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch (error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) return undefined;\n      throw error;\n    }\n  }\n\n  async set(key: K, value: V): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import type { Jwk } from '@web5/crypto';\nimport type { RequireOnly } from '@web5/common';\n\nimport { Convert, Multicodec } from '@web5/common';\nimport { computeJwkThumbprint } from '@web5/crypto';\n\nimport type { KeyWithMulticodec } from './types/multibase.js';\n\nimport { DidError, DidErrorCode } from './did-error.js';\nimport {\n  DidService,\n  DidDocument,\n  DidVerificationMethod,\n  DidVerificationRelationship,\n} from './types/did-core.js';\n\n/**\n * Represents a Decentralized Web Node (DWN) service in a DID Document.\n *\n * A DWN DID service is a specialized type of DID service with the `type` set to\n * `DecentralizedWebNode`. It includes specific properties `enc` and `sig` that are used to identify\n * the public keys that can be used to interact with the DID Subject. The values of these properties\n * are strings or arrays of strings containing one or more verification method `id` values present in\n * the same DID document. If the `enc` and/or `sig` properties are an array of strings, an entity\n * interacting with the DID subject is expected to use the verification methods in the order they\n * are listed.\n *\n * @example\n * ```ts\n * const service: DwnDidService = {\n *   id: 'did:example:123#dwn',\n *   type: 'DecentralizedWebNode',\n *   serviceEndpoint: 'https://dwn.tbddev.org/dwn0',\n *   enc: 'did:example:123#key-1',\n *   sig: 'did:example:123#key-2'\n * }\n * ```\n *\n * @see {@link https://identity.foundation/decentralized-web-node/spec/ | DIF Decentralized Web Node (DWN) Specification}\n */\nexport interface DwnDidService extends DidService {\n  /**\n   * One or more verification method `id` values that can be used to encrypt information\n   * intended for the DID subject.\n   */\n  enc?: string | string[];\n\n  /**\n   * One or more verification method `id` values that will be used by the DID subject to sign data\n   * or by another entity to verify signatures created by the DID subject.\n   */\n  sig: string | string[];\n}\n\n/**\n * Extracts the fragment part of a Decentralized Identifier (DID) verification method identifier.\n *\n * This function takes any input and aims to return only the fragment of a DID identifier,\n * which comes after the '#' symbol in a DID string. It's designed specifically for handling\n * DID verification method identifiers. The function returns undefined for non-string inputs, inputs\n * that do not contain a '#', or complex data structures like objects or arrays, ensuring that only\n * the fragment part of a DID string is extracted when present.\n *\n * @example\n * ```ts\n * console.log(extractDidFragment(\"did:example:123#key-1\")); // Output: \"key-1\"\n * console.log(extractDidFragment(\"did:example:123\")); // Output: undefined\n * console.log(extractDidFragment({ id: \"did:example:123#0\", type: \"JsonWebKey\" })); // Output: undefined\n * console.log(extractDidFragment(undefined)); // Output: undefined\n * ```\n *\n * @param input - The input to be processed. Can be of any type, but the function is designed\n *                to work with strings that represent DID verification method identifiers.\n * @returns The fragment part of the DID identifier if the input is a string containing a '#'.\n *          Returns an empty string for all other inputs, including non-string types, strings\n *          without a '#', and complex data structures.\n */\nexport function extractDidFragment(input: unknown): string | undefined {\n  if (typeof input !== 'string') return undefined;\n  if (input.length === 0) return undefined;\n  return input.split('#').pop();\n}\n\n/**\n * Retrieves services from a given DID document, optionally filtered by `id` or `type`.\n *\n * If no `id` or `type` filters are provided, all defined services are returned.\n *\n * The given DID Document must adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}.\n *\n * @example\n * ```ts\n * const didDocument = { ... }; // W3C DID document\n * const services = getServices({ didDocument, type: 'DecentralizedWebNode' });\n * ```\n *\n * @param params - An object containing input parameters for retrieving services.\n * @param params.didDocument - The DID document from which services are retrieved.\n * @param params.id - Optional. A string representing the specific service ID to match. If provided, only the service with this ID will be returned.\n * @param params.type - Optional. A string representing the specific service type to match. If provided, only the service(s) of this type will be returned.\n * @returns An array of services. If no matching service is found, an empty array is returned.\n */\nexport function getServices({ didDocument, id, type }: {\n  didDocument: DidDocument;\n  id?: string;\n  type?: string;\n}): DidService[] {\n  return didDocument?.service?.filter(service => {\n    if (id && service.id !== id) return false;\n    if (type && service.type !== type) return false;\n    return true;\n  }) ?? [];\n}\n\n/**\n * Retrieves a verification method object from a DID document if there is a match for the given\n * public key.\n *\n * This function searches the verification methods in a given DID document for a match with the\n * provided public key (either in JWK or multibase format). If a matching verification method is\n * found it is returned. If no match is found `null` is returned.\n *\n *\n * @example\n * ```ts\n * const didDocument = {\n *   // ... contents of a DID document ...\n * };\n * const publicKeyJwk = { kty: 'OKP', crv: 'Ed25519', x: '...' };\n *\n * const verificationMethod = await getVerificationMethodByKey({\n *   didDocument,\n *   publicKeyJwk\n * });\n * ```\n *\n * @param params - An object containing input parameters for retrieving the verification method ID.\n * @param params.didDocument - The DID document to search for the verification method.\n * @param params.publicKeyJwk - The public key in JSON Web Key (JWK) format to match against the verification methods in the DID document.\n * @param params.publicKeyMultibase - The public key as a multibase encoded string to match against the verification methods in the DID document.\n * @returns A promise that resolves with the matching verification method, or `null` if no match is found.\n * @throws Throws an `Error` if the `didDocument` parameter is missing or if the `didDocument` does not contain any verification methods.\n */\nexport async function getVerificationMethodByKey({ didDocument, publicKeyJwk, publicKeyMultibase }: {\n  didDocument: DidDocument;\n  publicKeyJwk?: Jwk;\n  publicKeyMultibase?: string;\n}): Promise<DidVerificationMethod | null> {\n  // Collect all verification methods from the DID document.\n  const verificationMethods = getVerificationMethods({ didDocument });\n\n  for (let method of verificationMethods) {\n    if (publicKeyJwk && method.publicKeyJwk) {\n      const publicKeyThumbprint = await computeJwkThumbprint({ jwk: publicKeyJwk });\n      if (publicKeyThumbprint === await computeJwkThumbprint({ jwk: method.publicKeyJwk })) {\n        return method;\n      }\n    } else if (publicKeyMultibase && method.publicKeyMultibase) {\n      if (publicKeyMultibase === method.publicKeyMultibase) {\n        return method;\n      }\n    }\n  }\n\n  return null;\n}\n\n/**\n * Retrieves all verification methods from a given DID document, including embedded methods.\n *\n * This function consolidates all verification methods into a single array for easy access and\n * processing. It checks both the primary `verificationMethod` array and the individual verification\n * relationship properties `authentication`, `assertionMethod`, `keyAgreement`,\n * `capabilityInvocation`, and `capabilityDelegation` for embedded methods.\n *\n * The given DID Document must adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}.\n *\n * @example\n * ```ts\n * const didDocument = { ... }; // W3C DID document\n * const verificationMethods = getVerificationMethods({ didDocument });\n * ```\n *\n * @param params - An object containing input parameters for retrieving verification methods.\n * @param params.didDocument - The DID document from which verification methods are retrieved.\n * @returns An array of `DidVerificationMethod`. If no verification methods are found, an empty array is returned.\n * @throws Throws an `TypeError` if the `didDocument` parameter is missing.\n */\nexport function getVerificationMethods({ didDocument }: {\n  didDocument: DidDocument;\n}): DidVerificationMethod[] {\n  if (!didDocument) throw new TypeError(`Required parameter missing: 'didDocument'`);\n\n  const verificationMethods: DidVerificationMethod[] = [];\n\n  // Check the 'verificationMethod' array.\n  verificationMethods.push(...didDocument.verificationMethod?.filter(isDidVerificationMethod) ?? []);\n\n  // Check verification relationship properties for embedded verification methods.\n  Object.keys(DidVerificationRelationship).forEach((relationship) => {\n    verificationMethods.push(\n      ...(didDocument[relationship as keyof DidDocument] as (string | DidVerificationMethod)[])\n        ?.filter(isDidVerificationMethod) ?? []\n    );\n  });\n\n  return verificationMethods;\n}\n\n/**\n * Retrieves all DID verification method types from a given DID document.\n *\n * The given DID Document must adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}.\n *\n * @example\n * ```ts\n * const didDocument = {\n *   verificationMethod: [\n *     {\n *       'id'              : 'did:example:123#key-0',\n *       'type'            : 'Ed25519VerificationKey2018',\n *       'controller'      : 'did:example:123',\n *       'publicKeyBase58' : '3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J'\n *     },\n *     {\n *       'id'              : 'did:example:123#key-1',\n *       'type'            : 'X25519KeyAgreementKey2019',\n *       'controller'      : 'did:example:123',\n *       'publicKeyBase58' : 'FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x'\n *     },\n *     {\n *       'id'           : 'did:example:123#key-3',\n *       'type'         : 'JsonWebKey2020',\n *       'controller'   : 'did:example:123',\n *       'publicKeyJwk' : {\n *         'kty' : 'EC',\n *         'crv' : 'P-256',\n *         'x'   : 'Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M',\n *         'y'   : 'pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk'\n *       }\n *     }\n *   ]\n * },\n * const vmTypes = getVerificationMethodTypes({ didDocument });\n * console.log(vmTypes);\n * // Output: ['Ed25519VerificationKey2018', 'X25519KeyAgreementKey2019', 'JsonWebKey2020']\n * ```\n *\n * @param params - An object containing input parameters for retrieving types.\n * @param params.didDocument - The DID document from which types are retrieved.\n * @returns An array of types. If no types were found, an empty array is returned.\n */\nexport function getVerificationMethodTypes({ didDocument }: {\n  didDocument: DidDocument;\n}): string[] {\n  // Collect all verification methods from the DID document.\n  const verificationMethods = getVerificationMethods({ didDocument });\n\n  // Map to extract 'type' from each verification method.\n  const types = verificationMethods.map(method => method.type);\n\n  return [...new Set(types)]; // Return only unique types.\n}\n\n/**\n * Retrieves a list of DID verification relationships by a specific method ID from a DID document.\n *\n * This function examines the specified DID document to identify any verification relationships\n * (e.g., `authentication`, `assertionMethod`) that reference a verification method by its method ID\n * or contain an embedded verification method matching the method ID. The method ID is typically a\n * fragment of a DID (e.g., `did:example:123#key-1`) that uniquely identifies a verification method\n * within the DID document.\n *\n * The search considers both direct references to verification methods by their IDs and verification\n * methods embedded within the verification relationship arrays. It returns an array of\n * `DidVerificationRelationship` enums corresponding to the verification relationships that contain\n * the specified method ID.\n *\n * @param params - An object containing input parameters for retrieving verification relationships.\n * @param params.didDocument - The DID document to search for verification relationships.\n * @param params.methodId - The method ID to search for within the verification relationships.\n * @returns An array of `DidVerificationRelationship` enums representing the types of verification\n *          relationships that reference the specified method ID.\n *\n * @example\n * ```ts\n * const didDocument: DidDocument = {\n *   // ...contents of a DID document...\n * };\n *\n * const relationships = getVerificationRelationshipsById({\n *   didDocument,\n *   methodId: 'key-1'\n * });\n * console.log(relationships);\n * // Output might include ['authentication', 'assertionMethod'] if those relationships\n * // reference or contain the specified method ID.\n * ```\n */\nexport function getVerificationRelationshipsById({ didDocument, methodId }: {\n  didDocument: DidDocument;\n  methodId: string;\n}): DidVerificationRelationship[] {\n  const relationships: DidVerificationRelationship[] = [];\n\n  Object.keys(DidVerificationRelationship).forEach((relationship) => {\n    if (Array.isArray(didDocument[relationship as keyof DidDocument])) {\n      const relationshipMethods = didDocument[relationship as keyof DidDocument] as (string | DidVerificationMethod)[];\n\n      const methodIdFragment = extractDidFragment(methodId);\n\n      // Check if the verification relationship property contains a matching method ID either\n      // directly referenced or as an embedded verification method.\n      const containsMethodId = relationshipMethods.some(method => {\n        const isByReferenceMatch = extractDidFragment(method) === methodIdFragment;\n        const isEmbeddedMethodMatch = isDidVerificationMethod(method) && extractDidFragment(method.id) === methodIdFragment;\n        return isByReferenceMatch || isEmbeddedMethodMatch;\n      });\n\n      if (containsMethodId) {\n        relationships.push(relationship as DidVerificationRelationship);\n      }\n    }\n  });\n\n  return relationships;\n}\n\n/**\n * Checks if a given object is a {@link DidService}.\n *\n * A {@link DidService} in the context of DID resources must include the properties `id`, `type`,\n * and `serviceEndpoint`. The `serviceEndpoint` can be a `DidServiceEndpoint` or an array of\n * `DidServiceEndpoint` objects.\n *\n * @example\n * ```ts\n * const service = {\n *   id: \"did:example:123#service-1\",\n *   type: \"OidcService\",\n *   serviceEndpoint: \"https://example.com/oidc\"\n * };\n *\n * if (isDidService(service)) {\n *   console.log('The object is a DidService');\n * } else {\n *   console.log('The object is not a DidService');\n * }\n * ```\n *\n * @param obj - The object to be checked.\n * @returns `true` if `obj` is a `DidService`; otherwise, `false`.\n */\nexport function isDidService(obj: unknown): obj is DidService {\n  // Validate that the given value is an object.\n  if (!obj || typeof obj !== 'object' || obj === null) return false;\n\n  // Validate that the object has the necessary properties of DidService.\n  return 'id' in obj && 'type' in obj && 'serviceEndpoint' in obj;\n}\n\n/**\n * Checks if a given object is a {@link DwnDidService}.\n *\n * A {@link DwnDidService} is defined as {@link DidService} object with a `type` of\n * \"DecentralizedWebNode\" and `enc` and `sig` properties, where both properties are either strings\n * or arrays of strings.\n *\n * @example\n * ```ts\n * const didDocument: DidDocument = {\n *   id: 'did:example:123',\n *   verificationMethod: [\n *     {\n *       id: 'did:example:123#key-1',\n *       type: 'JsonWebKey2020',\n *       controller: 'did:example:123',\n *       publicKeyJwk: { ... }\n *     },\n *     {\n *       id: 'did:example:123#key-2',\n *       type: 'JsonWebKey2020',\n *       controller: 'did:example:123',\n *       publicKeyJwk: { ... }\n *     }\n *   ],\n *   service: [\n *     {\n *       id: 'did:example:123#dwn',\n *       type: 'DecentralizedWebNode',\n *       serviceEndpoint: 'https://dwn.tbddev.org/dwn0',\n *       enc: 'did:example:123#key-1',\n *       sig: 'did:example:123#key-2'\n *     }\n *   ]\n * };\n *\n * if (isDwnService(didDocument.service[0])) {\n *   console.log('The object is a DwnDidService');\n * } else {\n *   console.log('The object is not a DwnDidService');\n * }\n * ```\n *\n * @see {@link https://identity.foundation/decentralized-web-node/spec/ | Decentralized Web Node (DWN) Specification}\n *\n * @param obj - The object to be checked.\n * @returns `true` if `obj` is a DwnDidService; otherwise, `false`.\n */\nexport function isDwnDidService(obj: unknown): obj is DwnDidService {\n  // Validate that the given value is a {@link DidService}.\n  if (!isDidService(obj)) return false;\n\n  // Validate that the `type` property is `DecentralizedWebNode`.\n  if (obj.type !== 'DecentralizedWebNode') return false;\n\n  // Validate that the given object has the `enc` and `sig` properties.\n  if (!('enc' in obj && 'sig' in obj)) return false;\n\n  // Validate that the `enc` and `sig` properties are either strings or arrays of strings.\n  const isStringOrStringArray = (prop: any): boolean =>\n    typeof prop === 'string' || Array.isArray(prop) && prop.every(item => typeof item === 'string');\n  return (isStringOrStringArray(obj.enc)) && (isStringOrStringArray(obj.sig));\n}\n\n/**\n * Checks if a given object is a DID Verification Method.\n *\n * A {@link DidVerificationMethod} in the context of DID resources must include the properties `id`,\n * `type`, and `controller`.\n *\n * @example\n * ```ts\n * const resource = {\n *  id           : \"did:example:123#0\",\n *  type         : \"JsonWebKey2020\",\n *  controller   : \"did:example:123\",\n *  publicKeyJwk : { ... }\n * };\n *\n * if (isDidVerificationMethod(resource)) {\n *   console.log('The resource is a DidVerificationMethod');\n * } else {\n *   console.log('The resource is not a DidVerificationMethod');\n * }\n * ```\n *\n * @param obj - The object to be checked.\n * @returns `true` if `obj` is a `DidVerificationMethod`; otherwise, `false`.\n */\nexport function isDidVerificationMethod(obj: unknown): obj is DidVerificationMethod {\n  // Validate that the given value is an object.\n  if (!obj || typeof obj !== 'object' || obj === null) return false;\n\n  // Validate that the object has the necessary properties of a DidVerificationMethod.\n  if (!('id' in obj && 'type' in obj && 'controller' in obj)) return false;\n\n  if (typeof obj.id !== 'string') return false;\n  if (typeof obj.type !== 'string') return false;\n  if (typeof obj.controller !== 'string') return false;\n\n  return true;\n}\n\n/**\n * Converts a cryptographic key to a multibase identifier.\n *\n * @remarks\n * This method provides a way to represent a cryptographic key as a multibase identifier.\n * It takes a `Uint8Array` representing the key, and either the multicodec code or multicodec name\n * as input. The method first adds the multicodec prefix to the key, then encodes it into Base58\n * format. Finally, it converts the Base58 encoded key into a multibase identifier.\n *\n * @example\n * ```ts\n * const key = new Uint8Array([...]); // Cryptographic key as Uint8Array\n * const multibaseId = keyBytesToMultibaseId({ key, multicodecName: 'ed25519-pub' });\n * ```\n *\n * @param params - The parameters for the conversion.\n * @returns The multibase identifier as a string.\n */\nexport function keyBytesToMultibaseId({ keyBytes, multicodecCode, multicodecName }:\n  RequireOnly<KeyWithMulticodec, 'keyBytes'>\n): string {\n  const prefixedKey = Multicodec.addPrefix({\n    code : multicodecCode,\n    data : keyBytes,\n    name : multicodecName\n  });\n  const prefixedKeyB58 = Convert.uint8Array(prefixedKey).toBase58Btc();\n  const multibaseKeyId = Convert.base58Btc(prefixedKeyB58).toMultibase();\n\n  return multibaseKeyId;\n}\n\n/**\n * Converts a multibase identifier to a cryptographic key.\n *\n * @remarks\n * This function decodes a multibase identifier back into a cryptographic key. It first decodes the\n * identifier from multibase format into Base58 format, and then converts it into a `Uint8Array`.\n * Afterward, it removes the multicodec prefix, extracting the raw key data along with the\n * multicodec code and name.\n *\n * @example\n * ```ts\n * const multibaseKeyId = '...'; // Multibase identifier of the key\n * const { key, multicodecCode, multicodecName } = multibaseIdToKey({ multibaseKeyId });\n * ```\n *\n * @param params - The parameters for the conversion.\n * @param params.multibaseKeyId - The multibase identifier string of the key.\n * @returns An object containing the key as a `Uint8Array` and its multicodec code and name.\n * @throws `DidError` if the multibase identifier is invalid.\n */\nexport function multibaseIdToKeyBytes({ multibaseKeyId }: {\n  multibaseKeyId: string\n}): Required<KeyWithMulticodec> {\n  try {\n    const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc();\n    const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array();\n    const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey });\n\n    return { keyBytes: data, multicodecCode: code, multicodecName: name };\n  } catch (error: any) {\n    throw new DidError(DidErrorCode.InvalidDid, `Invalid multibase identifier: ${multibaseKeyId}`);\n  }\n}", "import type {\n  Jwk,\n  Signer,\n  CryptoApi,\n  KeyIdentifier,\n  EnclosedSignParams,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  EnclosedVerifyParams,\n} from '@web5/crypto';\n\nimport { LocalKeyManager, utils as cryptoUtils } from '@web5/crypto';\n\nimport type { DidDocument } from './types/did-core.js';\nimport type { DidMetadata, PortableDid } from './types/portable-did.js';\n\nimport { DidError, DidErrorCode } from './did-error.js';\nimport { extractDidFragment, getVerificationMethods } from './utils.js';\n\n/**\n * A `BearerDidSigner` extends the {@link Signer} interface to include specific properties for\n * signing with a Decentralized Identifier (DID). It encapsulates the algorithm and key identifier,\n * which are often needed when signing JWTs, JWSs, JWEs, and other data structures.\n *\n * Typically, the algorithm and key identifier are used to populate the `alg` and `kid` fields of a\n * JWT or JWS header.\n */\nexport interface BearerDidSigner extends Signer {\n  /**\n   * The cryptographic algorithm identifier used for signing operations.\n   *\n   * Typically, this value is used to populate the `alg` field of a JWT or JWS header. The\n   * registered algorithm names are defined in the\n   * {@link https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms | IANA JSON Web Signature and Encryption Algorithms registry}.\n   *\n   * @example\n   * \"ES256\" // ECDSA using P-256 and SHA-256\n   */\n  algorithm: string;\n\n  /**\n   * The unique identifier of the key within the DID document that is used for signing and\n   * verification operations.\n   *\n   * This identifier must be a DID URI with a fragment (e.g., did:method:123#key-0) that references\n   * a specific verification method in the DID document. It allows users of a `BearerDidSigner` to\n   * determine the DID and key that will be used for signing and verification operations.\n   *\n   * @example\n   * \"did:dht:123#key-1\" // A fragment identifier referring to a key in the DID document\n   */\n  keyId: string;\n}\n\n/**\n * Represents a Decentralized Identifier (DID) along with its DID document, key manager, metadata,\n * and convenience functions.\n */\nexport class BearerDid {\n  /** {@inheritDoc Did#uri} */\n  uri: string;\n\n  /**\n   * The DID document associated with this DID.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocument | DID Core Specification, \u00A7 DID Document}\n   */\n  document: DidDocument;\n\n  /** {@inheritDoc DidMetadata} */\n  metadata: DidMetadata;\n\n  /**\n   * Key Management System (KMS) used to manage the DIDs keys and sign data.\n   *\n   * Each DID method requires at least one key be present in the provided `keyManager`.\n   */\n  keyManager: CryptoApi;\n\n  constructor({ uri, document, metadata, keyManager }: {\n    uri: string,\n    document: DidDocument,\n    metadata: DidMetadata,\n    keyManager: CryptoApi\n  }) {\n    this.uri = uri;\n    this.document = document;\n    this.metadata = metadata;\n    this.keyManager = keyManager;\n  }\n\n  /**\n   * Converts a `BearerDid` object to a portable format containing the URI and verification methods\n   * associated with the DID.\n   *\n   * This method is useful when you need to represent the key material and metadata associated with\n   * a DID in format that can be used independently of the specific DID method implementation. It\n   * extracts both public and private keys from the DID's key manager and organizes them into a\n   * `PortableDid` structure.\n   *\n   * @remarks\n   * If the DID's key manager does not allow private keys to be exported, the `PortableDid` returned\n   * will not contain a `privateKeys` property. This enables the importing and exporting DIDs that\n   * use the same underlying KMS even if the KMS does not support exporting private keys. Examples\n   * include hardware security modules (HSMs) and cloud-based KMS services like AWS KMS.\n   *\n   * If the DID's key manager does support exporting private keys, the resulting `PortableDid` will\n   * include a `privateKeys` property which contains the same number of entries as there are\n   * verification methods as the DID document, each with its associated private key and the\n   * purpose(s) for which the key can be used (e.g., `authentication`, `assertionMethod`, etc.).\n   *\n   * @example\n   * ```ts\n   * // Assuming `did` is an instance of BearerDid\n   * const portableDid = await did.export();\n   * // portableDid now contains the DID URI, document, metadata, and optionally, private keys.\n   * ```\n   *\n   * @returns A `PortableDid` containing the URI, DID document, metadata, and optionally private\n   *          keys associated with the `BearerDid`.\n   * @throws An error if the DID document does not contain any verification methods or the keys for\n   *         any verification method are missing in the key manager.\n   */\n  public async export(): Promise<PortableDid> {\n    // Verify the DID document contains at least one verification method.\n    if (!(Array.isArray(this.document.verificationMethod) && this.document.verificationMethod.length > 0)) {\n      throw new Error(`DID document for '${this.uri}' is missing verification methods`);\n    }\n\n    // Create a new `PortableDid` object to store the exported data.\n    let portableDid: PortableDid = {\n      uri      : this.uri,\n      document : this.document,\n      metadata : this.metadata\n    };\n\n    // If the BearerDid's key manager supports exporting private keys, add them to the portable DID.\n    if ('exportKey' in this.keyManager && typeof this.keyManager.exportKey === 'function') {\n      const privateKeys: Jwk[] = [];\n      for (let vm of this.document.verificationMethod) {\n        if (!vm.publicKeyJwk) {\n          throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`);\n        }\n\n        // Compute the key URI of the verification method's public key.\n        const keyUri = await this.keyManager.getKeyUri({ key: vm.publicKeyJwk });\n\n        // Retrieve the private key from the key manager.\n        const privateKey = await this.keyManager.exportKey({ keyUri }) as Jwk;\n\n        // Add the verification method to the key set.\n        privateKeys.push({ ...privateKey });\n      }\n      portableDid.privateKeys = privateKeys;\n    }\n\n    return portableDid;\n  }\n\n  /**\n   * Return a {@link Signer} that can be used to sign messages, credentials, or arbitrary data.\n   *\n   * If given, the `methodId` parameter is used to select a key from the verification methods\n   * present in the DID Document.\n   *\n   * If `methodID` is not given, the first verification method intended for signing claims is used.\n   *\n   * @param params - The parameters for the `getSigner` operation.\n   * @param params.methodId - ID of the verification method key that will be used for sign and\n   *                          verify operations. Optional.\n   * @returns An instantiated {@link Signer} that can be used to sign and verify data.\n   */\n  public async getSigner(params?: { methodId: string }): Promise<BearerDidSigner> {\n    // Attempt to find a verification method that matches the given method ID, or if not given,\n    // find the first verification method intended for signing claims.\n    const verificationMethod = this.document.verificationMethod?.find(\n      vm => extractDidFragment(vm.id) === (extractDidFragment(params?.methodId) ?? extractDidFragment(this.document.assertionMethod?.[0]))\n    );\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    // Compute the expected key URI of the signing key.\n    const keyUri = await this.keyManager.getKeyUri({ key: verificationMethod.publicKeyJwk });\n\n    // Get the public key to be used for verify operations, which also verifies that the key is\n    // present in the key manager's store.\n    const publicKey = await this.keyManager.getPublicKey({ keyUri });\n\n    // Bind the DID's key manager to the signer.\n    const keyManager = this.keyManager;\n\n    // Determine the signing algorithm.\n    const algorithm = cryptoUtils.getJoseSignatureAlgorithmFromPublicKey(publicKey);\n\n    return {\n      algorithm : algorithm,\n      keyId     : verificationMethod.id,\n\n      async sign({ data }: EnclosedSignParams): Promise<Uint8Array> {\n        const signature = await keyManager.sign({ data, keyUri: keyUri! }); // `keyUri` is guaranteed to be defined at this point.\n        return signature;\n      },\n\n      async verify({ data, signature }: EnclosedVerifyParams): Promise<boolean> {\n        const isValid = await keyManager.verify({ data, key: publicKey!, signature }); // `publicKey` is guaranteed to be defined at this point.\n        return isValid;\n      }\n    };\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await BearerDid.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the\n   *          provided PortableDid.\n   * @throws An error if the PortableDid document does not contain any verification methods or the\n   *         keys for any verification method are missing in the key manager.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Get all verification methods from the given DID document, including embedded methods.\n    const verificationMethods = getVerificationMethods({ didDocument: portableDid.document });\n\n    // Validate that the DID document contains at least one verification method.\n    if (verificationMethods.length === 0) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `At least one verification method is required but 0 were given`);\n    }\n\n    // If given, import the private key material into the key manager.\n    for (let key of portableDid.privateKeys ?? []) {\n      await keyManager.importKey({ key });\n    }\n\n    // Validate that the key material for every verification method in the DID document is present\n    // in the key manager.\n    for (let vm of verificationMethods) {\n      if (!vm.publicKeyJwk) {\n        throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`);\n      }\n\n      // Compute the key URI of the verification method's public key.\n      const keyUri = await keyManager.getKeyUri({ key: vm.publicKeyJwk });\n\n      // Verify that the key is present in the key manager. If not, an error is thrown.\n      await keyManager.getPublicKey({ keyUri });\n    }\n\n    // Use the given PortableDid to construct the BearerDid object.\n    const did = new BearerDid({\n      uri      : portableDid.uri,\n      document : portableDid.document,\n      metadata : portableDid.metadata,\n      keyManager\n    });\n\n    return did;\n  }\n}", "import encode from './lib/encode.js'\nimport decode from './lib/decode.js'\nimport byteLength from './lib/encoding-length.js'\n/**\n * Determines the amount of bytes\n * needed to encode the given value\n * @param  {Object|Array|Uint8Array|String|Number|Boolean} value\n * @return {Number} byteCount\n */\nconst encodingLength = byteLength\nexport default { encode, decode, byteLength, encodingLength }\n", "import { concat, text2arr } from 'uint8-util'\nimport { getType } from './util.js'\n\n/**\n * Encodes data in bencode.\n *\n * @param  {Uint8Array|Array|String|Object|Number|Boolean} data\n * @return {Uint8Array}\n */\nfunction encode (data, buffer, offset) {\n  const buffers = []\n  let result = null\n\n  encode._encode(buffers, data)\n  result = concat(buffers)\n  encode.bytes = result.length\n\n  if (ArrayBuffer.isView(buffer)) {\n    buffer.set(result, offset)\n    return buffer\n  }\n\n  return result\n}\n\nencode.bytes = -1\nencode._floatConversionDetected = false\n\nencode._encode = function (buffers, data) {\n  if (data == null) { return }\n\n  switch (getType(data)) {\n    case 'object': encode.dict(buffers, data); break\n    case 'map': encode.dictMap(buffers, data); break\n    case 'array': encode.list(buffers, data); break\n    case 'set': encode.listSet(buffers, data); break\n    case 'string': encode.string(buffers, data); break\n    case 'number': encode.number(buffers, data); break\n    case 'boolean': encode.number(buffers, data); break\n    case 'arraybufferview': encode.buffer(buffers, new Uint8Array(data.buffer, data.byteOffset, data.byteLength)); break\n    case 'arraybuffer': encode.buffer(buffers, new Uint8Array(data)); break\n  }\n}\n\nconst buffE = new Uint8Array([0x65])\nconst buffD = new Uint8Array([0x64])\nconst buffL = new Uint8Array([0x6C])\n\nencode.buffer = function (buffers, data) {\n  buffers.push(text2arr(data.length + ':'), data)\n}\n\nencode.string = function (buffers, data) {\n  buffers.push(text2arr(text2arr(data).byteLength + ':' + data))\n}\n\nencode.number = function (buffers, data) {\n  if (Number.isInteger(data)) return buffers.push(text2arr('i' + BigInt(data) + 'e'))\n\n  const maxLo = 0x80000000\n  const hi = (data / maxLo) << 0\n  const lo = (data % maxLo) << 0\n  const val = hi * maxLo + lo\n\n  buffers.push(text2arr('i' + val + 'e'))\n\n  if (val !== data && !encode._floatConversionDetected) {\n    encode._floatConversionDetected = true\n    console.warn(\n      'WARNING: Possible data corruption detected with value \"' + data + '\":',\n      'Bencoding only defines support for integers, value was converted to \"' + val + '\"'\n    )\n    console.trace()\n  }\n}\n\nencode.dict = function (buffers, data) {\n  buffers.push(buffD)\n\n  let j = 0\n  let k\n  // fix for issue #13 - sorted dicts\n  const keys = Object.keys(data).sort()\n  const kl = keys.length\n\n  for (; j < kl; j++) {\n    k = keys[j]\n    if (data[k] == null) continue\n    encode.string(buffers, k)\n    encode._encode(buffers, data[k])\n  }\n\n  buffers.push(buffE)\n}\n\nencode.dictMap = function (buffers, data) {\n  buffers.push(buffD)\n\n  const keys = Array.from(data.keys()).sort()\n\n  for (const key of keys) {\n    if (data.get(key) == null) continue\n    ArrayBuffer.isView(key)\n      ? encode._encode(buffers, key)\n      : encode.string(buffers, String(key))\n    encode._encode(buffers, data.get(key))\n  }\n\n  buffers.push(buffE)\n}\n\nencode.list = function (buffers, data) {\n  let i = 0\n  const c = data.length\n  buffers.push(buffL)\n\n  for (; i < c; i++) {\n    if (data[i] == null) continue\n    encode._encode(buffers, data[i])\n  }\n\n  buffers.push(buffE)\n}\n\nencode.listSet = function (buffers, data) {\n  buffers.push(buffL)\n\n  for (const item of data) {\n    if (item == null) continue\n    encode._encode(buffers, item)\n  }\n\n  buffers.push(buffE)\n}\n\nexport default encode\n", "import { arr2hex, hex2arr, alphabet } from './util.js'\r\nimport { decode, encode } from 'base64-arraybuffer'\r\n\r\nconst decoder = new TextDecoder()\r\n// 50% slower at < 48 chars, but little impact at 4M OPS/s vs 8M OPS/s\r\nexport const arr2text = (data, enc) => {\r\n  if (!enc) return decoder.decode(data)\r\n  const dec = new TextDecoder(enc)\r\n  return dec.decode(data)\r\n}\r\n\r\n// sacrifice ~20% speed for bundle size\r\nconst encoder = new TextEncoder()\r\nexport const text2arr = str => encoder.encode(str)\r\n\r\nexport const arr2base = data => encode(data)\r\n\r\nexport const base2arr = str => new Uint8Array(decode(str))\r\n\r\nexport const bin2hex = str => {\r\n  let res = ''\r\n  let c\r\n  let i = 0\r\n  const len = str.length\r\n\r\n  while (i < len) {\r\n    c = str.charCodeAt(i++)\r\n    res += alphabet[c >> 4] + alphabet[c & 0xF]\r\n  }\r\n\r\n  return res\r\n}\r\n\r\nconst MAX_ARGUMENTS_LENGTH = 0x10000\r\nexport const hex2bin = hex => {\r\n  const points = hex2arr(hex)\r\n  if (points.length <= MAX_ARGUMENTS_LENGTH) return String.fromCharCode(...points)\r\n\r\n  let res = ''\r\n  let i = 0\r\n  while (i < points.length) {\r\n    res += String.fromCharCode(...points.subarray(i, i += MAX_ARGUMENTS_LENGTH))\r\n  }\r\n  return res\r\n}\r\n\r\nconst scope = typeof window !== 'undefined' ? window : self\r\nconst crypto = scope.crypto || scope.msCrypto || {}\r\nconst subtle = crypto.subtle || crypto.webkitSubtle\r\n\r\nconst formatMap = {\r\n  hex: arr2hex,\r\n  base64: arr2base\r\n}\r\n\r\nexport const hash = async (data, format, algo = 'sha-1') => {\r\n  if (!subtle) throw new Error('no web crypto support')\r\n  if (typeof data === 'string') data = text2arr(data)\r\n  const out = new Uint8Array(await subtle.digest(algo, data))\r\n  return format ? formatMap[format](out) : out\r\n}\r\n\r\nexport const randomBytes = size => {\r\n  const view = new Uint8Array(size)\r\n  return crypto.getRandomValues(view)\r\n}\r\n\r\nexport * from './util.js'\r\n", "/* Common package for dealing with hex/string/uint8 conversions (and sha1 hashing)\r\n*\r\n* @author   Jimmy W\u00E4rting <jimmy@warting.se> (https://jimmy.warting.se/opensource)\r\n* @license  MIT\r\n*/\r\nexport const alphabet = '0123456789abcdef'\r\nconst encodeLookup = []\r\nconst decodeLookup = []\r\n\r\nfor (let i = 0; i < 256; i++) {\r\n  encodeLookup[i] = alphabet[i >> 4 & 0xf] + alphabet[i & 0xf]\r\n  if (i < 16) {\r\n    if (i < 10) {\r\n      decodeLookup[0x30 + i] = i\r\n    } else {\r\n      decodeLookup[0x61 - 10 + i] = i\r\n    }\r\n  }\r\n}\r\n\r\nexport const arr2hex = data => {\r\n  const length = data.length\r\n  let string = ''\r\n  let i = 0\r\n  while (i < length) {\r\n    string += encodeLookup[data[i++]]\r\n  }\r\n  return string\r\n}\r\n\r\nexport const hex2arr = str => {\r\n  const sizeof = str.length >> 1\r\n  const length = sizeof << 1\r\n  const array = new Uint8Array(sizeof)\r\n  let n = 0\r\n  let i = 0\r\n  while (i < length) {\r\n    array[n++] = decodeLookup[str.charCodeAt(i++)] << 4 | decodeLookup[str.charCodeAt(i++)]\r\n  }\r\n  return array\r\n}\r\n\r\nexport const concat = (chunks, size = 0) => {\r\n  const length = chunks.length || 0\r\n  if (!size) {\r\n    let i = length\r\n    while (i--) size += chunks[i].length\r\n  }\r\n  const b = new Uint8Array(size)\r\n  let offset = size\r\n  let i = length\r\n  while (i--) {\r\n    offset -= chunks[i].length\r\n    b.set(chunks[i], offset)\r\n  }\r\n\r\n  return b\r\n}\r\n\r\nexport const equal = (a, b) => {\r\n  if (a.length !== b.length) return false\r\n  for (let i = a.length; i > -1; i -= 1) {\r\n    if ((a[i] !== b[i])) return false\r\n  }\r\n  return true\r\n}\r\n", "const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const encode = (arraybuffer: ArrayBuffer): string => {\n    let bytes = new Uint8Array(arraybuffer),\n        i,\n        len = bytes.length,\n        base64 = '';\n\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    } else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n\n    return base64;\n};\n\nexport const decode = (base64: string): ArrayBuffer => {\n    let bufferLength = base64.length * 0.75,\n        len = base64.length,\n        i,\n        p = 0,\n        encoded1,\n        encoded2,\n        encoded3,\n        encoded4;\n\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arraybuffer = new ArrayBuffer(bufferLength),\n        bytes = new Uint8Array(arraybuffer);\n\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arraybuffer;\n};\n", "export function digitCount (value) {\n  // Add a digit for negative numbers, as the sign will be prefixed\n  const sign = value < 0 ? 1 : 0\n  // Guard against negative numbers & zero going into log10(),\n  // as that would return -Infinity\n  value = Math.abs(Number(value || 1))\n  return Math.floor(Math.log10(value)) + 1 + sign\n}\n\nexport function getType (value) {\n  if (ArrayBuffer.isView(value)) return 'arraybufferview'\n  if (Array.isArray(value)) return 'array'\n  if (value instanceof Number) return 'number'\n  if (value instanceof Boolean) return 'boolean'\n  if (value instanceof Set) return 'set'\n  if (value instanceof Map) return 'map'\n  if (value instanceof String) return 'string'\n  if (value instanceof ArrayBuffer) return 'arraybuffer'\n  return typeof value\n}\n", "import { arr2text, text2arr, arr2hex } from 'uint8-util'\n\nconst INTEGER_START = 0x69 // 'i'\nconst STRING_DELIM = 0x3A // ':'\nconst DICTIONARY_START = 0x64 // 'd'\nconst LIST_START = 0x6C // 'l'\nconst END_OF_TYPE = 0x65 // 'e'\n\n/**\n * replaces parseInt(buffer.toString('ascii', start, end)).\n * For strings with less then ~30 charachters, this is actually a lot faster.\n *\n * @param {Uint8Array} data\n * @param {Number} start\n * @param {Number} end\n * @return {Number} calculated number\n */\nfunction getIntFromBuffer (buffer, start, end) {\n  let sum = 0\n  let sign = 1\n\n  for (let i = start; i < end; i++) {\n    const num = buffer[i]\n\n    if (num < 58 && num >= 48) {\n      sum = sum * 10 + (num - 48)\n      continue\n    }\n\n    if (i === start && num === 43) { // +\n      continue\n    }\n\n    if (i === start && num === 45) { // -\n      sign = -1\n      continue\n    }\n\n    if (num === 46) { // .\n      // its a float. break here.\n      break\n    }\n\n    throw new Error('not a number: buffer[' + i + '] = ' + num)\n  }\n\n  return sum * sign\n}\n\n/**\n * Decodes bencoded data.\n *\n * @param  {Uint8Array} data\n * @param  {Number} start (optional)\n * @param  {Number} end (optional)\n * @param  {String} encoding (optional)\n * @return {Object|Array|Uint8Array|String|Number}\n */\nfunction decode (data, start, end, encoding) {\n  if (data == null || data.length === 0) {\n    return null\n  }\n\n  if (typeof start !== 'number' && encoding == null) {\n    encoding = start\n    start = undefined\n  }\n\n  if (typeof end !== 'number' && encoding == null) {\n    encoding = end\n    end = undefined\n  }\n\n  decode.position = 0\n  decode.encoding = encoding || null\n\n  decode.data = !(ArrayBuffer.isView(data))\n    ? text2arr(data)\n    : new Uint8Array(data.slice(start, end))\n\n  decode.bytes = decode.data.length\n\n  return decode.next()\n}\n\ndecode.bytes = 0\ndecode.position = 0\ndecode.data = null\ndecode.encoding = null\n\ndecode.next = function () {\n  switch (decode.data[decode.position]) {\n    case DICTIONARY_START:\n      return decode.dictionary()\n    case LIST_START:\n      return decode.list()\n    case INTEGER_START:\n      return decode.integer()\n    default:\n      return decode.buffer()\n  }\n}\n\ndecode.find = function (chr) {\n  let i = decode.position\n  const c = decode.data.length\n  const d = decode.data\n\n  while (i < c) {\n    if (d[i] === chr) return i\n    i++\n  }\n\n  throw new Error(\n    'Invalid data: Missing delimiter \"' +\n    String.fromCharCode(chr) + '\" [0x' +\n    chr.toString(16) + ']'\n  )\n}\n\ndecode.dictionary = function () {\n  decode.position++\n\n  const dict = {}\n\n  while (decode.data[decode.position] !== END_OF_TYPE) {\n    const buffer = decode.buffer()\n    let key = arr2text(buffer)\n    if (key.includes('\\uFFFD')) key = arr2hex(buffer)\n    dict[key] = decode.next()\n  }\n\n  decode.position++\n\n  return dict\n}\n\ndecode.list = function () {\n  decode.position++\n\n  const lst = []\n\n  while (decode.data[decode.position] !== END_OF_TYPE) {\n    lst.push(decode.next())\n  }\n\n  decode.position++\n\n  return lst\n}\n\ndecode.integer = function () {\n  const end = decode.find(END_OF_TYPE)\n  const number = getIntFromBuffer(decode.data, decode.position + 1, end)\n\n  decode.position += end + 1 - decode.position\n\n  return number\n}\n\ndecode.buffer = function () {\n  let sep = decode.find(STRING_DELIM)\n  const length = getIntFromBuffer(decode.data, decode.position, sep)\n  const end = ++sep + length\n\n  decode.position = end\n\n  return decode.encoding\n    ? arr2text(decode.data.slice(sep, end))\n    : decode.data.slice(sep, end)\n}\n\nexport default decode\n", "import { text2arr } from 'uint8-util'\nimport { digitCount, getType } from './util.js'\n\nfunction listLength (list) {\n  let length = 1 + 1 // type marker + end-of-type marker\n\n  for (const value of list) {\n    length += encodingLength(value)\n  }\n\n  return length\n}\n\nfunction mapLength (map) {\n  let length = 1 + 1 // type marker + end-of-type marker\n\n  for (const [key, value] of map) {\n    const keyLength = text2arr(key).byteLength\n    length += digitCount(keyLength) + 1 + keyLength\n    length += encodingLength(value)\n  }\n\n  return length\n}\n\nfunction objectLength (value) {\n  let length = 1 + 1 // type marker + end-of-type marker\n  const keys = Object.keys(value)\n\n  for (let i = 0; i < keys.length; i++) {\n    const keyLength = text2arr(keys[i]).byteLength\n    length += digitCount(keyLength) + 1 + keyLength\n    length += encodingLength(value[keys[i]])\n  }\n\n  return length\n}\n\nfunction stringLength (value) {\n  const length = text2arr(value).byteLength\n  return digitCount(length) + 1 + length\n}\n\nfunction arrayBufferLength (value) {\n  const length = value.byteLength - value.byteOffset\n  return digitCount(length) + 1 + length\n}\n\nfunction encodingLength (value) {\n  const length = 0\n\n  if (value == null) return length\n\n  const type = getType(value)\n\n  switch (type) {\n    case 'arraybufferview': return arrayBufferLength(value)\n    case 'string': return stringLength(value)\n    case 'array': case 'set': return listLength(value)\n    case 'number': return 1 + digitCount(Math.floor(value)) + 1\n    case 'bigint': return 1 + value.toString().length + 1\n    case 'object': return objectLength(value)\n    case 'map': return mapLength(value)\n    default:\n      throw new TypeError(`Unsupported value of type \"${type}\"`)\n  }\n}\n\nexport default encodingLength\n", "import * as ip from '@leichtgewicht/ip-codec'\nimport * as types from './types.mjs'\nimport * as rcodes from './rcodes.mjs'\nimport * as opcodes from './opcodes.mjs'\nimport * as classes from './classes.mjs'\nimport * as optioncodes from './optioncodes.mjs'\nimport * as b from './buffer_utils.mjs'\nimport { decode as toUtf8 } from 'utf8-codec'\n\nconst QUERY_FLAG = 0\nconst RESPONSE_FLAG = 1 << 15\nconst FLUSH_MASK = 1 << 15\nconst NOT_FLUSH_MASK = ~FLUSH_MASK\nconst QU_MASK = 1 << 15\nconst NOT_QU_MASK = ~QU_MASK\n\nfunction codec ({ bytes = 0, encode, decode, encodingLength }) {\n  encode.bytes = bytes\n  decode.bytes = bytes\n  return {\n    encode,\n    decode,\n    encodingLength: encodingLength || (() => bytes)\n  }\n}\n\nexport const name = codec({\n  encode (str, buf, offset) {\n    if (!buf) buf = new Uint8Array(name.encodingLength(str))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    // strip leading and trailing .\n    const n = str.replace(/^\\.|\\.$/gm, '')\n    if (n.length) {\n      const list = n.split('.')\n\n      for (let i = 0; i < list.length; i++) {\n        const len = b.write(buf, list[i], offset + 1)\n        buf[offset] = len\n        offset += len + 1\n      }\n    }\n\n    buf[offset++] = 0\n\n    name.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const list = []\n    let oldOffset = offset\n    let totalLength = 0\n    let consumedBytes = 0\n    let jumped = false\n\n    while (true) {\n      if (offset >= buf.length) {\n        throw new Error('Cannot decode name (buffer overflow)')\n      }\n      const len = buf[offset++]\n      consumedBytes += jumped ? 0 : 1\n\n      if (len === 0) {\n        break\n      } else if ((len & 0xc0) === 0) {\n        if (offset + len > buf.length) {\n          throw new Error('Cannot decode name (buffer overflow)')\n        }\n        totalLength += len + 1\n        if (totalLength > 254) {\n          throw new Error('Cannot decode name (name too long)')\n        }\n        list.push(toUtf8(buf, offset, offset + len))\n        offset += len\n        consumedBytes += jumped ? 0 : len\n      } else if ((len & 0xc0) === 0xc0) {\n        if (offset + 1 > buf.length) {\n          throw new Error('Cannot decode name (buffer overflow)')\n        }\n        const jumpOffset = b.readUInt16BE(buf, offset - 1) - 0xc000\n        if (jumpOffset >= oldOffset) {\n          // Allow only pointers to prior data. RFC 1035, section 4.1.4 states:\n          // \"[...] an entire domain name or a list of labels at the end of a domain name\n          // is replaced with a pointer to a prior occurance (sic) of the same name.\"\n          throw new Error('Cannot decode name (bad pointer)')\n        }\n        offset = jumpOffset\n        oldOffset = jumpOffset\n        consumedBytes += jumped ? 0 : 1\n        jumped = true\n      } else {\n        throw new Error('Cannot decode name (bad label)')\n      }\n    }\n\n    name.decode.bytes = consumedBytes\n    return list.length === 0 ? '.' : list.join('.')\n  },\n  encodingLength (n) {\n    if (n === '.' || n === '..') return 1\n    return b.bytelength(n.replace(/^\\.|\\.$/gm, '')) + 2\n  }\n})\n\nconst string = codec({\n  encode (s, buf, offset) {\n    if (!buf) buf = new Uint8Array(string.encodingLength(s))\n    if (!offset) offset = 0\n\n    const len = b.write(buf, s, offset + 1)\n    buf[offset] = len\n    string.encode.bytes = len + 1\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const len = buf[offset]\n    const s = toUtf8(buf, offset + 1, offset + 1 + len)\n    string.decode.bytes = len + 1\n    return s\n  },\n  encodingLength (s) {\n    return b.bytelength(s) + 1\n  }\n})\n\nconst header = codec({\n  bytes: 12,\n  encode (h, buf, offset) {\n    if (!buf) buf = new Uint8Array(header.encodingLength(h))\n    if (!offset) offset = 0\n\n    const flags = (h.flags || 0) & 32767\n    const type = h.type === 'response' ? RESPONSE_FLAG : QUERY_FLAG\n\n    b.writeUInt16BE(buf, h.id || 0, offset)\n    b.writeUInt16BE(buf, flags | type, offset + 2)\n    b.writeUInt16BE(buf, h.questions.length, offset + 4)\n    b.writeUInt16BE(buf, h.answers.length, offset + 6)\n    b.writeUInt16BE(buf, h.authorities.length, offset + 8)\n    b.writeUInt16BE(buf, h.additionals.length, offset + 10)\n\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    if (buf.length < 12) throw new Error('Header must be 12 bytes')\n    const flags = b.readUInt16BE(buf, offset + 2)\n\n    return {\n      id: b.readUInt16BE(buf, offset),\n      type: flags & RESPONSE_FLAG ? 'response' : 'query',\n      flags: flags & 32767,\n      flag_qr: ((flags >> 15) & 0x1) === 1,\n      opcode: opcodes.toString((flags >> 11) & 0xf),\n      flag_aa: ((flags >> 10) & 0x1) === 1,\n      flag_tc: ((flags >> 9) & 0x1) === 1,\n      flag_rd: ((flags >> 8) & 0x1) === 1,\n      flag_ra: ((flags >> 7) & 0x1) === 1,\n      flag_z: ((flags >> 6) & 0x1) === 1,\n      flag_ad: ((flags >> 5) & 0x1) === 1,\n      flag_cd: ((flags >> 4) & 0x1) === 1,\n      rcode: rcodes.toString(flags & 0xf),\n      questions: new Array(b.readUInt16BE(buf, offset + 4)),\n      answers: new Array(b.readUInt16BE(buf, offset + 6)),\n      authorities: new Array(b.readUInt16BE(buf, offset + 8)),\n      additionals: new Array(b.readUInt16BE(buf, offset + 10))\n    }\n  },\n  encodingLength () {\n    return 12\n  }\n})\n\nconst runknown = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(runknown.encodingLength(data))\n    if (!offset) offset = 0\n\n    const dLen = data.length\n    b.writeUInt16BE(buf, dLen, offset)\n    b.copy(data, buf, offset + 2, 0, dLen)\n\n    runknown.encode.bytes = dLen + 2\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const len = b.readUInt16BE(buf, offset)\n    const data = buf.slice(offset + 2, offset + 2 + len)\n    runknown.decode.bytes = len + 2\n    return data\n  },\n  encodingLength (data) {\n    return data.length + 2\n  }\n})\n\nconst rns = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rns.encodingLength(data))\n    if (!offset) offset = 0\n\n    name.encode(data, buf, offset + 2)\n    b.writeUInt16BE(buf, name.encode.bytes, offset)\n    rns.encode.bytes = name.encode.bytes + 2\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const len = b.readUInt16BE(buf, offset)\n    const dd = name.decode(buf, offset + 2)\n\n    rns.decode.bytes = len + 2\n    return dd\n  },\n  encodingLength (data) {\n    return name.encodingLength(data) + 2\n  }\n})\n\nconst rsoa = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rsoa.encodingLength(data))\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n    offset += 2\n    name.encode(data.mname, buf, offset)\n    offset += name.encode.bytes\n    name.encode(data.rname, buf, offset)\n    offset += name.encode.bytes\n    b.writeUInt32BE(buf, data.serial || 0, offset)\n    offset += 4\n    b.writeUInt32BE(buf, data.refresh || 0, offset)\n    offset += 4\n    b.writeUInt32BE(buf, data.retry || 0, offset)\n    offset += 4\n    b.writeUInt32BE(buf, data.expire || 0, offset)\n    offset += 4\n    b.writeUInt32BE(buf, data.minimum || 0, offset)\n    offset += 4\n\n    b.writeUInt16BE(buf, offset - oldOffset - 2, oldOffset)\n    rsoa.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n\n    const data = {}\n    offset += 2\n    data.mname = name.decode(buf, offset)\n    offset += name.decode.bytes\n    data.rname = name.decode(buf, offset)\n    offset += name.decode.bytes\n    data.serial = b.readUInt32BE(buf, offset)\n    offset += 4\n    data.refresh = b.readUInt32BE(buf, offset)\n    offset += 4\n    data.retry = b.readUInt32BE(buf, offset)\n    offset += 4\n    data.expire = b.readUInt32BE(buf, offset)\n    offset += 4\n    data.minimum = b.readUInt32BE(buf, offset)\n    offset += 4\n\n    rsoa.decode.bytes = offset - oldOffset\n    return data\n  },\n  encodingLength (data) {\n    return 22 + name.encodingLength(data.mname) + name.encodingLength(data.rname)\n  }\n})\n\nconst rtxt = codec({\n  encode (data, buf, offset) {\n    if (!Array.isArray(data)) data = [data]\n    for (let i = 0; i < data.length; i++) {\n      if (typeof data[i] === 'string') {\n        data[i] = b.from(data[i])\n      }\n      if (!b.isU8Arr(data[i])) {\n        throw new Error('Must be a Buffer')\n      }\n    }\n\n    if (!buf) buf = new Uint8Array(rtxt.encodingLength(data))\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n    offset += 2\n\n    data.forEach(function (d) {\n      buf[offset++] = d.length\n      b.copy(d, buf, offset, 0, d.length)\n      offset += d.length\n    })\n\n    b.writeUInt16BE(buf, offset - oldOffset - 2, oldOffset)\n    rtxt.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n    let remaining = b.readUInt16BE(buf, offset)\n    offset += 2\n\n    const data = []\n    while (remaining > 0) {\n      const len = buf[offset++]\n      --remaining\n      if (remaining < len) {\n        throw new Error('Buffer overflow')\n      }\n      data.push(buf.slice(offset, offset + len))\n      offset += len\n      remaining -= len\n    }\n\n    rtxt.decode.bytes = offset - oldOffset\n    return data\n  },\n  encodingLength (data) {\n    if (!Array.isArray(data)) data = [data]\n    let length = 2\n    data.forEach(function (buf) {\n      if (typeof buf === 'string') {\n        length += b.bytelength(buf) + 1\n      } else {\n        length += buf.length + 1\n      }\n    })\n    return length\n  }\n})\n\nconst rnull = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rnull.encodingLength(data))\n    if (!offset) offset = 0\n\n    if (typeof data === 'string') data = b.from(data)\n    if (!data) data = new Uint8Array(0)\n\n    const oldOffset = offset\n    offset += 2\n\n    const len = data.length\n    b.copy(data, buf, offset, 0, len)\n    offset += len\n\n    b.writeUInt16BE(buf, offset - oldOffset - 2, oldOffset)\n    rnull.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n    const len = b.readUInt16BE(buf, offset)\n\n    offset += 2\n\n    const data = buf.slice(offset, offset + len)\n    offset += len\n\n    rnull.decode.bytes = offset - oldOffset\n    return data\n  },\n  encodingLength (data) {\n    if (!data) return 2\n    return (b.isU8Arr(data) ? data.length : b.bytelength(data)) + 2\n  }\n})\n\nconst rhinfo = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rhinfo.encodingLength(data))\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n    offset += 2\n    string.encode(data.cpu, buf, offset)\n    offset += string.encode.bytes\n    string.encode(data.os, buf, offset)\n    offset += string.encode.bytes\n    b.writeUInt16BE(buf, offset - oldOffset - 2, oldOffset)\n    rhinfo.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n\n    const data = {}\n    offset += 2\n    data.cpu = string.decode(buf, offset)\n    offset += string.decode.bytes\n    data.os = string.decode(buf, offset)\n    offset += string.decode.bytes\n    rhinfo.decode.bytes = offset - oldOffset\n    return data\n  },\n  encodingLength (data) {\n    return string.encodingLength(data.cpu) + string.encodingLength(data.os) + 2\n  }\n})\n\nconst rptr = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rptr.encodingLength(data))\n    if (!offset) offset = 0\n\n    name.encode(data, buf, offset + 2)\n    b.writeUInt16BE(buf, name.encode.bytes, offset)\n    rptr.encode.bytes = name.encode.bytes + 2\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const data = name.decode(buf, offset + 2)\n    rptr.decode.bytes = name.decode.bytes + 2\n    return data\n  },\n  encodingLength (data) {\n    return name.encodingLength(data) + 2\n  }\n})\n\nconst rsrv = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rsrv.encodingLength(data))\n    if (!offset) offset = 0\n\n    b.writeUInt16BE(buf, data.priority || 0, offset + 2)\n    b.writeUInt16BE(buf, data.weight || 0, offset + 4)\n    b.writeUInt16BE(buf, data.port || 0, offset + 6)\n    name.encode(data.target, buf, offset + 8)\n\n    const len = name.encode.bytes + 6\n    b.writeUInt16BE(buf, len, offset)\n\n    rsrv.encode.bytes = len + 2\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const len = b.readUInt16BE(buf, offset)\n\n    const data = {}\n    data.priority = b.readUInt16BE(buf, offset + 2)\n    data.weight = b.readUInt16BE(buf, offset + 4)\n    data.port = b.readUInt16BE(buf, offset + 6)\n    data.target = name.decode(buf, offset + 8)\n\n    rsrv.decode.bytes = len + 2\n    return data\n  },\n  encodingLength (data) {\n    return 8 + name.encodingLength(data.target)\n  }\n})\n\nconst rcaa = codec({\n  encode (data, buf, offset) {\n    const len = rcaa.encodingLength(data)\n\n    if (!buf) buf = new Uint8Array(rcaa.encodingLength(data))\n    if (!offset) offset = 0\n\n    if (data.issuerCritical) {\n      data.flags = rcaa.ISSUER_CRITICAL\n    }\n\n    b.writeUInt16BE(buf, len - 2, offset)\n    offset += 2\n    buf[offset] = data.flags || 0\n    offset += 1\n    string.encode(data.tag, buf, offset)\n    offset += string.encode.bytes\n    b.write(buf, data.value, offset)\n    offset += b.bytelength(data.value)\n\n    rcaa.encode.bytes = len\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const len = b.readUInt16BE(buf, offset)\n    offset += 2\n\n    const oldOffset = offset\n    const data = {}\n    data.flags = buf[offset]\n    offset += 1\n    data.tag = string.decode(buf, offset)\n    offset += string.decode.bytes\n    data.value = toUtf8(buf, offset, oldOffset + len)\n\n    data.issuerCritical = !!(data.flags & rcaa.ISSUER_CRITICAL)\n\n    rcaa.decode.bytes = len + 2\n\n    return data\n  },\n  encodingLength (data) {\n    return string.encodingLength(data.tag) + string.encodingLength(data.value) + 2\n  }\n})\n\nrcaa.ISSUER_CRITICAL = 1 << 7\n\nconst rmx = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rmx.encodingLength(data))\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n    offset += 2\n    b.writeUInt16BE(buf, data.preference || 0, offset)\n    offset += 2\n    name.encode(data.exchange, buf, offset)\n    offset += name.encode.bytes\n\n    b.writeUInt16BE(buf, offset - oldOffset - 2, oldOffset)\n    rmx.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n\n    const data = {}\n    offset += 2\n    data.preference = b.readUInt16BE(buf, offset)\n    offset += 2\n    data.exchange = name.decode(buf, offset)\n    offset += name.decode.bytes\n\n    rmx.decode.bytes = offset - oldOffset\n    return data\n  },\n  encodingLength (data) {\n    return 4 + name.encodingLength(data.exchange)\n  }\n})\n\nconst ra = codec({\n  encode (host, buf, offset) {\n    if (!buf) buf = new Uint8Array(ra.encodingLength(host))\n    if (!offset) offset = 0\n\n    b.writeUInt16BE(buf, 4, offset)\n    offset += 2\n    ip.v4.encode(host, buf, offset)\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    offset += 2\n    const host = ip.v4.decode(buf, offset)\n    return host\n  },\n  bytes: 6\n})\n\nconst raaaa = codec({\n  encode (host, buf, offset) {\n    if (!buf) buf = new Uint8Array(raaaa.encodingLength(host))\n    if (!offset) offset = 0\n\n    b.writeUInt16BE(buf, 16, offset)\n    offset += 2\n    ip.v6.encode(host, buf, offset)\n    raaaa.encode.bytes = 18\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    offset += 2\n    const host = ip.v6.decode(buf, offset)\n    raaaa.decode.bytes = 18\n    return host\n  },\n  bytes: 18\n})\n\nconst alloc = size => new Uint8Array(size)\n\nconst roption = codec({\n  encode (option, buf, offset) {\n    if (!buf) buf = new Uint8Array(roption.encodingLength(option))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const code = optioncodes.toCode(option.code)\n    b.writeUInt16BE(buf, code, offset)\n    offset += 2\n    if (option.data) {\n      b.writeUInt16BE(buf, option.data.length, offset)\n      offset += 2\n      b.copy(option.data, buf, offset)\n      offset += option.data.length\n    } else {\n      switch (code) {\n        // case 3: NSID.  No encode makes sense.\n        // case 5,6,7: Not implementable\n        case 8: // ECS\n          {\n            // note: do IP math before calling\n            const spl = option.sourcePrefixLength || 0\n            const fam = option.family || ip.familyOf(option.ip, alloc)\n            const ipBuf = ip.encode(option.ip, alloc)\n            const ipLen = Math.ceil(spl / 8)\n            b.writeUInt16BE(buf, ipLen + 4, offset)\n            offset += 2\n            b.writeUInt16BE(buf, fam, offset)\n            offset += 2\n            buf[offset++] = spl\n            buf[offset++] = option.scopePrefixLength || 0\n\n            b.copy(ipBuf, buf, offset, 0, ipLen)\n            offset += ipLen\n          }\n          break\n        // case 9: EXPIRE (experimental)\n        // case 10: COOKIE.  No encode makes sense.\n        case 11: // KEEP-ALIVE\n          if (option.timeout) {\n            b.writeUInt16BE(buf, 2, offset)\n            offset += 2\n            b.writeUInt16BE(buf, option.timeout, offset)\n            offset += 2\n          } else {\n            b.writeUInt16BE(buf, 0, offset)\n            offset += 2\n          }\n          break\n        case 12: // PADDING\n          {\n            const len = option.length || 0\n            b.writeUInt16BE(buf, len, offset)\n            offset += 2\n            buf.fill(0, offset, offset + len)\n            offset += len\n          }\n          break\n        // case 13:  CHAIN.  Experimental.\n        case 14: // KEY-TAG\n          {\n            const tagsLen = option.tags.length * 2\n            b.writeUInt16BE(buf, tagsLen, offset)\n            offset += 2\n            for (const tag of option.tags) {\n              b.writeUInt16BE(buf, tag, offset)\n              offset += 2\n            }\n          }\n          break\n        default:\n          throw new Error(`Unknown roption code: ${option.code}`)\n      }\n    }\n\n    roption.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const option = {}\n    option.code = b.readUInt16BE(buf, offset)\n    option.type = optioncodes.toString(option.code)\n    offset += 2\n    const len = b.readUInt16BE(buf, offset)\n    offset += 2\n    option.data = buf.slice(offset, offset + len)\n    switch (option.code) {\n      // case 3: NSID.  No decode makes sense.\n      case 8: // ECS\n        option.family = b.readUInt16BE(buf, offset)\n        offset += 2\n        option.sourcePrefixLength = buf[offset++]\n        option.scopePrefixLength = buf[offset++]\n        {\n          const padded = new Uint8Array((option.family === 1) ? 4 : 16)\n          b.copy(buf, padded, 0, offset, offset + len - 4)\n          option.ip = ip.decode(padded)\n        }\n        break\n      // case 12: Padding.  No decode makes sense.\n      case 11: // KEEP-ALIVE\n        if (len > 0) {\n          option.timeout = b.readUInt16BE(buf, offset)\n          offset += 2\n        }\n        break\n      case 14:\n        option.tags = []\n        for (let i = 0; i < len; i += 2) {\n          option.tags.push(b.readUInt16BE(buf, offset))\n          offset += 2\n        }\n      // don't worry about default.  caller will use data if desired\n    }\n\n    roption.decode.bytes = len + 4\n    return option\n  },\n  encodingLength (option) {\n    if (option.data) {\n      return option.data.length + 4\n    }\n    const code = optioncodes.toCode(option.code)\n    switch (code) {\n      case 8: // ECS\n      {\n        const spl = option.sourcePrefixLength || 0\n        return Math.ceil(spl / 8) + 8\n      }\n      case 11: // KEEP-ALIVE\n        return (typeof option.timeout === 'number') ? 6 : 4\n      case 12: // PADDING\n        return option.length + 4\n      case 14: // KEY-TAG\n        return 4 + (option.tags.length * 2)\n    }\n    throw new Error(`Unknown roption code: ${option.code}`)\n  }\n})\n\nconst ropt = codec({\n  encode (options, buf, offset) {\n    if (!buf) buf = new Uint8Array(ropt.encodingLength(options))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const rdlen = encodingLengthList(options, roption)\n    b.writeUInt16BE(buf, rdlen, offset)\n    offset = encodeList(options, roption, buf, offset + 2)\n\n    ropt.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const options = []\n    let rdlen = b.readUInt16BE(buf, offset)\n    offset += 2\n    let o = 0\n    while (rdlen > 0) {\n      options[o++] = roption.decode(buf, offset)\n      offset += roption.decode.bytes\n      rdlen -= roption.decode.bytes\n    }\n    ropt.decode.bytes = offset - oldOffset\n    return options\n  },\n  encodingLength (options) {\n    return 2 + encodingLengthList(options || [], roption)\n  }\n})\n\nconst rdnskey = codec({\n  encode (key, buf, offset) {\n    if (!buf) buf = new Uint8Array(rdnskey.encodingLength(key))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const keydata = key.key\n    if (!b.isU8Arr(keydata)) {\n      throw new Error('Key must be a Buffer')\n    }\n\n    offset += 2 // Leave space for length\n    b.writeUInt16BE(buf, key.flags, offset)\n    offset += 2\n    buf[offset] = rdnskey.PROTOCOL_DNSSEC\n    offset += 1\n    buf[offset] = key.algorithm\n    offset += 1\n    b.copy(keydata, buf, offset, 0, keydata.length)\n    offset += keydata.length\n\n    rdnskey.encode.bytes = offset - oldOffset\n    b.writeUInt16BE(buf, rdnskey.encode.bytes - 2, oldOffset)\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const key = {}\n    const length = b.readUInt16BE(buf, offset)\n    offset += 2\n    key.flags = b.readUInt16BE(buf, offset)\n    offset += 2\n    if (buf[offset] !== rdnskey.PROTOCOL_DNSSEC) {\n      throw new Error('Protocol must be 3')\n    }\n    offset += 1\n    key.algorithm = buf[offset]\n    offset += 1\n    key.key = buf.slice(offset, oldOffset + length + 2)\n    offset += key.key.length\n    rdnskey.decode.bytes = offset - oldOffset\n    return key\n  },\n  encodingLength (key) {\n    return 6 + b.bytelength(key.key)\n  }\n})\n\nrdnskey.PROTOCOL_DNSSEC = 3\nrdnskey.ZONE_KEY = 0x80\nrdnskey.SECURE_ENTRYPOINT = 0x8000\n\nconst rrrsig = codec({\n  encode (sig, buf, offset) {\n    if (!buf) buf = new Uint8Array(rrrsig.encodingLength(sig))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const signature = sig.signature\n    if (!b.isU8Arr(signature)) {\n      throw new Error('Signature must be a Buffer')\n    }\n\n    offset += 2 // Leave space for length\n    b.writeUInt16BE(buf, types.toType(sig.typeCovered), offset)\n    offset += 2\n    buf[offset] = sig.algorithm\n    offset += 1\n    buf[offset] = sig.labels\n    offset += 1\n    b.writeUInt32BE(buf, sig.originalTTL, offset)\n    offset += 4\n    b.writeUInt32BE(buf, sig.expiration, offset)\n    offset += 4\n    b.writeUInt32BE(buf, sig.inception, offset)\n    offset += 4\n    b.writeUInt16BE(buf, sig.keyTag, offset)\n    offset += 2\n    name.encode(sig.signersName, buf, offset)\n    offset += name.encode.bytes\n    b.copy(signature, buf, offset, 0, signature.length)\n    offset += signature.length\n\n    rrrsig.encode.bytes = offset - oldOffset\n    b.writeUInt16BE(buf, rrrsig.encode.bytes - 2, oldOffset)\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const sig = {}\n    const length = b.readUInt16BE(buf, offset)\n    offset += 2\n    sig.typeCovered = types.toString(b.readUInt16BE(buf, offset))\n    offset += 2\n    sig.algorithm = buf[offset]\n    offset += 1\n    sig.labels = buf[offset]\n    offset += 1\n    sig.originalTTL = b.readUInt32BE(buf, offset)\n    offset += 4\n    sig.expiration = b.readUInt32BE(buf, offset)\n    offset += 4\n    sig.inception = b.readUInt32BE(buf, offset)\n    offset += 4\n    sig.keyTag = b.readUInt16BE(buf, offset)\n    offset += 2\n    sig.signersName = name.decode(buf, offset)\n    offset += name.decode.bytes\n    sig.signature = buf.slice(offset, oldOffset + length + 2)\n    offset += sig.signature.length\n    rrrsig.decode.bytes = offset - oldOffset\n    return sig\n  },\n  encodingLength (sig) {\n    return 20 +\n      name.encodingLength(sig.signersName) +\n      b.bytelength(sig.signature)\n  }\n})\nconst rrp = codec({\n  encode (data, buf, offset) {\n    if (!buf) buf = new Uint8Array(rrp.encodingLength(data))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    offset += 2 // Leave space for length\n    name.encode(data.mbox || '.', buf, offset)\n    offset += name.encode.bytes\n    name.encode(data.txt || '.', buf, offset)\n    offset += name.encode.bytes\n    rrp.encode.bytes = offset - oldOffset\n    b.writeUInt16BE(buf, rrp.encode.bytes - 2, oldOffset)\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const data = {}\n    offset += 2\n    data.mbox = name.decode(buf, offset) || '.'\n    offset += name.decode.bytes\n    data.txt = name.decode(buf, offset) || '.'\n    offset += name.decode.bytes\n    rrp.decode.bytes = offset - oldOffset\n    return data\n  },\n  encodingLength (data) {\n    return 2 + name.encodingLength(data.mbox || '.') + name.encodingLength(data.txt || '.')\n  }\n})\n\nconst typebitmap = codec({\n  encode (typelist, buf, offset) {\n    if (!buf) buf = new Uint8Array(typebitmap.encodingLength(typelist))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const typesByWindow = []\n    for (let i = 0; i < typelist.length; i++) {\n      const typeid = types.toType(typelist[i])\n      if (typesByWindow[typeid >> 8] === undefined) {\n        typesByWindow[typeid >> 8] = []\n      }\n      typesByWindow[typeid >> 8][(typeid >> 3) & 0x1F] |= 1 << (7 - (typeid & 0x7))\n    }\n\n    for (let i = 0; i < typesByWindow.length; i++) {\n      if (typesByWindow[i] !== undefined) {\n        const windowBuf = b.from(typesByWindow[i])\n        buf[offset] = i\n        offset += 1\n        buf[offset] = windowBuf.length\n        offset += 1\n        b.copy(windowBuf, buf, offset, 0, windowBuf.length)\n        offset += windowBuf.length\n      }\n    }\n\n    typebitmap.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset, length) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const typelist = []\n    while (offset - oldOffset < length) {\n      const window = buf[offset]\n      offset += 1\n      const windowLength = buf[offset]\n      offset += 1\n      for (let i = 0; i < windowLength; i++) {\n        const b = buf[offset + i]\n        for (let j = 0; j < 8; j++) {\n          if (b & (1 << (7 - j))) {\n            const typeid = types.toString((window << 8) | (i << 3) | j)\n            typelist.push(typeid)\n          }\n        }\n      }\n      offset += windowLength\n    }\n\n    typebitmap.decode.bytes = offset - oldOffset\n    return typelist\n  },\n  encodingLength (typelist) {\n    const extents = []\n    for (let i = 0; i < typelist.length; i++) {\n      const typeid = types.toType(typelist[i])\n      extents[typeid >> 8] = Math.max(extents[typeid >> 8] || 0, typeid & 0xFF)\n    }\n\n    let len = 0\n    for (let i = 0; i < extents.length; i++) {\n      if (extents[i] !== undefined) {\n        len += 2 + Math.ceil((extents[i] + 1) / 8)\n      }\n    }\n\n    return len\n  }\n})\n\nconst rnsec = codec({\n  encode (record, buf, offset) {\n    if (!buf) buf = new Uint8Array(rnsec.encodingLength(record))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    offset += 2 // Leave space for length\n    name.encode(record.nextDomain, buf, offset)\n    offset += name.encode.bytes\n    typebitmap.encode(record.rrtypes, buf, offset)\n    offset += typebitmap.encode.bytes\n\n    rnsec.encode.bytes = offset - oldOffset\n    b.writeUInt16BE(buf, rnsec.encode.bytes - 2, oldOffset)\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const record = {}\n    const length = b.readUInt16BE(buf, offset)\n    offset += 2\n    record.nextDomain = name.decode(buf, offset)\n    offset += name.decode.bytes\n    record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset))\n    offset += typebitmap.decode.bytes\n\n    rnsec.decode.bytes = offset - oldOffset\n    return record\n  },\n  encodingLength (record) {\n    return 2 +\n      name.encodingLength(record.nextDomain) +\n      typebitmap.encodingLength(record.rrtypes)\n  }\n})\n\nconst rnsec3 = codec({\n  encode (record, buf, offset) {\n    if (!buf) buf = new Uint8Array(rnsec3.encodingLength(record))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const salt = record.salt\n    if (!b.isU8Arr(salt)) {\n      throw new Error('salt must be a Buffer')\n    }\n\n    const nextDomain = record.nextDomain\n    if (!b.isU8Arr(nextDomain)) {\n      throw new Error('nextDomain must be a Buffer')\n    }\n\n    offset += 2 // Leave space for length\n    buf[offset] = record.algorithm\n    offset += 1\n    buf[offset] = record.flags\n    offset += 1\n    b.writeUInt16BE(buf, record.iterations, offset)\n    offset += 2\n    buf[offset] = salt.length\n    offset += 1\n    b.copy(salt, buf, offset, 0, salt.length)\n    offset += salt.length\n    buf[offset] = nextDomain.length\n    offset += 1\n    b.copy(nextDomain, buf, offset, 0, nextDomain.length)\n    offset += nextDomain.length\n    typebitmap.encode(record.rrtypes, buf, offset)\n    offset += typebitmap.encode.bytes\n\n    rnsec3.encode.bytes = offset - oldOffset\n    b.writeUInt16BE(buf, rnsec3.encode.bytes - 2, oldOffset)\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const record = {}\n    const length = b.readUInt16BE(buf, offset)\n    offset += 2\n    record.algorithm = buf[offset]\n    offset += 1\n    record.flags = buf[offset]\n    offset += 1\n    record.iterations = b.readUInt16BE(buf, offset)\n    offset += 2\n    const saltLength = buf[offset]\n    offset += 1\n    record.salt = buf.slice(offset, offset + saltLength)\n    offset += saltLength\n    const hashLength = buf[offset]\n    offset += 1\n    record.nextDomain = buf.slice(offset, offset + hashLength)\n    offset += hashLength\n    record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset))\n    offset += typebitmap.decode.bytes\n\n    rnsec3.decode.bytes = offset - oldOffset\n    return record\n  },\n  encodingLength (record) {\n    return 8 +\n      record.salt.length +\n      record.nextDomain.length +\n      typebitmap.encodingLength(record.rrtypes)\n  }\n})\n\nconst rds = codec({\n  encode (digest, buf, offset) {\n    if (!buf) buf = new Uint8Array(rds.encodingLength(digest))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const digestdata = digest.digest\n    if (!b.isU8Arr(digestdata)) {\n      throw new Error('Digest must be a Buffer')\n    }\n\n    offset += 2 // Leave space for length\n    b.writeUInt16BE(buf, digest.keyTag, offset)\n    offset += 2\n    buf[offset] = digest.algorithm\n    offset += 1\n    buf[offset] = digest.digestType\n    offset += 1\n    b.copy(digestdata, buf, offset, 0, digestdata.length)\n    offset += digestdata.length\n\n    rds.encode.bytes = offset - oldOffset\n    b.writeUInt16BE(buf, rds.encode.bytes - 2, oldOffset)\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const digest = {}\n    const length = b.readUInt16BE(buf, offset)\n    offset += 2\n    digest.keyTag = b.readUInt16BE(buf, offset)\n    offset += 2\n    digest.algorithm = buf[offset]\n    offset += 1\n    digest.digestType = buf[offset]\n    offset += 1\n    digest.digest = buf.slice(offset, oldOffset + length + 2)\n    offset += digest.digest.length\n    rds.decode.bytes = offset - oldOffset\n    return digest\n  },\n  encodingLength (digest) {\n    return 6 + b.bytelength(digest.digest)\n  }\n})\n\nconst rsshfp = codec({\n  encode (record, buf, offset) {\n    if (!buf) buf = new Uint8Array(rsshfp.encodingLength(record))\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    offset += 2 // The function call starts with the offset pointer at the RDLENGTH field, not the RDATA one\n    buf[offset] = record.algorithm\n    offset += 1\n    buf[offset] = record.hash\n    offset += 1\n\n    const fingerprintLength = b.hexLength(record.fingerprint)\n    const expectedLength = getFingerprintLengthForHashType(record.hash)\n    if (fingerprintLength !== expectedLength) {\n      throw new Error(`Invalid length of fingerprint \"${record.fingerprint}\" for hashType=${record.hash}: ${fingerprintLength} != ${expectedLength}`)\n    }\n    b.writeHex(buf, record.fingerprint, offset, offset += fingerprintLength)\n    rsshfp.encode.bytes = offset - oldOffset\n    b.writeUInt16BE(buf, rsshfp.encode.bytes - 2, oldOffset)\n\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n    const oldOffset = offset\n\n    const record = {}\n    offset += 2 // Account for the RDLENGTH field\n    record.algorithm = buf[offset]\n    offset += 1\n    record.hash = buf[offset]\n    offset += 1\n\n    const fingerprintLength = getFingerprintLengthForHashType(record.hash)\n    record.fingerprint = b.toHex(buf, offset, offset + fingerprintLength)\n    offset += fingerprintLength\n    rsshfp.decode.bytes = offset - oldOffset\n    return record\n  },\n  encodingLength (record) {\n    return 4 + b.hexLength(record.fingerprint)\n  }\n})\nfunction getFingerprintLengthForHashType (hashType) {\n  if (hashType === 1) return 20\n  if (hashType === 2) return 32\n  throw new Error(`Invalid hashType=${hashType}, supported=1,2`)\n}\nrsshfp.getFingerprintLengthForHashType = getFingerprintLengthForHashType\n\nfunction renc (type) {\n  switch (type.toUpperCase()) {\n    case 'A': return ra\n    case 'PTR': return rptr\n    case 'CNAME': return rptr\n    case 'DNAME': return rptr\n    case 'TXT': return rtxt\n    case 'NULL': return rnull\n    case 'AAAA': return raaaa\n    case 'SRV': return rsrv\n    case 'HINFO': return rhinfo\n    case 'CAA': return rcaa\n    case 'NS': return rns\n    case 'SOA': return rsoa\n    case 'MX': return rmx\n    case 'OPT': return ropt\n    case 'DNSKEY': return rdnskey\n    case 'RRSIG': return rrrsig\n    case 'RP': return rrp\n    case 'NSEC': return rnsec\n    case 'NSEC3': return rnsec3\n    case 'SSHFP': return rsshfp\n    case 'DS': return rds\n  }\n  return runknown\n}\n\nexport const answer = codec({\n  encode (a, buf, offset) {\n    if (!buf) buf = new Uint8Array(answer.encodingLength(a))\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n\n    name.encode(a.name, buf, offset)\n    offset += name.encode.bytes\n\n    b.writeUInt16BE(buf, types.toType(a.type), offset)\n\n    if (a.type.toUpperCase() === 'OPT') {\n      if (a.name !== '.') {\n        throw new Error('OPT name must be root.')\n      }\n      b.writeUInt16BE(buf, a.udpPayloadSize || 4096, offset + 2)\n      buf[offset + 4] = a.extendedRcode || 0\n      buf[offset + 5] = a.ednsVersion || 0\n      b.writeUInt16BE(buf, a.flags || 0, offset + 6)\n\n      offset += 8\n      ropt.encode(a.options || [], buf, offset)\n      offset += ropt.encode.bytes\n    } else {\n      let klass = classes.toClass(a.class === undefined ? 'IN' : a.class)\n      if (a.flush) klass |= FLUSH_MASK // the 1st bit of the class is the flush bit\n      b.writeUInt16BE(buf, klass, offset + 2)\n      b.writeUInt32BE(buf, a.ttl || 0, offset + 4)\n\n      offset += 8\n      const enc = renc(a.type)\n      enc.encode(a.data, buf, offset)\n      offset += enc.encode.bytes\n    }\n\n    answer.encode.bytes = offset - oldOffset\n    return buf\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const a = {}\n    const oldOffset = offset\n\n    a.name = name.decode(buf, offset)\n    offset += name.decode.bytes\n    a.type = types.toString(b.readUInt16BE(buf, offset))\n    if (a.type === 'OPT') {\n      a.udpPayloadSize = b.readUInt16BE(buf, offset + 2)\n      a.extendedRcode = buf[offset + 4]\n      a.ednsVersion = buf[offset + 5]\n      a.flags = b.readUInt16BE(buf, offset + 6)\n      a.flag_do = ((a.flags >> 15) & 0x1) === 1\n      a.options = ropt.decode(buf, offset + 8)\n      offset += 8 + ropt.decode.bytes\n    } else {\n      const klass = b.readUInt16BE(buf, offset + 2)\n      a.ttl = b.readUInt32BE(buf, offset + 4)\n\n      a.class = classes.toString(klass & NOT_FLUSH_MASK)\n      a.flush = !!(klass & FLUSH_MASK)\n\n      const enc = renc(a.type)\n      a.data = enc.decode(buf, offset + 8)\n      offset += 8 + enc.decode.bytes\n    }\n\n    answer.decode.bytes = offset - oldOffset\n    return a\n  },\n  encodingLength (a) {\n    const data = (a.data !== null && a.data !== undefined) ? a.data : a.options\n    return name.encodingLength(a.name) + 8 + renc(a.type).encodingLength(data)\n  }\n})\n\nexport const question = codec({\n  encode (q, buf, offset) {\n    if (!buf) buf = new Uint8Array(question.encodingLength(q))\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n\n    name.encode(q.name, buf, offset)\n    offset += name.encode.bytes\n\n    b.writeUInt16BE(buf, types.toType(q.type), offset)\n    offset += 2\n\n    b.writeUInt16BE(buf, classes.toClass(q.class === undefined ? 'IN' : q.class), offset)\n    offset += 2\n\n    question.encode.bytes = offset - oldOffset\n    return q\n  },\n  decode (buf, offset) {\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n    const q = {}\n\n    q.name = name.decode(buf, offset)\n    offset += name.decode.bytes\n\n    q.type = types.toString(b.readUInt16BE(buf, offset))\n    offset += 2\n\n    q.class = classes.toString(b.readUInt16BE(buf, offset))\n    offset += 2\n\n    const qu = !!(q.class & QU_MASK)\n    if (qu) q.class &= NOT_QU_MASK\n\n    question.decode.bytes = offset - oldOffset\n    return q\n  },\n  encodingLength (q) {\n    return name.encodingLength(q.name) + 4\n  }\n})\n\nexport {\n  rsoa as soa,\n  rtxt as txt,\n  rnull as null,\n  runknown as unknown,\n  rns as ns,\n  rhinfo as hinfo,\n  rptr as ptr,\n  rptr as cname,\n  rptr as dname,\n  rsrv as srv,\n  rcaa as caa,\n  rmx as mx,\n  ra as a,\n  raaaa as aaaa,\n  roption as option,\n  ropt as opt,\n  rdnskey as dnskey,\n  rrrsig as rrsig,\n  rrp as rp,\n  rnsec as nsec,\n  rnsec3 as nsec3,\n  rds as ds,\n  rsshfp as sshfp,\n  renc as enc\n}\n\nexport const AUTHORITATIVE_ANSWER = 1 << 10\nexport const TRUNCATED_RESPONSE = 1 << 9\nexport const RECURSION_DESIRED = 1 << 8\nexport const RECURSION_AVAILABLE = 1 << 7\nexport const AUTHENTIC_DATA = 1 << 5\nexport const CHECKING_DISABLED = 1 << 4\nexport const DNSSEC_OK = 1 << 15\n\nexport const packet = {\n  encode: function (result, buf, offset) {\n    const allocing = !buf\n\n    if (allocing) buf = new Uint8Array(encodingLength(result))\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n\n    if (!result.questions) result.questions = []\n    if (!result.answers) result.answers = []\n    if (!result.authorities) result.authorities = []\n    if (!result.additionals) result.additionals = []\n\n    header.encode(result, buf, offset)\n    offset += header.encode.bytes\n\n    offset = encodeList(result.questions, question, buf, offset)\n    offset = encodeList(result.answers, answer, buf, offset)\n    offset = encodeList(result.authorities, answer, buf, offset)\n    offset = encodeList(result.additionals, answer, buf, offset)\n\n    packet.encode.bytes = offset - oldOffset\n\n    // just a quick sanity check\n    if (allocing && encode.bytes !== buf.length) {\n      return buf.slice(0, encode.bytes)\n    }\n\n    return buf\n  },\n  decode: function (buf, offset) {\n    if (!offset) offset = 0\n\n    const oldOffset = offset\n    const result = header.decode(buf, offset)\n    offset += header.decode.bytes\n\n    offset = decodeList(result.questions, question, buf, offset)\n    offset = decodeList(result.answers, answer, buf, offset)\n    offset = decodeList(result.authorities, answer, buf, offset)\n    offset = decodeList(result.additionals, answer, buf, offset)\n\n    packet.decode.bytes = offset - oldOffset\n\n    return result\n  },\n  encodingLength: function (result) {\n    return header.encodingLength(result) +\n      encodingLengthList(result.questions || [], question) +\n      encodingLengthList(result.answers || [], answer) +\n      encodingLengthList(result.authorities || [], answer) +\n      encodingLengthList(result.additionals || [], answer)\n  }\n}\npacket.encode.bytes = 0\npacket.decode.bytes = 0\n\nfunction sanitizeSingle (input, type) {\n  if (input.questions) {\n    throw new Error('Only one .question object expected instead of a .questions array!')\n  }\n  const sanitized = Object.assign({\n    type\n  }, input)\n  if (sanitized.question) {\n    sanitized.questions = [sanitized.question]\n    delete sanitized.question\n  }\n  return sanitized\n}\n\nexport const query = {\n  encode: function (result, buf, offset) {\n    buf = packet.encode(sanitizeSingle(result, 'query'), buf, offset)\n    query.encode.bytes = packet.encode.bytes\n    return buf\n  },\n  decode: function (buf, offset) {\n    const res = packet.decode(buf, offset)\n    query.decode.bytes = packet.decode.bytes\n    if (res.questions) {\n      res.question = res.questions[0]\n      delete res.questions\n    }\n    return res\n  },\n  encodingLength: function (result) {\n    return packet.encodingLength(sanitizeSingle(result, 'query'))\n  }\n}\nquery.encode.bytes = 0\nquery.decode.bytes = 0\n\nexport const response = {\n  encode: function (result, buf, offset) {\n    buf = packet.encode(sanitizeSingle(result, 'response'), buf, offset)\n    response.encode.bytes = packet.encode.bytes\n    return buf\n  },\n  decode: function (buf, offset) {\n    const res = packet.decode(buf, offset)\n    response.decode.bytes = packet.decode.bytes\n    if (res.questions) {\n      res.question = res.questions[0]\n      delete res.questions\n    }\n    return res\n  },\n  encodingLength: function (result) {\n    return packet.encodingLength(sanitizeSingle(result, 'response'))\n  }\n}\nresponse.encode.bytes = 0\nresponse.decode.bytes = 0\n\nexport const encode = packet.encode\nexport const decode = packet.decode\nexport const encodingLength = packet.encodingLength\n\nexport function streamEncode (result) {\n  const buf = encode(result)\n  const combine = new Uint8Array(2 + buf.byteLength)\n  b.writeUInt16BE(combine, buf.byteLength)\n  b.copy(buf, combine, 2, 0, buf.length)\n  streamEncode.bytes = combine.byteLength\n  return combine\n}\nstreamEncode.bytes = 0\n\nexport function streamDecode (sbuf) {\n  const len = b.readUInt16BE(sbuf, 0)\n  if (sbuf.byteLength < len + 2) {\n    // not enough data\n    return null\n  }\n  const result = decode(sbuf.slice(2))\n  streamDecode.bytes = decode.bytes\n  return result\n}\nstreamDecode.bytes = 0\n\nexport function encodingLengthList (list, enc) {\n  let len = 0\n  for (let i = 0; i < list.length; i++) len += enc.encodingLength(list[i])\n  return len\n}\n\nexport function encodeList (list, enc, buf, offset) {\n  for (let i = 0; i < list.length; i++) {\n    enc.encode(list[i], buf, offset)\n    offset += enc.encode.bytes\n  }\n  return offset\n}\n\nexport function decodeList (list, enc, buf, offset) {\n  for (let i = 0; i < list.length; i++) {\n    list[i] = enc.decode(buf, offset)\n    offset += enc.decode.bytes\n  }\n  return offset\n}\n", "const v4Regex = /^(\\d{1,3}\\.){3,3}\\d{1,3}$/\nconst v4Size = 4\nconst v6Regex = /^(::)?(((\\d{1,3}\\.){3}(\\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i\nconst v6Size = 16\n\nexport const v4 = {\n  name: 'v4',\n  size: v4Size,\n  isFormat: ip => v4Regex.test(ip),\n  encode (ip, buff, offset) {\n    offset = ~~offset\n    buff = buff || new Uint8Array(offset + v4Size)\n    const max = ip.length\n    let n = 0\n    for (let i = 0; i < max;) {\n      const c = ip.charCodeAt(i++)\n      if (c === 46) { // \".\"\n        buff[offset++] = n\n        n = 0\n      } else {\n        n = n * 10 + (c - 48)\n      }\n    }\n    buff[offset] = n\n    return buff\n  },\n  decode (buff, offset) {\n    offset = ~~offset\n    return `${buff[offset++]}.${buff[offset++]}.${buff[offset++]}.${buff[offset]}`\n  }\n}\n\nexport const v6 = {\n  name: 'v6',\n  size: v6Size,\n  isFormat: ip => ip.length > 0 && v6Regex.test(ip),\n  encode (ip, buff, offset) {\n    offset = ~~offset\n    let end = offset + v6Size\n    let fill = -1\n    let hexN = 0\n    let decN = 0\n    let prevColon = true\n    let useDec = false\n    buff = buff || new Uint8Array(offset + v6Size)\n    // Note: This algorithm needs to check if the offset\n    // could exceed the buffer boundaries as it supports\n    // non-standard compliant encodings that may go beyond\n    // the boundary limits. if (offset < end) checks should\n    // not be necessary...\n    for (let i = 0; i < ip.length; i++) {\n      let c = ip.charCodeAt(i)\n      if (c === 58) { // :\n        if (prevColon) {\n          if (fill !== -1) {\n            // Not Standard! (standard doesn't allow multiple ::)\n            // We need to treat\n            if (offset < end) buff[offset] = 0\n            if (offset < end - 1) buff[offset + 1] = 0\n            offset += 2\n          } else if (offset < end) {\n            // :: in the middle\n            fill = offset\n          }\n        } else {\n          // : ends the previous number\n          if (useDec === true) {\n            // Non-standard! (ipv4 should be at end only)\n            // A ipv4 address should not be found anywhere else but at\n            // the end. This codec also support putting characters\n            // after the ipv4 address..\n            if (offset < end) buff[offset] = decN\n            offset++\n          } else {\n            if (offset < end) buff[offset] = hexN >> 8\n            if (offset < end - 1) buff[offset + 1] = hexN & 0xff\n            offset += 2\n          }\n          hexN = 0\n          decN = 0\n        }\n        prevColon = true\n        useDec = false\n      } else if (c === 46) { // . indicates IPV4 notation\n        if (offset < end) buff[offset] = decN\n        offset++\n        decN = 0\n        hexN = 0\n        prevColon = false\n        useDec = true\n      } else {\n        prevColon = false\n        if (c >= 97) {\n          c -= 87 // a-f ... 97~102 -87 => 10~15\n        } else if (c >= 65) {\n          c -= 55 // A-F ... 65~70 -55 => 10~15\n        } else {\n          c -= 48 // 0-9 ... starting from charCode 48\n          decN = decN * 10 + c\n        }\n        // We don't know yet if its a dec or hex number\n        hexN = (hexN << 4) + c\n      }\n    }\n    if (prevColon === false) {\n      // Commiting last number\n      if (useDec === true) {\n        if (offset < end) buff[offset] = decN\n        offset++\n      } else {\n        if (offset < end) buff[offset] = hexN >> 8\n        if (offset < end - 1) buff[offset + 1] = hexN & 0xff\n        offset += 2\n      }\n    } else if (fill === 0) {\n      // Not Standard! (standard doesn't allow multiple ::)\n      // This means that a : was found at the start AND end which means the\n      // end needs to be treated as 0 entry...\n      if (offset < end) buff[offset] = 0\n      if (offset < end - 1) buff[offset + 1] = 0\n      offset += 2\n    } else if (fill !== -1) {\n      // Non-standard! (standard doens't allow multiple ::)\n      // Here we find that there has been a :: somewhere in the middle\n      // and the end. To treat the end with priority we need to move all\n      // written data two bytes to the right.\n      offset += 2\n      for (let i = Math.min(offset - 1, end - 1); i >= fill + 2; i--) {\n        buff[i] = buff[i - 2]\n      }\n      buff[fill] = 0\n      buff[fill + 1] = 0\n      fill = offset\n    }\n    if (fill !== offset && fill !== -1) {\n      // Move the written numbers to the end while filling the everything\n      // \"fill\" to the bytes with zeros.\n      if (offset > end - 2) {\n        // Non Standard support, when the cursor exceeds bounds.\n        offset = end - 2\n      }\n      while (end > fill) {\n        buff[--end] = offset < end && offset > fill ? buff[--offset] : 0\n      }\n    } else {\n      // Fill the rest with zeros\n      while (offset < end) {\n        buff[offset++] = 0\n      }\n    }\n    return buff\n  },\n  decode (buff, offset) {\n    offset = ~~offset\n    let result = ''\n    for (let i = 0; i < v6Size; i += 2) {\n      if (i !== 0) {\n        result += ':'\n      }\n      result += (buff[offset + i] << 8 | buff[offset + i + 1]).toString(16)\n    }\n    return result\n      .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n      .replace(/:{3,4}/, '::')\n  }\n}\n\nexport const name = 'ip'\nexport function sizeOf (ip) {\n  if (v4.isFormat(ip)) return v4.size\n  if (v6.isFormat(ip)) return v6.size\n  throw Error(`Invalid ip address: ${ip}`)\n}\n\nexport function familyOf (string) {\n  return sizeOf(string) === v4.size ? 1 : 2\n}\n\nexport function encode (ip, buff, offset) {\n  offset = ~~offset\n  const size = sizeOf(ip)\n  if (typeof buff === 'function') {\n    buff = buff(offset + size)\n  }\n  if (size === v4.size) {\n    return v4.encode(ip, buff, offset)\n  }\n  return v6.encode(ip, buff, offset)\n}\n\nexport function decode (buff, offset, length) {\n  offset = ~~offset\n  length = length || (buff.length - offset)\n  if (length === v4.size) {\n    return v4.decode(buff, offset, length)\n  }\n  if (length === v6.size) {\n    return v6.decode(buff, offset, length)\n  }\n  throw Error(`Invalid buffer size needs to be ${v4.size} for v4 or ${v6.size} for v6.`)\n}\n", "export function toString (type) {\n  switch (type) {\n    case 1: return 'A'\n    case 10: return 'NULL'\n    case 28: return 'AAAA'\n    case 18: return 'AFSDB'\n    case 42: return 'APL'\n    case 257: return 'CAA'\n    case 60: return 'CDNSKEY'\n    case 59: return 'CDS'\n    case 37: return 'CERT'\n    case 5: return 'CNAME'\n    case 49: return 'DHCID'\n    case 32769: return 'DLV'\n    case 39: return 'DNAME'\n    case 48: return 'DNSKEY'\n    case 43: return 'DS'\n    case 55: return 'HIP'\n    case 13: return 'HINFO'\n    case 45: return 'IPSECKEY'\n    case 25: return 'KEY'\n    case 36: return 'KX'\n    case 29: return 'LOC'\n    case 15: return 'MX'\n    case 35: return 'NAPTR'\n    case 2: return 'NS'\n    case 47: return 'NSEC'\n    case 50: return 'NSEC3'\n    case 51: return 'NSEC3PARAM'\n    case 12: return 'PTR'\n    case 46: return 'RRSIG'\n    case 17: return 'RP'\n    case 24: return 'SIG'\n    case 6: return 'SOA'\n    case 99: return 'SPF'\n    case 33: return 'SRV'\n    case 44: return 'SSHFP'\n    case 32768: return 'TA'\n    case 249: return 'TKEY'\n    case 52: return 'TLSA'\n    case 250: return 'TSIG'\n    case 16: return 'TXT'\n    case 252: return 'AXFR'\n    case 251: return 'IXFR'\n    case 41: return 'OPT'\n    case 255: return 'ANY'\n  }\n  return 'UNKNOWN_' + type\n}\n\nexport function toType (name) {\n  switch (name.toUpperCase()) {\n    case 'A': return 1\n    case 'NULL': return 10\n    case 'AAAA': return 28\n    case 'AFSDB': return 18\n    case 'APL': return 42\n    case 'CAA': return 257\n    case 'CDNSKEY': return 60\n    case 'CDS': return 59\n    case 'CERT': return 37\n    case 'CNAME': return 5\n    case 'DHCID': return 49\n    case 'DLV': return 32769\n    case 'DNAME': return 39\n    case 'DNSKEY': return 48\n    case 'DS': return 43\n    case 'HIP': return 55\n    case 'HINFO': return 13\n    case 'IPSECKEY': return 45\n    case 'KEY': return 25\n    case 'KX': return 36\n    case 'LOC': return 29\n    case 'MX': return 15\n    case 'NAPTR': return 35\n    case 'NS': return 2\n    case 'NSEC': return 47\n    case 'NSEC3': return 50\n    case 'NSEC3PARAM': return 51\n    case 'PTR': return 12\n    case 'RRSIG': return 46\n    case 'RP': return 17\n    case 'SIG': return 24\n    case 'SOA': return 6\n    case 'SPF': return 99\n    case 'SRV': return 33\n    case 'SSHFP': return 44\n    case 'TA': return 32768\n    case 'TKEY': return 249\n    case 'TLSA': return 52\n    case 'TSIG': return 250\n    case 'TXT': return 16\n    case 'AXFR': return 252\n    case 'IXFR': return 251\n    case 'OPT': return 41\n    case 'ANY': return 255\n    case '*': return 255\n  }\n  if (name.toUpperCase().startsWith('UNKNOWN_')) return parseInt(name.slice(8))\n  return 0\n}\n", "/*\n * Traditional DNS header RCODEs (4-bits) defined by IANA in\n * https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml\n */\n\nexport function toString (rcode) {\n  switch (rcode) {\n    case 0: return 'NOERROR'\n    case 1: return 'FORMERR'\n    case 2: return 'SERVFAIL'\n    case 3: return 'NXDOMAIN'\n    case 4: return 'NOTIMP'\n    case 5: return 'REFUSED'\n    case 6: return 'YXDOMAIN'\n    case 7: return 'YXRRSET'\n    case 8: return 'NXRRSET'\n    case 9: return 'NOTAUTH'\n    case 10: return 'NOTZONE'\n    case 11: return 'RCODE_11'\n    case 12: return 'RCODE_12'\n    case 13: return 'RCODE_13'\n    case 14: return 'RCODE_14'\n    case 15: return 'RCODE_15'\n  }\n  return 'RCODE_' + rcode\n}\n\nexport function toRcode (code) {\n  switch (code.toUpperCase()) {\n    case 'NOERROR': return 0\n    case 'FORMERR': return 1\n    case 'SERVFAIL': return 2\n    case 'NXDOMAIN': return 3\n    case 'NOTIMP': return 4\n    case 'REFUSED': return 5\n    case 'YXDOMAIN': return 6\n    case 'YXRRSET': return 7\n    case 'NXRRSET': return 8\n    case 'NOTAUTH': return 9\n    case 'NOTZONE': return 10\n    case 'RCODE_11': return 11\n    case 'RCODE_12': return 12\n    case 'RCODE_13': return 13\n    case 'RCODE_14': return 14\n    case 'RCODE_15': return 15\n  }\n  return 0\n}\n", "/*\n * Traditional DNS header OPCODEs (4-bits) defined by IANA in\n * https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-5\n */\n\nexport function toString (opcode) {\n  switch (opcode) {\n    case 0: return 'QUERY'\n    case 1: return 'IQUERY'\n    case 2: return 'STATUS'\n    case 3: return 'OPCODE_3'\n    case 4: return 'NOTIFY'\n    case 5: return 'UPDATE'\n    case 6: return 'OPCODE_6'\n    case 7: return 'OPCODE_7'\n    case 8: return 'OPCODE_8'\n    case 9: return 'OPCODE_9'\n    case 10: return 'OPCODE_10'\n    case 11: return 'OPCODE_11'\n    case 12: return 'OPCODE_12'\n    case 13: return 'OPCODE_13'\n    case 14: return 'OPCODE_14'\n    case 15: return 'OPCODE_15'\n  }\n  return 'OPCODE_' + opcode\n}\n\nexport function toOpcode (code) {\n  switch (code.toUpperCase()) {\n    case 'QUERY': return 0\n    case 'IQUERY': return 1\n    case 'STATUS': return 2\n    case 'OPCODE_3': return 3\n    case 'NOTIFY': return 4\n    case 'UPDATE': return 5\n    case 'OPCODE_6': return 6\n    case 'OPCODE_7': return 7\n    case 'OPCODE_8': return 8\n    case 'OPCODE_9': return 9\n    case 'OPCODE_10': return 10\n    case 'OPCODE_11': return 11\n    case 'OPCODE_12': return 12\n    case 'OPCODE_13': return 13\n    case 'OPCODE_14': return 14\n    case 'OPCODE_15': return 15\n  }\n  return 0\n}\n", "export function toString (klass) {\n  switch (klass) {\n    case 1: return 'IN'\n    case 2: return 'CS'\n    case 3: return 'CH'\n    case 4: return 'HS'\n    case 255: return 'ANY'\n  }\n  return 'UNKNOWN_' + klass\n}\n\nexport function toClass (name) {\n  switch (name.toUpperCase()) {\n    case 'IN': return 1\n    case 'CS': return 2\n    case 'CH': return 3\n    case 'HS': return 4\n    case 'ANY': return 255\n  }\n  return 0\n}\n", "export function toString (type) {\n  switch (type) {\n    // list at\n    // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11\n    case 1: return 'LLQ'\n    case 2: return 'UL'\n    case 3: return 'NSID'\n    case 5: return 'DAU'\n    case 6: return 'DHU'\n    case 7: return 'N3U'\n    case 8: return 'CLIENT_SUBNET'\n    case 9: return 'EXPIRE'\n    case 10: return 'COOKIE'\n    case 11: return 'TCP_KEEPALIVE'\n    case 12: return 'PADDING'\n    case 13: return 'CHAIN'\n    case 14: return 'KEY_TAG'\n    case 26946: return 'DEVICEID'\n  }\n  if (type < 0) {\n    return null\n  }\n  return `OPTION_${type}`\n}\n\nexport function toCode (name) {\n  if (typeof name === 'number') {\n    return name\n  }\n  if (!name) {\n    return -1\n  }\n  switch (name.toUpperCase()) {\n    case 'OPTION_0': return 0\n    case 'LLQ': return 1\n    case 'UL': return 2\n    case 'NSID': return 3\n    case 'OPTION_4': return 4\n    case 'DAU': return 5\n    case 'DHU': return 6\n    case 'N3U': return 7\n    case 'CLIENT_SUBNET': return 8\n    case 'EXPIRE': return 9\n    case 'COOKIE': return 10\n    case 'TCP_KEEPALIVE': return 11\n    case 'PADDING': return 12\n    case 'CHAIN': return 13\n    case 'KEY_TAG': return 14\n    case 'DEVICEID': return 26946\n    case 'OPTION_65535': return 65535\n  }\n  const m = name.match(/_(\\d+)$/)\n  if (m) {\n    return parseInt(m[1], 10)\n  }\n  return -1\n}\n", "import * as utf8 from 'utf8-codec'\n\nexport const isU8Arr = input => input instanceof Uint8Array\n\nexport function bytelength (input) {\n  return typeof input === 'string' ? utf8.encodingLength(input) : input.byteLength\n}\n\nexport function from (input) {\n  if (input instanceof Uint8Array) {\n    return input\n  }\n  if (Array.isArray(input)) {\n    return new Uint8Array(input)\n  }\n  return utf8.encode(input)\n}\n\nexport function write (arr, str, start) {\n  if (typeof str !== 'string') {\n    throw new Error('unknown input type')\n  }\n  utf8.encode(str, arr, start)\n  return utf8.encode.bytes\n}\n\nconst hexNum = {}\nconst numHex = new Array(0xff)\nfor (let b0 = 0; b0 <= 0xf; b0 += 1) {\n  const b0L = b0.toString(16)\n  const b0U = b0L.toUpperCase()\n  for (let b1 = 0; b1 <= 0xf; b1 += 1) {\n    const b1L = b1.toString(16)\n    const b1U = b1L.toUpperCase()\n    const num = b0 << 4 | b1\n    const hex = `${b0L}${b1L}`\n    numHex[num] = hex\n    hexNum[hex] = num\n    hexNum[`${b0U}${b1L}`] = num\n    hexNum[`${b0L}${b1U}`] = num\n    hexNum[`${b0U}${b1U}`] = num\n  }\n}\n\nexport function toHex (buf, start, end) {\n  let result = ''\n  for (let offset = start; offset < end;) {\n    const num = buf[offset++]\n    result += numHex[num]\n  }\n  return result\n}\n\nexport function hexLength (string) {\n  return string.length >>> 1\n}\n\nexport function writeHex (buf, string, offset, end) {\n  let i = 0\n  while (offset < end) {\n    const hex = string.substr(i, 2)\n    const num = hexNum[hex]\n    if (num === undefined) return\n    buf[offset++] = num\n    i += 2\n  }\n  return buf\n}\n\nconst P_24 = Math.pow(2, 24)\nconst P_16 = Math.pow(2, 16)\nconst P_8 = Math.pow(2, 8)\nexport const readUInt32BE = (buf, offset) => buf[offset] * P_24 +\n  buf[offset + 1] * P_16 +\n  buf[offset + 2] * P_8 +\n  buf[offset + 3]\n\nexport const readUInt16BE = (buf, offset) => (buf[offset] << 8) | buf[offset + 1]\nexport const writeUInt32BE = (buf, value, offset) => {\n  value = +value\n  buf[offset + 3] = value\n  value = value >>> 8\n  buf[offset + 2] = value\n  value = value >>> 8\n  buf[offset + 1] = value\n  value = value >>> 8\n  buf[offset] = value\n  return offset + 4\n}\nexport const writeUInt16BE = (buf, value, offset) => {\n  buf[offset] = value >> 8\n  buf[offset + 1] = value & 0xFF\n  return offset + 2\n}\n\nexport function copy (source, target, targetStart, sourceStart, sourceEnd) {\n  if (targetStart < 0) {\n    sourceStart -= targetStart\n    targetStart = 0\n  }\n\n  if (sourceStart < 0) {\n    sourceStart = 0\n  }\n\n  if (sourceEnd < 0) {\n    return new Uint8Array(0)\n  }\n\n  if (targetStart >= target.length || sourceStart >= sourceEnd) {\n    return 0\n  }\n\n  return _copyActual(source, target, targetStart, sourceStart, sourceEnd)\n}\n\nfunction _copyActual (source, target, targetStart, sourceStart, sourceEnd) {\n  if (sourceEnd - sourceStart > target.length - targetStart) {\n    sourceEnd = sourceStart + target.length - targetStart\n  }\n\n  let nb = sourceEnd - sourceStart\n  const sourceLen = source.length - sourceStart\n  if (nb > sourceLen) {\n    nb = sourceLen\n  }\n\n  if (sourceStart !== 0 || sourceEnd < source.length) {\n    source = new Uint8Array(source.buffer, source.byteOffset + sourceStart, nb)\n  }\n\n  target.set(source, targetStart)\n\n  return nb\n}\n", "const SURROGATE_A = 0b1101100000000000\nconst SURROGATE_B = 0b1101110000000000\n\nexport const name = 'utf8'\n\nexport function encodingLength (str) {\n  let len = 0\n  const strLen = str.length\n  for (let i = 0; i < strLen; i += 1) {\n    const code = str.charCodeAt(i)\n    if (code <= 0x7F) {\n      len += 1\n    } else if (code <= 0x07FF) {\n      len += 2\n    } else if ((code & 0xF800) !== SURROGATE_A) {\n      len += 3\n    } else {\n      const next = i + 1\n      if (next === strLen || code >= SURROGATE_B) {\n        len += 3\n      } else {\n        const nextCode = str.charCodeAt(next)\n        if ((nextCode & 0xFC00) !== SURROGATE_B) {\n          len += 3\n        } else {\n          i = next\n          len += 4\n        }\n      }\n    }\n  }\n  return len\n}\n\nexport function encode (str, buf, offset) {\n  const strLen = str.length\n  if (offset === undefined || offset === null) {\n    offset = 0\n  }\n  if (buf === undefined) {\n    buf = new Uint8Array(encodingLength(str) + offset)\n  }\n  let off = offset\n  for (let i = 0; i < strLen; i += 1) {\n    let code = str.charCodeAt(i)\n    if (code <= 0x7F) {\n      buf[off++] = code\n    } else if (code <= 0x07FF) {\n      buf[off++] = 0b11000000 | ((code & 0b11111000000) >> 6)\n      buf[off++] = 0b10000000 | (code & 0b00000111111)\n    } else if ((code & 0xF800) !== SURROGATE_A) {\n      buf[off++] = 0b11100000 | ((code & 0b1111000000000000) >> 12)\n      buf[off++] = 0b10000000 | ((code & 0b0000111111000000) >> 6)\n      buf[off++] = 0b10000000 | (code & 0b0000000000111111)\n    } else {\n      const next = i + 1\n      if (next === strLen || code >= SURROGATE_B) {\n        // Incorrectly started surrogate pair\n        buf[off++] = 0xef\n        buf[off++] = 0xbf\n        buf[off++] = 0xbd\n      } else {\n        const nextCode = str.charCodeAt(next)\n        if ((nextCode & 0xFC00) !== SURROGATE_B) {\n          // Incorrect surrogate pair\n          buf[off++] = 0xef\n          buf[off++] = 0xbf\n          buf[off++] = 0xbd\n        } else {\n          i = next\n          code = 0b000010000000000000000 |\n            ((code & 0b1111111111) << 10) |\n            (nextCode & 0b1111111111)\n          buf[off++] = 0b11110000 | ((code & 0b111000000000000000000) >> 18)\n          buf[off++] = 0b10000000 | ((code & 0b000111111000000000000) >> 12)\n          buf[off++] = 0b10000000 | ((code & 0b000000000111111000000) >> 6)\n          buf[off++] = 0b10000000 | (code & 0b000000000000000111111)\n        }\n      }\n    }\n  }\n  encode.bytes = off - offset\n  return buf\n}\nencode.bytes = 0\n\nexport function decode (buf, start, end) {\n  let result = ''\n  if (start === undefined || start === null) {\n    start = 0\n  }\n  if (end === undefined || end === null) {\n    end = buf.length\n  }\n  for (let offset = start; offset < end;) {\n    const code = buf[offset++]\n    let num\n    if (code <= 128) {\n      num = code\n    } else if (code > 191 && code < 224) {\n      num = ((code & 0b11111) << 6) | (buf[offset++] & 0b111111)\n    } else if (code > 239 && code < 365) {\n      num = (\n        ((code & 0b111) << 18) |\n        ((buf[offset++] & 0b111111) << 12) |\n        ((buf[offset++] & 0b111111) << 6) |\n        (buf[offset++] & 0b111111)\n      ) - 0x10000\n      const numA = SURROGATE_A | ((num >> 10) & 0b1111111111)\n      result += String.fromCharCode(numA)\n      num = SURROGATE_B | (num & 0b1111111111)\n    } else {\n      num = ((code & 0b1111) << 12) |\n        ((buf[offset++] & 0b111111) << 6) |\n        (buf[offset++] & 0b111111)\n    }\n    result += String.fromCharCode(num)\n  }\n  decode.bytes = end - start\n  return result\n}\ndecode.bytes = 0\n", "import type {\n  CryptoApi,\n  LocalKeyManager,\n  InferKeyGeneratorAlgorithm,\n} from '@web5/crypto';\n\nimport type { BearerDid } from '../bearer-did.js';\nimport type { DidMetadata } from '../types/portable-did.js';\nimport type {\n  DidDocument,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidVerificationMethod,\n} from '../types/did-core.js';\n\nimport { DidVerificationRelationship } from '../types/did-core.js';\n\n/**\n * Represents options during the creation of a Decentralized Identifier (DID).\n *\n * Implementations of this interface may contain properties and methods that provide specific\n * options or metadata during the DID creation processes following specific DID method\n * specifications.\n */\nexport interface DidCreateOptions<TKms> {\n  /**\n   * Optional. An array of verification methods to be included in the DID document.\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Options for additional verification methods added to the DID Document during the creation of a\n * new Decentralized Identifier (DID).\n */\nexport interface DidCreateVerificationMethod<TKms> extends Pick<Partial<DidVerificationMethod>, 'controller' | 'id' | 'type'> {\n  /**\n   * The name of the cryptographic algorithm to be used for key generation.\n   *\n   * Examples might include `Ed25519` and `ES256K` but will vary depending on the DID method\n   * specification and the key management system in use.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidCreateVerificationMethod = {\n   *   algorithm: 'Ed25519'\n   * };\n   * ```\n   */\n  algorithm: TKms extends CryptoApi\n    ? InferKeyGeneratorAlgorithm<TKms>\n    : InferKeyGeneratorAlgorithm<LocalKeyManager>;\n\n  /**\n   * Optionally specify the purposes for which a verification method is intended to be used in a DID\n   * document.\n   *\n   * The `purposes` property defines the specific\n   * {@link DidVerificationRelationship | verification relationships} between the DID subject and\n   * the verification method. This enables the verification method to be utilized for distinct\n   * actions such as authentication, assertion, key agreement, capability delegation, and others. It\n   * is important for verifiers to recognize that a verification method must be associated with the\n   * relevant purpose in the DID document to be valid for that specific use case.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidCreateVerificationMethod = {\n   *   algorithm: 'Ed25519',\n   *   controller: 'did:example:1234',\n   *   purposes: ['authentication', 'assertionMethod']\n   * };\n   * ```\n   */\n  purposes?: (DidVerificationRelationship | keyof typeof DidVerificationRelationship)[];\n}\n\n/**\n * Defines the API for a specific DID method. It includes functionalities for creating and resolving\n * DIDs.\n *\n * @typeparam T - The type of the DID instance associated with this method.\n * @typeparam O - The type of the options used for creating the DID.\n */\nexport interface DidMethodApi<\n    TKms extends CryptoApi | undefined = CryptoApi,\n    TDid extends BearerDid = BearerDid,\n    TOptions extends DidCreateOptions<TKms> = DidCreateOptions<TKms>\n  > extends DidMethodResolver {\n  /**\n   * The name of the DID method.\n   *\n   * For example, in the DID `did:example:123456`, \"example\" would be the method name.\n   */\n  methodName: string;\n\n  new (): DidMethod;\n\n  /**\n   * Creates a new DID.\n   *\n   * This function should generate a new DID in accordance with the DID method specification being\n   * implemented, using the provided `keyManager`, and optionally, any provided `options`.\n   *\n   * @param params - The parameters used to create the DID.\n   * @param params.keyManager - Optional. The cryptographic API used for key management.\n   * @param params.options - Optional. The options used for creating the DID.\n   * @returns A promise that resolves to the newly created DID instance.\n   */\n  create(params: {\n    keyManager?: TKms;\n    options?: TOptions;\n  }): Promise<TDid>;\n\n  /**\n   * Given a DID Document, return the verification method that will be used for signing messages and\n   * credentials.\n   *\n   * If given, the `methodId` parameter is used to select the verification method. If not given, a\n   * DID method specific approach is taken to selecting the verification method to return.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns A promise that resolves to the erification method to use for signing.\n   */\n  getSigningMethod(params: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod>;\n}\n\n/**\n * Defines the interface for resolving a DID using a specific DID method.\n *\n * A DID resolver takes a DID URI as input and returns a {@link DidResolutionResult} object.\n *\n * @property {string} methodName - The name of the DID method.\n * @method resolve - Asynchronous method to resolve a DID URI. Takes the DID URI and optional resolution options.\n */\nexport interface DidMethodResolver {\n  /**\n   * The name of the DID method.\n   *\n   * For example, in the DID `did:example:123456`, \"example\" would be the method name.\n   */\n  methodName: string;\n\n  new (): DidMethod;\n\n  /**\n   * Resolves a DID URI.\n   *\n   * This function should resolve the DID URI in accordance with the DID method specification being\n   * implemented, using the provided `options`.\n   *\n   * @param didUri - The DID URI to be resolved.\n   * @param options - Optional. The options used for resolving the DID.\n   * @returns A {@link DidResolutionResult} object containing the DID document and metadata or an error.\n   */\n  resolve(didUri: string, options?: DidResolutionOptions): Promise<DidResolutionResult>;\n}\n\n/**\n * Represents the result of a Decentralized Identifier (DID) registration operation.\n *\n * This type encapsulates the complete outcome of registering a DID, including the registration\n * metadata, the DID document (if registration is successful), and metadata about the DID document.\n */\nexport interface DidRegistrationResult {\n  /**\n   * The DID document resulting from the registration process, if successful.\n   *\n   * If the registration operation was successful, this MUST contain a DID document\n   * corresponding to the DID. If the registration is unsuccessful, this value MUST be empty.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocument | DID Core Specification, \u00A7 DID Document}\n   */\n  didDocument: DidDocument | null;\n\n  /**\n   * Metadata about the DID Document.\n   *\n   * This structure contains information about the DID Document like creation and update timestamps,\n   * deactivation status, versioning information, and other details relevant to the DID Document.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata | DID Core Specification, \u00A7 DID Document Metadata}\n   */\n  didDocumentMetadata: DidMetadata;\n\n  /**\n   * A metadata structure consisting of values relating to the results of the DID registration\n   * process.\n   *\n   * This structure is REQUIRED, and in the case of an error in the registration process,\n   * this MUST NOT be empty. If the registration is not successful, this structure MUST contain an\n   * `error` property describing the error.\n   */\n  didRegistrationMetadata: DidRegistrationMetadata;\n}\n\n/**\n * Represents metadata related to the result of a DID registration operation.\n *\n * This type includes fields that provide information about the outcome of a DID registration\n * process (e.g., create, update, deactivate), including any errors that occurred.\n *\n * This metadata typically changes between invocations of the `create`, `update`, and `deactivate`\n * functions, as it represents data about the registration process itself.\n */\nexport type DidRegistrationMetadata = {\n  /**\n   * An error code indicating issues encountered during the DID registration process.\n   *\n   * While the DID Core specification does not define a specific set of error codes for the result\n   * returned by the `create`, `update`, or `deactivate` functions, it is recommended to use the\n   * error codes defined in the DID Specification Registries for\n   * {@link https://www.w3.org/TR/did-spec-registries/#error | DID Resolution Metadata }.\n   *\n   * Recommended error codes include:\n   *   - `internalError`: An unexpected error occurred during DID registration process.\n   *   - `invalidDid`: The provided DID is invalid.\n   *   - `invalidDidDocument`: The provided DID document does not conform to valid syntax.\n   *   - `invalidDidDocumentLength`: The byte length of the provided DID document does not match the expected value.\n   *   - `invalidSignature`: Verification of a signature failed.\n   *   - `methodNotSupported`: The DID method specified is not supported.\n   *   - Custom error codes can also be provided as strings.\n   */\n  error?: string;\n\n  // Additional output metadata generated during DID registration.\n  [key: string]: any;\n};\n\n/**\n * Base abstraction for all Decentralized Identifier (DID) method implementations.\n *\n * This base class serves as a foundational structure upon which specific DID methods\n * can be implemented. Subclasses should furnish particular method and data models adherent\n * to various DID methods, taking care to adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core specification} and the\n * respective DID method specifications.\n */\nexport class DidMethod {\n  /**\n   * MUST be implemented by all DID method implementations that extend {@link DidMethod}.\n   *\n   * Given the W3C DID Document of a DID, return the verification method that will be used for\n   * signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, each DID method implementation will select a default\n   * verification method from the DID Document.\n   *\n   * @param _params - The parameters for the `getSigningMethod` operation.\n   * @param _params.didDocument - DID Document to get the verification method from.\n   * @param _params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod(_params: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod | undefined> {\n    throw new Error(`Not implemented: Classes extending DidMethod must implement getSigningMethod()`);\n  }\n\n  /**\n   * MUST be implemented by all DID method implementations that extend {@link DidMethod}.\n   *\n   * Resolves a DID URI to a DID Document.\n   *\n   * @param _didUri - The DID to be resolved.\n   * @param _options - Optional parameters for resolving the DID.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(_didUri: string, _options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    throw new Error(`Not implemented: Classes extending DidMethod must implement resolve()`);\n  }\n}", "import type { Packet, StringAnswer, TxtAnswer, TxtData } from '@dnsquery/dns-packet';\nimport type {\n  Jwk,\n  Signer,\n  CryptoApi,\n  KeyIdentifier,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  AsymmetricKeyConverter,\n} from '@web5/crypto';\n\nimport bencode from 'bencode';\nimport { Convert } from '@web5/common';\nimport { computeJwkThumbprint, Ed25519, LocalKeyManager, Secp256k1, Secp256r1, X25519 } from '@web5/crypto';\nimport { AUTHORITATIVE_ANSWER, decode as dnsPacketDecode, encode as dnsPacketEncode } from '@dnsquery/dns-packet';\n\nimport type { DidMetadata, PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod, DidRegistrationResult } from './did-method.js';\nimport type {\n  DidService,\n  DidDocument,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidVerificationMethod,\n} from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { extractDidFragment } from '../utils.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { DidVerificationRelationship } from '../types/did-core.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Represents a BEP44 message, which is used for storing and retrieving data in the Mainline DHT\n * network.\n *\n * A BEP44 message is used primarily in the context of the DID DHT method for publishing and\n * resolving DID documents in the DHT network. This type encapsulates the data structure required\n * for such operations in accordance with BEP44.\n *\n * @see {@link https://www.bittorrent.org/beps/bep_0044.html | BEP44}\n */\nexport interface Bep44Message {\n  /**\n   * The public key bytes of the Identity Key, which serves as the identifier in the DHT network for\n   * the corresponding BEP44 message.\n   */\n  k: Uint8Array;\n\n  /**\n   * The sequence number of the message, used to ensure the latest version of the data is retrieved\n   * and updated. It's a monotonically increasing number.\n   */\n  seq: number;\n\n  /**\n   * The signature of the message, ensuring the authenticity and integrity of the data. It's\n   * computed over the bencoded sequence number and value.\n   */\n  sig: Uint8Array;\n\n  /**\n   * The actual data being stored or retrieved from the DHT network, typically encoded in a format\n   * suitable for DNS packet representation of a DID Document.\n   */\n  v: Uint8Array;\n}\n\n/**\n * Options for creating a Decentralized Identifier (DID) using the DID DHT method.\n */\nexport interface DidDhtCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optionally specify that the DID Subject is also identified by one or more other DIDs or URIs.\n   *\n   * A DID subject can have multiple identifiers for different purposes, or at different times.\n   * The assertion that two or more DIDs (or other types of URI) refer to the same DID subject can\n   * be made using the `alsoKnownAs` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#also-known-as | DID Core Specification, \u00A7 Also Known As}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   alsoKnownAs: 'did:example:123'\n   * };\n   * ```\n   */\n  alsoKnownAs?: string[];\n\n  /**\n   * Optionally specify which DID (or DIDs) is authorized to make changes to the DID document.\n   *\n   * A DID controller is an entity that is authorized to make changes to a DID document. Typically,\n   * only the DID Subject (i.e., the value of `id` property in the DID document) is authoritative.\n   * However, another DID (or DIDs) can be specified as the DID controller, and when doing so, any\n   * verification methods contained in the DID document for the other DID should be accepted as\n   * authoritative. In other words, proofs created by the controller DID should be considered\n   * equivalent to proofs created by the DID Subject.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-controller | DID Core Specification, \u00A7 DID Controller}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   controller: 'did:example:123'\n   * };\n   * ```\n   */\n  controllers?: string | string[];\n\n  /**\n   * Optional. The URI of a server involved in executing DID method operations. In the context of\n   * DID creation, the endpoint is expected to be a DID DHT Gateway or Pkarr relay. If not\n   * specified, a default gateway node is used.\n   */\n  gatewayUri?: string;\n\n  /**\n   * Optional. Determines whether the created DID should be published to the DHT network.\n   *\n   * If set to `true` or omitted, the DID is publicly discoverable. If `false`, the DID is not\n   * published and cannot be resolved by others. By default, newly created DIDs are published.\n   *\n   * @see {@link https://did-dht.com | DID DHT Method Specification}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   publish: false\n   * };\n   * ```\n   */\n  publish?: boolean;\n\n  /**\n   * Optional. An array of service endpoints associated with the DID.\n   *\n   * Services are used in DID documents to express ways of communicating with the DID subject or\n   * associated entities. A service can be any type of service the DID subject wants to advertise,\n   * including decentralized identity management services for further discovery, authentication,\n   * authorization, or interaction.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, \u00A7 Services}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   services: [\n   *     {\n   *       id: 'did:dht:i9xkp8ddcbcg8jwq54ox699wuzxyifsqx4jru45zodqu453ksz6y#dwn',\n   *       type: 'DecentralizedWebNode',\n   *       serviceEndpoint: ['https://example.com/dwn1', 'https://example/dwn2']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  services?: DidService[];\n\n  /**\n   * Optionally specify one or more registered DID DHT types to make the DID discovereable.\n   *\n   * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish\n   * to be discoverable and resolveable by type can include one or more types when publishing their\n   * DID document to a DID DHT Gateway.\n   *\n   * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}.\n   */\n  types?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[];\n\n  /**\n   * Optional. An array of verification methods to be included in the DID document.\n   *\n   * By default, a newly created DID DHT document will contain a single Ed25519 verification method,\n   * also known as the {@link https://did-dht.com/#term:identity-key | Identity Key}. Additional\n   * verification methods can be added to the DID document using the `verificationMethods` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   verificationMethods: [\n   *     {\n   *       algorithm: 'Ed25519',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     },\n   *     {\n   *       algorithm: 'Ed25519',\n   *       id: 'dwn-sig',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Proof to used to construct the `_prv._did.` DNS record as described in https://did-dht.com/#rotation to link a DID to a previous DID.\n */\nexport type PreviousDidProof = {\n  /** The previous DID. */\n  previousDid: string;\n\n  /** The signature signed using the private Identity Key of the previous DID in Base64URL format. */\n  signature: string;\n};\n\n/**\n * The default DID DHT Gateway or Pkarr Relay server to use when publishing and resolving DID\n * documents.\n */\nconst DEFAULT_GATEWAY_URI = 'https://diddht.tbddev.org';\n\n/**\n * The version of the DID DHT specification that is implemented by this library.\n *\n * When a DID DHT document is published to the DHT network, the version of the specification that\n * was used to create the document is included in the DNS TXT record for the root record. This\n * allows clients to determine whether the DID DHT document is compatible with the client's\n * implementation of the DID DHT specification. The version number is not present in the\n * corresponding DID document.\n *\n * @see {@link https://did-dht.com | DID DHT Method Specification}\n */\nconst DID_DHT_SPECIFICATION_VERSION = 0;\n\n/**\n * The default TTL for DNS records published to the DHT network.\n *\n * The recommended TTL value is 7200 seconds (2 hours) since it matches the default TTL for\n * Mainline DHT records.\n */\nconst DNS_RECORD_TTL = 7200;\n\n/**\n * Character used to separate distinct elements or entries in the DNS packet representation\n * of a DID Document.\n *\n * For example, verification methods, verification relationships, and services are separated by\n * semicolons (`;`) in the root record:\n * ```\n * vm=k1;auth=k1;asm=k2;inv=k3;del=k3;srv=s1\n * ```\n */\nconst PROPERTY_SEPARATOR = ';';\n\n/**\n * Character used to separate distinct values within a single element or entry in the DNS packet\n * representation of a DID Document.\n *\n * For example, multiple key references for the `authentication` verification relationships are\n * separated by commas (`,`):\n * ```\n * auth=0,1,2\n * ```\n */\nconst VALUE_SEPARATOR = ',';\n\n/**\n * Represents an optional extension to a DID Document\u2019s DNS packet representation exposed as a\n * type index.\n *\n * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish to\n * be discoverable and resolveable by type can include one or more types when publishing their DID\n * document to a DID DHT Gateway.\n *\n * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}.\n */\nexport enum DidDhtRegisteredDidType {\n  /**\n   * Type 0 is reserved for DIDs that do not wish to associate themselves with a specific type but\n   * wish to make themselves discoverable.\n   */\n  Discoverable = 0,\n\n  /**\n   * Organization\n   * @see {@link https://schema.org/Organization | schema definition}\n   */\n  Organization = 1,\n\n  /**\n   * Government Organization\n   * @see {@link https://schema.org/GovernmentOrganization | schema definition}\n   */\n  Government = 2,\n\n  /**\n   * Corporation\n   * @see {@link https://schema.org/Corporation | schema definition}\n   */\n  Corporation = 3,\n\n  /**\n   * Corporation\n   * @see {@link https://schema.org/Corporation | schema definition}\n   */\n  LocalBusiness = 4,\n\n  /**\n   * Software Package\n   * @see {@link https://schema.org/SoftwareSourceCode | schema definition}\n   */\n  SoftwarePackage = 5,\n\n  /**\n   * Web App\n   * @see {@link https://schema.org/WebApplication | schema definition}\n   */\n  WebApp = 6,\n\n  /**\n   * Financial Institution\n   * @see {@link https://schema.org/FinancialService | schema definition}\n   */\n  FinancialInstitution = 7\n}\n\n/**\n * Enumerates the types of keys that can be used in a DID DHT document.\n *\n * The DID DHT method supports various cryptographic key types. These key types are essential for\n * the creation and management of DIDs and their associated cryptographic operations like signing\n * and encryption. The registered key types are published in the DID DHT Registry and each is\n * assigned a unique numerical value for use by client and gateway implementations.\n *\n * The registered key types are published in the {@link https://did-dht.com/registry/index.html#key-type-index | DID DHT Registry}.\n */\nexport enum DidDhtRegisteredKeyType {\n  /**\n   * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature\n   * Algorithm) and Curve25519.\n   */\n  Ed25519 = 0,\n\n  /**\n   * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized\n   * systems.\n   */\n  secp256k1 = 1,\n\n  /**\n   * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations\n   * and is widely supported in various cryptographic libraries and standards.\n   */\n  secp256r1 = 2,\n\n  /**\n   * X25519: A public key used for Diffie-Hellman key exchange using Curve25519.\n   */\n  X25519 = 3,\n}\n\n/**\n * Maps {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Verification Relationship}\n * values to the corresponding record name in the DNS packet representation of a DHT DID document.\n */\nexport enum DidDhtVerificationRelationship {\n  /**\n   * Specifies how the DID subject is expected to be authenticated.\n   */\n  authentication = 'auth',\n\n  /**\n   * Specifies how the DID subject is expected to express claims, such as for issuing Verifiable\n   * Credentials.\n   */\n  assertionMethod = 'asm',\n\n  /**\n   * Specifies a mechanism used by the DID subject to delegate a cryptographic capability to another\n   * party\n   */\n  capabilityDelegation = 'del',\n\n  /**\n   * Specifies a verification method used by the DID subject to invoke a cryptographic capability.\n   */\n  capabilityInvocation = 'inv',\n\n  /**\n   * Specifies how an entity can generate encryption material to communicate confidentially with the\n   * DID subject.\n   */\n  keyAgreement = 'agm'\n}\n\n/**\n * Private helper that maps algorithm identifiers to their corresponding DID DHT\n * {@link DidDhtRegisteredKeyType | registered key type}.\n */\nconst AlgorithmToKeyTypeMap = {\n  Ed25519   : DidDhtRegisteredKeyType.Ed25519,\n  ES256K    : DidDhtRegisteredKeyType.secp256k1,\n  ES256     : DidDhtRegisteredKeyType.secp256r1,\n  'P-256'   : DidDhtRegisteredKeyType.secp256r1,\n  secp256k1 : DidDhtRegisteredKeyType.secp256k1,\n  secp256r1 : DidDhtRegisteredKeyType.secp256r1,\n  X25519    : DidDhtRegisteredKeyType.X25519,\n} as const;\n\n/**\n * Private helper that maps did dht registered key types to their corresponding default algorithm identifiers.\n */\nconst KeyTypeToDefaultAlgorithmMap = {\n  [DidDhtRegisteredKeyType.Ed25519]   : 'EdDSA',\n  [DidDhtRegisteredKeyType.secp256k1] : 'ES256K',\n  [DidDhtRegisteredKeyType.secp256r1] : 'ES256',\n  [DidDhtRegisteredKeyType.X25519]    : 'ECDH-ES+A256KW',\n};\n\n/**\n * The `DidDht` class provides an implementation of the `did:dht` DID method.\n *\n * Features:\n * - DID Creation: Create new `did:dht` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing verification method keys or\n *                       or a key in a Key Management System (KMS). If supported by the KMS, a DID's\n *                       key can be exported to a portable DID format.\n * - DID Resolution: Resolve a `did:dht` to its corresponding DID Document stored in the DHT network.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @remarks\n * The `did:dht` method leverages the distributed nature of the Mainline DHT network for\n * decentralized identity management. This method allows DIDs to be resolved without relying on\n * centralized registries or ledgers, enhancing privacy and control for users. The DID Document is\n * stored and retrieved from the DHT network, and the method includes optional mechanisms for\n * discovering DIDs by type.\n *\n * The DID URI in the `did:dht` method includes a method-specific identifier called the Identity Key\n * which corresponds to the DID's entry in the DHT network. The Identity Key required to make\n * changes to the DID Document since Mainline DHT nodes validate the signature of each message\n * before storing the value in the DHT.\n *\n * @see {@link https://did-dht.com | DID DHT Method Specification}\n *\n * @example\n * ```ts\n * // DID Creation\n * const did = await DidDht.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidDht.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidDht.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Import / Export\n *\n * // Export a BearerDid object to the PortableDid format.\n * const portableDid = await did.export();\n *\n * // Reconstruct a BearerDid object from a PortableDid\n * const did = await DidDht.import(portableDid);\n * ```\n */\nexport class DidDht extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID DHT specification.\n   */\n  public static methodName = 'dht';\n\n  /**\n   * Creates a new DID using the `did:dht` method formed from a newly generated key.\n   *\n   * @remarks\n   * The DID URI is formed by z-base-32 encoding the Identity Key public key and prefixing with\n   * `did:dht:`.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated which serves as the\n   *   Identity Key.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidDht.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidDht.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate\n   *                            keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidDhtCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that the algorithm for any given verification method is supported by the\n    // DID DHT specification.\n    if (options.verificationMethods?.some(vm => !(vm.algorithm in AlgorithmToKeyTypeMap))) {\n      throw new Error('One or more verification method algorithms are not supported');\n    }\n\n    // Check 2: Validate that the ID for any given verification method is unique.\n    const methodIds = options.verificationMethods?.filter(vm => 'id' in vm).map(vm => vm.id);\n    if (methodIds && methodIds.length !== new Set(methodIds).size) {\n      throw new Error('One or more verification method IDs are not unique');\n    }\n\n    // Check 3: Validate that the required properties for any given services are present.\n    if (options.services?.some(s => !s.id || !s.type || !s.serviceEndpoint)) {\n      throw new Error('One or more services are missing required properties');\n    }\n\n    // Generate random key material for the Identity Key.\n    const identityKeyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n    const identityKey = await keyManager.getPublicKey({ keyUri: identityKeyUri });\n\n    // Compute the DID URI from the Identity Key.\n    const didUri = await DidDhtUtils.identityKeyToIdentifier({ identityKey });\n\n    // Begin constructing the DID Document.\n    const document: DidDocument = {\n      id: didUri,\n      ...options.alsoKnownAs && { alsoKnownAs: options.alsoKnownAs },\n      ...options.controllers && { controller: options.controllers }\n    };\n\n    // If the given verification methods do not contain an Identity Key, add one.\n    const verificationMethodsToAdd = [...options.verificationMethods ?? []];\n    if (!verificationMethodsToAdd?.some(vm => vm.id?.split('#').pop() === '0')) {\n      // Add the Identity Key to the beginning of the key set.\n      verificationMethodsToAdd.unshift({\n        algorithm : 'Ed25519' as any,\n        id        : '0',\n        purposes  : ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation']\n      });\n    }\n\n    // Generate random key material for the Identity Key and any additional verification methods.\n    // Add verification methods to the DID document.\n    for (const verificationMethod of verificationMethodsToAdd) {\n      // Generate a random key for the verification method, or if its the Identity Key's\n      // verification method (`id` is 0) use the key previously generated.\n      const keyUri = (verificationMethod.id && verificationMethod.id.split('#').pop() === '0')\n        ? identityKeyUri\n        : await keyManager.generateKey({ algorithm: verificationMethod.algorithm });\n\n      const publicKey = await keyManager.getPublicKey({ keyUri });\n\n      // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID.\n      let methodId = verificationMethod.id ?? publicKey.kid ?? await computeJwkThumbprint({ jwk: publicKey });\n      methodId = `${didUri}#${extractDidFragment(methodId)}`; // Remove fragment prefix, if any.\n\n      // Initialize the `verificationMethod` array if it does not already exist.\n      document.verificationMethod ??= [];\n\n      // Add the verification method to the DID document.\n      document.verificationMethod.push({\n        id           : methodId,\n        type         : 'JsonWebKey',\n        controller   : verificationMethod.controller ?? didUri,\n        publicKeyJwk : publicKey,\n      });\n\n      // Add the verification method to the specified purpose properties of the DID document.\n      for (const purpose of verificationMethod.purposes ?? []) {\n        // Initialize the purpose property if it does not already exist.\n        if (!document[purpose]) document[purpose] = [];\n        // Add the verification method to the purpose property.\n        document[purpose]!.push(methodId);\n      }\n    }\n\n    // Add services, if any, to the DID document.\n    options.services?.forEach(service => {\n      document.service ??= [];\n      service.id = `${didUri}#${service.id.split('#').pop()}`; // Remove fragment prefix, if any.\n      document.service.push(service);\n    });\n\n    // Create the BearerDid object, including the registered DID types (if any), and specify that\n    // the DID has not yet been published.\n    const did = new BearerDid({\n      uri      : didUri,\n      document,\n      metadata : {\n        published: false,\n        ...options.types && { types: options.types }\n      },\n      keyManager\n    });\n\n    // By default, publish the DID document to a DHT Gateway unless explicitly disabled.\n    if (options.publish ?? true) {\n      const registrationResult = await DidDht.publish({ did, gatewayUri: options.gatewayUri });\n      did.metadata = registrationResult.didDocumentMetadata;\n    }\n\n    return did;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID DHT method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidDht.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the\n   *          provided PortableDid.\n   * @throws An error if the PortableDid document does not contain any verification methods, lacks\n   *         an Identity Key, or the keys for any verification method are missing in the key\n   *         manager.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidDht.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    // Validate that the given verification methods contain an Identity Key.\n    if (!did.document.verificationMethod?.some(vm => vm.id?.split('#').pop() === '0')) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `DID document must contain an Identity Key`);\n    }\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:dht` DID, return the verification method that will be used\n   * for signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, the Identity Key's verification method with an ID fragment\n   * of '#0' is used.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument, methodId = '#0' }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Attempt to find a verification method that matches the given method ID, or if not given,\n    // find the first verification method intended for signing claims.\n    const verificationMethod = didDocument.verificationMethod?.find(\n      vm => extractDidFragment(vm.id) === (extractDidFragment(methodId) ?? extractDidFragment(didDocument.assertionMethod?.[0]))\n    );\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Publishes a DID to the DHT, making it publicly discoverable and resolvable.\n   *\n   * This method handles the publication of a DID Document associated with a `did:dht` DID to the\n   * Mainline DHT network. The publication process involves storing the DID Document in Mainline DHT\n   * via a Pkarr relay server.\n   *\n   * @remarks\n   * - This method is typically invoked automatically during the creation of a new DID unless the\n   *   `publish` option is set to `false`.\n   * - For existing, unpublished DIDs, it can be used to publish the DID Document to Mainline DHT.\n   * - The method relies on the specified Pkarr relay server to interface with the DHT network.\n   *\n   * @example\n   * ```ts\n   * // Generate a new DID and keys but explicitly disable publishing.\n   * const did = await DidDht.create({ options: { publish: false } });\n   * // Publish the DID to the DHT.\n   * const registrationResult = await DidDht.publish({ did });\n   * // `registrationResult.didDocumentMetadata.published` is true if the DID was successfully published.\n   * ```\n   *\n   * @param params - The parameters for the `publish` operation.\n   * @param params.did - The `BearerDid` object representing the DID to be published.\n   * @param params.gatewayUri - Optional. The URI of a server involved in executing DID method\n   *                            operations. In the context of publishing, the endpoint is expected\n   *                            to be a DID DHT Gateway or Pkarr Relay. If not specified, a default\n   *                            gateway node is used.\n   * @returns A promise that resolves to a {@link DidRegistrationResult} object that contains\n   *          the result of registering the DID with a DID DHT Gateway or Pkarr relay.\n   */\n  public static async publish({ did, gatewayUri = DEFAULT_GATEWAY_URI }: {\n    did: BearerDid;\n    gatewayUri?: string;\n  }): Promise<DidRegistrationResult> {\n    const registrationResult = await DidDhtDocument.put({ did, gatewayUri });\n\n    return registrationResult;\n  }\n\n  /**\n   * Resolves a `did:dht` identifier to its corresponding DID document.\n   *\n   * This method performs the resolution of a `did:dht` DID, retrieving its DID Document from the\n   * Mainline DHT network. The process involves querying the DHT network via a Pkarr relay server to\n   * retrieve the DID Document that corresponds to the given DID identifier.\n   *\n   * @remarks\n   * - If a `gatewayUri` option is not specified, a default Pkarr relay is used to access the DHT\n   *   network.\n   * - It decodes the DID identifier and retrieves the associated DID Document and metadata.\n   * - In case of resolution failure, appropriate error information is returned.\n   *\n   * @example\n   * ```ts\n   * const resolutionResult = await DidDht.resolve('did:dht:example');\n   * ```\n   *\n   * @param didUri - The DID to be resolved.\n   * @param options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of\n   *          the resolution.\n   */\n  public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise<DidResolutionResult> {\n    // To execute the read method operation, use the given gateway URI or a default.\n    const gatewayUri = options?.gatewayUri ?? DEFAULT_GATEWAY_URI;\n\n    try {\n      // Attempt to decode the z-base-32-encoded identifier.\n      await DidDhtUtils.identifierToIdentityKey({ didUri });\n\n      // Attempt to retrieve the DID document and metadata from the DHT network.\n      const { didDocument, didDocumentMetadata } = await DidDhtDocument.get({ didUri, gatewayUri });\n\n      // If the DID document was retrieved successfully, return it.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didDocument,\n        didDocumentMetadata\n      };\n\n    } catch (error: any) {\n      // Rethrow any unexpected errors that are not a `DidError`.\n      if (!(error instanceof DidError)) throw new Error(error);\n\n      // Return a DID Resolution Result with the appropriate error code.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error: error.code,\n          ...error.message && { errorMessage: error.message }\n        }\n      };\n    }\n  }\n}\n\n/**\n * The `DidDhtDocument` class provides functionality for interacting with the DID document stored in\n * Mainline DHT in support of DID DHT method create, resolve, update, and deactivate operations.\n *\n * This class includes methods for retrieving and publishing DID documents to and from the DHT,\n * using DNS packet encoding and DID DHT Gateway or Pkarr Relay servers.\n */\nexport class DidDhtDocument {\n  /**\n   * Retrieves a DID document and its metadata from the DHT network.\n   *\n   * @param params - The parameters for the get operation.\n   * @param params.didUri - The DID URI containing the Identity Key.\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object containing the DID\n   *          document and its metadata.\n   */\n  public static async get({ didUri, gatewayUri }: {\n    didUri: string;\n    gatewayUri: string;\n  }): Promise<DidResolutionResult> {\n    // Decode the z-base-32 DID identifier to public key as a byte array.\n    const publicKeyBytes = DidDhtUtils.identifierToIdentityKeyBytes({ didUri });\n\n    // Retrieve the signed BEP44 message from a DID DHT Gateway or Pkarr relay.\n    const bep44Message = await DidDhtDocument.pkarrGet({ gatewayUri, publicKeyBytes });\n\n    // Verify the signature of the BEP44 message and parse the value to a DNS packet.\n    const dnsPacket = await DidDhtUtils.parseBep44GetMessage({ bep44Message });\n\n    // Convert the DNS packet to a DID document and metadata.\n    const resolutionResult = await DidDhtDocument.fromDnsPacket({ didUri, dnsPacket });\n\n    // Set the version ID of the DID document metadata to the sequence number of the BEP44 message.\n    resolutionResult.didDocumentMetadata.versionId = bep44Message.seq.toString();\n\n    return resolutionResult;\n  }\n\n  /**\n   * Publishes a DID document to the DHT network.\n   *\n   * @param params - The parameters to use when publishing the DID document to the DHT network.\n   * @param params.did - The DID object whose DID document will be published.\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @returns A promise that resolves to a {@link DidRegistrationResult} object that contains\n   *          the result of registering the DID with a DID DHT Gateway or Pkarr relay.\n   */\n  public static async put({ did, gatewayUri }: {\n    did: BearerDid;\n    gatewayUri: string;\n  }): Promise<DidRegistrationResult> {\n    // Convert the DID document and DID metadata (such as DID types) to a DNS packet.\n    const dnsPacket = await DidDhtDocument.toDnsPacket({\n      didDocument              : did.document,\n      didMetadata              : did.metadata,\n      authoritativeGatewayUris : [gatewayUri]\n    });\n\n    // Create a signed BEP44 put message from the DNS packet.\n    const bep44Message = await DidDhtUtils.createBep44PutMessage({\n      dnsPacket,\n      publicKeyBytes : DidDhtUtils.identifierToIdentityKeyBytes({ didUri: did.uri }),\n      signer         : await did.getSigner({ methodId: '0' })\n    });\n\n    // Publish the DNS packet to the DHT network.\n    const putResult = await DidDhtDocument.pkarrPut({ gatewayUri, bep44Message });\n\n    // Return the result of processing the PUT operation, including the updated DID metadata with\n    // the version ID and the publishing result.\n    return {\n      didDocument         : did.document,\n      didDocumentMetadata : {\n        ...did.metadata,\n        published : putResult,\n        versionId : bep44Message.seq.toString()\n      },\n      didRegistrationMetadata: {}\n    };\n  }\n\n  /**\n   * Retrieves a signed BEP44 message from a DID DHT Gateway or Pkarr Relay server.\n   *\n   * @see {@link https://github.com/Nuhvi/pkarr/blob/main/design/relays.md | Pkarr Relay design}\n   *\n   * @param params\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @param params.publicKeyBytes - The public key bytes of the Identity Key, z-base-32 encoded.\n   * @returns A promise resolving to a BEP44 message containing the signed DNS packet.\n  */\n  private static async pkarrGet({ gatewayUri, publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n    gatewayUri: string;\n  }): Promise<Bep44Message> {\n    // The identifier (key in the DHT) is the z-base-32 encoding of the Identity Key.\n    const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z();\n\n    // Concatenate the gateway URI with the identifier to form the full URL.\n    const url = new URL(identifier, gatewayUri).href;\n\n    // Transmit the Get request to the DID DHT Gateway or Pkarr Relay and get the response.\n    let response: Response;\n    try {\n      response = await fetch(url, { method: 'GET' });\n\n      if (!response.ok) {\n        throw new DidError(DidErrorCode.NotFound, `Pkarr record not found for: ${identifier}`);\n      }\n\n    } catch (error: any) {\n      if (error instanceof DidError) throw error;\n      throw new DidError(DidErrorCode.InternalError, `Failed to fetch Pkarr record: ${error.message}`);\n    }\n\n    // Read the Fetch Response stream into a byte array.\n    const messageBytes = await response.arrayBuffer();\n\n    if(!messageBytes) {\n      throw new DidError(DidErrorCode.NotFound, `Pkarr record not found for: ${identifier}`);\n    }\n\n    if (messageBytes.byteLength < 72) {\n      throw new DidError(DidErrorCode.InvalidDidDocumentLength, `Pkarr response must be at least 72 bytes but got: ${messageBytes.byteLength}`);\n    }\n\n    if (messageBytes.byteLength > 1072) {\n      throw new DidError(DidErrorCode.InvalidDidDocumentLength, `Pkarr response exceeds 1000 byte limit: ${messageBytes.byteLength}`);\n    }\n\n    // Decode the BEP44 message from the byte array.\n    const bep44Message: Bep44Message = {\n      k   : publicKeyBytes,\n      seq : Number(new DataView(messageBytes).getBigUint64(64)),\n      sig : new Uint8Array(messageBytes, 0, 64),\n      v   : new Uint8Array(messageBytes, 72)\n    };\n\n    return bep44Message;\n  }\n\n  /**\n   * Publishes a signed BEP44 message to a DID DHT Gateway or Pkarr Relay server.\n   *\n   * @see {@link https://github.com/Nuhvi/pkarr/blob/main/design/relays.md | Pkarr Relay design}\n   *\n   * @param params - The parameters to use when publishing a signed BEP44 message to a Pkarr relay server.\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @param params.bep44Message - The BEP44 message to be published, containing the signed DNS packet.\n   * @returns A promise resolving to `true` if the message was successfully published, otherwise `false`.\n   */\n  private static async pkarrPut({ gatewayUri, bep44Message }: {\n    bep44Message: Bep44Message;\n    gatewayUri: string;\n  }): Promise<boolean> {\n    // The identifier (key in the DHT) is the z-base-32 encoding of the Identity Key.\n    const identifier = Convert.uint8Array(bep44Message.k).toBase32Z();\n\n    // Concatenate the gateway URI with the identifier to form the full URL.\n    const url = new URL(identifier, gatewayUri).href;\n\n    // Construct the body of the request according to the Pkarr relay specification.\n    const body = new Uint8Array(bep44Message.v.length + 72);\n    body.set(bep44Message.sig, 0);\n    new DataView(body.buffer).setBigUint64(bep44Message.sig.length, BigInt(bep44Message.seq));\n    body.set(bep44Message.v, bep44Message.sig.length + 8);\n\n    // Transmit the Put request to the Pkarr relay and get the response.\n    let response: Response;\n    try {\n      response = await fetch(url, {\n        method  : 'PUT',\n        headers : { 'Content-Type': 'application/octet-stream' },\n        body\n      });\n\n    } catch (error: any) {\n      throw new DidError(DidErrorCode.InternalError, `Failed to put Pkarr record for identifier ${identifier}: ${error.message}`);\n    }\n\n    // Return `true` if the DHT request was successful, otherwise return `false`.\n    return response.ok;\n  }\n\n  /**\n   * Converts a DNS packet to a DID document according to the DID DHT specification.\n   *\n   * @see {@link https://did-dht.com/#dids-as-dns-records | DID DHT Specification, \u00A7 DIDs as DNS Records}\n   *\n   * @param params - The parameters to use when converting a DNS packet to a DID document.\n   * @param params.didUri - The DID URI of the DID document.\n   * @param params.dnsPacket - The DNS packet to convert to a DID document.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object containing the DID\n   *          document and its metadata.\n   */\n  public static async fromDnsPacket({ didUri, dnsPacket }: {\n    didUri: string;\n    dnsPacket: Packet;\n  }): Promise<DidResolutionResult> {\n    // Begin constructing the DID Document.\n    const didDocument: DidDocument = { id: didUri };\n\n    // Since the DID document is being retrieved from the DHT, it is considered published.\n    const didDocumentMetadata: DidMetadata = {\n      published: true\n    };\n\n    const idLookup = new Map<string, string>();\n\n    for (const answer of dnsPacket?.answers ?? []) {\n      // DID DHT properties are ONLY present in DNS TXT records.\n      if (answer.type !== 'TXT') continue;\n\n      // Get the DID DHT record identifier (e.g., k0, aka, did, etc.) from the DNS resource name.\n      const dnsRecordId = answer.name.split('.')[0].substring(1);\n\n      switch (true) {\n        // Process an also known as record.\n        case dnsRecordId.startsWith('aka'): {\n          // Decode the DNS TXT record data value to a string.\n          const data = DidDhtUtils.parseTxtDataToString(answer.data);\n\n          // Add the 'alsoKnownAs' property to the DID document.\n          didDocument.alsoKnownAs = data.split(VALUE_SEPARATOR);\n\n          break;\n        }\n\n        // Process a controller record.\n        case dnsRecordId.startsWith('cnt'): {\n          // Decode the DNS TXT record data value to a string.\n          const data = DidDhtUtils.parseTxtDataToString(answer.data);\n\n          // Add the 'controller' property to the DID document.\n          didDocument.controller = data.includes(VALUE_SEPARATOR) ? data.split(VALUE_SEPARATOR) : data;\n\n          break;\n        }\n\n        // Process verification methods.\n        case dnsRecordId.startsWith('k'): {\n          // Get the key type (t), Base64URL-encoded public key (k), algorithm (a), and\n          // optionally, controller (c) or Verification Method ID (id) from the decoded TXT record data.\n          const { id, t, k, c, a: parsedAlg } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // Convert the public key from Base64URL format to a byte array.\n          const publicKeyBytes = Convert.base64Url(k).toUint8Array();\n\n          // Use the key type integer to look up the cryptographic curve name.\n          const namedCurve = DidDhtRegisteredKeyType[Number(t)];\n\n          // Convert the public key from a byte array to JWK format.\n          let publicKey = await DidDhtUtils.keyConverter(namedCurve).bytesToPublicKey({ publicKeyBytes });\n\n          publicKey.alg = parsedAlg || KeyTypeToDefaultAlgorithmMap[Number(t) as DidDhtRegisteredKeyType];\n\n          // TOOD: when this is complete https://github.com/TBD54566975/web5-js/issues/638 then we can add this back and\n          // update the test vectors kid back to '0'\n          // if(dnsRecordId === 'k0') {\n          //   publicKey.kid = '0';\n          // }\n\n          // Determine the Verification Method ID: '0' for the identity key,\n          // the id from the TXT Data Object, or the JWK thumbprint if an explicity Verification Method ID not defined.\n          const vmId = dnsRecordId === 'k0' ? '0' : id !== undefined ? id : await computeJwkThumbprint({ jwk: publicKey });\n\n          // Initialize the `verificationMethod` array if it does not already exist.\n          didDocument.verificationMethod ??= [];\n\n          // Prepend the DID URI to the ID fragment to form the full verification method ID.\n          const methodId = `${didUri}#${vmId}`;\n\n          // Add the verification method to the DID document.\n          didDocument.verificationMethod.push({\n            id           : methodId,\n            type         : 'JsonWebKey',\n            controller   : c ?? didUri,\n            publicKeyJwk : publicKey,\n          });\n\n          // Add a mapping from the DNS record ID (e.g., 'k0', 'k1', etc.) to the verification\n          // method ID (e.g., 'did:dht:...#0', etc.).\n          idLookup.set(dnsRecordId, methodId);\n\n          break;\n        }\n\n        // Process services.\n        case dnsRecordId.startsWith('s'): {\n          // Get the service ID fragment (id), type (t), service endpoint (se), and optionally,\n          // other properties from the decoded TXT record data.\n          const { id, t, se, ...customProperties } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // if multi-values: 'a,b,c' -> ['a', 'b', 'c'], if single-value: 'a' -> ['a']\n          // NOTE: The service endpoint technically can either be a string or an array of strings,\n          // we enforce an array for single-value to simplify verification of vector 3 in the spec: https://did-dht.com/#vector-3\n          const serviceEndpoint = se.includes(VALUE_SEPARATOR) ? se.split(VALUE_SEPARATOR) : [se];\n\n          // Convert custom property values to either a string or an array of strings.\n          const serviceProperties = Object.fromEntries(Object.entries(customProperties).map(\n            ([k, v]) => [k, v.includes(VALUE_SEPARATOR) ? v.split(VALUE_SEPARATOR) : v]\n          ));\n\n          // Initialize the `service` array if it does not already exist.\n          didDocument.service ??= [];\n\n          didDocument.service.push({\n            ...serviceProperties,\n            id   : `${didUri}#${id}`,\n            type : t,\n            serviceEndpoint\n          });\n\n          break;\n        }\n\n        // Process DID DHT types.\n        case dnsRecordId.startsWith('typ'): {\n          // Decode the DNS TXT record data value to an object.\n          const { id: types } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // Add the DID DHT Registered DID Types represented as numbers to DID metadata.\n          didDocumentMetadata.types = types.split(VALUE_SEPARATOR).map(typeInteger => Number(typeInteger));\n\n          break;\n        }\n\n        // Process root record.\n        case dnsRecordId.startsWith('did'): {\n          // Helper function that maps verification relationship values to verification method IDs.\n          const recordIdsToMethodIds = (data: string): string[] => data\n            .split(VALUE_SEPARATOR)\n            .map(dnsRecordId => idLookup.get(dnsRecordId))\n            .filter((id): id is string => typeof id === 'string');\n\n          // Decode the DNS TXT record data and destructure verification relationship properties.\n          const { auth, asm, del, inv, agm } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // Add the verification relationships, if any, to the DID document.\n          if (auth) didDocument.authentication = recordIdsToMethodIds(auth);\n          if (asm) didDocument.assertionMethod = recordIdsToMethodIds(asm);\n          if (del) didDocument.capabilityDelegation = recordIdsToMethodIds(del);\n          if (inv) didDocument.capabilityInvocation = recordIdsToMethodIds(inv);\n          if (agm) didDocument.keyAgreement = recordIdsToMethodIds(agm);\n\n          break;\n        }\n      }\n    }\n\n    return { didDocument, didDocumentMetadata, didResolutionMetadata: {} };\n  }\n\n  /**\n   * Converts a DID document to a DNS packet according to the DID DHT specification.\n   *\n   * @see {@link https://did-dht.com/#dids-as-dns-records | DID DHT Specification, \u00A7 DIDs as DNS Records}\n   *\n   * @param params - The parameters to use when converting a DID document to a DNS packet.\n   * @param params.didDocument - The DID document to convert to a DNS packet.\n   * @param params.didMetadata - The DID metadata to include in the DNS packet.\n   * @param params.authoritativeGatewayUris - The URIs of the Authoritative Gateways to generate NS records from.\n   * @param params.previousDidProof - The signature proof that this DID is linked to the given previous DID.\n   * @returns A promise that resolves to a DNS packet.\n   */\n  public static async toDnsPacket({ didDocument, didMetadata, authoritativeGatewayUris, previousDidProof }: {\n    didDocument: DidDocument;\n    didMetadata: DidMetadata;\n    authoritativeGatewayUris?: string[];\n    previousDidProof?: PreviousDidProof;\n  }): Promise<Packet> {\n    const txtRecords: TxtAnswer[] = [];\n    const nsRecords: StringAnswer[] = [];\n    const idLookup = new Map<string, string>();\n    const serviceIds: string[] = [];\n    const verificationMethodIds: string[] = [];\n\n    // Add `_prv._did.` TXT record if previous DID proof is provided and valid.\n    if (previousDidProof !== undefined) {\n      const { signature, previousDid } = previousDidProof;\n\n      await DidDhtUtils.validatePreviousDidProof({\n        newDid: didDocument.id,\n        previousDidProof\n      });\n\n      txtRecords.push({\n        type : 'TXT',\n        name : '_prv._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : `id=${previousDid};s=${signature}`\n      });\n    }\n\n    // Add DNS TXT records if the DID document contains an `alsoKnownAs` property.\n    if (didDocument.alsoKnownAs) {\n      txtRecords.push({\n        type : 'TXT',\n        name : '_aka._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : didDocument.alsoKnownAs.join(VALUE_SEPARATOR)\n      });\n    }\n\n    // Add DNS TXT records if the DID document contains a `controller` property.\n    if (didDocument.controller) {\n      const controller = Array.isArray(didDocument.controller)\n        ? didDocument.controller.join(VALUE_SEPARATOR)\n        : didDocument.controller;\n      txtRecords.push({\n        type : 'TXT',\n        name : '_cnt._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : controller\n      });\n    }\n\n    // Add DNS TXT records for each verification method.\n    for (const [index, verificationMethod] of didDocument.verificationMethod?.entries() ?? []) {\n      const dnsRecordId = `k${index}`;\n      verificationMethodIds.push(dnsRecordId);\n      let methodId = verificationMethod.id.split('#').pop()!; // Remove fragment prefix, if any.\n      idLookup.set(methodId, dnsRecordId);\n\n      const publicKey = verificationMethod.publicKeyJwk;\n\n      if (!(publicKey?.crv && publicKey.crv in AlgorithmToKeyTypeMap)) {\n        throw new DidError(DidErrorCode.InvalidPublicKeyType, `Verification method '${verificationMethod.id}' contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`);\n      }\n\n      // Use the public key's `crv` property to get the DID DHT key type.\n      const keyType = DidDhtRegisteredKeyType[publicKey.crv as keyof typeof DidDhtRegisteredKeyType];\n\n      // Convert the public key from JWK format to a byte array.\n      const publicKeyBytes = await DidDhtUtils.keyConverter(publicKey.crv).publicKeyToBytes({ publicKey });\n\n      // Convert the public key from a byte array to Base64URL format.\n      const publicKeyBase64Url = Convert.uint8Array(publicKeyBytes).toBase64Url();\n\n      // Define the data for the DNS TXT record.\n      const txtData = [`t=${keyType}`, `k=${publicKeyBase64Url}`];\n      // if the methodId is not the identity key or a thumbprint, explicity define the id within the DNS TXT record.\n      // otherwise the id can be inferred from the thumbprint.\n      if (methodId !== '0' && await computeJwkThumbprint({ jwk: publicKey }) !== methodId)  {\n        txtData.unshift(`id=${methodId}`);\n      }\n      // Only set the algorithm property (`a`) if it differs from the default algorithm for the key type.\n      if(publicKey.alg !== KeyTypeToDefaultAlgorithmMap[keyType]) {\n        txtData.push(`a=${publicKey.alg}`);\n      }\n\n      // Add the controller property, if set to a value other than the Identity Key (DID Subject).\n      if (verificationMethod.controller !== didDocument.id) txtData.push(`c=${verificationMethod.controller}`);\n\n      // Add a TXT record for the verification method.\n      txtRecords.push({\n        type : 'TXT',\n        name : `_${dnsRecordId}._did.`,\n        ttl  : DNS_RECORD_TTL,\n        data : txtData.join(PROPERTY_SEPARATOR)\n      });\n    }\n\n    // Add DNS TXT records for each service.\n    didDocument.service?.forEach((service, index) => {\n      const dnsRecordId = `s${index}`;\n      serviceIds.push(dnsRecordId);\n      let { id, type: t, serviceEndpoint: se, ...customProperties } = service;\n      id = extractDidFragment(id)!;\n      se = Array.isArray(se) ? se.join(',') : se;\n\n      // Define the data for the DNS TXT record.\n      const txtData = Object.entries({ id, t, se, ...customProperties }).map(\n        ([key, value]) => `${key}=${value}`\n      );\n\n      const txtDataString = txtData.join(PROPERTY_SEPARATOR);\n      const data = DidDhtUtils.chunkDataIfNeeded(txtDataString);\n\n      // Add a TXT record for the verification method.\n      txtRecords.push({\n        type : 'TXT',\n        name : `_${dnsRecordId}._did.`,\n        ttl  : DNS_RECORD_TTL,\n        data\n      });\n    });\n\n    // Initialize the root DNS TXT record with the DID DHT specification version.\n    const rootRecord: string[] = [`v=${DID_DHT_SPECIFICATION_VERSION}`];\n\n    // Add verification methods to the root record.\n    if (verificationMethodIds.length) {\n      rootRecord.push(`vm=${verificationMethodIds.join(VALUE_SEPARATOR)}`);\n    }\n\n    // Add verification relationships to the root record.\n    Object.keys(DidVerificationRelationship).forEach(relationship => {\n      // Collect the verification method IDs for the given relationship.\n      const dnsRecordIds = (didDocument[relationship as keyof DidDocument] as any[])\n        ?.map(id => idLookup.get(id.split('#').pop()));\n\n      // If the relationship includes verification methods, add them to the root record.\n      if (dnsRecordIds) {\n        const recordName = DidDhtVerificationRelationship[relationship as keyof typeof DidDhtVerificationRelationship];\n        rootRecord.push(`${recordName}=${dnsRecordIds.join(VALUE_SEPARATOR)}`);\n      }\n    });\n\n    // Add services to the root record.\n    if (serviceIds.length) {\n      rootRecord.push(`svc=${serviceIds.join(VALUE_SEPARATOR)}`);\n    }\n\n    // If defined, add a DNS TXT record for each registered DID type.\n    if (didMetadata.types?.length) {\n      // DID types can be specified as either a string or a number, so we need to normalize the\n      // values to integers.\n      const types = didMetadata.types as (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[];\n      const typeIntegers = types.map(type => typeof type === 'string' ? DidDhtRegisteredDidType[type] : type);\n\n      txtRecords.push({\n        type : 'TXT',\n        name : '_typ._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : `id=${typeIntegers.join(VALUE_SEPARATOR)}`\n      });\n    }\n\n    // Add a DNS TXT record for the root record.\n    txtRecords.push({\n      type : 'TXT',\n      name : '_did.' + DidDhtDocument.getUniqueDidSuffix(didDocument.id) + '.', // name of a Root Record MUST end in `<ID>.`\n      ttl  : DNS_RECORD_TTL,\n      data : rootRecord.join(PROPERTY_SEPARATOR)\n    });\n\n    // Add an NS record for each authoritative gateway URI.\n    for (const gatewayUri of authoritativeGatewayUris || []) {\n      nsRecords.push({\n        type : 'NS',\n        name : '_did.' + DidDhtDocument.getUniqueDidSuffix(didDocument.id) + '.', // name of an NS record a authoritative gateway MUST end in `<ID>.`\n        ttl  : DNS_RECORD_TTL,\n        data : gatewayUri + '.'\n      });\n    }\n\n    // Create a DNS response packet with the authoritative answer flag set.\n    const dnsPacket: Packet = {\n      id      : 0,\n      type    : 'response',\n      flags   : AUTHORITATIVE_ANSWER,\n      answers : [...txtRecords, ...nsRecords]\n    };\n\n    return dnsPacket;\n  }\n\n  /**\n   * Gets the unique portion of the DID identifier after the last `:` character.\n   * e.g. `did:dht:example` -> `example`\n   *\n   * @param did - The DID to extract the unique suffix from.\n   */\n  private static getUniqueDidSuffix(did: string ): string {\n    return did.split(':')[2];\n  }\n}\n\n/**\n * The `DidDhtUtils` class provides utility functions to support operations in the DID DHT method.\n * This includes functions for creating and parsing BEP44 messages, handling identity keys, and\n * converting between different formats and representations.\n */\nexport class DidDhtUtils {\n  /**\n   * Creates a BEP44 put message, which is used to publish a DID document to the DHT network.\n   *\n   * @param params - The parameters to use when creating the BEP44 put message\n   * @param params.dnsPacket - The DNS packet to encode in the BEP44 message.\n   * @param params.publicKeyBytes - The public key bytes of the Identity Key.\n   * @param params.signer - Signer that can sign and verify data using the Identity Key.\n   * @returns A promise that resolves to a BEP44 put message.\n   */\n  public static async createBep44PutMessage({ dnsPacket, publicKeyBytes, signer }: {\n      dnsPacket: Packet;\n      publicKeyBytes: Uint8Array;\n      signer: Signer;\n    }): Promise<Bep44Message> {\n    // BEP44 requires that the sequence number be a monotoically increasing integer, so we use the\n    // current time in seconds since Unix epoch as a simple solution. Higher precision is not\n    // recommended since DID DHT documents are not expected to change frequently and there are\n    // small differences in system clocks that can cause issues if multiple clients are publishing\n    // updates to the same DID document.\n    const sequenceNumber = Math.ceil(Date.now() / 1000);\n\n    // Encode the DNS packet into a byte array containing a UDP payload.\n    const encodedDnsPacket = dnsPacketEncode(dnsPacket);\n\n    // Encode the sequence and DNS byte array to bencode format.\n    const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1);\n\n    if (bencodedData.length > 1000) {\n      throw new DidError(DidErrorCode.InvalidDidDocumentLength, `DNS packet exceeds the 1000 byte maximum size: ${bencodedData.length} bytes`);\n    }\n\n    // Sign the BEP44 message.\n    const signature = await signer.sign({ data: bencodedData });\n\n    return { k: publicKeyBytes, seq: sequenceNumber, sig: signature, v: encodedDnsPacket };\n  }\n\n  /**\n   * Converts a DID URI to a JSON Web Key (JWK) representing the Identity Key.\n   *\n   * @param params - The parameters to use for the conversion.\n   * @param params.didUri - The DID URI containing the Identity Key.\n   * @returns A promise that resolves to a JWK representing the Identity Key.\n   */\n  public static async identifierToIdentityKey({ didUri }: {\n    didUri: string\n  }): Promise<Jwk> {\n    // Decode the method-specific identifier from z-base-32 to a byte array.\n    let identityKeyBytes = DidDhtUtils.identifierToIdentityKeyBytes({ didUri });\n\n    // Convert the byte array to a JWK.\n    const identityKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes });\n\n    return identityKey;\n  }\n\n  /**\n   * Converts a DID URI to the byte array representation of the Identity Key.\n   *\n   * @param params - The parameters to use for the conversion.\n   * @param params.didUri - The DID URI containing the Identity Key.\n   * @returns A byte array representation of the Identity Key.\n   */\n  public static identifierToIdentityKeyBytes({ didUri }: {\n    didUri: string\n  }): Uint8Array {\n    // Parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // Verify that the DID URI is valid.\n    if (!parsedDid) {\n      throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`);\n    }\n\n    // Verify the DID method is supported.\n    if (parsedDid.method !== DidDht.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Decode the method-specific identifier from z-base-32 to a byte array.\n    let identityKeyBytes: Uint8Array | undefined;\n    try {\n      identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array();\n    } catch {\n      throw new DidError(DidErrorCode.InvalidPublicKey, `Failed to decode method-specific identifier`);\n    }\n\n    if (identityKeyBytes.length !== 32) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Invalid public key length: ${identityKeyBytes.length}`);\n    }\n\n    return identityKeyBytes;\n  }\n\n  /**\n   * Encodes a DID DHT Identity Key into a DID identifier.\n   *\n   * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with\n   * `did:dht:` to form the DID identifier.\n   *\n   * @param params - The parameters to use for the conversion.\n   * @param params.identityKey The Identity Key from which the DID identifier is computed.\n   * @returns A promise that resolves to a string containing the DID identifier.\n   */\n  public static async identityKeyToIdentifier({ identityKey }: {\n    identityKey: Jwk\n  }): Promise<string> {\n    // Convert the key from JWK format to a byte array.\n    const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey });\n\n    // Encode the byte array as a z-base-32 string.\n    const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z();\n\n    return `did:${DidDht.methodName}:${identifier}`;\n  }\n\n  /**\n   * Returns the appropriate key converter for the specified cryptographic curve.\n   *\n   * @param curve - The cryptographic curve to use for the key conversion.\n   * @returns An `AsymmetricKeyConverter` for the specified curve.\n   */\n  public static keyConverter(curve: string): AsymmetricKeyConverter {\n    const converters: Record<string, AsymmetricKeyConverter> = {\n      'Ed25519' : Ed25519,\n      'P-256'   : {\n        // Wrap the key converter which produces uncompressed public key bytes to produce compressed key bytes as required by the DID DHT spec.\n        // See https://did-dht.com/#representing-keys for more info.\n        publicKeyToBytes: async ({ publicKey }: { publicKey: Jwk }): Promise<Uint8Array> => {\n          const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n          const compressedPublicKey = await Secp256r1.compressPublicKey({ publicKeyBytes });\n          return compressedPublicKey;\n        },\n        bytesToPublicKey  : Secp256r1.bytesToPublicKey,\n        privateKeyToBytes : Secp256r1.privateKeyToBytes,\n        bytesToPrivateKey : Secp256r1.bytesToPrivateKey,\n      },\n      'secp256k1': {\n        // Wrap the key converter which produces uncompressed public key bytes to produce compressed key bytes as required by the DID DHT spec.\n        // See https://did-dht.com/#representing-keys for more info.\n        publicKeyToBytes: async ({ publicKey }: { publicKey: Jwk }): Promise<Uint8Array> => {\n          const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n          const compressedPublicKey = await Secp256k1.compressPublicKey({ publicKeyBytes });\n          return compressedPublicKey;\n        },\n        bytesToPublicKey  : Secp256k1.bytesToPublicKey,\n        privateKeyToBytes : Secp256k1.privateKeyToBytes,\n        bytesToPrivateKey : Secp256k1.bytesToPrivateKey,\n      },\n      X25519: X25519,\n    };\n\n    const converter = converters[curve];\n\n    if (!converter) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);\n\n    return converter;\n  }\n\n  /**\n   * Parses and verifies a BEP44 Get message, converting it to a DNS packet.\n   *\n   * @param params - The parameters to use when verifying and parsing the BEP44 Get response message.\n   * @param params.bep44Message - The BEP44 message to verify and parse.\n   * @returns A promise that resolves to a DNS packet.\n   */\n  public static async parseBep44GetMessage({ bep44Message }: {\n    bep44Message: Bep44Message;\n  }): Promise<Packet> {\n    // Convert the public key byte array to JWK format.\n    const publicKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: bep44Message.k });\n\n    // Encode the sequence and DNS byte array to bencode format.\n    const bencodedData = bencode.encode({ seq: bep44Message.seq, v: bep44Message.v }).subarray(1, -1);\n\n    // Verify the signature of the BEP44 message.\n    const isValid = await Ed25519.verify({\n      key       : publicKey,\n      signature : bep44Message.sig,\n      data      : bencodedData\n    });\n\n    if (!isValid) {\n      throw new DidError(DidErrorCode.InvalidSignature, `Invalid signature for DHT BEP44 message`);\n    }\n\n    return dnsPacketDecode(bep44Message.v);\n  }\n\n  /**\n   * Decodes and parses the data value of a DNS TXT record into a key-value object.\n   *\n   * @param txtData - The data value of a DNS TXT record.\n   * @returns An object containing the key/value pairs of the TXT record data.\n   */\n  public static parseTxtDataToObject(txtData: TxtData): Record<string, string> {\n    return this.parseTxtDataToString(txtData).split(PROPERTY_SEPARATOR).reduce((acc, pair) => {\n      const [key, value] = pair.split('=');\n      acc[key] = value;\n      return acc;\n    }, {} as Record<string, string>);\n  }\n\n  /**\n   * Decodes and parses the data value of a DNS TXT record into a string.\n   *\n   * @param txtData - The data value of a DNS TXT record.\n   * @returns A string representation of the TXT record data.\n   */\n  public static parseTxtDataToString(txtData: TxtData): string {\n    if (typeof txtData === 'string') {\n      return txtData;\n    } else if (txtData instanceof Uint8Array) {\n      return Convert.uint8Array(txtData).toString();\n    } else if (Array.isArray(txtData)) {\n      return txtData.map(item => this.parseTxtDataToString(item)).join('');\n    } else {\n      throw new DidError(DidErrorCode.InternalError, 'Pkarr returned DNS TXT record with invalid data type');\n    }\n  }\n\n  /**\n   * Validates the proof of previous DID given.\n   *\n   * @param params - The parameters to validate the previous DID proof.\n   * @param params.newDid - The new DID that the previous DID is linking to.\n   * @param params.previousDidProof - The proof of the previous DID, containing the previous DID and signature signed by the previous DID.\n   */\n  public static async validatePreviousDidProof({ newDid, previousDidProof }: {\n    newDid: string,\n    previousDidProof: PreviousDidProof,\n  }): Promise<void> {\n    const key = await DidDhtUtils.identifierToIdentityKey({ didUri: previousDidProof.previousDid });\n    const data = DidDhtUtils.identifierToIdentityKeyBytes({ didUri: newDid });\n    const signature = Convert.base64Url(previousDidProof.signature).toUint8Array();\n    const isValid = await Ed25519.verify({ key, data, signature  });\n\n    if (!isValid) {\n      throw new DidError(DidErrorCode.InvalidPreviousDidProof, 'The previous DID proof is invalid.');\n    }\n  }\n\n  /**\n   * Splits a string into chunks of length 255 if the string exceeds length 255.\n   * @param data - The string to split into chunks.\n   * @returns The original string if its length is less than or equal to 255, otherwise an array of chunked strings.\n   */\n  public static chunkDataIfNeeded(data: string): string | string[] {\n    if (data.length <= 255) {\n      return data;\n    }\n\n    // Split the data into chunks of 255 characters.\n    const chunks: string[] = [];\n    for (let i = 0; i < data.length; i += 255) {\n      chunks.push(data.slice(i, i + 255)); // end index is ignored if it exceeds the length of the string\n    }\n\n    return chunks;\n  }\n}", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "import type { CryptoApi, Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams } from '@web5/crypto';\nimport type {\n  JwkEs256k,\n  IonDocumentModel,\n  IonPublicKeyModel,\n  IonPublicKeyPurpose,\n} from '@decentralized-identity/ion-sdk';\n\nimport { IonDid, IonRequest } from '@decentralized-identity/ion-sdk';\nimport { LocalKeyManager, computeJwkThumbprint } from '@web5/crypto';\n\nimport type { PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod, DidRegistrationResult } from '../methods/did-method.js';\nimport type {\n  DidService,\n  DidDocument,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidVerificationMethod,\n  DidVerificationRelationship,\n} from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { DidMethod } from '../methods/did-method.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { getVerificationRelationshipsById } from '../utils.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Options for creating a Decentralized Identifier (DID) using the DID ION method.\n */\nexport interface DidIonCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optional. The URI of a server involved in executing DID method operations. In the context of\n   * DID creation, the endpoint is expected to be a Sidetree node. If not specified, a default\n   * gateway node is used.\n   */\n  gatewayUri?: string;\n\n  /**\n   * Optional. Determines whether the created DID should be published to a Sidetree node.\n   *\n   * If set to `true` or omitted, the DID is publicly discoverable. If `false`, the DID is not\n   * published and cannot be resolved by others. By default, newly created DIDs are published.\n   *\n   * @see {@link https://identity.foundation/sidetree/spec/#create | Sidetree Protocol Specification, \u00A7 Create}\n   *\n   * @example\n   * ```ts\n   * const did = await DidIon.create({\n   *  options: {\n   *   publish: false\n   * };\n   * ```\n   */\n  publish?: boolean;\n\n  /**\n   * Optional. An array of service endpoints associated with the DID.\n   *\n   * Services are used in DID documents to express ways of communicating with the DID subject or\n   * associated entities. A service can be any type of service the DID subject wants to advertise,\n   * including decentralized identity management services for further discovery, authentication,\n   * authorization, or interaction.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, \u00A7 Services}\n   *\n   * @example\n   * ```ts\n   * const did = await DidIon.create({\n   *  options: {\n   *   services: [\n   *     {\n   *       id: 'dwn',\n   *       type: 'DecentralizedWebNode',\n   *       serviceEndpoint: ['https://example.com/dwn1', 'https://example/dwn2']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  services?: DidService[];\n\n  /**\n   * Optional. An array of verification methods to be included in the DID document.\n   *\n   * By default, a newly created DID ION document will contain a single Ed25519 verification method.\n   * Additional verification methods can be added to the DID document using the\n   * `verificationMethods` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n   *\n   * @example\n   * ```ts\n   * const did = await DidIon.create({\n   *  options: {\n   *   verificationMethods: [\n   *     {\n   *       algorithm: 'Ed25519',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     },\n   *     {\n   *       algorithm: 'Ed25519',\n   *       id: 'dwn-sig',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Represents the request model for managing DID documents within the ION network, according to the\n * Sidetree protocol specification.\n */\nexport interface DidIonCreateRequest {\n  /** The type of operation to perform, which is always 'create' for a Create Operation. */\n  type: 'create';\n\n  /** Contains properties related to the initial state of the DID document. */\n  suffixData: {\n    /** A hash of the `delta` object, representing the initial changes to the DID document. */\n    deltaHash: string;\n    /** A commitment value used for future recovery operations, hashed for security. */\n    recoveryCommitment: string;\n  };\n\n  /** Details the changes to be applied to the DID document in this operation. */\n  delta: {\n    /** A commitment value used for the next update operation, hashed for security. */\n    updateCommitment: string;\n    /** An array of patch objects specifying the modifications to apply to the DID document. */\n    patches: {\n      /** The type of modification to perform (e.g., adding or removing public keys or service\n       * endpoints). */\n      action: string;\n      /** The document state or partial state to apply with this patch. */\n      document: IonDocumentModel;\n    }[];\n  }\n}\n\n/**\n * Represents a {@link DidVerificationMethod | DID verification method} in the context of DID ION\n * create, update, deactivate, and resolve operations.\n *\n * Unlike the DID Core standard {@link DidVerificationMethod} interface, this type is specific to\n * the ION method operations and only includes the `id`, `publicKeyJwk`, and `purposes` properties:\n * - The `id` property is optional and specifies the identifier fragment of the verification method.\n * - The `publicKeyJwk` property is required and represents the public key in JWK format.\n * - The `purposes` property is required and specifies the purposes for which the verification\n *  method can be used.\n *\n * @example\n * ```ts\n * const verificationMethod: DidIonVerificationMethod = {\n *   id           : 'sig',\n *   publicKeyJwk : {\n *     kty : 'OKP',\n *     crv : 'Ed25519',\n *     x   : 'o40shZrsco-CfEqk6mFsXfcP94ly3Az3gm84PzAUsXo',\n *     kid : 'BDp0xim82GswlxnPV8TPtBdUw80wkGIF8gjFbw1x5iQ',\n *   },\n *   purposes: ['authentication', 'assertionMethod']\n * };\n * ```\n */\nexport interface DidIonVerificationMethod {\n  /**\n   * Optionally specify the identifier fragment of the verification method.\n   *\n   * If not specified, the method's ID will be generated from the key's ID or thumbprint.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidIonVerificationMethod = {\n   *   id: 'sig',\n   *   ...\n   * };\n   * ```\n   */\n  id?: string;\n\n  /**\n   * A public key in JWK format.\n   *\n   * A JSON Web Key (JWK) that conforms to {@link https://datatracker.ietf.org/doc/html/rfc7517 | RFC 7517}.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidIonVerificationMethod = {\n   *   publicKeyJwk: {\n   *     kty : \"OKP\",\n   *     crv : \"X25519\",\n   *     x   : \"7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY\",\n   *     kid : \"xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I\"\n   *   },\n   *   ...\n   * };\n   * ```\n   */\n  publicKeyJwk: Jwk;\n\n  /**\n   * Specify the purposes for which a verification method is intended to be used in a DID document.\n   *\n   * The `purposes` property defines the specific\n   * {@link DidVerificationRelationship | verification relationships} between the DID subject and\n   * the verification method. This enables the verification method to be utilized for distinct\n   * actions such as authentication, assertion, key agreement, capability delegation, and others. It\n   * is important for verifiers to recognize that a verification method must be associated with the\n   * relevant purpose in the DID document to be valid for that specific use case.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidIonVerificationMethod = {\n   *   purposes: ['authentication', 'assertionMethod'],\n   *   ...\n   * };\n   * ```\n   */\n  purposes: (DidVerificationRelationship | keyof typeof DidVerificationRelationship)[];\n}\n\n/**\n * `IonPortableDid` interface extends the {@link PortableDid} interface.\n *\n * It represents a Decentralized Identifier (DID) that is portable and can be used across different\n * domains, including the ION specific recovery and update keys.\n */\nexport interface IonPortableDid extends PortableDid {\n  /** The JSON Web Key (JWK) used for recovery purposes. */\n  recoveryKey: Jwk;\n\n  /** The JSON Web Key (JWK) used for updating the DID. */\n  updateKey: Jwk;\n}\n\n/**\n * Enumerates the types of keys that can be used in a DID ION document.\n *\n * The DID ION method supports various cryptographic key types. These key types are essential for\n * the creation and management of DIDs and their associated cryptographic operations like signing\n * and encryption.\n */\nexport enum DidIonRegisteredKeyType {\n  /**\n   * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature\n   * Algorithm) and Curve25519.\n   */\n  Ed25519 = 'Ed25519',\n\n  /**\n   * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized\n   * systems.\n   */\n  secp256k1 = 'secp256k1',\n\n  /**\n   * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations\n   * and is widely supported in various cryptographic libraries and standards.\n   */\n  secp256r1 = 'secp256r1',\n\n  /**\n   * X25519: A Diffie-Hellman key exchange algorithm using Curve25519.\n   */\n  X25519 = 'X25519'\n}\n\n/**\n * Private helper that maps algorithm identifiers to their corresponding DID ION\n * {@link DidIonRegisteredKeyType | registered key type}.\n */\nconst AlgorithmToKeyTypeMap = {\n  Ed25519   : DidIonRegisteredKeyType.Ed25519,\n  ES256K    : DidIonRegisteredKeyType.secp256k1,\n  ES256     : DidIonRegisteredKeyType.secp256r1,\n  'P-256'   : DidIonRegisteredKeyType.secp256r1,\n  secp256k1 : DidIonRegisteredKeyType.secp256k1,\n  secp256r1 : DidIonRegisteredKeyType.secp256r1\n} as const;\n\n/**\n * The default node to use as a gateway to the Sidetree newtork when anchoring, updating, and\n * resolving DID documents.\n */\nconst DEFAULT_GATEWAY_URI = 'https://ion.tbd.engineering';\n\n/**\n * The `DidIon` class provides an implementation of the `did:ion` DID method.\n *\n * Features:\n * - DID Creation: Create new `did:ion` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing key in a Key Management System\n *                       (KMS). If supported by the KMS, a DID's key can be exported to a portable\n *                       DID format.\n * - DID Resolution: Resolve a `did:ion` to its corresponding DID Document stored in the Sidetree\n *                   network.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @see {@link https://identity.foundation/sidetree/spec/ | Sidetree Protocol Specification}\n * @see {@link https://github.com/decentralized-identity/ion/blob/master/docs/design.md | ION Design Document}\n *\n * @example\n * ```ts\n * // DID Creation\n * const did = await DidIon.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidIon.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidIon.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Key Management\n *\n * // Instantiate a DID object for a published DID with existing keys in a KMS\n * const did = await DidIon.fromKeyManager({\n *  didUri: 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug',\n *  keyManager\n * });\n *\n * // Convert a DID object to a portable format\n * const portableDid = await DidIon.toKeys({ did });\n * ```\n */\n\nexport class DidIon extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID ION specification.\n   */\n  public static methodName = 'ion';\n\n  /**\n   * Creates a new DID using the `did:ion` method formed from a newly generated key.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidIon.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidIon.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate\n   *                            keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidIonCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that the algorithm for any given verification method is supported by the\n    // DID ION specification.\n    if (options.verificationMethods?.some(vm => !(vm.algorithm in AlgorithmToKeyTypeMap))) {\n      throw new Error('One or more verification method algorithms are not supported');\n    }\n\n    // Check 2: Validate that the ID for any given verification method is unique.\n    const methodIds = options.verificationMethods?.filter(vm => 'id' in vm).map(vm => vm.id);\n    if (methodIds && methodIds.length !== new Set(methodIds).size) {\n      throw new Error('One or more verification method IDs are not unique');\n    }\n\n    // Check 3: Validate that the required properties for any given services are present.\n    if (options.services?.some(s => !s.id || !s.type || !s.serviceEndpoint)) {\n      throw new Error('One or more services are missing required properties');\n    }\n\n    // If no verification methods were specified, generate a default Ed25519 verification method.\n    const defaultVerificationMethod: DidCreateVerificationMethod<TKms> = {\n      algorithm : 'Ed25519' as any,\n      purposes  : ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation']\n    };\n\n    const verificationMethodsToAdd: DidIonVerificationMethod[] = [];\n\n    // Generate random key material for additional verification methods, if any.\n    for (const vm of options.verificationMethods ?? [defaultVerificationMethod]) {\n      // Generate a random key for the verification method.\n      const keyUri = await keyManager.generateKey({ algorithm: vm.algorithm });\n      const publicKey = await keyManager.getPublicKey({ keyUri });\n\n      // Add the verification method to the DID document.\n      verificationMethodsToAdd.push({\n        id           : vm.id,\n        publicKeyJwk : publicKey,\n        purposes     : vm.purposes ?? ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation']\n      });\n    }\n\n    // Generate a random key for the ION Recovery Key. Sidetree requires secp256k1 recovery keys.\n    const recoveryKeyUri = await keyManager.generateKey({ algorithm: DidIonRegisteredKeyType.secp256k1 });\n    const recoveryKey = await keyManager.getPublicKey({ keyUri: recoveryKeyUri });\n\n    // Generate a random key for the ION Update Key. Sidetree requires secp256k1 update keys.\n    const updateKeyUri = await keyManager.generateKey({ algorithm: DidIonRegisteredKeyType.secp256k1 });\n    const updateKey = await keyManager.getPublicKey({ keyUri: updateKeyUri });\n\n    // Compute the Long Form DID URI from the keys and services, if any.\n    const longFormDidUri = await DidIonUtils.computeLongFormDidUri({\n      recoveryKey,\n      updateKey,\n      services            : options.services ?? [],\n      verificationMethods : verificationMethodsToAdd\n    });\n\n    // Expand the DID URI string to a DID document.\n    const { didDocument, didResolutionMetadata } = await DidIon.resolve(longFormDidUri, { gatewayUri: options.gatewayUri });\n    if (didDocument === null) {\n      throw new Error(`Unable to resolve DID during creation: ${didResolutionMetadata?.error}`);\n    }\n\n    // Create the BearerDid object, including the \"Short Form\" of the DID URI, the ION update and\n    // recovery keys, and specifying that the DID has not yet been published.\n    const did = new BearerDid({\n      uri      : longFormDidUri,\n      document : didDocument,\n      metadata : {\n        published   : false,\n        canonicalId : longFormDidUri.split(':', 3).join(':'),\n        recoveryKey,\n        updateKey\n      },\n      keyManager\n    });\n\n    // By default, publish the DID document to a Sidetree node unless explicitly disabled.\n    if (options.publish ?? true) {\n      const registrationResult = await DidIon.publish({ did, gatewayUri: options.gatewayUri });\n      did.metadata = registrationResult.didDocumentMetadata;\n    }\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:ion` DID, return the verification method that will be used\n   * for signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, the first verification method in the authentication property\n   * in the DID Document is used.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument, methodId }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Get the verification method with either the specified ID or the first assertion method.\n    const verificationMethod = didDocument.verificationMethod?.find(\n      vm => vm.id === (methodId ?? didDocument.assertionMethod?.[0])\n    );\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID ION method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidIon.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the\n   *          provided PortableDid.\n   * @throws An error if the DID document does not contain any verification methods or the keys for\n   *         any verification method are missing in the key manager.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidIon.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    return did;\n  }\n\n  /**\n   * Publishes a DID to a Sidetree node, making it publicly discoverable and resolvable.\n   *\n   * This method handles the publication of a DID Document associated with a `did:ion` DID to a\n   * Sidetree node.\n   *\n   * @remarks\n   * - This method is typically invoked automatically during the creation of a new DID unless the\n   *   `publish` option is set to `false`.\n   * - For existing, unpublished DIDs, it can be used to publish the DID Document to a Sidetree node.\n   * - The method relies on the specified Sidetree node to interface with the network.\n   *\n   * @param params - The parameters for the `publish` operation.\n   * @param params.did - The `BearerDid` object representing the DID to be published.\n   * @param params.gatewayUri - Optional. The URI of a server involved in executing DID\n   *                                    method operations. In the context of publishing, the\n   *                                    endpoint is expected to be a Sidetree node. If not\n   *                                    specified, a default node is used.\n   * @returns A Promise resolving to a boolean indicating whether the publication was successful.\n   *\n   * @example\n   * ```ts\n   * // Generate a new DID and keys but explicitly disable publishing.\n   * const did = await DidIon.create({ options: { publish: false } });\n   * // Publish the DID to the Sidetree network.\n   * const isPublished = await DidIon.publish({ did });\n   * // `isPublished` is true if the DID was successfully published.\n   * ```\n   */\n  public static async publish({ did, gatewayUri = DEFAULT_GATEWAY_URI }: {\n    did: BearerDid;\n    gatewayUri?: string;\n  }): Promise<DidRegistrationResult> {\n    // Construct an ION verification method made up of the id, public key, and purposes from each\n    // verification method in the DID document.\n    const verificationMethods: DidIonVerificationMethod[] = did.document.verificationMethod?.map(\n      vm => ({\n        id           : vm.id,\n        publicKeyJwk : vm.publicKeyJwk!,\n        purposes     : getVerificationRelationshipsById({ didDocument: did.document, methodId: vm.id })\n      })\n    ) ?? [];\n\n    // Create the ION document.\n    const ionDocument = await DidIonUtils.createIonDocument({\n      services: did.document.service ?? [],\n      verificationMethods\n    });\n\n    // Construct the ION Create Operation request.\n    const createOperation = await DidIonUtils.constructCreateRequest({\n      ionDocument,\n      recoveryKey : did.metadata.recoveryKey,\n      updateKey   : did.metadata.updateKey\n    });\n\n    try {\n      // Construct the URL of the SideTree node's operations endpoint.\n      const operationsUrl = DidIonUtils.appendPathToUrl({\n        baseUrl : gatewayUri,\n        path    : `/operations`\n      });\n\n      // Submit the Create Operation to the operations endpoint.\n      const response = await fetch(operationsUrl, {\n        method  : 'POST',\n        mode    : 'cors',\n        headers : { 'Content-Type': 'application/json' },\n        body    : JSON.stringify(createOperation)\n      });\n\n      // Return the result of processing the Create operation, including the updated DID metadata\n      // with the publishing result.\n      return {\n        didDocument         : did.document,\n        didDocumentMetadata : {\n          ...did.metadata,\n          published: response.ok,\n        },\n        didRegistrationMetadata: {}\n      };\n\n    } catch (error: any) {\n      return {\n        didDocument         : null,\n        didDocumentMetadata : {\n          published: false,\n        },\n        didRegistrationMetadata: {\n          error        : DidErrorCode.InternalError,\n          errorMessage : `Failed to publish DID document for: ${did.uri}`\n        }\n      };\n    }\n  }\n\n  /**\n   * Resolves a `did:ion` identifier to its corresponding DID document.\n   *\n   * This method performs the resolution of a `did:ion` DID, retrieving its DID Document from the\n   * Sidetree-based DID overlay network. The process involves querying a Sidetree node to retrieve\n   * the DID Document that corresponds to the given DID identifier.\n   *\n   * @remarks\n   * - If a `gatewayUri` option is not specified, a default node is used to access the Sidetree\n   *   network.\n   * - It decodes the DID identifier and retrieves the associated DID Document and metadata.\n   * - In case of resolution failure, appropriate error information is returned.\n   *\n   * @example\n   * ```ts\n   * const resolutionResult = await DidIon.resolve('did:ion:example');\n   * ```\n   *\n   * @param didUri - The DID to be resolved.\n   * @param options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise<DidResolutionResult> {\n    // Attempt to parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // If parsing failed, the DID is invalid.\n    if (!parsedDid) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'invalidDid' }\n      };\n    }\n\n    // If the DID method is not \"ion\", return an error.\n    if (parsedDid.method !== DidIon.methodName) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'methodNotSupported' }\n      };\n    }\n\n    // To execute the read method operation, use the given gateway URI or a default Sidetree node.\n    const gatewayUri = options?.gatewayUri ?? DEFAULT_GATEWAY_URI;\n\n    try {\n      // Construct the URL to be used in the resolution request.\n      const resolutionUrl = DidIonUtils.appendPathToUrl({\n        baseUrl : gatewayUri,\n        path    : `/identifiers/${didUri}`\n      });\n\n      // Attempt to retrieve the DID document and metadata from the Sidetree node.\n      const response = await fetch(resolutionUrl);\n\n      // If the DID document was not found, return an error.\n      if (!response.ok) {\n        throw new DidError(DidErrorCode.NotFound, `Unable to find DID document for: ${didUri}`);\n      }\n\n      // If the DID document was retrieved successfully, return it.\n      const { didDocument, didDocumentMetadata } = await response.json() as DidResolutionResult;\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        ...didDocument && { didDocument },\n        didDocumentMetadata: {\n          published: didDocumentMetadata?.method?.published,\n          ...didDocumentMetadata\n        }\n      };\n\n    } catch (error: any) {\n      // Rethrow any unexpected errors that are not a `DidError`.\n      if (!(error instanceof DidError)) throw new Error(error);\n\n      // Return a DID Resolution Result with the appropriate error code.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error: error.code,\n          ...error.message && { errorMessage: error.message }\n        }\n      };\n    }\n  }\n}\n\n/**\n * The `DidIonUtils` class provides utility functions to support operations in the DID ION method.\n */\nexport class DidIonUtils {\n  /**\n   * Appends a specified path to a base URL, ensuring proper formatting of the resulting URL.\n   *\n   * This method is useful for constructing URLs for accessing various endpoints, such as Sidetree\n   * nodes in the ION network. It handles the nuances of URL path concatenation, including the\n   * addition or removal of leading/trailing slashes, to create a well-formed URL.\n   *\n   * @param params - The parameters for URL construction.\n   * @param params.baseUrl - The base URL to which the path will be appended.\n   * @param params.path - The path to append to the base URL.\n   * @returns The fully constructed URL string with the path appended to the base URL.\n   */\n  public static appendPathToUrl({ baseUrl, path }: {\n    baseUrl: string;\n    path: string;\n  }): string {\n    const url = new URL(baseUrl);\n    url.pathname = url.pathname.endsWith('/') ? url.pathname : url.pathname + '/';\n    url.pathname += path.startsWith('/') ? path.substring(1) : path;\n\n    return url.toString();\n  }\n\n  /**\n   * Computes the Long Form DID URI given an ION DID's recovery key, update key, services, and\n   * verification methods.\n   *\n   * @param params - The parameters for computing the Long Form DID URI.\n   * @param params.recoveryKey - The ION Recovery Key.\n   * @param params.updateKey - The ION Update Key.\n   * @param params.services - An array of services associated with the DID.\n   * @param params.verificationMethods - An array of verification methods associated with the DID.\n   * @returns A Promise resolving to the Long Form DID URI.\n   */\n  public static async computeLongFormDidUri({ recoveryKey, updateKey, services, verificationMethods }: {\n    recoveryKey: Jwk;\n    updateKey: Jwk;\n    services: DidService[];\n    verificationMethods: DidIonVerificationMethod[];\n  }): Promise<string> {\n    // Create the ION document.\n    const ionDocument = await DidIonUtils.createIonDocument({ services, verificationMethods });\n\n    // Normalize JWK to onnly include specific members and in lexicographic order.\n    const normalizedRecoveryKey = DidIonUtils.normalizeJwk(recoveryKey);\n    const normalizedUpdateKey = DidIonUtils.normalizeJwk(updateKey);\n\n    // Compute the Long Form DID URI.\n    const longFormDidUri = await IonDid.createLongFormDid({\n      document    : ionDocument,\n      recoveryKey : normalizedRecoveryKey as JwkEs256k,\n      updateKey   : normalizedUpdateKey as JwkEs256k\n    });\n\n    return longFormDidUri;\n  }\n\n  /**\n   * Constructs a Sidetree Create Operation request for a DID document within the ION network.\n   *\n   * This method prepares the necessary payload for submitting a Create Operation to a Sidetree\n   * node, encapsulating the details of the DID document, recovery key, and update key.\n   *\n   * @param params - Parameters required to construct the Create Operation request.\n   * @param params.ionDocument - The DID document model containing public keys and service endpoints.\n   * @param params.recoveryKey - The recovery public key in JWK format.\n   * @param params.updateKey - The update public key in JWK format.\n   * @returns A promise resolving to the ION Create Operation request model, ready for submission to a Sidetree node.\n   */\n  public static async constructCreateRequest({ ionDocument, recoveryKey, updateKey }: {\n    ionDocument: IonDocumentModel,\n    recoveryKey: Jwk,\n    updateKey: Jwk\n  }): Promise<DidIonCreateRequest> {\n    // Create an ION DID create request operation.\n    const createRequest = await IonRequest.createCreateRequest({\n      document    : ionDocument,\n      recoveryKey : DidIonUtils.normalizeJwk(recoveryKey) as JwkEs256k,\n      updateKey   : DidIonUtils.normalizeJwk(updateKey) as JwkEs256k\n    }) as DidIonCreateRequest;\n\n    return createRequest;\n  }\n\n  /**\n   * Assembles an ION document model from provided services and verification methods\n   *\n   * This model serves as the foundation for a DID document in the ION network, facilitating the\n   * creation and management of decentralized identities. It translates service endpoints and\n   * public keys into a format compatible with the Sidetree protocol, ensuring the resulting DID\n   * document adheres to the required specifications for ION DIDs. This method is essential for\n   * constructing the payload needed to register or update DIDs within the ION network.\n   *\n   * @param params - The parameters containing the services and verification methods to include in the ION document.\n   * @param params.services - A list of service endpoints to be included in the DID document, specifying ways to interact with the DID subject.\n   * @param params.verificationMethods - A list of verification methods to be included, detailing the cryptographic keys and their intended uses within the DID document.\n   * @returns A Promise resolving to an `IonDocumentModel`, ready for use in Sidetree operations like DID creation and updates.\n   */\n  public static async createIonDocument({ services, verificationMethods }: {\n    services: DidService[];\n    verificationMethods: DidIonVerificationMethod[]\n  }): Promise<IonDocumentModel> {\n    /**\n     * STEP 1: Convert verification methods to ION SDK format.\n     */\n    const ionPublicKeys: IonPublicKeyModel[] = [];\n\n    for (const vm of verificationMethods) {\n      // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID.\n      let methodId = vm.id ?? vm.publicKeyJwk.kid ?? await computeJwkThumbprint({ jwk: vm.publicKeyJwk });\n      methodId = `${methodId.split('#').pop()}`; // Remove fragment prefix, if any.\n\n      // Convert public key JWK to ION format.\n      const publicKey: IonPublicKeyModel = {\n        id           : methodId,\n        publicKeyJwk : DidIonUtils.normalizeJwk(vm.publicKeyJwk),\n        purposes     : vm.purposes as IonPublicKeyPurpose[],\n        type         : 'JsonWebKey2020'\n      };\n\n      ionPublicKeys.push(publicKey);\n    }\n\n    /**\n     * STEP 2: Convert service entries, if any, to ION SDK format.\n     */\n    const ionServices = services.map(service => ({\n      ...service,\n      id: `${service.id.split('#').pop()}` // Remove fragment prefix, if any.\n    }));\n\n    /**\n     * STEP 3: Format as ION document.\n     */\n    const ionDocumentModel: IonDocumentModel = {\n      publicKeys : ionPublicKeys,\n      services   : ionServices\n    };\n\n    return ionDocumentModel;\n  }\n\n  /**\n   * Normalize the given JWK to include only specific members and in lexicographic order.\n   *\n   * @param jwk - The JWK to normalize.\n   * @returns The normalized JWK.\n   */\n  private static normalizeJwk(jwk: Jwk): Jwk {\n    const keyType = jwk.kty;\n    let normalizedJwk: Jwk;\n\n    if (keyType === 'EC') {\n      normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n    } else if (keyType === 'oct') {\n      normalizedJwk = { k: jwk.k, kty: jwk.kty };\n    } else if (keyType === 'OKP') {\n      normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n    } else if (keyType === 'RSA') {\n      normalizedJwk = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n    } else {\n      throw new Error(`Unsupported key type: ${keyType}`);\n    }\n\n    return normalizedJwk;\n  }\n}", "import type {\n  Jwk,\n  CryptoApi,\n  KeyIdentifier,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  InferKeyGeneratorAlgorithm,\n} from '@web5/crypto';\n\nimport { Convert } from '@web5/common';\nimport { LocalKeyManager } from '@web5/crypto';\n\nimport type { PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod } from './did-method.js';\nimport type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Defines the set of options available when creating a new Decentralized Identifier (DID) with the\n * 'did:jwk' method.\n *\n * Either the `algorithm` or `verificationMethods` option can be specified, but not both.\n * - A new key will be generated using the algorithm identifier specified in either the `algorithm`\n *   property or the `verificationMethods` object's `algorithm` property.\n * - If `verificationMethods` is given, it must contain exactly one entry since DID JWK only\n *   supports a single verification method.\n * - If neither is given, the default is to generate a new Ed25519 key.\n *\n * @example\n * ```ts\n * // DID Creation\n *\n * // By default, when no options are given, a new Ed25519 key will be generated.\n * const did = await DidJwk.create();\n *\n * // The algorithm to use for key generation can be specified as a top-level option.\n * const did = await DidJwk.create({\n *   options: { algorithm = 'ES256K' }\n * });\n *\n * // Or, alternatively as a property of the verification method.\n * const did = await DidJwk.create({\n *   options: {\n *     verificationMethods: [{ algorithm = 'ES256K' }]\n *   }\n * });\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidJwk.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidJwk.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Import / Export\n *\n * // Export a BearerDid object to the PortableDid format.\n * const portableDid = await did.export();\n *\n * // Reconstruct a BearerDid object from a PortableDid\n * const did = await DidJwk.import(portableDid);\n * ```\n */\nexport interface DidJwkCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optionally specify the algorithm to be used for key generation.\n   */\n  algorithm?: TKms extends CryptoApi\n    ? InferKeyGeneratorAlgorithm<TKms>\n    : InferKeyGeneratorAlgorithm<LocalKeyManager>;\n\n  /**\n   * Alternatively, specify the algorithm to be used for key generation of the single verification\n   * method in the DID Document.\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * The `DidJwk` class provides an implementation of the `did:jwk` DID method.\n *\n * Features:\n * - DID Creation: Create new `did:jwk` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing verification method key set or\n *                       or a key in a Key Management System (KMS). If supported by the KMS, a DID's\n *                       key can be exported to a portable DID format.\n * - DID Resolution: Resolve a `did:jwk` to its corresponding DID Document.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @remarks\n * The `did:jwk` DID method uses a single JSON Web Key (JWK) to generate a DID and does not rely\n * on any external system such as a blockchain or centralized database. This characteristic makes\n * it suitable for use cases where a assertions about a DID Subject can be self-verifiable by\n * third parties.\n *\n * The DID URI is formed by Base64URL-encoding the JWK and prefixing with `did:jwk:`. The DID\n * Document of a `did:jwk` DID contains a single verification method, which is the JWK used\n * to generate the DID. The verification method is identified by the key ID `#0`.\n *\n * @see {@link https://github.com/quartzjer/did-jwk/blob/main/spec.md | DID JWK Specification}\n *\n * @example\n * ```ts\n * // DID Creation\n * const did = await DidJwk.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidJwk.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidJwk.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Key Management\n *\n * // Instantiate a DID object from an existing key in a KMS\n * const did = await DidJwk.fromKeyManager({\n *  didUri: 'did:jwk:eyJrIjoiT0tQIiwidCI6IkV1c2UyNTYifQ',\n *  keyManager\n * });\n *\n * // Instantiate a DID object from an existing verification method key\n * const did = await DidJwk.fromKeys({\n *   verificationMethods: [{\n *     publicKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4'\n *     },\n *     privateKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4',\n *       d: 'bdcGE4KzEaekOwoa-ee3gAm1a991WvNj_Eq3WKyqTnE'\n *     }\n *   }]\n * });\n *\n * // Convert a DID object to a portable format\n * const portableDid = await DidJwk.toKeys({ did });\n *\n * // Reconstruct a DID object from a portable format\n * const did = await DidJwk.fromKeys(portableDid);\n * ```\n */\nexport class DidJwk extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID JWK specification.\n   */\n  public static methodName = 'jwk';\n\n  /**\n   * Creates a new DID using the `did:jwk` method formed from a newly generated key.\n   *\n   * @remarks\n   * The DID URI is formed by Base64URL-encoding the JWK and prefixing with `did:jwk:`.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated.\n   * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given,\n   *   an error will be thrown.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidJwk.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidJwk.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate\n   *                            keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidJwkCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that `algorithm` or `verificationMethods` options are not both given.\n    if (options.algorithm && options.verificationMethods) {\n      throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`);\n    }\n\n    // Check 2: If `verificationMethods` is given, it must contain exactly one entry since DID JWK\n    // only supports a single verification method.\n    if (options.verificationMethods && options.verificationMethods.length !== 1) {\n      throw new Error(`The 'verificationMethods' option must contain exactly one entry`);\n    }\n\n    // Default to Ed25519 key generation if an algorithm is not given.\n    const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519';\n\n    // Generate a new key using the specified `algorithm`.\n    const keyUri = await keyManager.generateKey({ algorithm });\n    const publicKey = await keyManager.getPublicKey({ keyUri });\n\n    // Compute the DID identifier from the public key by serializing the JWK to a UTF-8 string and\n    // encoding in Base64URL format.\n    const identifier = Convert.object(publicKey).toBase64Url();\n\n    // Attach the prefix `did:jwk` to form the complete DID URI.\n    const didUri = `did:${DidJwk.methodName}:${identifier}`;\n\n    // Expand the DID URI string to a DID document.\n    const didResolutionResult = await DidJwk.resolve(didUri);\n    const document = didResolutionResult.didDocument as DidDocument;\n\n    // Create the BearerDid object from the generated key material.\n    const did = new BearerDid({\n      uri      : didUri,\n      document,\n      metadata : {},\n      keyManager\n    });\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:jwk` DID, return the verification method that will be used\n   * for signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, the first verification method in the DID Document is used.\n   *\n   * Note that for DID JWK, only one verification method can exist so specifying `methodId` could be\n   * considered redundant or unnecessary. The option is provided for consistency with other DID\n   * method implementations.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Attempt to find the verification method in the DID Document.\n    const [ verificationMethod ] = didDocument.verificationMethod ?? [];\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID JWK method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @remarks\n   * The `verificationMethod` array of the DID document must contain exactly one key since the\n   * `did:jwk` method only supports a single verification method.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidJwk.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the provided keys.\n   * @throws An error if the DID document does not contain exactly one verification method.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidJwk.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    // Use the given PortableDid to construct the BearerDid object.\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    // Validate that the given DID document contains exactly one verification method.\n    // Note: The non-undefined assertion is necessary because the type system cannot infer that\n    // the `verificationMethod` property is defined -- which is checked by `BearerDid.import()`.\n    if (did.document.verificationMethod!.length !== 1) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `DID document must contain exactly one verification method`);\n    }\n\n    return did;\n  }\n\n  /**\n   * Resolves a `did:jwk` identifier to a DID Document.\n   *\n   * @param didUri - The DID to be resolved.\n   * @param _options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    // Attempt to parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // Attempt to decode the Base64URL-encoded JWK.\n    let publicKey: Jwk | undefined;\n    try {\n      publicKey = Convert.base64Url(parsedDid!.id).toObject() as Jwk;\n    } catch { /* Consume the error so that a DID resolution error can be returned later. */ }\n\n    // If parsing or decoding failed, the DID is invalid.\n    if (!parsedDid || !publicKey) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'invalidDid' }\n      };\n    }\n\n    // If the DID method is not \"jwk\", return an error.\n    if (parsedDid.method !== DidJwk.methodName) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'methodNotSupported' }\n      };\n    }\n\n    const didDocument: DidDocument = {\n      '@context': [\n        'https://www.w3.org/ns/did/v1'\n      ],\n      id: parsedDid.uri\n    };\n\n    const keyUri = `${didDocument.id}#0`;\n\n    // Set the Verification Method property.\n    didDocument.verificationMethod = [{\n      id           : keyUri,\n      type         : 'JsonWebKey',\n      controller   : didDocument.id,\n      publicKeyJwk : publicKey\n    }];\n\n    // Set the Verification Relationship properties.\n    didDocument.authentication = [keyUri];\n    didDocument.assertionMethod = [keyUri];\n    didDocument.capabilityInvocation = [keyUri];\n    didDocument.capabilityDelegation = [keyUri];\n    didDocument.keyAgreement = [keyUri];\n\n    // If the JWK contains a `use` property with the value \"sig\" then the `keyAgreement` property\n    // is not included in the DID Document. If the `use` value is \"enc\" then only the `keyAgreement`\n    // property is included in the DID Document.\n    switch (publicKey.use) {\n      case 'sig': {\n        delete didDocument.keyAgreement;\n        break;\n      }\n\n      case 'enc': {\n        delete didDocument.authentication;\n        delete didDocument.assertionMethod;\n        delete didDocument.capabilityInvocation;\n        delete didDocument.capabilityDelegation;\n        break;\n      }\n    }\n\n    return {\n      ...EMPTY_DID_RESOLUTION_RESULT,\n      didDocument,\n    };\n  }\n}", "import type { MulticodecCode, MulticodecDefinition, RequireOnly } from '@web5/common';\nimport type {\n  Jwk,\n  CryptoApi,\n  KeyCompressor,\n  KeyIdentifier,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  AsymmetricKeyConverter,\n  InferKeyGeneratorAlgorithm,\n} from '@web5/crypto';\n\nimport { Multicodec, universalTypeOf } from '@web5/common';\nimport {\n  X25519,\n  Ed25519,\n  Secp256k1,\n  Secp256r1,\n  LocalKeyManager,\n} from '@web5/crypto';\n\nimport type { PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod } from './did-method.js';\nimport type {\n  DidDocument,\n  DidResolutionOptions,\n  DidResolutionResult,\n  DidVerificationMethod,\n} from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { KeyWithMulticodec } from '../types/multibase.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\nimport { getVerificationMethodTypes, keyBytesToMultibaseId, multibaseIdToKeyBytes } from '../utils.js';\n\n/**\n * Defines the set of options available when creating a new Decentralized Identifier (DID) with the\n * 'did:key' method.\n *\n * Either the `algorithm` or `verificationMethods` option can be specified, but not both.\n * - A new key will be generated using the algorithm identifier specified in either the `algorithm`\n *   property or the `verificationMethods` object's `algorithm` property.\n * - If `verificationMethods` is given, it must contain exactly one entry since DID Key only\n *   supports a single verification method.\n * - If neither is given, the default is to generate a new Ed25519 key.\n *\n * @example\n * ```ts\n  * // By default, when no options are given, a new Ed25519 key will be generated.\n * const did = await DidKey.create();\n *\n * // The algorithm to use for key generation can be specified as a top-level option.\n * const did = await DidKey.create({\n *   options: { algorithm = 'secp256k1' }\n * });\n *\n * // Or, alternatively as a property of the verification method.\n * const did = await DidKey.create({\n *   options: {\n *     verificationMethods: [{ algorithm = 'secp256k1' }]\n *   }\n * });\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidKey.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidKey.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Import / Export\n *\n * // Export a BearerDid object to the PortableDid format.\n * const portableDid = await did.export();\n *\n * // Reconstruct a BearerDid object from a PortableDid\n * const did = await DidKey.import(portableDid);\n * ```\n */\nexport interface DidKeyCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optionally specify the algorithm to be used for key generation.\n   */\n  algorithm?: TKms extends CryptoApi\n    ? InferKeyGeneratorAlgorithm<TKms>\n    : InferKeyGeneratorAlgorithm<LocalKeyManager>;\n\n  /**\n   * Optionally specify an array of JSON-LD context links for the @context property of the DID\n   * document.\n   *\n   * The @context property provides a JSON-LD processor with the information necessary to interpret\n   * the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'.\n   */\n  defaultContext?: string;\n\n  /**\n   * Optionally enable encryption key derivation during DID creation.\n   *\n   * By default, this option is set to `false`, which means encryption key derivation is not\n   * performed unless explicitly enabled.\n   *\n   * When set to `true`, an `X25519` key will be derived from the `Ed25519` public key used to\n   * create the DID. This feature enables the same DID to be used for encrypted communication, in\n   * addition to signature verification.\n   *\n   * Notes:\n   * - This option is ONLY applicable when the `algorithm` of the DID's public key is `Ed25519`.\n   * - Enabling this introduces specific cryptographic considerations that should be understood\n   *   before using the same key pair for digital signatures and encrypted communication. See the following for more information:\n   */\n  enableEncryptionKeyDerivation?: boolean;\n\n  /**\n   * Optionally enable experimental public key types during DID creation.\n   * By default, this option is set to `false`, which means experimental public key types are not\n   * supported.\n   *\n   * Note: This implementation of the DID Key method does not support any experimental public key\n   * types.\n   */\n  enableExperimentalPublicKeyTypes?: boolean;\n\n  /**\n   * Optionally specify the format of the public key to be used for DID creation.\n   */\n  publicKeyFormat?: keyof typeof DidKeyVerificationMethodType;\n\n  /**\n   * Alternatively, specify the algorithm to be used for key generation of the single verification\n   * method in the DID Document.\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Enumerates the types of keys that can be used in a DID Key document.\n *\n * The DID Key method supports various cryptographic key types. These key types are essential for\n * the creation and management of DIDs and their associated cryptographic operations like signing\n * and encryption.\n */\nexport enum DidKeyRegisteredKeyType {\n  /**\n   * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature\n   * Algorithm) and Curve25519.\n   */\n  Ed25519 = 'Ed25519',\n\n  /**\n   * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized\n   * systems.\n   */\n  secp256k1 = 'secp256k1',\n\n  /**\n   * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations\n   * and is widely supported in various cryptographic libraries and standards.\n   */\n  secp256r1 = 'secp256r1',\n\n  /**\n   * X25519: A Diffie-Hellman key exchange algorithm using Curve25519.\n   */\n  X25519 = 'X25519'\n}\n\n/**\n * Enumerates the verification method types supported by the DID Key method.\n *\n * This enum defines the URIs associated with common verification methods used in DID Documents.\n * These URIs represent cryptographic suites or key types standardized for use across decentralized\n * identifiers (DIDs).\n */\nexport const DidKeyVerificationMethodType = {\n  /** Represents an Ed25519 public key used for digital signatures. */\n  Ed25519VerificationKey2020: 'https://w3id.org/security/suites/ed25519-2020/v1',\n\n  /** Represents a JSON Web Key (JWK) used for digital signatures and key agreement protocols. */\n  JsonWebKey2020: 'https://w3id.org/security/suites/jws-2020/v1',\n\n  /** Represents an X25519 public key used for key agreement protocols. */\n  X25519KeyAgreementKey2020: 'https://w3id.org/security/suites/x25519-2020/v1',\n} as const;\n\n/**\n * Private helper that maps algorithm identifiers to their corresponding DID Key\n * {@link DidKeyRegisteredKeyType | registered key type}.\n */\nconst AlgorithmToKeyTypeMap = {\n  Ed25519   : DidKeyRegisteredKeyType.Ed25519,\n  ES256K    : DidKeyRegisteredKeyType.secp256k1,\n  ES256     : DidKeyRegisteredKeyType.secp256r1,\n  'P-256'   : DidKeyRegisteredKeyType.secp256r1,\n  secp256k1 : DidKeyRegisteredKeyType.secp256k1,\n  secp256r1 : DidKeyRegisteredKeyType.secp256r1,\n  X25519    : DidKeyRegisteredKeyType.X25519\n} as const;\n\n/**\n * The `DidKey` class provides an implementation of the 'did:key' DID method.\n *\n * Features:\n * - DID Creation: Create new `did:key` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing verification method key set or\n *                       or a key in a Key Management System (KMS). If supported by the KMS, a DID's\n *                       key can be exported to a portable DID format.\n * - DID Resolution: Resolve a `did:key` to its corresponding DID Document.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @remarks\n * The `did:key` DID method uses a single public key to generate a DID and does not rely\n * on any external system such as a blockchain or centralized database. This characteristic makes\n * it suitable for use cases where a assertions about a DID Subject can be self-verifiable by\n * third parties.\n *\n * The method-specific identifier is formed by\n * {@link https://datatracker.ietf.org/doc/html/draft-multiformats-multibase#name-base-58-bitcoin-encoding | Multibase base58-btc}\n * encoding the concatenation of the\n * {@link https://github.com/multiformats/multicodec/blob/master/README.md | Multicodec} identifier\n * for the public key type and the raw public key bytes. To form the DID URI, the method-specific\n * identifier is prefixed with the string 'did:key:'.\n *\n * This method can optionally derive an encryption key from the public key used to create the DID\n * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be\n * used for encrypted communication, in addition to signature verification. To enable this\n * feature when calling {@link DidKey.create | `DidKey.create()`}, first specify an `algorithm` of\n * `Ed25519` or provide a `keySet` referencing an `Ed25519` key and then set the\n * `enableEncryptionKeyDerivation` option to `true`.\n *\n * Note:\n * - The authors of the DID Key specification have indicated that use of this method for long-lived\n *   use cases is only recommended when accompanied with high confidence that private keys are\n *   securely protected by software or hardware isolation.\n *\n * @see {@link https://w3c-ccg.github.io/did-method-key/ | DID Key Specification}\n *\n* @example\n * ```ts\n * // DID Creation\n * const did = await DidKey.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidKey.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidKey.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Key Management\n *\n * // Instantiate a DID object from an existing key in a KMS\n * const did = await DidKey.fromKeyManager({\n *  didUri: 'did:key:z6MkpUzNmYVTGpqhStxK8yRKXWCRNm1bGYz8geAg2zmjYHKX',\n *  keyManager\n * });\n *\n * // Instantiate a DID object from an existing verification method key\n * const did = await DidKey.fromKeys({\n *   verificationMethods: [{\n *     publicKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4'\n *     },\n *     privateKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4',\n *       d: 'bdcGE4KzEaekOwoa-ee3gAm1a991WvNj_Eq3WKyqTnE'\n *     }\n *   }]\n * });\n *\n * // Convert a DID object to a portable format\n * const portableDid = await DidKey.toKeys({ did });\n *\n * // Reconstruct a DID object from a portable format\n * const did = await DidKey.fromKeys(portableDid);\n * ```\n */\nexport class DidKey extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID Key specification.\n   */\n  public static methodName = 'key';\n\n  /**\n   * Creates a new DID using the `did:key` method formed from a newly generated key.\n   *\n   * @remarks\n   * The DID URI is formed by\n   * {@link https://datatracker.ietf.org/doc/html/draft-multiformats-multibase#name-base-58-bitcoin-encoding | Multibase base58-btc}\n   * encoding the\n   * {@link https://github.com/multiformats/multicodec/blob/master/README.md | Multicodec}-encoded\n   * public key and prefixing with `did:key:`.\n   *\n   * This method can optionally derive an encryption key from the public key used to create the DID\n   * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be\n   * used for encrypted communication, in addition to signature verification. To enable this\n   * feature, specify an `algorithm` of `Ed25519` as either a top-level option or in a\n   * `verificationMethod` and set the `enableEncryptionKeyDerivation` option to `true`.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated.\n   * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given,\n   *   an error will be thrown.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidKey.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidKey.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Key Management System (KMS) used to generate keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidKeyCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that `algorithm` or `verificationMethods` options are not both given.\n    if (options.algorithm && options.verificationMethods) {\n      throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`);\n    }\n\n    // Check 2: If `verificationMethods` is given, it must contain exactly one entry since DID Key\n    // only supports a single verification method.\n    if (options.verificationMethods && options.verificationMethods.length !== 1) {\n      throw new Error(`The 'verificationMethods' option must contain exactly one entry`);\n    }\n\n    // Default to Ed25519 key generation if an algorithm is not given.\n    const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519';\n\n    // Generate a new key using the specified `algorithm`.\n    const keyUri = await keyManager.generateKey({ algorithm });\n    const publicKey = await keyManager.getPublicKey({ keyUri });\n\n    // Compute the DID identifier from the public key by converting the JWK to a multibase-encoded\n    // multicodec value.\n    const identifier = await DidKeyUtils.publicKeyToMultibaseId({ publicKey });\n\n    // Attach the prefix `did:key` to form the complete DID URI.\n    const didUri = `did:${DidKey.methodName}:${identifier}`;\n\n    // Expand the DID URI string to a DID document.\n    const didResolutionResult = await DidKey.resolve(didUri, options);\n    const document = didResolutionResult.didDocument as DidDocument;\n\n    // Create the BearerDid object from the generated key material.\n    const did = new BearerDid({\n      uri      : didUri,\n      document,\n      metadata : {},\n      keyManager\n    });\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:key` DID, return the verification method that will be used\n   * for signing messages and credentials. With DID Key, the first verification method in the\n   * authentication property in the DID Document is used.\n   *\n   * Note that for DID Key, only one verification method intended for signing can exist so\n   * specifying `methodId` could be considered redundant or unnecessary. The option is provided for\n   * consistency with other DID method implementations.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Attempt to ge the first verification method intended for signing claims.\n    const [ methodId ] = didDocument.assertionMethod || [];\n    const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id === methodId);\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID Key method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @remarks\n   * The `verificationMethod` array of the DID document must contain exactly one key since the\n   * `did:key` method only supports a single verification method.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidKey.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the provided keys.\n   * @throws An error if the DID document does not contain exactly one verification method.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidKey.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    // Use the given PortableDid to construct the BearerDid object.\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    // Validate that the given DID document contains exactly one verification method.\n    // Note: The non-undefined assertion is necessary because the type system cannot infer that\n    // the `verificationMethod` property is defined -- which is checked by `BearerDid.import()`.\n    if (did.document.verificationMethod!.length !== 1) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `DID document must contain exactly one verification method`);\n    }\n\n    return did;\n  }\n\n  /**\n   * Resolves a `did:key` identifier to a DID Document.\n   *\n   * @param didUri - The DID to be resolved.\n   * @param options - Optional parameters for resolving the DID.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    try {\n      // Attempt to expand the DID URI string to a DID document.\n      const didDocument = await DidKey.createDocument({ didUri, options });\n\n      // If the DID document was created successfully, return it.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didDocument,\n      };\n\n    } catch (error: any) {\n      // Rethrow any unexpected errors that are not a `DidError`.\n      if (!(error instanceof DidError)) throw new Error(error);\n\n      // Return a DID Resolution Result with the appropriate error code.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error: error.code,\n          ...error.message && { errorMessage: error.message }\n        }\n      };\n    }\n  }\n\n  /**\n   * Expands a did:key identifier to a DID Document.\n   *\n   * Reference: https://w3c-ccg.github.io/did-method-key/#document-creation-algorithm\n   *\n   * @param options\n   * @returns - A DID dodcument.\n   */\n  private static async createDocument({ didUri, options = {}}: {\n    didUri: string;\n    options?: Exclude<DidKeyCreateOptions<CryptoApi>, 'algorithm' | 'verificationMethods'> | DidResolutionOptions;\n  }): Promise<DidDocument> {\n    const {\n      defaultContext = 'https://www.w3.org/ns/did/v1',\n      enableEncryptionKeyDerivation = false,\n      enableExperimentalPublicKeyTypes = false,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options;\n\n    /**\n     * 1. Initialize document to an empty object.\n     */\n    const didDocument: DidDocument = { id: '' };\n\n    /**\n     * 2. Using a colon (:) as the delimiter, split the identifier into its\n     * components: a scheme, a method, a version, and a multibaseValue.\n     * If there are only three components set the version to the string\n     * value 1 and use the last value as the multibaseValue.\n     */\n    const parsedDid = Did.parse(didUri);\n    if (!parsedDid) {\n      throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`);\n    }\n    const multibaseValue = parsedDid.id;\n\n    /**\n     * 3. Check the validity of the input identifier.\n     * The scheme MUST be the value did. The method MUST be the value key.\n     * The version MUST be convertible to a positive integer value. The\n     * multibaseValue MUST be a string and begin with the letter z. If any\n     * of these requirements fail, an invalidDid error MUST be raised.\n     */\n    if (parsedDid.method !== DidKey.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n    if (!DidKey.validateIdentifier(parsedDid)) {\n      throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`);\n    }\n\n    /**\n     * 4. Initialize the signatureVerificationMethod to the result of passing\n     * identifier, multibaseValue, and options to a\n     *  {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | Signature Method Creation Algorithm}.\n     */\n    const signatureVerificationMethod = await DidKey.createSignatureMethod({\n      didUri,\n      multibaseValue,\n      options: { enableExperimentalPublicKeyTypes, publicKeyFormat }\n    });\n\n    /**\n     * 5. Set document.id to identifier. If document.id is not a valid DID,\n     * an invalidDid error MUST be raised.\n     *\n     * Note: Identifier was already confirmed to be valid in Step 3, so\n     *       skipping the redundant validation.\n     */\n    didDocument.id = parsedDid.uri;\n\n    /**\n     * 6. Initialize the verificationMethod property in document to an array\n     * where the first value is the signatureVerificationMethod.\n     */\n    didDocument.verificationMethod = [signatureVerificationMethod];\n\n    /**\n     * 7. Initialize the authentication, assertionMethod, capabilityInvocation,\n     * and the capabilityDelegation properties in document to an array where\n     * the first item is the value of the id property in\n     * signatureVerificationMethod.\n     */\n    didDocument.authentication = [signatureVerificationMethod.id];\n    didDocument.assertionMethod = [signatureVerificationMethod.id];\n    didDocument.capabilityInvocation = [signatureVerificationMethod.id];\n    didDocument.capabilityDelegation = [signatureVerificationMethod.id];\n\n    /**\n     * 8. If options.enableEncryptionKeyDerivation is set to true:\n     * Add the encryptionVerificationMethod value to the verificationMethod\n     * array. Initialize the keyAgreement property in document to an array\n     * where the first item is the value of the id property in\n     * encryptionVerificationMethod.\n     */\n    if (enableEncryptionKeyDerivation === true) {\n      /**\n       * Although not covered by the did:key method specification, a sensible\n       * default will be taken to use the 'X25519KeyAgreementKey2020'\n       * verification method type if the given publicKeyFormat is\n       * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise.\n       */\n      const encryptionPublicKeyFormat =\n        (publicKeyFormat === 'Ed25519VerificationKey2020')\n          ? 'X25519KeyAgreementKey2020'\n          : 'JsonWebKey2020';\n\n      /**\n       * 8.1 Initialize the encryptionVerificationMethod to the result of\n       * passing identifier, multibaseValue, and options to an\n     * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}.\n       */\n      const encryptionVerificationMethod = await this.createEncryptionMethod({\n        didUri,\n        multibaseValue,\n        options: { enableExperimentalPublicKeyTypes, publicKeyFormat: encryptionPublicKeyFormat }\n      });\n\n      /**\n       * 8.2 Add the encryptionVerificationMethod value to the\n       * verificationMethod array.\n       */\n      didDocument.verificationMethod.push(encryptionVerificationMethod);\n\n      /**\n       * 8.3. Initialize the keyAgreement property in document to an array\n       * where the first item is the value of the id property in\n       * encryptionVerificationMethod.\n       */\n      didDocument.keyAgreement = [encryptionVerificationMethod.id];\n    }\n\n    /**\n     * 9. Initialize the @context property in document to the result of passing document and options to the Context\n     * Creation algorithm.\n     */\n    // Set contextArray to an array that is initialized to options.defaultContext.\n    const contextArray = [ defaultContext ];\n\n    // For every object in every verification relationship listed in document,\n    // add a string value to the contextArray based on the object type value,\n    // if it doesn't already exist, according to the following table:\n    // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL}\n    const verificationMethodTypes = getVerificationMethodTypes({ didDocument });\n    verificationMethodTypes.forEach((typeName: string) => {\n      const typeUrl = DidKeyVerificationMethodType[typeName as keyof typeof DidKeyVerificationMethodType];\n      contextArray.push(typeUrl);\n    });\n    didDocument['@context'] = contextArray;\n\n    /**\n     * 10. Return document.\n     */\n    return didDocument;\n  }\n\n  /**\n   * Decoding a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying that encrypted information will be\n   * received by the intended recipient.\n   */\n  private static async createEncryptionMethod({ didUri, multibaseValue, options }: {\n    didUri: string;\n    multibaseValue: string;\n    options: Required<Pick<DidKeyCreateOptions<CryptoApi>, 'enableExperimentalPublicKeyTypes' | 'publicKeyFormat'>>;\n  }): Promise<DidVerificationMethod> {\n    const { enableExperimentalPublicKeyTypes, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: DidVerificationMethod = { id: '', type: '', controller: '' };\n\n    /**\n     * 2. Set multicodecValue and raw publicKeyBytes to the result of passing multibaseValue and\n     * options to a Derive Encryption Key algorithm.\n     */\n    const {\n      keyBytes: publicKeyBytes,\n      multicodecCode: multicodecValue,\n    } = await DidKey.deriveEncryptionKey({ multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of raw publicKeyBytes based on the multicodecValue table\n     * provided below:\n     *\n     * Multicodec hexadecimal value: 0xec\n     *\n     * If the byte length of raw publicKeyBytes does not match the expected public key length for\n     * the associated multicodecValue, an invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = publicKeyBytes.byteLength;\n    const expectedLength = DidKeyUtils.MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Expected ${actualLength} bytes. Actual: ${expectedLength}`);\n    }\n\n    /**\n     * 4. Create the multibaseValue by concatenating the letter 'z' and the\n     * base58-btc encoding of the concatenation of the multicodecValue and\n     * the raw publicKeyBytes.\n     */\n    const kemMultibaseValue = keyBytesToMultibaseId({\n      keyBytes       : publicKeyBytes,\n      multicodecCode : multicodecValue\n    });\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${didUri}#${kemMultibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(publicKeyFormat in DidKeyVerificationMethodType)) {\n      throw new DidError(DidErrorCode.UnsupportedPublicKeyType, `Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and publicKeyFormat is not\n     * Multikey, JsonWebKey2020, or X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     */\n    verificationMethod.controller = didUri;\n\n    /**\n     * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020, set the verificationMethod.publicKeyMultibase\n     * value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'X25519KeyAgreementKey2020') {\n      verificationMethod.publicKeyMultibase = kemMultibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the verificationMethod.publicKeyJwk value to\n     * the result of passing multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue });\n      verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes });\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod;\n  }\n\n  /**\n   * Decodes a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying digital signatures.\n   * @param options - Signature method creation algorithm inputs.\n   * @returns - A verification method.\n   */\n  private static async createSignatureMethod({ didUri, multibaseValue, options }: {\n    didUri: string;\n    multibaseValue: string;\n    options: Required<Pick<DidKeyCreateOptions<CryptoApi>, 'enableExperimentalPublicKeyTypes' | 'publicKeyFormat'>>\n  }): Promise<DidVerificationMethod> {\n    const { enableExperimentalPublicKeyTypes, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: DidVerificationMethod = { id: '', type: '', controller: '' };\n\n    /**\n     * 2. Set multicodecValue and publicKeyBytes to the result of passing\n     * multibaseValue and options to a Decode Public Key algorithm.\n     */\n    const {\n      keyBytes: publicKeyBytes,\n      multicodecCode: multicodecValue,\n      multicodecName\n    } = multibaseIdToKeyBytes({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of publicKeyBytes based on the multicodecValue\n     * {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | table provided}.\n     * If the byte length of rawPublicKeyBytes does not match the expected public key length for the\n     * associated multicodecValue, an invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = publicKeyBytes.byteLength;\n    const expectedLength = DidKeyUtils.MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Expected ${actualLength} bytes. Actual: ${expectedLength}`);\n    }\n\n    /**\n     * 4. Ensure the publicKeyBytes are a proper encoding of the public key type as specified by\n     * the multicodecValue. If an invalid public key value is detected, an invalidPublicKey error\n     * MUST be raised.\n     */\n    let isValid = false;\n    switch (multicodecName) {\n      case 'secp256k1-pub':\n        isValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n        break;\n      case 'ed25519-pub':\n        isValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n        break;\n      case 'x25519-pub':\n        // TODO: Validate key once/if X25519.validatePublicKey() is implemented.\n        // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes})\n        isValid = true;\n        break;\n    }\n    if (!isValid) {\n      throw new DidError(DidErrorCode.InvalidPublicKey, 'Invalid public key detected.');\n    }\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier, a hash character (#), and\n     * the multibaseValue. If verificationMethod.id is not a valid DID URL, an invalidDidUrl error\n     * MUST be raised.\n     */\n    verificationMethod.id = `${didUri}#${multibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an unsupportedPublicKeyType error\n     * MUST be raised.\n     */\n    if (!(publicKeyFormat in DidKeyVerificationMethodType)) {\n      throw new DidError(DidErrorCode.UnsupportedPublicKeyType, `Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and publicKeyFormat is not\n     * Multikey, JsonWebKey2020, or Ed25519VerificationKey2020, an invalidPublicKeyType error MUST\n     * be raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     */\n    verificationMethod.controller = didUri;\n\n    /**\n     * 11. If publicKeyFormat is Multikey or Ed25519VerificationKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'Ed25519VerificationKey2020') {\n      verificationMethod.publicKeyMultibase = multibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the verificationMethod.publicKeyJwk value to\n     * the result of passing multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue });\n      verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes});\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod;\n  }\n\n\n  /**\n   * Transform a multibase-encoded multicodec value to public encryption key\n   * components that are suitable for encrypting messages to a receiver. A\n   * mathematical proof elaborating on the safety of performing this operation\n   * is available in:\n   * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM}\n   */\n  private static async deriveEncryptionKey({ multibaseValue }: {\n    multibaseValue: string\n  }): Promise<RequireOnly<KeyWithMulticodec, 'keyBytes' | 'multicodecCode'>> {\n    /**\n     * 1. Set publicEncryptionKey to an empty object.\n     */\n    let publicEncryptionKey: RequireOnly<KeyWithMulticodec, 'keyBytes' | 'multicodecCode'> = {\n      keyBytes       : new Uint8Array(),\n      multicodecCode : 0\n    };\n\n    /**\n     * 2. Decode multibaseValue using the base58-btc multibase alphabet and\n     * set multicodecValue to the multicodec header for the decoded value.\n     * Implementers are cautioned to ensure that the multicodecValue is set\n     * to the result after performing varint decoding.\n     *\n     * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec\n     * header.\n     */\n    const {\n      keyBytes: publicKeyBytes,\n      multicodecCode: multicodecValue\n    } = multibaseIdToKeyBytes({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 4. If the multicodecValue is 0xed (Ed25519 public key), derive a public X25519 encryption key\n     * by using the raw publicKeyBytes and the algorithm defined in\n     * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP}\n     * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and set\n     * generatedPublicEncryptionKeyBytes to the result.\n     */\n    if (multicodecValue === 0xed) {\n      const ed25519PublicKey = await DidKeyUtils.keyConverter('Ed25519').bytesToPublicKey({\n        publicKeyBytes\n      });\n      const generatedPublicEncryptionKey = await Ed25519.convertPublicKeyToX25519({\n        publicKey: ed25519PublicKey\n      });\n      const generatedPublicEncryptionKeyBytes = await DidKeyUtils.keyConverter('Ed25519').publicKeyToBytes({\n        publicKey: generatedPublicEncryptionKey\n      });\n\n      /**\n       * 5. Set multicodecValue to 0xec.\n       * 6. Set raw public keyBytes to generatedPublicEncryptionKeyBytes.\n       */\n      publicEncryptionKey = {\n        keyBytes       : generatedPublicEncryptionKeyBytes,\n        multicodecCode : 0xec\n      };\n    }\n\n    /**\n     * 7. Return publicEncryptionKey.\n     */\n    return publicEncryptionKey;\n  }\n\n  /**\n   * Validates the structure and components of a DID URI against the `did:key` method specification.\n   *\n   * @param parsedDid - An object representing the parsed components of a DID URI, including the\n   *                    scheme, method, and method-specific identifier.\n   * @returns `true` if the DID URI meets the `did:key` method's structural requirements, `false` otherwise.\n   *\n   */\n  private static validateIdentifier(parsedDid: Did): boolean {\n    const { method, id: multibaseValue } = parsedDid;\n    const [ scheme ] = parsedDid.uri.split(':', 1);\n\n    /**\n     * Note: The W3C DID specification makes no mention of a version value being part of the DID\n     *       syntax.  Additionally, there does not appear to be any real-world usage of the version\n     *       number. Consequently, this implementation will ignore the version related guidance in\n     *       the did:key specification.\n     */\n    const version = '1';\n\n    return (\n      scheme === 'did' &&\n      method === 'key' &&\n      Number(version) > 0 &&\n      universalTypeOf(multibaseValue) === 'String' &&\n      multibaseValue.startsWith('z')\n    );\n  }\n}\n\n/**\n * The `DidKeyUtils` class provides utility functions to support operations in the DID Key method.\n */\nexport class DidKeyUtils {\n  /**\n   * A mapping from JSON Web Key (JWK) property descriptors to multicodec names.\n   *\n   * This mapping is used to convert keys in JWK (JSON Web Key) format to multicodec format.\n   *\n   * @remarks\n   * The keys of this object are strings that describe the JOSE key type and usage,\n   * such as 'Ed25519:public', 'Ed25519:private', etc. The values are the corresponding multicodec\n   * names used to represent these key types.\n   *\n   * @example\n   * ```ts\n   * const multicodecName = JWK_TO_MULTICODEC['Ed25519:public'];\n   * // Returns 'ed25519-pub', the multicodec name for an Ed25519 public key\n   * ```\n   */\n  private static JWK_TO_MULTICODEC: { [key: string]: string } = {\n    'Ed25519:public'    : 'ed25519-pub',\n    'Ed25519:private'   : 'ed25519-priv',\n    'secp256k1:public'  : 'secp256k1-pub',\n    'secp256k1:private' : 'secp256k1-priv',\n    'X25519:public'     : 'x25519-pub',\n    'X25519:private'    : 'x25519-priv',\n  };\n\n  /**\n   * Defines the expected byte lengths for public keys associated with different cryptographic\n   * algorithms, indexed by their multicodec code values.\n   */\n  public static MULTICODEC_PUBLIC_KEY_LENGTH: Record<number, number> = {\n    // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes\n    0xe7: 33,\n\n    // x25519-pub - Curve25519 public key - 32 bytes\n    0xec: 32,\n\n    // ed25519-pub - Ed25519 public key - 32 bytes\n    0xed: 32\n  };\n\n  /**\n   * A mapping from multicodec names to their corresponding JOSE (JSON Object Signing and Encryption)\n   * representations. This mapping facilitates the conversion of multicodec key formats to\n   * JWK (JSON Web Key) formats.\n   *\n   * @remarks\n   * The keys of this object are multicodec names, such as 'ed25519-pub', 'ed25519-priv', etc.\n   * The values are objects representing the corresponding JWK properties for that key type.\n   *\n   * @example\n   * ```ts\n   * const joseKey = MULTICODEC_TO_JWK['ed25519-pub'];\n   * // Returns a partial JWK for an Ed25519 public key\n   * ```\n   */\n  private static MULTICODEC_TO_JWK: { [key: string]: Jwk } = {\n    'ed25519-pub'    : { crv: 'Ed25519',   kty: 'OKP', x: '' },\n    'ed25519-priv'   : { crv: 'Ed25519',   kty: 'OKP', x: '',        d: '' },\n    'secp256k1-pub'  : { crv: 'secp256k1', kty: 'EC',  x: '', y: ''},\n    'secp256k1-priv' : { crv: 'secp256k1', kty: 'EC',  x: '', y: '', d: '' },\n    'x25519-pub'     : { crv: 'X25519',    kty: 'OKP', x: '' },\n    'x25519-priv'    : { crv: 'X25519',    kty: 'OKP', x: '',        d: '' },\n  };\n\n  /**\n   * Converts a JWK (JSON Web Key) to a Multicodec code and name.\n   *\n   * @example\n   * ```ts\n   * const jwk: Jwk = { crv: 'Ed25519', kty: 'OKP', x: '...' };\n   * const { code, name } = await DidKeyUtils.jwkToMulticodec({ jwk });\n   * ```\n   *\n   * @param params - The parameters for the conversion.\n   * @param params.jwk - The JSON Web Key to be converted.\n   * @returns A promise that resolves to a Multicodec definition.\n   */\n  public static async jwkToMulticodec({ jwk }: {\n    jwk: Jwk\n  }): Promise<MulticodecDefinition<MulticodecCode>> {\n    const params: string[] = [];\n\n    if (jwk.crv) {\n      params.push(jwk.crv);\n      if (jwk.d) {\n        params.push('private');\n      } else {\n        params.push('public');\n      }\n    }\n\n    const lookupKey = params.join(':');\n    const name = DidKeyUtils.JWK_TO_MULTICODEC[lookupKey];\n\n    if (name === undefined) {\n      throw new Error(`Unsupported JWK to Multicodec conversion: '${lookupKey}'`);\n    }\n\n    const code = Multicodec.getCodeFromName({ name });\n\n    return { code, name };\n  }\n\n  /**\n   * Returns the appropriate public key compressor for the specified cryptographic curve.\n   *\n   * @param curve - The cryptographic curve to use for the key conversion.\n   * @returns A public key compressor for the specified curve.\n   */\n  public static keyCompressor(\n    curve: string\n  ): KeyCompressor['compressPublicKey'] {\n  // ): ({ publicKeyBytes }: { publicKeyBytes: Uint8Array }) => Promise<Uint8Array> {\n    const compressors = {\n      'P-256'     : Secp256r1.compressPublicKey,\n      'secp256k1' : Secp256k1.compressPublicKey\n    } as Record<string, KeyCompressor['compressPublicKey']>;\n\n    const compressor = compressors[curve];\n\n    if (!compressor) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);\n\n    return compressor;\n  }\n\n  /**\n   * Returns the appropriate key converter for the specified cryptographic curve.\n   *\n   * @param curve - The cryptographic curve to use for the key conversion.\n   * @returns An `AsymmetricKeyConverter` for the specified curve.\n   */\n  public static keyConverter(curve: string): AsymmetricKeyConverter {\n    const converters: Record<string, AsymmetricKeyConverter> = {\n      'Ed25519'   : Ed25519,\n      'P-256'     : Secp256r1,\n      'secp256k1' : Secp256k1,\n      'X25519'    : X25519\n    };\n\n    const converter = converters[curve];\n\n    if (!converter) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);\n\n    return converter;\n  }\n\n  /**\n   * Converts a Multicodec code or name to parial JWK (JSON Web Key).\n   *\n   * @example\n   * ```ts\n   * const partialJwk = await DidKeyUtils.multicodecToJwk({ name: 'ed25519-pub' });\n   * ```\n   *\n   * @param params - The parameters for the conversion.\n   * @param params.code - Optional Multicodec code to convert.\n   * @param params.name - Optional Multicodec name to convert.\n   * @returns A promise that resolves to a JOSE format key.\n   */\n  public static async multicodecToJwk({ code, name }: {\n    code?: MulticodecCode,\n    name?: string\n  }): Promise<Jwk> {\n    // Either code or name must be specified, but not both.\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If name is undefined, lookup by code.\n    name = (name === undefined ) ? Multicodec.getNameFromCode({ code: code! }) : name;\n\n    const lookupKey = name;\n    const jose = DidKeyUtils.MULTICODEC_TO_JWK[lookupKey];\n\n    if (jose === undefined) {\n      throw new Error(`Unsupported Multicodec to JWK conversion`);\n    }\n\n    return { ...jose };\n  }\n\n  /**\n   * Converts a public key in JWK (JSON Web Key) format to a multibase identifier.\n   *\n   * @remarks\n   * Note: All secp public keys are converted to compressed point encoding\n   *       before the multibase identifier is computed.\n   *\n   * Per {@link https://github.com/multiformats/multicodec/blob/master/table.csv | Multicodec table}:\n   *    Public keys for Elliptic Curve cryptography algorithms (e.g., secp256k1,\n   *    secp256k1r1, secp384r1, etc.) are always represented with compressed point\n   *    encoding (e.g., secp256k1-pub, p256-pub, p384-pub, etc.).\n   *\n   * Per {@link https://datatracker.ietf.org/doc/html/rfc8812#name-jose-and-cose-secp256k1-cur | RFC 8812}:\n   *    \"As a compressed point encoding representation is not defined for JWK\n   *    elliptic curve points, the uncompressed point encoding defined there\n   *    MUST be used. The x and y values represented MUST both be exactly\n   *    256 bits, with any leading zeros preserved.\"\n   *\n   * @example\n   * ```ts\n   * const publicKey = { crv: 'Ed25519', kty: 'OKP', x: '...' };\n   * const multibaseId = await DidKeyUtils.publicKeyToMultibaseId({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the conversion.\n   * @param params.publicKey - The public key in JWK format.\n   * @returns A promise that resolves to the multibase identifier.\n   */\n  public static async publicKeyToMultibaseId({ publicKey }: {\n    publicKey: Jwk\n  }): Promise<string> {\n    if (!(publicKey?.crv && publicKey.crv in AlgorithmToKeyTypeMap)) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyType, `Public key contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`);\n    }\n\n    // Convert the public key from JWK format to a byte array.\n    let publicKeyBytes = await DidKeyUtils.keyConverter(publicKey.crv).publicKeyToBytes({ publicKey });\n\n    // Compress the public key if it is an elliptic curve key.\n    if (/^(secp256k1|P-256|P-384|P-521)$/.test(publicKey.crv)) {\n      publicKeyBytes = await DidKeyUtils.keyCompressor(publicKey.crv)({ publicKeyBytes });\n    }\n\n    // Convert the JSON Web Key (JWK) parameters to a Multicodec name.\n    const { name: multicodecName } = await DidKeyUtils.jwkToMulticodec({ jwk: publicKey });\n\n    // Compute the multibase identifier based on the provided key.\n    const multibaseId = keyBytesToMultibaseId({\n      keyBytes: publicKeyBytes,\n      multicodecName\n    });\n\n    return multibaseId;\n  }\n}", "import type { DidDocument, DidResolutionOptions, DidResolutionResult } from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * The `DidWeb` class provides an implementation of the `did:web` DID method.\n *\n * Features:\n * - DID Resolution: Resolve a `did:web` to its corresponding DID Document.\n *\n * @remarks\n * The `did:web` method uses a web domain's existing reputation and aims to integrate decentralized\n * identities with the existing web infrastructure to drive adoption. It leverages familiar web\n * security models and domain ownership to provide accessible, interoperable digital identity\n * management.\n *\n * @see {@link https://w3c-ccg.github.io/did-method-web/ | DID Web Specification}\n *\n * @example\n * ```ts\n * // DID Resolution\n * const resolutionResult = await DidWeb.resolve({ did: did.uri });\n * ```\n */\nexport class DidWeb extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID Web specification.\n   */\n  public static methodName = 'web';\n\n  /**\n   * Resolves a `did:web` identifier to a DID Document.\n   *\n   * @param didUri - The DID to be resolved.\n   * @param _options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    // Attempt to parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // If parsing failed, the DID is invalid.\n    if (!parsedDid) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'invalidDid' }\n      };\n    }\n\n    // If the DID method is not \"web\", return an error.\n    if (parsedDid.method !== DidWeb.methodName) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'methodNotSupported' }\n      };\n    }\n\n    // Replace \":\" with \"/\" in the identifier and prepend \"https://\" to obtain the fully qualified\n    // domain name and optional path.\n    let baseUrl = `https://${parsedDid.id.replace(/:/g, '/')}`;\n\n    // If the domain contains a percent encoded port value, decode the colon.\n    baseUrl = decodeURIComponent(baseUrl);\n\n    // Append the expected location of the DID document depending on whether a path was specified.\n    const didDocumentUrl = parsedDid.id.includes(':') ?\n      `${baseUrl}/did.json` :\n      `${baseUrl}/.well-known/did.json`;\n\n    try {\n      // Perform an HTTP GET request to obtain the DID document.\n      const response = await fetch(didDocumentUrl);\n\n      // If the response status code is not 200, return an error.\n      if (!response.ok) throw new Error('HTTP error status code returned');\n\n      // Parse the DID document.\n      const didDocument = await response.json() as DidDocument;\n\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didDocument,\n      };\n\n    } catch (error: any) {\n      // If the DID document could not be retrieved, return an error.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'notFound' }\n      };\n    }\n  }\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport ms from 'ms';\nimport { Level } from 'level';\n\nimport type { DidResolutionResult } from '../types/did-core.js';\nimport type { DidResolverCache } from '../types/did-resolution.js';\n\n/**\n * Configuration parameters for creating a LevelDB-based cache for DID resolution results.\n *\n * Allows customization of the underlying database instance, storage location, and cache\n * time-to-live (TTL) settings.\n */\nexport type DidResolverCacheLevelParams = {\n  /**\n   * Optional. An instance of `AbstractLevel` to use as the database. If not provided, a new\n   * LevelDB instance will be created at the specified `location`.\n   */\n  db?: AbstractLevel<string | Buffer | Uint8Array, string, string>;\n\n  /**\n   * Optional. The file system path or IndexedDB name where the LevelDB store will be created.\n   * Defaults to 'DATA/DID_RESOLVERCACHE' if not specified.\n   */\n  location?: string;\n\n  /**\n   * Optional. The time-to-live for cache entries, expressed as a string (e.g., '1h', '15m').\n   * Determines how long a cache entry should remain valid before being considered expired. Defaults\n   * to '15m' if not specified.\n   */\n  ttl?: string;\n}\n\n/**\n * Encapsulates a DID resolution result along with its expiration information for caching purposes.\n *\n * This type is used internally by the `DidResolverCacheLevel` to store DID resolution results\n * with an associated time-to-live (TTL) value. The TTL is represented in milliseconds and\n * determines when the cached entry is considered expired and eligible for removal.\n */\ntype CachedDidResolutionResult = {\n  /**\n   * The expiration time of the cache entry in milliseconds since the Unix epoch.\n   *\n   * This value is used to calculate whether the cached entry is still valid or has expired.\n   */\n  ttlMillis: number;\n\n  /**\n   * The DID resolution result being cached.\n   *\n   * This object contains the resolved DID document and associated metadata.\n   */\n  value: DidResolutionResult;\n}\n\n/**\n * A Level-based cache implementation for storing and retrieving DID resolution results.\n *\n * This cache uses LevelDB for storage, allowing data persistence across process restarts or\n * browser refreshes. It's suitable for both Node.js and browser environments.\n *\n * @remarks\n * The LevelDB cache keeps data in memory for fast access and also writes to the filesystem in\n * Node.js or indexedDB in browsers. Time-to-live (TTL) for cache entries is configurable.\n *\n * @example\n * ```\n * const cache = new DidResolverCacheLevel({ ttl: '15m' });\n * ```\n */\nexport class DidResolverCacheLevel implements DidResolverCache {\n  /** The underlying LevelDB store used for caching. */\n  private cache;\n\n  /** The time-to-live for cache entries in milliseconds. */\n  private ttl: number;\n\n  constructor({\n    db,\n    location = 'DATA/DID_RESOLVERCACHE',\n    ttl = '15m'\n  }: DidResolverCacheLevelParams = {}) {\n    this.cache = db ?? new Level<string, string>(location);\n    this.ttl = ms(ttl);\n  }\n\n  /**\n   * Retrieves a DID resolution result from the cache.\n   *\n   * If the cached item has exceeded its TTL, it's scheduled for deletion and undefined is returned.\n   *\n   * @param did - The DID string used as the key for retrieving the cached result.\n   * @returns The cached DID resolution result or undefined if not found or expired.\n   */\n  async get(did: string): Promise<DidResolutionResult | void> {\n    try {\n      const str = await this.cache.get(did);\n      const cachedDidResolutionResult: CachedDidResolutionResult = JSON.parse(str);\n\n      if (Date.now() >= cachedDidResolutionResult.ttlMillis) {\n        // defer deletion to be called in the next tick of the js event loop\n        this.cache.nextTick(() => this.cache.del(did));\n\n        return;\n      } else {\n        return cachedDidResolutionResult.value;\n      }\n\n    } catch(error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) {\n        return;\n      }\n\n      throw error;\n    }\n  }\n\n  /**\n   * Stores a DID resolution result in the cache with a TTL.\n   *\n   * @param did - The DID string used as the key for storing the result.\n   * @param value - The DID resolution result to be cached.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  set(did: string, value: DidResolutionResult): Promise<void> {\n    const cachedDidResolutionResult: CachedDidResolutionResult = { ttlMillis: Date.now() + this.ttl, value };\n    const str = JSON.stringify(cachedDidResolutionResult);\n\n    return this.cache.put(did, str);\n  }\n\n  /**\n   * Deletes a DID resolution result from the cache.\n   *\n   * @param did - The DID string used as the key for deletion.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  delete(did: string): Promise<void> {\n    return this.cache.del(did);\n  }\n\n  /**\n   * Clears all entries from the cache.\n   *\n   * @returns A promise that resolves when the operation is complete.\n   */\n  clear(): Promise<void> {\n    return this.cache.clear();\n  }\n\n  /**\n   * Closes the underlying LevelDB store.\n   *\n   * @returns A promise that resolves when the store is closed.\n   */\n  close(): Promise<void> {\n    return this.cache.close();\n  }\n}", "import type { DidResolutionResult } from '../types/did-core.js';\nimport type { DidResolverCache } from '../types/did-resolution.js';\n\n/**\n * No-op cache that is used as the default cache for did-resolver.\n *\n * The motivation behind using a no-op cache as the default stems from the desire to maximize the\n * potential for this library to be used in as many JS runtimes as possible.\n */\nexport const DidResolverCacheNoop: DidResolverCache = {\n  get: function (_key: string): Promise<DidResolutionResult> {\n    return null as any;\n  },\n  set: function (_key: string, _value: DidResolutionResult): Promise<void> {\n    return null as any;\n  },\n  delete: function (_key: string): Promise<void> {\n    return null as any;\n  },\n  clear: function (): Promise<void> {\n    return null as any;\n  },\n  close: function (): Promise<void> {\n    return null as any;\n  }\n};", "import type { DidMethodResolver } from '../methods/did-method.js';\nimport type { DidResolver, DidResolverCache, DidUrlDereferencer } from '../types/did-resolution.js';\nimport type { DidDereferencingOptions, DidDereferencingResult, DidResolutionOptions, DidResolutionResult, DidResource } from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidErrorCode } from '../did-error.js';\nimport { DidResolverCacheNoop } from './resolver-cache-noop.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Parameters for configuring the `UniversalResolver` class, which is responsible for resolving\n * decentralized identifiers (DIDs) to their corresponding DID documents.\n *\n * This type specifies the essential components required by the `UniversalResolver` to perform\n * DID resolution and dereferencing. It includes an array of `DidMethodResolver` instances,\n * each capable of resolving DIDs for a specific method, and optionally, a cache for storing\n * resolved DID documents to improve resolution efficiency.\n */\nexport type UniversalResolverParams = {\n  /**\n   * An array of `DidMethodResolver` instances.\n   *\n   * Each resolver in this array is designed to handle a specific DID method, enabling the\n   * `DidResolver` to support multiple DID methods simultaneously.\n   */\n  didResolvers: DidMethodResolver[];\n\n  /**\n   * An optional `DidResolverCache` instance used for caching resolved DID documents.\n   *\n   * Providing a cache implementation can significantly enhance resolution performance by avoiding\n   * redundant resolutions for previously resolved DIDs. If omitted, a no-operation cache is used,\n   * which effectively disables caching.\n   */\n  cache?: DidResolverCache;\n}\n\n/**\n * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to\n * their corresponding DID documents.\n *\n * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver`\n * instances, each responsible for a specific DID method.\n *\n * Providing a cache implementation can significantly enhance resolution performance by avoiding\n * redundant resolutions for previously resolved DIDs. If omitted, a no-operation cache is used,\n * which effectively disables caching.\n *\n * Usage:\n * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache.\n * - Use `resolve` to resolve a DID to its DID Resolution Result.\n * - Use `dereference` to extract specific resources from a DID URL, like service endpoints or verification methods.\n *\n * @example\n * ```ts\n * const resolver = new DidResolver({\n *   didResolvers: [<array of DidMethodResolver instances>],\n *   cache: new DidResolverCacheNoop()\n * });\n *\n * const resolutionResult = await resolver.resolve('did:example:123456');\n * const dereferenceResult = await resolver.dereference({ didUri: 'did:example:123456#key-1' });\n * ```\n */\nexport class UniversalResolver implements DidResolver, DidUrlDereferencer {\n  /**\n   * A cache for storing resolved DID documents.\n   */\n  private cache: DidResolverCache;\n\n  /**\n   * A map to store method resolvers against method names.\n   */\n  private didResolvers: Map<string, DidMethodResolver> = new Map();\n\n  /**\n   * Constructs a new `DidResolver`.\n   *\n   * @param params - The parameters for constructing the `DidResolver`.\n   */\n  constructor({ cache, didResolvers }: UniversalResolverParams) {\n    this.cache = cache || DidResolverCacheNoop;\n\n    for (const resolver of didResolvers) {\n      this.didResolvers.set(resolver.methodName, resolver);\n    }\n  }\n\n  /**\n   * Resolves a DID to a DID Resolution Result.\n   *\n   * If the DID Resolution Result is present in the cache, it returns the cached result. Otherwise,\n   * it uses the appropriate method resolver to resolve the DID, stores the resolution result in the\n   * cache, and returns the resolultion result.\n   *\n   * @param didUri - The DID or DID URL to resolve.\n   * @returns A promise that resolves to the DID Resolution Result.\n   */\n  public async resolve(didUri: string, options?: DidResolutionOptions): Promise<DidResolutionResult> {\n\n    const parsedDid = Did.parse(didUri);\n    if (!parsedDid) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error        : DidErrorCode.InvalidDid,\n          errorMessage : `Invalid DID URI: ${didUri}`\n        }\n      };\n    }\n\n    const resolver = this.didResolvers.get(parsedDid.method);\n    if (!resolver) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error        : DidErrorCode.MethodNotSupported,\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const cachedResolutionResult = await this.cache.get(parsedDid.uri);\n\n    if (cachedResolutionResult) {\n      return cachedResolutionResult;\n    } else {\n      const resolutionResult = await resolver.resolve(parsedDid.uri, options);\n      if (!resolutionResult.didResolutionMetadata.error) {\n        // Cache the resolution result if it was successful.\n        await this.cache.set(parsedDid.uri, resolutionResult);\n      }\n\n      return resolutionResult;\n    }\n  }\n\n  /**\n   * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource.\n   *\n   * This method interprets the DID URL's components, which include the DID method, method-specific\n   * identifier, path, query, and fragment, and retrieves the related resource as per the DID Core\n   * specifications.\n   *\n   * The dereferencing process involves resolving the DID contained in the DID URL to a DID document,\n   * and then extracting the specific part of the document identified by the fragment in the DID URL.\n   * If no fragment is specified, the entire DID document is returned.\n   *\n   * This method supports resolution of different components within a DID document such as service\n   * endpoints and verification methods, based on their IDs. It accommodates both full and\n   * DID URLs as specified in the DID Core specification.\n   *\n   * More information on DID URL dereferencing can be found in the\n   * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}.\n   *\n   * TODO: This is a partial implementation and does not fully implement DID URL dereferencing. (https://github.com/TBD54566975/web5-js/issues/387)\n   *\n   * @param didUrl - The DID URL string to dereference.\n   * @param [_options] - Input options to the dereference function. Optional.\n   * @returns a {@link DidDereferencingResult}\n   */\n  async dereference(\n    didUrl: string,\n    _options?: DidDereferencingOptions\n  ): Promise<DidDereferencingResult> {\n\n    // Validate the given `didUrl` confirms to the DID URL syntax.\n    const parsedDidUrl = Did.parse(didUrl);\n\n    if (!parsedDidUrl) {\n      return {\n        dereferencingMetadata : { error: DidErrorCode.InvalidDidUrl },\n        contentStream         : null,\n        contentMetadata       : {}\n      };\n    }\n\n    // Obtain the DID document for the input DID by executing DID resolution.\n    const { didDocument, didResolutionMetadata, didDocumentMetadata } = await this.resolve(parsedDidUrl.uri);\n\n    if (!didDocument) {\n      return {\n        dereferencingMetadata : { error: didResolutionMetadata.error },\n        contentStream         : null,\n        contentMetadata       : {}\n      };\n    }\n\n    // Return the entire DID Document if no query or fragment is present on the DID URL.\n    if (!parsedDidUrl.fragment || parsedDidUrl.query) {\n      return {\n        dereferencingMetadata : { contentType: 'application/did+json' },\n        contentStream         : didDocument,\n        contentMetadata       : didDocumentMetadata\n      };\n    }\n\n    const { service = [], verificationMethod = [] } = didDocument;\n\n    // Create a set of possible id matches. The DID spec allows for an id to be the entire\n    // did#fragment or just #fragment.\n    // @see {@link }https://www.w3.org/TR/did-core/#relative-did-urls | Section 3.2.2, Relative DID URLs}.\n    // Using a Set for fast string comparison since some DID methods have long identifiers.\n    const idSet = new Set([didUrl, parsedDidUrl.fragment, `#${parsedDidUrl.fragment}`]);\n\n    let didResource: DidResource | undefined;\n\n    // Find the first matching verification method in the DID document.\n    for (let vm of verificationMethod) {\n      if (idSet.has(vm.id)) {\n        didResource = vm;\n        break;\n      }\n    }\n\n    // Find the first matching service in the DID document.\n    for (let svc of service) {\n      if (idSet.has(svc.id)) {\n        didResource = svc;\n        break;\n      }\n    }\n\n    if (didResource) {\n      return {\n        dereferencingMetadata : { contentType: 'application/did+json' },\n        contentStream         : didResource,\n        contentMetadata       : didResolutionMetadata\n      };\n    } else {\n      return {\n        dereferencingMetadata : { error: DidErrorCode.NotFound },\n        contentStream         : null,\n        contentMetadata       : {},\n      };\n    }\n  }\n}", "\nimport type { DataStore } from './types/data-store.js';\nimport type { DidResolver } from '@web5/dids';\nimport type { EventLog } from './types/event-log.js';\nimport type { EventStream } from './types/subscriptions.js';\nimport type { MessageStore } from './types/message-store.js';\nimport type { MethodHandler } from './types/method-handler.js';\nimport type { Readable } from 'readable-stream';\nimport type { ResumableTaskStore } from './types/resumable-task-store.js';\nimport type { TenantGate } from './core/tenant-gate.js';\nimport type { UnionMessageReply } from './core/message-reply.js';\nimport type { GenericMessage, GenericMessageReply } from './types/message-types.js';\nimport type { MessagesQueryMessage, MessagesQueryReply, MessagesReadMessage, MessagesReadReply, MessagesSubscribeMessage, MessagesSubscribeMessageOptions, MessagesSubscribeReply, MessageSubscriptionHandler } from './types/messages-types.js';\nimport type { ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply } from './types/protocols-types.js';\nimport type { RecordsDeleteMessage, RecordsQueryMessage, RecordsQueryReply, RecordsReadMessage, RecordsReadReply, RecordsSubscribeMessage, RecordsSubscribeMessageOptions, RecordsSubscribeReply, RecordSubscriptionHandler, RecordsWriteMessage, RecordsWriteMessageOptions } from './types/records-types.js';\n\nimport { AllowAllTenantGate } from './core/tenant-gate.js';\nimport { Message } from './core/message.js';\nimport { messageReplyFromError } from './core/message-reply.js';\nimport { MessagesQueryHandler } from './handlers/messages-query.js';\nimport { MessagesReadHandler } from './handlers/messages-read.js';\nimport { MessagesSubscribeHandler } from './handlers/messages-subscribe.js';\nimport { ProtocolsConfigureHandler } from './handlers/protocols-configure.js';\nimport { ProtocolsQueryHandler } from './handlers/protocols-query.js';\nimport { RecordsDeleteHandler } from './handlers/records-delete.js';\nimport { RecordsQueryHandler } from './handlers/records-query.js';\nimport { RecordsReadHandler } from './handlers/records-read.js';\nimport { RecordsSubscribeHandler } from './handlers/records-subscribe.js';\nimport { RecordsWriteHandler } from './handlers/records-write.js';\nimport { ResumableTaskManager } from './core/resumable-task-manager.js';\nimport { StorageController } from './store/storage-controller.js';\nimport { DidDht, DidJwk, DidKey, DidResolverCacheLevel, UniversalResolver } from '@web5/dids';\nimport { DwnInterfaceName, DwnMethodName } from './enums/dwn-interface-method.js';\n\nexport class Dwn {\n  private methodHandlers: { [key:string]: MethodHandler };\n  private didResolver: DidResolver;\n  private messageStore: MessageStore;\n  private dataStore: DataStore;\n  private resumableTaskStore: ResumableTaskStore;\n  private eventLog: EventLog;\n  private tenantGate: TenantGate;\n  private eventStream?: EventStream;\n  private storageController: StorageController;\n  private resumableTaskManager: ResumableTaskManager;\n\n  private constructor(config: DwnConfig) {\n    this.didResolver = config.didResolver!;\n    this.tenantGate = config.tenantGate!;\n    this.eventStream = config.eventStream!;\n    this.messageStore = config.messageStore;\n    this.dataStore = config.dataStore;\n    this.resumableTaskStore = config.resumableTaskStore;\n    this.eventLog = config.eventLog;\n    this.eventStream = config.eventStream;\n    this.storageController = new StorageController({\n      messageStore : this.messageStore,\n      dataStore    : this.dataStore,\n      eventLog     : this.eventLog,\n      eventStream  : this.eventStream\n    });\n    this.resumableTaskManager = new ResumableTaskManager(\n      config.resumableTaskStore,\n      this.storageController\n    );\n\n    this.methodHandlers = {\n      [DwnInterfaceName.Messages + DwnMethodName.Query]: new MessagesQueryHandler(\n        this.didResolver,\n        this.messageStore,\n        this.eventLog,\n      ),\n      [DwnInterfaceName.Messages + DwnMethodName.Read]: new MessagesReadHandler(\n        this.didResolver,\n        this.messageStore,\n        this.dataStore,\n      ),\n      [DwnInterfaceName.Messages + DwnMethodName.Subscribe]: new MessagesSubscribeHandler(\n        this.didResolver,\n        this.messageStore,\n        this.eventStream,\n      ),\n      [DwnInterfaceName.Protocols + DwnMethodName.Configure]: new ProtocolsConfigureHandler(\n        this.didResolver,\n        this.messageStore,\n        this.eventLog,\n        this.eventStream\n      ),\n      [DwnInterfaceName.Protocols + DwnMethodName.Query]: new ProtocolsQueryHandler(\n        this.didResolver,\n        this.messageStore,\n        this.dataStore\n      ),\n      [DwnInterfaceName.Records + DwnMethodName.Delete]: new RecordsDeleteHandler(\n        this.didResolver,\n        this.messageStore,\n        this.resumableTaskManager\n      ),\n      [DwnInterfaceName.Records + DwnMethodName.Query]: new RecordsQueryHandler(\n        this.didResolver,\n        this.messageStore,\n        this.dataStore\n      ),\n      [DwnInterfaceName.Records + DwnMethodName.Read]: new RecordsReadHandler(\n        this.didResolver,\n        this.messageStore,\n        this.dataStore\n      ),\n      [DwnInterfaceName.Records + DwnMethodName.Subscribe]: new RecordsSubscribeHandler(\n        this.didResolver,\n        this.messageStore,\n        this.eventStream\n      ),\n      [DwnInterfaceName.Records + DwnMethodName.Write]: new RecordsWriteHandler(\n        this.didResolver,\n        this.messageStore,\n        this.dataStore,\n        this.eventLog,\n        this.eventStream\n      )\n    };\n  }\n\n  /**\n   * Creates an instance of the DWN.\n   */\n  public static async create(config: DwnConfig): Promise<Dwn> {\n    config.didResolver ??= new UniversalResolver({\n      didResolvers : [DidDht, DidJwk, DidKey ],\n      cache        : new DidResolverCacheLevel({ location: 'RESOLVERCACHE' }),\n    });\n    config.tenantGate ??= new AllowAllTenantGate();\n\n    const dwn = new Dwn(config);\n    await dwn.open();\n    return dwn;\n  }\n\n  /**\n   * Initializes the DWN instance and opens the connection to it.\n   */\n  public async open(): Promise<void> {\n    await this.messageStore.open();\n    await this.dataStore.open();\n    await this.resumableTaskStore.open();\n    await this.eventLog.open();\n    await this.eventStream?.open();\n\n    await this.resumableTaskManager.resumeTasksAndWaitForCompletion();\n  }\n\n  public async close(): Promise<void> {\n    await this.eventStream?.close();\n    await this.messageStore.close();\n    await this.dataStore.close();\n    await this.resumableTaskStore.close();\n    await this.eventLog.close();\n  }\n\n  /**\n   * Processes the given DWN message and returns with a reply.\n   * @param tenant The tenant DID to route the given message to.\n   */\n  public async processMessage(tenant: string, rawMessage: MessagesQueryMessage): Promise<MessagesQueryReply>;\n  public async processMessage(\n    tenant: string, rawMessage: MessagesSubscribeMessage, options?: MessagesSubscribeMessageOptions): Promise<MessagesSubscribeReply>;\n  public async processMessage(tenant: string, rawMessage: MessagesReadMessage): Promise<MessagesReadReply>;\n  public async processMessage(tenant: string, rawMessage: ProtocolsConfigureMessage): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: ProtocolsQueryMessage): Promise<ProtocolsQueryReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsDeleteMessage): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsQueryMessage): Promise<RecordsQueryReply>;\n  public async processMessage(\n    tenant: string, rawMessage: RecordsSubscribeMessage, options: RecordsSubscribeMessageOptions): Promise<RecordsSubscribeReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsReadMessage): Promise<RecordsReadReply>;\n  public async processMessage(tenant: string, rawMessage: RecordsWriteMessage, options?: RecordsWriteMessageOptions): Promise<GenericMessageReply>;\n  public async processMessage(tenant: string, rawMessage: unknown, options?: MessageOptions): Promise<UnionMessageReply>;\n  public async processMessage(tenant: string, rawMessage: GenericMessage, options: MessageOptions = {}): Promise<UnionMessageReply> {\n    const errorMessageReply = await this.validateTenant(tenant) ?? await this.validateMessageIntegrity(rawMessage);\n    if (errorMessageReply !== undefined) {\n      return errorMessageReply;\n    }\n\n    const { dataStream, subscriptionHandler } = options;\n\n    const handlerKey = rawMessage.descriptor.interface + rawMessage.descriptor.method;\n    const methodHandlerReply = await this.methodHandlers[handlerKey].handle({\n      tenant,\n      message: rawMessage as GenericMessage,\n      dataStream,\n      subscriptionHandler\n    });\n\n    return methodHandlerReply;\n  }\n\n  /**\n   * Checks tenant gate to see if tenant is allowed.\n   * @param tenant The tenant DID to route the given message to.\n   * @returns GenericMessageReply if the message has an integrity error, otherwise undefined.\n   */\n  public async validateTenant(tenant: string): Promise<GenericMessageReply | undefined> {\n    const result = await this.tenantGate.isActiveTenant(tenant);\n    if (!result.isActiveTenant) {\n      const detail = result.detail ?? `DID ${tenant} is not an active tenant.`;\n      return {\n        status: { code: 401, detail }\n      };\n    }\n  }\n\n  /**\n   * Validates structure of DWN message\n   * @param tenant The tenant DID to route the given message to.\n   * @param dwnMessageInterface The interface of DWN message.\n   * @param dwnMessageMethod The interface of DWN message.\n\n   * @returns GenericMessageReply if the message has an integrity error, otherwise undefined.\n   */\n  public async validateMessageIntegrity(\n    rawMessage: any,\n  ): Promise<GenericMessageReply | undefined> {\n    // Verify interface and method\n    const dwnInterface = rawMessage?.descriptor?.interface;\n    const dwnMethod = rawMessage?.descriptor?.method;\n\n    if (dwnInterface === undefined || dwnMethod === undefined) {\n      return {\n        status: { code: 400, detail: `Both interface and method must be present, interface: ${dwnInterface}, method: ${dwnMethod}` }\n      };\n    }\n\n    // validate message structure\n    try {\n      // consider to push this down to individual handlers\n      Message.validateJsonSchema(rawMessage);\n    } catch (error) {\n      return messageReplyFromError(error, 400);\n    }\n  }\n};\n\n/**\n *  MessageOptions that are used when processing a message.\n */\nexport interface MessageOptions {\n  dataStream?: Readable;\n  subscriptionHandler?: MessageSubscriptionHandler | RecordSubscriptionHandler;\n};\n\n/**\n * DWN configuration.\n */\nexport type DwnConfig = {\n  didResolver?: DidResolver;\n  tenantGate?: TenantGate;\n\n  // event stream is optional if a DWN does not wish to provide subscription services.\n  eventStream?: EventStream;\n\n  messageStore: MessageStore;\n  dataStore: DataStore;\n  eventLog: EventLog;\n  resumableTaskStore: ResumableTaskStore;\n};\n", "/**\n * Wraps the given `AbortSignal` in a `Promise` that rejects if it is programmatically triggered,\n * otherwise the promise will remain in await state (will never resolve).\n */\nfunction promisifySignal<T>(signal: AbortSignal): Promise<T> {\n  return new Promise((resolve, reject) => {\n    // immediately reject if the given is signal is already aborted\n    if (signal.aborted) {\n      reject(signal.reason);\n      return;\n    }\n\n    signal.addEventListener('abort', () => {\n      reject(signal.reason);\n    });\n  });\n}\n\n/**\n * Wraps the given `Promise` such that it will reject if the `AbortSignal` is triggered.\n */\nexport async function executeUnlessAborted<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T> {\n  if (!signal) {\n    return promise;\n  }\n\n  return Promise.race([\n    promise,\n    promisifySignal<T>(signal),\n  ]);\n}\n", "import type { AbstractBatchOperation, AbstractDatabaseOptions, AbstractIteratorOptions, AbstractLevel } from 'abstract-level';\n\nimport { executeUnlessAborted } from '../utils/abort.js';\nimport { Level } from 'level';\n\nexport type CreateLevelDatabaseOptions<V> = AbstractDatabaseOptions<string, V>;\n\nexport type LevelDatabase<V> = AbstractLevel<string | Buffer | Uint8Array, string, V>;\n\nexport async function createLevelDatabase<V>(location: string, options?: CreateLevelDatabaseOptions<V>): Promise<LevelDatabase<V>> {\n  // Only import `'level'` when it's actually necessary (i.e. only when the default `createLevelDatabase` is used).\n  // Overriding `createLevelDatabase` will prevent this from happening.\n  return new Level(location, { ...options, keyEncoding: 'utf8' });\n}\n\nexport interface LevelWrapperOptions {\n  signal?: AbortSignal;\n}\n\nexport type LevelWrapperBatchOperation<V> = AbstractBatchOperation<LevelDatabase<V>, string, V>;\n\nexport type LevelWrapperIteratorOptions<V> = AbstractIteratorOptions<string, V>;\n\n// `Level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and FreeBSD, including any\n// future Node.js and Electron release thanks to Node-API, including ARM platforms like Raspberry Pi\n// and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari and Chrome for Android.\nexport class LevelWrapper<V> {\n  config: LevelWrapperConfig<V>;\n\n  db: LevelDatabase<V>;\n\n  /**\n   * @param config.location - must be a directory path (relative or absolute) where `Level`` will\n   * store its files, or in browsers, the name of the {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase `IDBDatabase`}\n   * to be opened.\n   */\n  constructor(config: LevelWrapperConfig<V>, db?: LevelDatabase<V>) {\n    this.config = {\n      createLevelDatabase,\n      ...config\n    };\n\n    this.db = db!;\n  }\n\n  async open(): Promise<void> {\n    await this.createLevelDatabase();\n\n    // `db.open()` is automatically called by the database constructor. We may need to call it explicitly\n    // in order to explicitly catch an error that would otherwise not surface until another method\n    // like `db.get()` is called.  Once `db.open()` has then been called, any read & write\n    // operations will again be queued internally until opening has finished.\n\n    switch (this.db.status) {\n    // If db is open, we are done.\n    case 'open':\n      return;\n\n    // If db is still opening, wait until the 'open' event is emitted\n    case 'opening':\n      return new Promise((resolve) => {\n        this.db.once('open', resolve);\n      });\n\n    // If db is closing, wait until it is closed then await `db.open()`\n    case 'closing':\n      return new Promise((resolve, reject) => {\n        const onClosed = (): void => {\n          // Make sure that errors from `db.open()` propogate up\n          this.db.open().then(resolve).catch(reject);;\n        };\n        this.db.once('closed', onClosed);\n      });\n\n    // If db is closed, `db.open`\n    case 'closed':\n      return this.db.open();\n    }\n  }\n\n  async close(): Promise<void> {\n    if (!this.db) {\n      return;\n    }\n\n    switch (this.db.status) {\n    // If db is open, we `db.close`.\n    case 'open':\n      return this.db.close();\n\n    // If db is still opening, wait until it is open then await `db.close()`\n    case 'opening':\n      return new Promise((resolve, reject) => {\n        const onOpen = (): void => {\n          // Make sure that errors from `db.open()` propogate up\n          this.db.close().then(resolve).catch(reject);;\n        };\n        this.db.once('open', onOpen);\n      });\n\n    // If db is closing, wait until the 'closed' event is emitted\n    case 'closing':\n      return new Promise((resolve) => {\n        this.db.once('closed', resolve);\n      });\n\n    // If db is closed, we are done\n    case 'closed':\n      return;\n    }\n  }\n\n  async partition(name: string): Promise<LevelWrapper<V>> {\n    await this.createLevelDatabase();\n\n    return new LevelWrapper(this.config, this.db.sublevel(name, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    }));\n  }\n\n  async get(key: string, options?: LevelWrapperOptions): Promise<V|undefined>{\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    try {\n      const value = await executeUnlessAborted(this.db.get(String(key)), options?.signal);\n      return value;\n    } catch (error) {\n      const e = error as { code: string };\n      // `Level`` throws an error if the key is not present.  Return `undefined` in this case.\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return undefined;\n      } else {\n        throw error;\n      }\n    }\n  }\n\n  async has(key: string, options?: LevelWrapperOptions): Promise<boolean> {\n    return !! await this.get(key, options);\n  }\n\n  async * keys(options?: LevelWrapperOptions): AsyncGenerator<string> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    for await (const key of this.db.keys()) {\n      options?.signal?.throwIfAborted();\n\n      yield key;\n    }\n  }\n\n  async * iterator(iteratorOptions?: LevelWrapperIteratorOptions<V>, options?: LevelWrapperOptions): AsyncGenerator<[string, V]> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    for await (const entry of this.db.iterator(iteratorOptions!)) {\n      options?.signal?.throwIfAborted();\n\n      yield entry;\n    }\n  }\n\n  async put(key: string, value: V, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.put(String(key), value), options?.signal);\n  }\n\n  async delete(key: string, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.del(String(key)), options?.signal);\n  }\n\n  async isEmpty(options?: LevelWrapperOptions): Promise<boolean> {\n    for await (const _key of this.keys(options)) {\n      return false;\n    }\n    return true;\n  }\n\n  async clear(): Promise<void> {\n    await this.createLevelDatabase();\n\n    await this.db.clear();\n\n    await this.compactUnderlyingStorage();\n  }\n\n  async batch(operations: Array<LevelWrapperBatchOperation<V>>, options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    return executeUnlessAborted(this.db.batch(operations), options?.signal);\n  }\n\n  /**\n   * Wraps the given LevelWrapperBatchOperation as an operation for the specified partition.\n   */\n  createPartitionOperation(partitionName: string, operation: LevelWrapperBatchOperation<V>): LevelWrapperBatchOperation<V> {\n    return { ...operation, sublevel: this.db.sublevel(partitionName, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    }) };\n  }\n\n  private async compactUnderlyingStorage(options?: LevelWrapperOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    await executeUnlessAborted(this.createLevelDatabase(), options?.signal);\n\n    const range = this.sublevelRange;\n    if (!range) {\n      return;\n    }\n\n    // additional methods are only available on the root API instance\n    const root = this.root;\n\n    if (root.db.supports.additionalMethods.compactRange) {\n      return executeUnlessAborted((root.db as any).compactRange?.(...range), options?.signal);\n    }\n  }\n\n  /**\n   * Gets the min and max key value of this partition.\n   */\n  private get sublevelRange(): [ string, string ] | undefined {\n    const prefix = (this.db as any).prefix as string;\n    if (!prefix) {\n      return undefined;\n    }\n\n    // derive an exclusive `maxKey` by changing the last prefix character to the immediate succeeding character in unicode\n    // (which matches how `abstract-level` creates a `boundary`)\n    const maxKey = prefix.slice(0, -1) + String.fromCharCode(prefix.charCodeAt(prefix.length - 1) + 1);\n    const minKey = prefix;\n\n    return [minKey, maxKey];\n  }\n\n  private get root(): LevelWrapper<V> {\n    let db = this.db;\n    for (const parent = (db as any).db; parent && parent !== db; ) {\n      db = parent;\n    }\n    return new LevelWrapper(this.config, db);\n  }\n\n  private async createLevelDatabase(): Promise<void> {\n    this.db ??= await this.config.createLevelDatabase!<V>(this.config.location, {\n      keyEncoding   : 'utf8',\n      valueEncoding : this.config.valueEncoding\n    });\n  }\n}\n\ntype LevelWrapperConfig<V> = CreateLevelDatabaseOptions<V> & {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import { CID } from 'multiformats';\nimport type { AbortOptions, AwaitIterable } from 'interface-store';\nimport type { Blockstore, Pair } from 'interface-blockstore';\n\nimport { createLevelDatabase, LevelWrapper } from './level-wrapper.js';\n\n// `level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and\n// FreeBSD, including any future Node.js and Electron release thanks to Node-API, including ARM\n// platforms like Raspberry Pi and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari\n//  and Chrome for Android.\n\n/**\n * Blockstore implementation using LevelDB for storing the actual messages (in the case of MessageStore)\n * or the data associated with messages (in the case of a DataStore).\n */\nexport class BlockstoreLevel implements Blockstore {\n  config: BlockstoreLevelConfig;\n\n  db: LevelWrapper<Uint8Array>;\n\n  constructor(config: BlockstoreLevelConfig, db?: LevelWrapper<Uint8Array>) {\n    this.config = {\n      createLevelDatabase,\n      ...config\n    };\n\n    this.db = db ?? new LevelWrapper<Uint8Array>({ ...this.config, valueEncoding: 'binary' });\n  }\n\n  async open(): Promise<void> {\n    return this.db.open();\n  }\n\n  async close(): Promise<void> {\n    return this.db.close();\n  }\n\n  async partition(name: string): Promise<BlockstoreLevel> {\n    const db = await this.db.partition(name);\n    return new BlockstoreLevel({ ...this.config, location: '' }, db);\n  }\n\n  async put(key: CID | string, val: Uint8Array, options?: AbortOptions): Promise<CID> {\n    await this.db.put(String(key), val, options);\n    return CID.parse(key.toString());\n  }\n\n  async get(key: CID | string, options?: AbortOptions): Promise<Uint8Array> {\n    const result = await this.db.get(String(key), options);\n    return result!;\n  }\n\n  async has(key: CID | string, options?: AbortOptions): Promise<boolean> {\n    return this.db.has(String(key), options);\n  }\n\n  async delete(key: CID | string, options?: AbortOptions): Promise<void> {\n    return this.db.delete(String(key), options);\n  }\n\n  async isEmpty(options?: AbortOptions): Promise<boolean> {\n    return this.db.isEmpty(options);\n  }\n\n  async * putMany(source: AwaitIterable<Pair>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const entry of source) {\n      await this.put(entry.cid, entry.block, options);\n\n      yield entry.cid;\n    }\n  }\n\n  async * getMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<Pair> {\n    for await (const key of source) {\n      yield {\n        cid   : key,\n        block : await this.get(key, options)\n      };\n    }\n  }\n\n  async * getAll(options?: AbortOptions): AsyncIterable<Pair> {\n    // @ts-expect-error keyEncoding is 'buffer' but types for db.iterator always return the key type as 'string'\n    const li: AsyncGenerator<[Uint8Array, Uint8Array]> = this.db.iterator({\n      keys        : true,\n      keyEncoding : 'buffer'\n    }, options);\n\n    for await (const [key, value] of li) {\n      yield { cid: CID.decode(key), block: value };\n    }\n  }\n\n  async * deleteMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<CID> {\n    for await (const key of source) {\n      await this.delete(key, options);\n\n      yield key;\n    }\n  }\n\n  /**\n   * deletes all entries\n   */\n  async clear(): Promise<void> {\n    return this.db.clear();\n  }\n}\n\ntype BlockstoreLevelConfig = {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import errCode from 'err-code'\nimport last from 'it-last'\nimport { CID } from 'multiformats/cid'\nimport resolve from './resolvers/index.js'\nimport type { PBNode } from '@ipld/dag-pb'\nimport type { Bucket } from 'hamt-sharding'\nimport type { Blockstore } from 'interface-blockstore'\nimport type { UnixFS } from 'ipfs-unixfs'\nimport type { ProgressOptions, ProgressEvent } from 'progress-events'\n\nexport interface ExportProgress {\n  /**\n   * How many bytes of the file have been read\n   */\n  bytesRead: bigint\n\n  /**\n   * How many bytes of the file will be read - n.b. this may be\n   * smaller than `fileSize` if `offset`/`length` have been\n   * specified\n   */\n  totalBytes: bigint\n\n  /**\n   * The size of the file being read - n.b. this may be\n   * larger than `total` if `offset`/`length` has been\n   * specified\n   */\n  fileSize: bigint\n}\n\nexport interface ExportWalk {\n  cid: CID\n}\n\n/**\n * Progress events emitted by the exporter\n */\nexport type ExporterProgressEvents =\n  ProgressEvent<'unixfs:exporter:progress:unixfs:file', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:unixfs:raw', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:raw', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:progress:identity', ExportProgress> |\n  ProgressEvent<'unixfs:exporter:walk:file', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:directory', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:hamt-sharded-directory', ExportWalk> |\n  ProgressEvent<'unixfs:exporter:walk:raw', ExportWalk>\n\nexport interface ExporterOptions extends ProgressOptions<ExporterProgressEvents> {\n  offset?: number\n  length?: number\n  signal?: AbortSignal\n}\n\nexport interface Exportable<T> {\n  type: 'file' | 'directory' | 'object' | 'raw' | 'identity'\n  name: string\n  path: string\n  cid: CID\n  depth: number\n  size: bigint\n  content: (options?: ExporterOptions) => AsyncGenerator<T, void, unknown>\n}\n\nexport interface UnixFSFile extends Exportable<Uint8Array> {\n  type: 'file'\n  unixfs: UnixFS\n  node: PBNode\n}\n\nexport interface UnixFSDirectory extends Exportable<UnixFSEntry> {\n  type: 'directory'\n  unixfs: UnixFS\n  node: PBNode\n}\n\nexport interface ObjectNode extends Exportable<any> {\n  type: 'object'\n  node: Uint8Array\n}\n\nexport interface RawNode extends Exportable<Uint8Array> {\n  type: 'raw'\n  node: Uint8Array\n}\n\nexport interface IdentityNode extends Exportable<Uint8Array> {\n  type: 'identity'\n  node: Uint8Array\n}\n\nexport type UnixFSEntry = UnixFSFile | UnixFSDirectory | ObjectNode | RawNode | IdentityNode\n\nexport interface NextResult {\n  cid: CID\n  name: string\n  path: string\n  toResolve: string[]\n}\n\nexport interface ResolveResult {\n  entry: UnixFSEntry\n  next?: NextResult\n}\n\nexport interface Resolve { (cid: CID, name: string, path: string, toResolve: string[], depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\nexport interface Resolver { (cid: CID, name: string, path: string, toResolve: string[], resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): Promise<ResolveResult> }\n\nexport type UnixfsV1FileContent = AsyncIterable<Uint8Array> | Iterable<Uint8Array>\nexport type UnixfsV1DirectoryContent = AsyncIterable<UnixFSEntry> | Iterable<UnixFSEntry>\nexport type UnixfsV1Content = UnixfsV1FileContent | UnixfsV1DirectoryContent\nexport interface UnixfsV1Resolver { (cid: CID, node: PBNode, unixfs: UnixFS, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage): (options: ExporterOptions) => UnixfsV1Content }\n\nexport interface ShardTraversalContext {\n  hamtDepth: number\n  rootBucket: Bucket<boolean>\n  lastBucket: Bucket<boolean>\n}\n\nexport type ReadableStorage = Pick<Blockstore, 'get'>\n\nconst toPathComponents = (path: string = ''): string[] => {\n  // split on / unless escaped with \\\n  return (path\n    .trim()\n    .match(/([^\\\\^/]|\\\\\\/)+/g) ?? [])\n    .filter(Boolean)\n}\n\nconst cidAndRest = (path: string | Uint8Array | CID): { cid: CID, toResolve: string[] } => {\n  if (path instanceof Uint8Array) {\n    return {\n      cid: CID.decode(path),\n      toResolve: []\n    }\n  }\n\n  const cid = CID.asCID(path)\n  if (cid != null) {\n    return {\n      cid,\n      toResolve: []\n    }\n  }\n\n  if (typeof path === 'string') {\n    if (path.indexOf('/ipfs/') === 0) {\n      path = path.substring(6)\n    }\n\n    const output = toPathComponents(path)\n\n    return {\n      cid: CID.parse(output[0]),\n      toResolve: output.slice(1)\n    }\n  }\n\n  throw errCode(new Error(`Unknown path type ${path}`), 'ERR_BAD_PATH')\n}\n\nexport async function * walkPath (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n  let {\n    cid,\n    toResolve\n  } = cidAndRest(path)\n  let name = cid.toString()\n  let entryPath = name\n  const startingDepth = toResolve.length\n\n  while (true) {\n    const result = await resolve(cid, name, entryPath, toResolve, startingDepth, blockstore, options)\n\n    if (result.entry == null && result.next == null) {\n      throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n    }\n\n    if (result.entry != null) {\n      yield result.entry\n    }\n\n    if (result.next == null) {\n      return\n    }\n\n    // resolve further parts\n    toResolve = result.next.toResolve\n    cid = result.next.cid\n    name = result.next.name\n    entryPath = result.next.path\n  }\n}\n\nexport async function exporter (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): Promise<UnixFSEntry> {\n  const result = await last(walkPath(path, blockstore, options))\n\n  if (result == null) {\n    throw errCode(new Error(`Could not resolve ${path}`), 'ERR_NOT_FOUND')\n  }\n\n  return result\n}\n\nexport async function * recursive (path: string | CID, blockstore: ReadableStorage, options: ExporterOptions = {}): AsyncGenerator<UnixFSEntry, void, any> {\n  const node = await exporter(path, blockstore, options)\n\n  if (node == null) {\n    return\n  }\n\n  yield node\n\n  if (node.type === 'directory') {\n    for await (const child of recurse(node, options)) {\n      yield child\n    }\n  }\n\n  async function * recurse (node: UnixFSDirectory, options: ExporterOptions): AsyncGenerator<UnixFSEntry, void, any> {\n    for await (const file of node.content(options)) {\n      yield file\n\n      if (file instanceof Uint8Array) {\n        continue\n      }\n\n      if (file.type === 'directory') {\n        yield * recurse(file, options)\n      }\n    }\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * Return the last value from an (async)iterable.\n *\n * @example\n *\n * ```javascript\n * import last from 'it-last'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const res = last(values)\n *\n * console.info(res) // 4\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import last from 'it-last'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const res = await last(values())\n *\n * console.info(res) // 4\n * ```\n */\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Returns the last item of an (async) iterable, unless empty, in which case\n * return `undefined`\n */\nfunction last <T> (source: Iterable<T>): T | undefined\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined>\nfunction last <T> (source: Iterable<T> | AsyncIterable<T>): Promise<T | undefined> | T | undefined {\n  if (isAsyncIterable(source)) {\n    return (async () => {\n      let res\n\n      for await (const entry of source) {\n        res = entry\n      }\n\n      return res\n    })()\n  }\n\n  let res\n\n  for (const entry of source) {\n    res = entry\n  }\n\n  return res\n}\n\nexport default last\n", "\nimport * as dagCbor from '@ipld/dag-cbor'\nimport * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport * as raw from 'multiformats/codecs/raw'\nimport { identity } from 'multiformats/hashes/identity'\nimport dagCborResolver from './dag-cbor.js'\nimport identifyResolver from './identity.js'\nimport rawResolver from './raw.js'\nimport dagPbResolver from './unixfs-v1/index.js'\nimport type { Resolve, Resolver } from '../index.js'\n\nconst resolvers: Record<number, Resolver> = {\n  [dagPb.code]: dagPbResolver,\n  [raw.code]: rawResolver,\n  [dagCbor.code]: dagCborResolver,\n  [identity.code]: identifyResolver\n}\n\nconst resolve: Resolve = async (cid, name, path, toResolve, depth, blockstore, options) => {\n  const resolver = resolvers[cid.code]\n\n  if (resolver == null) {\n    throw errCode(new Error(`No resolver for code ${cid.code}`), 'ERR_NO_RESOLVER')\n  }\n\n  return resolver(cid, name, path, toResolve, resolve, depth, blockstore, options)\n}\n\nexport default resolve\n", "import * as cborg from 'cborg'\nimport { CID } from 'multiformats/cid'\n\n// https://github.com/ipfs/go-ipfs/issues/3570#issuecomment-273931692\nconst CID_CBOR_TAG = 42\n\n/**\n * @template T\n * @typedef {import('multiformats/codecs/interface').ByteView<T>} ByteView\n */\n\n/**\n * cidEncoder will receive all Objects during encode, it needs to filter out\n * anything that's not a CID and return `null` for that so it's encoded as\n * normal.\n *\n * @param {any} obj\n * @returns {cborg.Token[]|null}\n */\nfunction cidEncoder (obj) {\n  if (obj.asCID !== obj && obj['/'] !== obj.bytes) {\n    return null // any other kind of object\n  }\n  const cid = CID.asCID(obj)\n  /* c8 ignore next 4 */\n  // very unlikely case, and it'll probably throw a recursion error in cborg\n  if (!cid) {\n    return null\n  }\n  const bytes = new Uint8Array(cid.bytes.byteLength + 1)\n  bytes.set(cid.bytes, 1) // prefix is 0x00, for historical reasons\n  return [\n    new cborg.Token(cborg.Type.tag, CID_CBOR_TAG),\n    new cborg.Token(cborg.Type.bytes, bytes)\n  ]\n}\n\n// eslint-disable-next-line jsdoc/require-returns-check\n/**\n * Intercept all `undefined` values from an object walk and reject the entire\n * object if we find one.\n *\n * @returns {null}\n */\nfunction undefinedEncoder () {\n  throw new Error('`undefined` is not supported by the IPLD Data Model and cannot be encoded')\n}\n\n/**\n * Intercept all `number` values from an object walk and reject the entire\n * object if we find something that doesn't fit the IPLD data model (NaN &\n * Infinity).\n *\n * @param {number} num\n * @returns {null}\n */\nfunction numberEncoder (num) {\n  if (Number.isNaN(num)) {\n    throw new Error('`NaN` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  if (num === Infinity || num === -Infinity) {\n    throw new Error('`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded')\n  }\n  return null\n}\n\nconst encodeOptions = {\n  float64: true,\n  typeEncoders: {\n    Object: cidEncoder,\n    undefined: undefinedEncoder,\n    number: numberEncoder\n  }\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {CID}\n */\nfunction cidDecoder (bytes) {\n  if (bytes[0] !== 0) {\n    throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00')\n  }\n  return CID.decode(bytes.subarray(1)) // ignore leading 0x00\n}\n\nconst decodeOptions = {\n  allowIndefinite: false,\n  coerceUndefinedToNull: true,\n  allowNaN: false,\n  allowInfinity: false,\n  allowBigInt: true, // this will lead to BigInt for ints outside of\n  // safe-integer range, which may surprise users\n  strict: true,\n  useMaps: false,\n  rejectDuplicateMapKeys: true,\n  /** @type {import('cborg').TagDecoder[]} */\n  tags: []\n}\ndecodeOptions.tags[CID_CBOR_TAG] = cidDecoder\n\nexport const name = 'dag-cbor'\nexport const code = 0x71\n\n/**\n * @template T\n * @param {T} node\n * @returns {ByteView<T>}\n */\nexport const encode = (node) => cborg.encode(node, encodeOptions)\n\n/**\n * @template T\n * @param {ByteView<T>} data\n * @returns {T}\n */\nexport const decode = (data) => cborg.decode(data, decodeOptions)\n", "import { encode } from './lib/encode.js'\nimport { decode, decodeFirst, Tokeniser, tokensToObject } from './lib/decode.js'\nimport { Token, Type } from './lib/token.js'\n\n/**\n * Export the types that were present in the original manual cborg.d.ts\n * @typedef {import('./interface').TagDecoder} TagDecoder\n * There was originally just `TypeEncoder` so don't break types by renaming or not exporting\n * @typedef {import('./interface').OptionalTypeEncoder} TypeEncoder\n * @typedef {import('./interface').DecodeOptions} DecodeOptions\n * @typedef {import('./interface').EncodeOptions} EncodeOptions\n */\n\nexport {\n  decode,\n  decodeFirst,\n  Tokeniser as Tokenizer,\n  tokensToObject,\n  encode,\n  Token,\n  Type\n}\n", "import { is } from './is.js'\nimport { Token, Type } from './token.js'\nimport { Bl } from './bl.js'\nimport { encodeErrPrefix } from './common.js'\nimport { quickEncodeToken } from './jump.js'\nimport { asU8A } from './byte-utils.js'\n\nimport { encodeUint } from './0uint.js'\nimport { encodeNegint } from './1negint.js'\nimport { encodeBytes } from './2bytes.js'\nimport { encodeString } from './3string.js'\nimport { encodeArray } from './4array.js'\nimport { encodeMap } from './5map.js'\nimport { encodeTag } from './6tag.js'\nimport { encodeFloat } from './7float.js'\n\n/**\n * @typedef {import('../interface').EncodeOptions} EncodeOptions\n * @typedef {import('../interface').OptionalTypeEncoder} OptionalTypeEncoder\n * @typedef {import('../interface').Reference} Reference\n * @typedef {import('../interface').StrictTypeEncoder} StrictTypeEncoder\n * @typedef {import('../interface').TokenTypeEncoder} TokenTypeEncoder\n * @typedef {import('../interface').TokenOrNestedTokens} TokenOrNestedTokens\n */\n\n/** @type {EncodeOptions} */\nconst defaultEncodeOptions = {\n  float64: false,\n  mapSorter,\n  quickEncodeToken\n}\n\n/** @returns {TokenTypeEncoder[]} */\nexport function makeCborEncoders () {\n  const encoders = []\n  encoders[Type.uint.major] = encodeUint\n  encoders[Type.negint.major] = encodeNegint\n  encoders[Type.bytes.major] = encodeBytes\n  encoders[Type.string.major] = encodeString\n  encoders[Type.array.major] = encodeArray\n  encoders[Type.map.major] = encodeMap\n  encoders[Type.tag.major] = encodeTag\n  encoders[Type.float.major] = encodeFloat\n  return encoders\n}\n\nconst cborEncoders = makeCborEncoders()\n\nconst buf = new Bl()\n\n/** @implements {Reference} */\nclass Ref {\n  /**\n   * @param {object|any[]} obj\n   * @param {Reference|undefined} parent\n   */\n  constructor (obj, parent) {\n    this.obj = obj\n    this.parent = parent\n  }\n\n  /**\n   * @param {object|any[]} obj\n   * @returns {boolean}\n   */\n  includes (obj) {\n    /** @type {Reference|undefined} */\n    let p = this\n    do {\n      if (p.obj === obj) {\n        return true\n      }\n    } while (p = p.parent) // eslint-disable-line\n    return false\n  }\n\n  /**\n   * @param {Reference|undefined} stack\n   * @param {object|any[]} obj\n   * @returns {Reference}\n   */\n  static createCheck (stack, obj) {\n    if (stack && stack.includes(obj)) {\n      throw new Error(`${encodeErrPrefix} object contains circular references`)\n    }\n    return new Ref(obj, stack)\n  }\n}\n\nconst simpleTokens = {\n  null: new Token(Type.null, null),\n  undefined: new Token(Type.undefined, undefined),\n  true: new Token(Type.true, true),\n  false: new Token(Type.false, false),\n  emptyArray: new Token(Type.array, 0),\n  emptyMap: new Token(Type.map, 0)\n}\n\n/** @type {{[typeName: string]: StrictTypeEncoder}} */\nconst typeEncoders = {\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  number (obj, _typ, _options, _refStack) {\n    if (!Number.isInteger(obj) || !Number.isSafeInteger(obj)) {\n      return new Token(Type.float, obj)\n    } else if (obj >= 0) {\n      return new Token(Type.uint, obj)\n    } else {\n      return new Token(Type.negint, obj)\n    }\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  bigint (obj, _typ, _options, _refStack) {\n    if (obj >= BigInt(0)) {\n      return new Token(Type.uint, obj)\n    } else {\n      return new Token(Type.negint, obj)\n    }\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  Uint8Array (obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, obj)\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  string (obj, _typ, _options, _refStack) {\n    return new Token(Type.string, obj)\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  boolean (obj, _typ, _options, _refStack) {\n    return obj ? simpleTokens.true : simpleTokens.false\n  },\n\n  /**\n   * @param {any} _obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  null (_obj, _typ, _options, _refStack) {\n    return simpleTokens.null\n  },\n\n  /**\n   * @param {any} _obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  undefined (_obj, _typ, _options, _refStack) {\n    return simpleTokens.undefined\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  ArrayBuffer (obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj))\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} _options\n   * @param {Reference} [_refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  DataView (obj, _typ, _options, _refStack) {\n    return new Token(Type.bytes, new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength))\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} _typ\n   * @param {EncodeOptions} options\n   * @param {Reference} [refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  Array (obj, _typ, options, refStack) {\n    if (!obj.length) {\n      if (options.addBreakTokens === true) {\n        return [simpleTokens.emptyArray, new Token(Type.break)]\n      }\n      return simpleTokens.emptyArray\n    }\n    refStack = Ref.createCheck(refStack, obj)\n    const entries = []\n    let i = 0\n    for (const e of obj) {\n      entries[i++] = objectToTokens(e, options, refStack)\n    }\n    if (options.addBreakTokens) {\n      return [new Token(Type.array, obj.length), entries, new Token(Type.break)]\n    }\n    return [new Token(Type.array, obj.length), entries]\n  },\n\n  /**\n   * @param {any} obj\n   * @param {string} typ\n   * @param {EncodeOptions} options\n   * @param {Reference} [refStack]\n   * @returns {TokenOrNestedTokens}\n   */\n  Object (obj, typ, options, refStack) {\n    // could be an Object or a Map\n    const isMap = typ !== 'Object'\n    // it's slightly quicker to use Object.keys() than Object.entries()\n    const keys = isMap ? obj.keys() : Object.keys(obj)\n    const length = isMap ? obj.size : keys.length\n    if (!length) {\n      if (options.addBreakTokens === true) {\n        return [simpleTokens.emptyMap, new Token(Type.break)]\n      }\n      return simpleTokens.emptyMap\n    }\n    refStack = Ref.createCheck(refStack, obj)\n    /** @type {TokenOrNestedTokens[]} */\n    const entries = []\n    let i = 0\n    for (const key of keys) {\n      entries[i++] = [\n        objectToTokens(key, options, refStack),\n        objectToTokens(isMap ? obj.get(key) : obj[key], options, refStack)\n      ]\n    }\n    sortMapEntries(entries, options)\n    if (options.addBreakTokens) {\n      return [new Token(Type.map, length), entries, new Token(Type.break)]\n    }\n    return [new Token(Type.map, length), entries]\n  }\n}\n\ntypeEncoders.Map = typeEncoders.Object\ntypeEncoders.Buffer = typeEncoders.Uint8Array\nfor (const typ of 'Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64'.split(' ')) {\n  typeEncoders[`${typ}Array`] = typeEncoders.DataView\n}\n\n/**\n * @param {any} obj\n * @param {EncodeOptions} [options]\n * @param {Reference} [refStack]\n * @returns {TokenOrNestedTokens}\n */\nfunction objectToTokens (obj, options = {}, refStack) {\n  const typ = is(obj)\n  const customTypeEncoder = (options && options.typeEncoders && /** @type {OptionalTypeEncoder} */ options.typeEncoders[typ]) || typeEncoders[typ]\n  if (typeof customTypeEncoder === 'function') {\n    const tokens = customTypeEncoder(obj, typ, options, refStack)\n    if (tokens != null) {\n      return tokens\n    }\n  }\n  const typeEncoder = typeEncoders[typ]\n  if (!typeEncoder) {\n    throw new Error(`${encodeErrPrefix} unsupported type: ${typ}`)\n  }\n  return typeEncoder(obj, typ, options, refStack)\n}\n\n/*\nCBOR key sorting is a mess.\n\nThe canonicalisation recommendation from https://tools.ietf.org/html/rfc7049#section-3.9\nincludes the wording:\n\n> The keys in every map must be sorted lowest value to highest.\n> Sorting is performed on the bytes of the representation of the key\n> data items without paying attention to the 3/5 bit splitting for\n> major types.\n> ...\n>  *  If two keys have different lengths, the shorter one sorts\n      earlier;\n>  *  If two keys have the same length, the one with the lower value\n      in (byte-wise) lexical order sorts earlier.\n\n1. It is not clear what \"bytes of the representation of the key\" means: is it\n   the CBOR representation, or the binary representation of the object itself?\n   Consider the int and uint difference here.\n2. It is not clear what \"without paying attention to\" means: do we include it\n   and compare on that? Or do we omit the special prefix byte, (mostly) treating\n   the key in its plain binary representation form.\n\nThe FIDO 2.0: Client To Authenticator Protocol spec takes the original CBOR\nwording and clarifies it according to their understanding.\nhttps://fidoalliance.org/specs/fido-v2.0-rd-20170927/fido-client-to-authenticator-protocol-v2.0-rd-20170927.html#message-encoding\n\n> The keys in every map must be sorted lowest value to highest. Sorting is\n> performed on the bytes of the representation of the key data items without\n> paying attention to the 3/5 bit splitting for major types. The sorting rules\n> are:\n>  * If the major types are different, the one with the lower value in numerical\n>    order sorts earlier.\n>  * If two keys have different lengths, the shorter one sorts earlier;\n>  * If two keys have the same length, the one with the lower value in\n>    (byte-wise) lexical order sorts earlier.\n\nSome other implementations, such as borc, do a full encode then do a\nlength-first, byte-wise-second comparison:\nhttps://github.com/dignifiedquire/borc/blob/b6bae8b0bcde7c3976b0f0f0957208095c392a36/src/encoder.js#L358\nhttps://github.com/dignifiedquire/borc/blob/b6bae8b0bcde7c3976b0f0f0957208095c392a36/src/utils.js#L143-L151\n\nThis has the benefit of being able to easily handle arbitrary keys, including\ncomplex types (maps and arrays).\n\nWe'll opt for the FIDO approach, since it affords some efficies since we don't\nneed a full encode of each key to determine order and can defer to the types\nto determine how to most efficiently order their values (i.e. int and uint\nordering can be done on the numbers, no need for byte-wise, for example).\n\nRecommendation: stick to single key types or you'll get into trouble, and prefer\nstring keys because it's much simpler that way.\n*/\n\n/*\n(UPDATE, Dec 2020)\nhttps://tools.ietf.org/html/rfc8949 is the updated CBOR spec and clarifies some\nof the questions above with a new recommendation for sorting order being much\ncloser to what would be expected in other environments (i.e. no length-first\nweirdness).\nThis new sorting order is not yet implemented here but could be added as an\noption. \"Determinism\" (canonicity) is system dependent and it's difficult to\nchange existing systems that are built with existing expectations. So if a new\nordering is introduced here, the old needs to be kept as well with the user\nhaving the option.\n*/\n\n/**\n * @param {TokenOrNestedTokens[]} entries\n * @param {EncodeOptions} options\n */\nfunction sortMapEntries (entries, options) {\n  if (options.mapSorter) {\n    entries.sort(options.mapSorter)\n  }\n}\n\n/**\n * @param {(Token|Token[])[]} e1\n * @param {(Token|Token[])[]} e2\n * @returns {number}\n */\nfunction mapSorter (e1, e2) {\n  // the key position ([0]) could have a single token or an array\n  // almost always it'll be a single token but complex key might get involved\n  /* c8 ignore next 2 */\n  const keyToken1 = Array.isArray(e1[0]) ? e1[0][0] : e1[0]\n  const keyToken2 = Array.isArray(e2[0]) ? e2[0][0] : e2[0]\n\n  // different key types\n  if (keyToken1.type !== keyToken2.type) {\n    return keyToken1.type.compare(keyToken2.type)\n  }\n\n  const major = keyToken1.type.major\n  // TODO: handle case where cmp === 0 but there are more keyToken e. complex type)\n  const tcmp = cborEncoders[major].compareTokens(keyToken1, keyToken2)\n  /* c8 ignore next 5 */\n  if (tcmp === 0) {\n    // duplicate key or complex type where the first token matched,\n    // i.e. a map or array and we're only comparing the opening token\n    console.warn('WARNING: complex key types used, CBOR key sorting guarantees are gone')\n  }\n  return tcmp\n}\n\n/**\n * @param {Bl} buf\n * @param {TokenOrNestedTokens} tokens\n * @param {TokenTypeEncoder[]} encoders\n * @param {EncodeOptions} options\n */\nfunction tokensToEncoded (buf, tokens, encoders, options) {\n  if (Array.isArray(tokens)) {\n    for (const token of tokens) {\n      tokensToEncoded(buf, token, encoders, options)\n    }\n  } else {\n    encoders[tokens.type.major](buf, tokens, options)\n  }\n}\n\n/**\n * @param {any} data\n * @param {TokenTypeEncoder[]} encoders\n * @param {EncodeOptions} options\n * @returns {Uint8Array}\n */\nfunction encodeCustom (data, encoders, options) {\n  const tokens = objectToTokens(data, options)\n  if (!Array.isArray(tokens) && options.quickEncodeToken) {\n    const quickBytes = options.quickEncodeToken(tokens)\n    if (quickBytes) {\n      return quickBytes\n    }\n    const encoder = encoders[tokens.type.major]\n    if (encoder.encodedSize) {\n      const size = encoder.encodedSize(tokens, options)\n      const buf = new Bl(size)\n      encoder(buf, tokens, options)\n      /* c8 ignore next 4 */\n      // this would be a problem with encodedSize() functions\n      if (buf.chunks.length !== 1) {\n        throw new Error(`Unexpected error: pre-calculated length for ${tokens} was wrong`)\n      }\n      return asU8A(buf.chunks[0])\n    }\n  }\n  buf.reset()\n  tokensToEncoded(buf, tokens, encoders, options)\n  return buf.toBytes(true)\n}\n\n/**\n * @param {any} data\n * @param {EncodeOptions} [options]\n * @returns {Uint8Array}\n */\nfunction encode (data, options) {\n  options = Object.assign({}, defaultEncodeOptions, options)\n  return encodeCustom(data, cborEncoders, options)\n}\n\nexport { objectToTokens, encode, encodeCustom, Ref }\n", "// This is an unfortunate replacement for @sindresorhus/is that we need to\n// re-implement for performance purposes. In particular the is.observable()\n// check is expensive, and unnecessary for our purposes. The values returned\n// are compatible with @sindresorhus/is, however.\n\nconst typeofs = [\n  'string',\n  'number',\n  'bigint',\n  'symbol'\n]\n\nconst objectTypeNames = [\n  'Function',\n  'Generator',\n  'AsyncGenerator',\n  'GeneratorFunction',\n  'AsyncGeneratorFunction',\n  'AsyncFunction',\n  'Observable',\n  'Array',\n  'Buffer',\n  'Object',\n  'RegExp',\n  'Date',\n  'Error',\n  'Map',\n  'Set',\n  'WeakMap',\n  'WeakSet',\n  'ArrayBuffer',\n  'SharedArrayBuffer',\n  'DataView',\n  'Promise',\n  'URL',\n  'HTMLElement',\n  'Int8Array',\n  'Uint8Array',\n  'Uint8ClampedArray',\n  'Int16Array',\n  'Uint16Array',\n  'Int32Array',\n  'Uint32Array',\n  'Float32Array',\n  'Float64Array',\n  'BigInt64Array',\n  'BigUint64Array'\n]\n\n/**\n * @param {any} value\n * @returns {string}\n */\nexport function is (value) {\n  if (value === null) {\n    return 'null'\n  }\n  if (value === undefined) {\n    return 'undefined'\n  }\n  if (value === true || value === false) {\n    return 'boolean'\n  }\n  const typeOf = typeof value\n  if (typeofs.includes(typeOf)) {\n    return typeOf\n  }\n  /* c8 ignore next 4 */\n  // not going to bother testing this, it's not going to be valid anyway\n  if (typeOf === 'function') {\n    return 'Function'\n  }\n  if (Array.isArray(value)) {\n    return 'Array'\n  }\n  if (isBuffer(value)) {\n    return 'Buffer'\n  }\n  const objectType = getObjectType(value)\n  if (objectType) {\n    return objectType\n  }\n  /* c8 ignore next */\n  return 'Object'\n}\n\n/**\n * @param {any} value\n * @returns {boolean}\n */\nfunction isBuffer (value) {\n  return value && value.constructor && value.constructor.isBuffer && value.constructor.isBuffer.call(null, value)\n}\n\n/**\n * @param {any} value\n * @returns {string|undefined}\n */\nfunction getObjectType (value) {\n  const objectTypeName = Object.prototype.toString.call(value).slice(8, -1)\n  if (objectTypeNames.includes(objectTypeName)) {\n    return objectTypeName\n  }\n  /* c8 ignore next */\n  return undefined\n}\n", "class Type {\n  /**\n   * @param {number} major\n   * @param {string} name\n   * @param {boolean} terminal\n   */\n  constructor (major, name, terminal) {\n    this.major = major\n    this.majorEncoded = major << 5\n    this.name = name\n    this.terminal = terminal\n  }\n\n  /* c8 ignore next 3 */\n  toString () {\n    return `Type[${this.major}].${this.name}`\n  }\n\n  /**\n   * @param {Type} typ\n   * @returns {number}\n   */\n  compare (typ) {\n    /* c8 ignore next 1 */\n    return this.major < typ.major ? -1 : this.major > typ.major ? 1 : 0\n  }\n}\n\n// convert to static fields when better supported\nType.uint = new Type(0, 'uint', true)\nType.negint = new Type(1, 'negint', true)\nType.bytes = new Type(2, 'bytes', true)\nType.string = new Type(3, 'string', true)\nType.array = new Type(4, 'array', false)\nType.map = new Type(5, 'map', false)\nType.tag = new Type(6, 'tag', false) // terminal?\nType.float = new Type(7, 'float', true)\nType.false = new Type(7, 'false', true)\nType.true = new Type(7, 'true', true)\nType.null = new Type(7, 'null', true)\nType.undefined = new Type(7, 'undefined', true)\nType.break = new Type(7, 'break', true)\n// Type.indefiniteLength = new Type(0, 'indefiniteLength', true)\n\nclass Token {\n  /**\n   * @param {Type} type\n   * @param {any} [value]\n   * @param {number} [encodedLength]\n   */\n  constructor (type, value, encodedLength) {\n    this.type = type\n    this.value = value\n    this.encodedLength = encodedLength\n    /** @type {Uint8Array|undefined} */\n    this.encodedBytes = undefined\n    /** @type {Uint8Array|undefined} */\n    this.byteValue = undefined\n  }\n\n  /* c8 ignore next 3 */\n  toString () {\n    return `Token[${this.type}].${this.value}`\n  }\n}\n\nexport { Type, Token }\n", "/**\n * Bl is a list of byte chunks, similar to https://github.com/rvagg/bl but for\n * writing rather than reading.\n * A Bl object accepts set() operations for individual bytes and copyTo() for\n * inserting byte arrays. These write operations don't automatically increment\n * the internal cursor so its \"length\" won't be changed. Instead, increment()\n * must be called to extend its length to cover the inserted data.\n * The toBytes() call will convert all internal memory to a single Uint8Array of\n * the correct length, truncating any data that is stored but hasn't been\n * included by an increment().\n * get() can retrieve a single byte.\n * All operations (except toBytes()) take an \"offset\" argument that will perform\n * the write at the offset _from the current cursor_. For most operations this\n * will be `0` to write at the current cursor position but it can be ahead of\n * the current cursor. Negative offsets probably work but are untested.\n */\n\n// TODO: ipjs doesn't support this, only for test files: https://github.com/mikeal/ipjs/blob/master/src/package/testFile.js#L39\nimport { alloc, concat, slice } from './byte-utils.js'\n\n// the ts-ignores in this file are almost all for the `Uint8Array|number[]` duality that exists\n// for perf reasons. Consider better approaches to this or removing it entirely, it is quite\n// risky because of some assumptions about small chunks === number[] and everything else === Uint8Array.\n\nconst defaultChunkSize = 256\n\nexport class Bl {\n  /**\n   * @param {number} [chunkSize]\n   */\n  constructor (chunkSize = defaultChunkSize) {\n    this.chunkSize = chunkSize\n    /** @type {number} */\n    this.cursor = 0\n    /** @type {number} */\n    this.maxCursor = -1\n    /** @type {(Uint8Array|number[])[]} */\n    this.chunks = []\n    // keep the first chunk around if we can to save allocations for future encodes\n    /** @type {Uint8Array|number[]|null} */\n    this._initReuseChunk = null\n  }\n\n  reset () {\n    this.cursor = 0\n    this.maxCursor = -1\n    if (this.chunks.length) {\n      this.chunks = []\n    }\n    if (this._initReuseChunk !== null) {\n      this.chunks.push(this._initReuseChunk)\n      this.maxCursor = this._initReuseChunk.length - 1\n    }\n  }\n\n  /**\n   * @param {Uint8Array|number[]} bytes\n   */\n  push (bytes) {\n    let topChunk = this.chunks[this.chunks.length - 1]\n    const newMax = this.cursor + bytes.length\n    if (newMax <= this.maxCursor + 1) {\n      // we have at least one chunk and we can fit these bytes into that chunk\n      const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1\n      // @ts-ignore\n      topChunk.set(bytes, chunkPos)\n    } else {\n      // can't fit it in\n      if (topChunk) {\n        // trip the last chunk to `cursor` if we need to\n        const chunkPos = topChunk.length - (this.maxCursor - this.cursor) - 1\n        if (chunkPos < topChunk.length) {\n          // @ts-ignore\n          this.chunks[this.chunks.length - 1] = topChunk.subarray(0, chunkPos)\n          this.maxCursor = this.cursor - 1\n        }\n      }\n      if (bytes.length < 64 && bytes.length < this.chunkSize) {\n        // make a new chunk and copy the new one into it\n        topChunk = alloc(this.chunkSize)\n        this.chunks.push(topChunk)\n        this.maxCursor += topChunk.length\n        if (this._initReuseChunk === null) {\n          this._initReuseChunk = topChunk\n        }\n        // @ts-ignore\n        topChunk.set(bytes, 0)\n      } else {\n        // push the new bytes in as its own chunk\n        this.chunks.push(bytes)\n        this.maxCursor += bytes.length\n      }\n    }\n    this.cursor += bytes.length\n  }\n\n  /**\n   * @param {boolean} [reset]\n   * @returns {Uint8Array}\n   */\n  toBytes (reset = false) {\n    let byts\n    if (this.chunks.length === 1) {\n      const chunk = this.chunks[0]\n      if (reset && this.cursor > chunk.length / 2) {\n        /* c8 ignore next 2 */\n        // @ts-ignore\n        byts = this.cursor === chunk.length ? chunk : chunk.subarray(0, this.cursor)\n        this._initReuseChunk = null\n        this.chunks = []\n      } else {\n        // @ts-ignore\n        byts = slice(chunk, 0, this.cursor)\n      }\n    } else {\n      // @ts-ignore\n      byts = concat(this.chunks, this.cursor)\n    }\n    if (reset) {\n      this.reset()\n    }\n    return byts\n  }\n}\n", "// Use Uint8Array directly in the browser, use Buffer in Node.js but don't\n// speak its name directly to avoid bundlers pulling in the `Buffer` polyfill\n\n// @ts-ignore\nexport const useBuffer = globalThis.process &&\n  // @ts-ignore\n  !globalThis.process.browser &&\n  // @ts-ignore\n  globalThis.Buffer &&\n  // @ts-ignore\n  typeof globalThis.Buffer.isBuffer === 'function'\n\nconst textDecoder = new TextDecoder()\nconst textEncoder = new TextEncoder()\n\n/**\n * @param {Uint8Array} buf\n * @returns {boolean}\n */\nfunction isBuffer (buf) {\n  // @ts-ignore\n  return useBuffer && globalThis.Buffer.isBuffer(buf)\n}\n\n/**\n * @param {Uint8Array|number[]} buf\n * @returns {Uint8Array}\n */\nexport function asU8A (buf) {\n  /* c8 ignore next */\n  if (!(buf instanceof Uint8Array)) {\n    return Uint8Array.from(buf)\n  }\n  return isBuffer(buf) ? new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) : buf\n}\n\nexport const toString = useBuffer\n  ? // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array} bytes\n     * @param {number} start\n     * @param {number} end\n     */\n    (bytes, start, end) => {\n      return end - start > 64\n        ? // eslint-disable-line operator-linebreak\n      // @ts-ignore\n        globalThis.Buffer.from(bytes.subarray(start, end)).toString('utf8')\n        : utf8Slice(bytes, start, end)\n    }\n  /* c8 ignore next 11 */\n  : // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array} bytes\n     * @param {number} start\n     * @param {number} end\n     */\n    (bytes, start, end) => {\n      return end - start > 64\n        ? textDecoder.decode(bytes.subarray(start, end))\n        : utf8Slice(bytes, start, end)\n    }\n\nexport const fromString = useBuffer\n  ? // eslint-disable-line operator-linebreak\n    /**\n     * @param {string} string\n     */\n    (string) => {\n      return string.length > 64\n        ? // eslint-disable-line operator-linebreak\n      // @ts-ignore\n        globalThis.Buffer.from(string)\n        : utf8ToBytes(string)\n    }\n  /* c8 ignore next 7 */\n  : // eslint-disable-line operator-linebreak\n    /**\n     * @param {string} string\n     */\n    (string) => {\n      return string.length > 64 ? textEncoder.encode(string) : utf8ToBytes(string)\n    }\n\n/**\n * Buffer variant not fast enough for what we need\n * @param {number[]} arr\n * @returns {Uint8Array}\n */\nexport const fromArray = (arr) => {\n  return Uint8Array.from(arr)\n}\n\nexport const slice = useBuffer\n  ? // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array} bytes\n     * @param {number} start\n     * @param {number} end\n     */\n    (bytes, start, end) => {\n      if (isBuffer(bytes)) {\n        return new Uint8Array(bytes.subarray(start, end))\n      }\n      return bytes.slice(start, end)\n    }\n  /* c8 ignore next 9 */\n  : // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array} bytes\n     * @param {number} start\n     * @param {number} end\n     */\n    (bytes, start, end) => {\n      return bytes.slice(start, end)\n    }\n\nexport const concat = useBuffer\n  ? // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array[]} chunks\n     * @param {number} length\n     * @returns {Uint8Array}\n     */\n    (chunks, length) => {\n      // might get a stray plain Array here\n      /* c8 ignore next 1 */\n      chunks = chunks.map((c) => c instanceof Uint8Array\n        ? c\n        // this case is occasionally missed during test runs so becomes coverage-flaky\n        /* c8 ignore next 4 */\n        : // eslint-disable-line operator-linebreak\n        // @ts-ignore\n        globalThis.Buffer.from(c))\n      // @ts-ignore\n      return asU8A(globalThis.Buffer.concat(chunks, length))\n    }\n  /* c8 ignore next 19 */\n  : // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array[]} chunks\n     * @param {number} length\n     * @returns {Uint8Array}\n     */\n    (chunks, length) => {\n      const out = new Uint8Array(length)\n      let off = 0\n      for (let b of chunks) {\n        if (off + b.length > out.length) {\n          // final chunk that's bigger than we need\n          b = b.subarray(0, out.length - off)\n        }\n        out.set(b, off)\n        off += b.length\n      }\n      return out\n    }\n\nexport const alloc = useBuffer\n  ? // eslint-disable-line operator-linebreak\n    /**\n     * @param {number} size\n     * @returns {Uint8Array}\n     */\n    (size) => {\n      // we always write over the contents we expose so this should be safe\n      // @ts-ignore\n      return globalThis.Buffer.allocUnsafe(size)\n    }\n  /* c8 ignore next 8 */\n  : // eslint-disable-line operator-linebreak\n    /**\n     * @param {number} size\n     * @returns {Uint8Array}\n     */\n    (size) => {\n      return new Uint8Array(size)\n    }\n\nexport const toHex = useBuffer\n  ? // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array} d\n     * @returns {string}\n     */\n    (d) => {\n      if (typeof d === 'string') {\n        return d\n      }\n      // @ts-ignore\n      return globalThis.Buffer.from(toBytes(d)).toString('hex')\n    }\n  /* c8 ignore next 12 */\n  : // eslint-disable-line operator-linebreak\n    /**\n     * @param {Uint8Array} d\n     * @returns {string}\n     */\n    (d) => {\n      if (typeof d === 'string') {\n        return d\n      }\n      // @ts-ignore not smart enough to figure this out\n      return Array.prototype.reduce.call(toBytes(d), (p, c) => `${p}${c.toString(16).padStart(2, '0')}`, '')\n    }\n\nexport const fromHex = useBuffer\n  ? // eslint-disable-line operator-linebreak\n  /**\n   * @param {string|Uint8Array} hex\n   * @returns {Uint8Array}\n   */\n    (hex) => {\n      if (hex instanceof Uint8Array) {\n        return hex\n      }\n      // @ts-ignore\n      return globalThis.Buffer.from(hex, 'hex')\n    }\n  /* c8 ignore next 17 */\n  : // eslint-disable-line operator-linebreak\n  /**\n   * @param {string|Uint8Array} hex\n   * @returns {Uint8Array}\n   */\n    (hex) => {\n      if (hex instanceof Uint8Array) {\n        return hex\n      }\n      if (!hex.length) {\n        return new Uint8Array(0)\n      }\n      return new Uint8Array(hex.split('')\n        .map((/** @type {string} */ c, /** @type {number} */ i, /** @type {string[]} */ d) => i % 2 === 0 ? `0x${c}${d[i + 1]}` : '')\n        .filter(Boolean)\n        .map((/** @type {string} */ e) => parseInt(e, 16)))\n    }\n\n/**\n * @param {Uint8Array|ArrayBuffer|ArrayBufferView} obj\n * @returns {Uint8Array}\n */\nfunction toBytes (obj) {\n  if (obj instanceof Uint8Array && obj.constructor.name === 'Uint8Array') {\n    return obj\n  }\n  if (obj instanceof ArrayBuffer) {\n    return new Uint8Array(obj)\n  }\n  if (ArrayBuffer.isView(obj)) {\n    return new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength)\n  }\n  /* c8 ignore next */\n  throw new Error('Unknown type, must be binary type')\n}\n\n/**\n * @param {Uint8Array} b1\n * @param {Uint8Array} b2\n * @returns {number}\n */\nexport function compare (b1, b2) {\n  /* c8 ignore next 5 */\n  if (isBuffer(b1) && isBuffer(b2)) {\n    // probably not possible to get here in the current API\n    // @ts-ignore Buffer\n    return b1.compare(b2)\n  }\n  for (let i = 0; i < b1.length; i++) {\n    if (b1[i] === b2[i]) {\n      continue\n    }\n    return b1[i] < b2[i] ? -1 : 1\n  } /* c8 ignore next 3 */\n  return 0\n}\n\n// The below code is taken from https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n// Licensed Apache-2.0.\n\n/**\n * @param {string} str\n * @returns {number[]}\n */\nfunction utf8ToBytes (str) {\n  const out = []\n  let p = 0\n  for (let i = 0; i < str.length; i++) {\n    let c = str.charCodeAt(i)\n    if (c < 128) {\n      out[p++] = c\n    } else if (c < 2048) {\n      out[p++] = (c >> 6) | 192\n      out[p++] = (c & 63) | 128\n    } else if (\n      ((c & 0xFC00) === 0xD800) && (i + 1) < str.length &&\n      ((str.charCodeAt(i + 1) & 0xFC00) === 0xDC00)) {\n      // Surrogate Pair\n      c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF)\n      out[p++] = (c >> 18) | 240\n      out[p++] = ((c >> 12) & 63) | 128\n      out[p++] = ((c >> 6) & 63) | 128\n      out[p++] = (c & 63) | 128\n    } else {\n      out[p++] = (c >> 12) | 224\n      out[p++] = ((c >> 6) & 63) | 128\n      out[p++] = (c & 63) | 128\n    }\n  }\n  return out\n}\n\n// The below code is mostly taken from https://github.com/feross/buffer\n// Licensed MIT. Copyright (c) Feross Aboukhadijeh\n\n/**\n * @param {Uint8Array} buf\n * @param {number} offset\n * @param {number} end\n * @returns {string}\n */\nfunction utf8Slice (buf, offset, end) {\n  const res = []\n\n  while (offset < end) {\n    const firstByte = buf[offset]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xef) ? 4 : (firstByte > 0xdf) ? 3 : (firstByte > 0xbf) ? 2 : 1\n\n    if (offset + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[offset + 1]\n          if ((secondByte & 0xc0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1f) << 0x6 | (secondByte & 0x3f)\n            if (tempCodePoint > 0x7f) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[offset + 1]\n          thirdByte = buf[offset + 2]\n          if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {\n            tempCodePoint = (firstByte & 0xf) << 0xc | (secondByte & 0x3f) << 0x6 | (thirdByte & 0x3f)\n            /* c8 ignore next 3 */\n            if (tempCodePoint > 0x7ff && (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[offset + 1]\n          thirdByte = buf[offset + 2]\n          fourthByte = buf[offset + 3]\n          if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80 && (fourthByte & 0xc0) === 0x80) {\n            tempCodePoint = (firstByte & 0xf) << 0x12 | (secondByte & 0x3f) << 0xc | (thirdByte & 0x3f) << 0x6 | (fourthByte & 0x3f)\n            if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    /* c8 ignore next 5 */\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xfffd\n      bytesPerSequence = 1\n    } else if (codePoint > 0xffff) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3ff | 0xd800)\n      codePoint = 0xdc00 | codePoint & 0x3ff\n    }\n\n    res.push(codePoint)\n    offset += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\n/**\n * @param {number[]} codePoints\n * @returns {string}\n */\nexport function decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n  /* c8 ignore next 10 */\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n", "const decodeErrPrefix = 'CBOR decode error:'\nconst encodeErrPrefix = 'CBOR encode error:'\n\nconst uintMinorPrefixBytes = []\nuintMinorPrefixBytes[23] = 1\nuintMinorPrefixBytes[24] = 2\nuintMinorPrefixBytes[25] = 3\nuintMinorPrefixBytes[26] = 5\nuintMinorPrefixBytes[27] = 9\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} need\n */\nfunction assertEnoughData (data, pos, need) {\n  if (data.length - pos < need) {\n    throw new Error(`${decodeErrPrefix} not enough data for type`)\n  }\n}\n\nexport {\n  decodeErrPrefix,\n  encodeErrPrefix,\n  uintMinorPrefixBytes,\n  assertEnoughData\n}\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport * as negint from './1negint.js'\nimport * as bytes from './2bytes.js'\nimport * as string from './3string.js'\nimport * as array from './4array.js'\nimport * as map from './5map.js'\nimport * as tag from './6tag.js'\nimport * as float from './7float.js'\nimport { decodeErrPrefix } from './common.js'\nimport { fromArray } from './byte-utils.js'\n\n/**\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n */\nfunction invalidMinor (data, pos, minor) {\n  throw new Error(`${decodeErrPrefix} encountered invalid minor (${minor}) for major ${data[pos] >>> 5}`)\n}\n\n/**\n * @param {string} msg\n * @returns {()=>any}\n */\nfunction errorer (msg) {\n  return () => { throw new Error(`${decodeErrPrefix} ${msg}`) }\n}\n\n/** @type {((data:Uint8Array, pos:number, minor:number, options?:DecodeOptions) => any)[]} */\nexport const jump = []\n\n// unsigned integer, 0x00..0x17 (0..23)\nfor (let i = 0; i <= 0x17; i++) {\n  jump[i] = invalidMinor // uint.decodeUintCompact, handled by quick[]\n}\njump[0x18] = uint.decodeUint8 // unsigned integer, one-byte uint8_t follows\njump[0x19] = uint.decodeUint16 // unsigned integer, two-byte uint16_t follows\njump[0x1a] = uint.decodeUint32 // unsigned integer, four-byte uint32_t follows\njump[0x1b] = uint.decodeUint64 // unsigned integer, eight-byte uint64_t follows\njump[0x1c] = invalidMinor\njump[0x1d] = invalidMinor\njump[0x1e] = invalidMinor\njump[0x1f] = invalidMinor\n// negative integer, -1-0x00..-1-0x17 (-1..-24)\nfor (let i = 0x20; i <= 0x37; i++) {\n  jump[i] = invalidMinor // negintDecode, handled by quick[]\n}\njump[0x38] = negint.decodeNegint8 // negative integer, -1-n one-byte uint8_t for n follows\njump[0x39] = negint.decodeNegint16 // negative integer, -1-n two-byte uint16_t for n follows\njump[0x3a] = negint.decodeNegint32 // negative integer, -1-n four-byte uint32_t for follows\njump[0x3b] = negint.decodeNegint64 // negative integer, -1-n eight-byte uint64_t for follows\njump[0x3c] = invalidMinor\njump[0x3d] = invalidMinor\njump[0x3e] = invalidMinor\njump[0x3f] = invalidMinor\n// byte string, 0x00..0x17 bytes follow\nfor (let i = 0x40; i <= 0x57; i++) {\n  jump[i] = bytes.decodeBytesCompact\n}\njump[0x58] = bytes.decodeBytes8 // byte string, one-byte uint8_t for n, and then n bytes follow\njump[0x59] = bytes.decodeBytes16 // byte string, two-byte uint16_t for n, and then n bytes follow\njump[0x5a] = bytes.decodeBytes32 // byte string, four-byte uint32_t for n, and then n bytes follow\njump[0x5b] = bytes.decodeBytes64 // byte string, eight-byte uint64_t for n, and then n bytes follow\njump[0x5c] = invalidMinor\njump[0x5d] = invalidMinor\njump[0x5e] = invalidMinor\njump[0x5f] = errorer('indefinite length bytes/strings are not supported') // byte string, byte strings follow, terminated by \"break\"\n// UTF-8 string 0x00..0x17 bytes follow\nfor (let i = 0x60; i <= 0x77; i++) {\n  jump[i] = string.decodeStringCompact\n}\njump[0x78] = string.decodeString8 // UTF-8 string, one-byte uint8_t for n, and then n bytes follow\njump[0x79] = string.decodeString16 // UTF-8 string, two-byte uint16_t for n, and then n bytes follow\njump[0x7a] = string.decodeString32 // UTF-8 string, four-byte uint32_t for n, and then n bytes follow\njump[0x7b] = string.decodeString64 // UTF-8 string, eight-byte uint64_t for n, and then n bytes follow\njump[0x7c] = invalidMinor\njump[0x7d] = invalidMinor\njump[0x7e] = invalidMinor\njump[0x7f] = errorer('indefinite length bytes/strings are not supported') // UTF-8 strings follow, terminated by \"break\"\n// array, 0x00..0x17 data items follow\nfor (let i = 0x80; i <= 0x97; i++) {\n  jump[i] = array.decodeArrayCompact\n}\njump[0x98] = array.decodeArray8 // array, one-byte uint8_t for n, and then n data items follow\njump[0x99] = array.decodeArray16 // array, two-byte uint16_t for n, and then n data items follow\njump[0x9a] = array.decodeArray32 // array, four-byte uint32_t for n, and then n data items follow\njump[0x9b] = array.decodeArray64 // array, eight-byte uint64_t for n, and then n data items follow\njump[0x9c] = invalidMinor\njump[0x9d] = invalidMinor\njump[0x9e] = invalidMinor\njump[0x9f] = array.decodeArrayIndefinite // array, data items follow, terminated by \"break\"\n// map, 0x00..0x17 pairs of data items follow\nfor (let i = 0xa0; i <= 0xb7; i++) {\n  jump[i] = map.decodeMapCompact\n}\njump[0xb8] = map.decodeMap8 // map, one-byte uint8_t for n, and then n pairs of data items follow\njump[0xb9] = map.decodeMap16 // map, two-byte uint16_t for n, and then n pairs of data items follow\njump[0xba] = map.decodeMap32 // map, four-byte uint32_t for n, and then n pairs of data items follow\njump[0xbb] = map.decodeMap64 // map, eight-byte uint64_t for n, and then n pairs of data items follow\njump[0xbc] = invalidMinor\njump[0xbd] = invalidMinor\njump[0xbe] = invalidMinor\njump[0xbf] = map.decodeMapIndefinite // map, pairs of data items follow, terminated by \"break\"\n// tags\nfor (let i = 0xc0; i <= 0xd7; i++) {\n  jump[i] = tag.decodeTagCompact\n}\njump[0xd8] = tag.decodeTag8\njump[0xd9] = tag.decodeTag16\njump[0xda] = tag.decodeTag32\njump[0xdb] = tag.decodeTag64\njump[0xdc] = invalidMinor\njump[0xdd] = invalidMinor\njump[0xde] = invalidMinor\njump[0xdf] = invalidMinor\n// 0xe0..0xf3 simple values, unsupported\nfor (let i = 0xe0; i <= 0xf3; i++) {\n  jump[i] = errorer('simple values are not supported')\n}\njump[0xf4] = invalidMinor // false, handled by quick[]\njump[0xf5] = invalidMinor // true, handled by quick[]\njump[0xf6] = invalidMinor // null, handled by quick[]\njump[0xf7] = float.decodeUndefined // undefined\njump[0xf8] = errorer('simple values are not supported') // simple value, one byte follows, unsupported\njump[0xf9] = float.decodeFloat16 // half-precision float (two-byte IEEE 754)\njump[0xfa] = float.decodeFloat32 // single-precision float (four-byte IEEE 754)\njump[0xfb] = float.decodeFloat64 // double-precision float (eight-byte IEEE 754)\njump[0xfc] = invalidMinor\njump[0xfd] = invalidMinor\njump[0xfe] = invalidMinor\njump[0xff] = float.decodeBreak // \"break\" stop code\n\n/** @type {Token[]} */\nexport const quick = []\n// ints <24\nfor (let i = 0; i < 24; i++) {\n  quick[i] = new Token(Type.uint, i, 1)\n}\n// negints >= -24\nfor (let i = -1; i >= -24; i--) {\n  quick[31 - i] = new Token(Type.negint, i, 1)\n}\n// empty bytes\nquick[0x40] = new Token(Type.bytes, new Uint8Array(0), 1)\n// empty string\nquick[0x60] = new Token(Type.string, '', 1)\n// empty list\nquick[0x80] = new Token(Type.array, 0, 1)\n// empty map\nquick[0xa0] = new Token(Type.map, 0, 1)\n// false\nquick[0xf4] = new Token(Type.false, false, 1)\n// true\nquick[0xf5] = new Token(Type.true, true, 1)\n// null\nquick[0xf6] = new Token(Type.null, null, 1)\n\n/**\n * @param {Token} token\n * @returns {Uint8Array|undefined}\n */\nexport function quickEncodeToken (token) {\n  switch (token.type) {\n    case Type.false:\n      return fromArray([0xf4])\n    case Type.true:\n      return fromArray([0xf5])\n    case Type.null:\n      return fromArray([0xf6])\n    case Type.bytes:\n      if (!token.value.length) {\n        return fromArray([0x40])\n      }\n      return\n    case Type.string:\n      if (token.value === '') {\n        return fromArray([0x60])\n      }\n      return\n    case Type.array:\n      if (token.value === 0) {\n        return fromArray([0x80])\n      }\n      /* c8 ignore next 2 */\n      // shouldn't be possible if this were called when there was only one token\n      return\n    case Type.map:\n      if (token.value === 0) {\n        return fromArray([0xa0])\n      }\n      /* c8 ignore next 2 */\n      // shouldn't be possible if this were called when there was only one token\n      return\n    case Type.uint:\n      if (token.value < 24) {\n        return fromArray([Number(token.value)])\n      }\n      return\n    case Type.negint:\n      if (token.value >= -24) {\n        return fromArray([31 - Number(token.value)])\n      }\n  }\n}\n", "/* globals BigInt */\n\nimport { Token, Type } from './token.js'\nimport { decodeErrPrefix, assertEnoughData } from './common.js'\n\nexport const uintBoundaries = [24, 256, 65536, 4294967296, BigInt('18446744073709551616')]\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint8 (data, offset, options) {\n  assertEnoughData(data, offset, 1)\n  const value = data[offset]\n  if (options.strict === true && value < uintBoundaries[0]) {\n    throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n  }\n  return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint16 (data, offset, options) {\n  assertEnoughData(data, offset, 2)\n  const value = (data[offset] << 8) | data[offset + 1]\n  if (options.strict === true && value < uintBoundaries[1]) {\n    throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n  }\n  return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number}\n */\nexport function readUint32 (data, offset, options) {\n  assertEnoughData(data, offset, 4)\n  const value = (data[offset] * 16777216 /* 2 ** 24 */) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]\n  if (options.strict === true && value < uintBoundaries[2]) {\n    throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n  }\n  return value\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} offset\n * @param {DecodeOptions} options\n * @returns {number|bigint}\n */\nexport function readUint64 (data, offset, options) {\n  // assume BigInt, convert back to Number if within safe range\n  assertEnoughData(data, offset, 8)\n  const hi = (data[offset] * 16777216 /* 2 ** 24 */) + (data[offset + 1] << 16) + (data[offset + 2] << 8) + data[offset + 3]\n  const lo = (data[offset + 4] * 16777216 /* 2 ** 24 */) + (data[offset + 5] << 16) + (data[offset + 6] << 8) + data[offset + 7]\n  const value = (BigInt(hi) << BigInt(32)) + BigInt(lo)\n  if (options.strict === true && value < uintBoundaries[3]) {\n    throw new Error(`${decodeErrPrefix} integer encoded in more bytes than necessary (strict decode)`)\n  }\n  if (value <= Number.MAX_SAFE_INTEGER) {\n    return Number(value)\n  }\n  if (options.allowBigInt === true) {\n    return value\n  }\n  throw new Error(`${decodeErrPrefix} integers outside of the safe integer range are not supported`)\n}\n\n/* not required thanks to quick[] list\nconst oneByteTokens = new Array(24).fill(0).map((v, i) => new Token(Type.uint, i, 1))\nexport function decodeUintCompact (data, pos, minor, options) {\n  return oneByteTokens[minor]\n}\n*/\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint8 (data, pos, _minor, options) {\n  return new Token(Type.uint, readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint16 (data, pos, _minor, options) {\n  return new Token(Type.uint, readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint32 (data, pos, _minor, options) {\n  return new Token(Type.uint, readUint32(data, pos + 1, options), 5)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUint64 (data, pos, _minor, options) {\n  return new Token(Type.uint, readUint64(data, pos + 1, options), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeUint (buf, token) {\n  return encodeUintValue(buf, 0, token.value)\n}\n\n/**\n * @param {Bl} buf\n * @param {number} major\n * @param {number|bigint} uint\n */\nexport function encodeUintValue (buf, major, uint) {\n  if (uint < uintBoundaries[0]) {\n    const nuint = Number(uint)\n    // pack into one byte, minor=0, additional=value\n    buf.push([major | nuint])\n  } else if (uint < uintBoundaries[1]) {\n    const nuint = Number(uint)\n    // pack into two byte, minor=0, additional=24\n    buf.push([major | 24, nuint])\n  } else if (uint < uintBoundaries[2]) {\n    const nuint = Number(uint)\n    // pack into three byte, minor=0, additional=25\n    buf.push([major | 25, nuint >>> 8, nuint & 0xff])\n  } else if (uint < uintBoundaries[3]) {\n    const nuint = Number(uint)\n    // pack into five byte, minor=0, additional=26\n    buf.push([major | 26, (nuint >>> 24) & 0xff, (nuint >>> 16) & 0xff, (nuint >>> 8) & 0xff, nuint & 0xff])\n  } else {\n    const buint = BigInt(uint)\n    if (buint < uintBoundaries[4]) {\n      // pack into nine byte, minor=0, additional=27\n      const set = [major | 27, 0, 0, 0, 0, 0, 0, 0]\n      // simulate bitwise above 32 bits\n      let lo = Number(buint & BigInt(0xffffffff))\n      let hi = Number(buint >> BigInt(32) & BigInt(0xffffffff))\n      set[8] = lo & 0xff\n      lo = lo >> 8\n      set[7] = lo & 0xff\n      lo = lo >> 8\n      set[6] = lo & 0xff\n      lo = lo >> 8\n      set[5] = lo & 0xff\n      set[4] = hi & 0xff\n      hi = hi >> 8\n      set[3] = hi & 0xff\n      hi = hi >> 8\n      set[2] = hi & 0xff\n      hi = hi >> 8\n      set[1] = hi & 0xff\n      buf.push(set)\n    } else {\n      throw new Error(`${decodeErrPrefix} encountered BigInt larger than allowable range`)\n    }\n  }\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeUint.encodedSize = function encodedSize (token) {\n  return encodeUintValue.encodedSize(token.value)\n}\n\n/**\n * @param {number} uint\n * @returns {number}\n */\nencodeUintValue.encodedSize = function encodedSize (uint) {\n  if (uint < uintBoundaries[0]) {\n    return 1\n  }\n  if (uint < uintBoundaries[1]) {\n    return 2\n  }\n  if (uint < uintBoundaries[2]) {\n    return 3\n  }\n  if (uint < uintBoundaries[3]) {\n    return 5\n  }\n  return 9\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeUint.compareTokens = function compareTokens (tok1, tok2) {\n  return tok1.value < tok2.value ? -1 : tok1.value > tok2.value ? 1 : /* c8 ignore next */ 0\n}\n", "/* eslint-env es2020 */\n\nimport { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint8 (data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint16 (data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint32 (data, pos, _minor, options) {\n  return new Token(Type.negint, -1 - uint.readUint32(data, pos + 1, options), 5)\n}\n\nconst neg1b = BigInt(-1)\nconst pos1b = BigInt(1)\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeNegint64 (data, pos, _minor, options) {\n  const int = uint.readUint64(data, pos + 1, options)\n  if (typeof int !== 'bigint') {\n    const value = -1 - int\n    if (value >= Number.MIN_SAFE_INTEGER) {\n      return new Token(Type.negint, value, 9)\n    }\n  }\n  if (options.allowBigInt !== true) {\n    throw new Error(`${decodeErrPrefix} integers outside of the safe integer range are not supported`)\n  }\n  return new Token(Type.negint, neg1b - BigInt(int), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeNegint (buf, token) {\n  const negint = token.value\n  const unsigned = (typeof negint === 'bigint' ? (negint * neg1b - pos1b) : (negint * -1 - 1))\n  uint.encodeUintValue(buf, token.type.majorEncoded, unsigned)\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeNegint.encodedSize = function encodedSize (token) {\n  const negint = token.value\n  const unsigned = (typeof negint === 'bigint' ? (negint * neg1b - pos1b) : (negint * -1 - 1))\n  /* c8 ignore next 4 */\n  // handled by quickEncode, we shouldn't get here but it's included for completeness\n  if (unsigned < uint.uintBoundaries[0]) {\n    return 1\n  }\n  if (unsigned < uint.uintBoundaries[1]) {\n    return 2\n  }\n  if (unsigned < uint.uintBoundaries[2]) {\n    return 3\n  }\n  if (unsigned < uint.uintBoundaries[3]) {\n    return 5\n  }\n  return 9\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeNegint.compareTokens = function compareTokens (tok1, tok2) {\n  // opposite of the uint comparison since we store the uint version in bytes\n  return tok1.value < tok2.value ? 1 : tok1.value > tok2.value ? -1 : /* c8 ignore next */ 0\n}\n", "import { Token, Type } from './token.js'\nimport { assertEnoughData, decodeErrPrefix } from './common.js'\nimport * as uint from './0uint.js'\nimport { compare, fromString, slice } from './byte-utils.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (data, pos, prefix, length) {\n  assertEnoughData(data, pos, prefix + length)\n  const buf = slice(data, pos + prefix, pos + prefix + length)\n  return new Token(Type.bytes, buf, prefix + length)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeBytesCompact (data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes8 (data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes16 (data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes32 (data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBytes64 (data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options)\n  if (typeof l === 'bigint') {\n    throw new Error(`${decodeErrPrefix} 64-bit integer bytes lengths not supported`)\n  }\n  return toToken(data, pos, 9, l)\n}\n\n/**\n * `encodedBytes` allows for caching when we do a byte version of a string\n * for key sorting purposes\n * @param {Token} token\n * @returns {Uint8Array}\n */\nfunction tokenBytes (token) {\n  if (token.encodedBytes === undefined) {\n    token.encodedBytes = token.type === Type.string ? fromString(token.value) : token.value\n  }\n  // @ts-ignore c'mon\n  return token.encodedBytes\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeBytes (buf, token) {\n  const bytes = tokenBytes(token)\n  uint.encodeUintValue(buf, token.type.majorEncoded, bytes.length)\n  buf.push(bytes)\n}\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeBytes.encodedSize = function encodedSize (token) {\n  const bytes = tokenBytes(token)\n  return uint.encodeUintValue.encodedSize(bytes.length) + bytes.length\n}\n\n/**\n * @param {Token} tok1\n * @param {Token} tok2\n * @returns {number}\n */\nencodeBytes.compareTokens = function compareTokens (tok1, tok2) {\n  return compareBytes(tokenBytes(tok1), tokenBytes(tok2))\n}\n\n/**\n * @param {Uint8Array} b1\n * @param {Uint8Array} b2\n * @returns {number}\n */\nexport function compareBytes (b1, b2) {\n  return b1.length < b2.length ? -1 : b1.length > b2.length ? 1 : compare(b1, b2)\n}\n", "import { Token, Type } from './token.js'\nimport { assertEnoughData, decodeErrPrefix } from './common.js'\nimport * as uint from './0uint.js'\nimport { encodeBytes } from './2bytes.js'\nimport { toString, slice } from './byte-utils.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} prefix\n * @param {number} length\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nfunction toToken (data, pos, prefix, length, options) {\n  const totLength = prefix + length\n  assertEnoughData(data, pos, totLength)\n  const tok = new Token(Type.string, toString(data, pos + prefix, pos + totLength), totLength)\n  if (options.retainStringBytes === true) {\n    tok.byteValue = slice(data, pos + prefix, pos + totLength)\n  }\n  return tok\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeStringCompact (data, pos, minor, options) {\n  return toToken(data, pos, 1, minor, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString8 (data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options), options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString16 (data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options), options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString32 (data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options), options)\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeString64 (data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options)\n  if (typeof l === 'bigint') {\n    throw new Error(`${decodeErrPrefix} 64-bit integer string lengths not supported`)\n  }\n  return toToken(data, pos, 9, l, options)\n}\n\nexport const encodeString = encodeBytes\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (_data, _pos, prefix, length) {\n  return new Token(Type.array, length, prefix)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeArrayCompact (data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray8 (data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray16 (data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray32 (data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArray64 (data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options)\n  if (typeof l === 'bigint') {\n    throw new Error(`${decodeErrPrefix} 64-bit integer array lengths not supported`)\n  }\n  return toToken(data, pos, 9, l)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeArrayIndefinite (data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n  }\n  return toToken(data, pos, 1, Infinity)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeArray (buf, token) {\n  uint.encodeUintValue(buf, Type.array.majorEncoded, token.value)\n}\n\n// using an array as a map key, are you sure about this? we can only sort\n// by map length here, it's up to the encoder to decide to look deeper\nencodeArray.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeArray.encodedSize = function encodedSize (token) {\n  return uint.encodeUintValue.encodedSize(token.value)\n}\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\nimport { decodeErrPrefix } from './common.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} prefix\n * @param {number} length\n * @returns {Token}\n */\nfunction toToken (_data, _pos, prefix, length) {\n  return new Token(Type.map, length, prefix)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeMapCompact (data, pos, minor, _options) {\n  return toToken(data, pos, 1, minor)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap8 (data, pos, _minor, options) {\n  return toToken(data, pos, 2, uint.readUint8(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap16 (data, pos, _minor, options) {\n  return toToken(data, pos, 3, uint.readUint16(data, pos + 1, options))\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap32 (data, pos, _minor, options) {\n  return toToken(data, pos, 5, uint.readUint32(data, pos + 1, options))\n}\n\n// TODO: maybe we shouldn't support this ..\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMap64 (data, pos, _minor, options) {\n  const l = uint.readUint64(data, pos + 1, options)\n  if (typeof l === 'bigint') {\n    throw new Error(`${decodeErrPrefix} 64-bit integer map lengths not supported`)\n  }\n  return toToken(data, pos, 9, l)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeMapIndefinite (data, pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n  }\n  return toToken(data, pos, 1, Infinity)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeMap (buf, token) {\n  uint.encodeUintValue(buf, Type.map.majorEncoded, token.value)\n}\n\n// using a map as a map key, are you sure about this? we can only sort\n// by map length here, it's up to the encoder to decide to look deeper\nencodeMap.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeMap.encodedSize = function encodedSize (token) {\n  return uint.encodeUintValue.encodedSize(token.value)\n}\n", "import { Token, Type } from './token.js'\nimport * as uint from './0uint.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n */\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} minor\n * @param {DecodeOptions} _options\n * @returns {Token}\n */\nexport function decodeTagCompact (_data, _pos, minor, _options) {\n  return new Token(Type.tag, minor, 1)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag8 (data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint8(data, pos + 1, options), 2)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag16 (data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint16(data, pos + 1, options), 3)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag32 (data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint32(data, pos + 1, options), 5)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeTag64 (data, pos, _minor, options) {\n  return new Token(Type.tag, uint.readUint64(data, pos + 1, options), 9)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n */\nexport function encodeTag (buf, token) {\n  uint.encodeUintValue(buf, Type.tag.majorEncoded, token.value)\n}\n\nencodeTag.compareTokens = uint.encodeUint.compareTokens\n\n/**\n * @param {Token} token\n * @returns {number}\n */\nencodeTag.encodedSize = function encodedSize (token) {\n  return uint.encodeUintValue.encodedSize(token.value)\n}\n", "// TODO: shift some of the bytes logic to bytes-utils so we can use Buffer\n// where possible\n\nimport { Token, Type } from './token.js'\nimport { decodeErrPrefix } from './common.js'\nimport { encodeUint } from './0uint.js'\n\n/**\n * @typedef {import('./bl.js').Bl} Bl\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../interface').EncodeOptions} EncodeOptions\n */\n\nconst MINOR_FALSE = 20\nconst MINOR_TRUE = 21\nconst MINOR_NULL = 22\nconst MINOR_UNDEFINED = 23\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeUndefined (_data, _pos, _minor, options) {\n  if (options.allowUndefined === false) {\n    throw new Error(`${decodeErrPrefix} undefined values are not supported`)\n  } else if (options.coerceUndefinedToNull === true) {\n    return new Token(Type.null, null, 1)\n  }\n  return new Token(Type.undefined, undefined, 1)\n}\n\n/**\n * @param {Uint8Array} _data\n * @param {number} _pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeBreak (_data, _pos, _minor, options) {\n  if (options.allowIndefinite === false) {\n    throw new Error(`${decodeErrPrefix} indefinite length items not allowed`)\n  }\n  return new Token(Type.break, undefined, 1)\n}\n\n/**\n * @param {number} value\n * @param {number} bytes\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nfunction createToken (value, bytes, options) {\n  if (options) {\n    if (options.allowNaN === false && Number.isNaN(value)) {\n      throw new Error(`${decodeErrPrefix} NaN values are not supported`)\n    }\n    if (options.allowInfinity === false && (value === Infinity || value === -Infinity)) {\n      throw new Error(`${decodeErrPrefix} Infinity values are not supported`)\n    }\n  }\n  return new Token(Type.float, value, bytes)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat16 (data, pos, _minor, options) {\n  return createToken(readFloat16(data, pos + 1), 3, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat32 (data, pos, _minor, options) {\n  return createToken(readFloat32(data, pos + 1), 5, options)\n}\n\n/**\n * @param {Uint8Array} data\n * @param {number} pos\n * @param {number} _minor\n * @param {DecodeOptions} options\n * @returns {Token}\n */\nexport function decodeFloat64 (data, pos, _minor, options) {\n  return createToken(readFloat64(data, pos + 1), 9, options)\n}\n\n/**\n * @param {Bl} buf\n * @param {Token} token\n * @param {EncodeOptions} options\n */\nexport function encodeFloat (buf, token, options) {\n  const float = token.value\n\n  if (float === false) {\n    buf.push([Type.float.majorEncoded | MINOR_FALSE])\n  } else if (float === true) {\n    buf.push([Type.float.majorEncoded | MINOR_TRUE])\n  } else if (float === null) {\n    buf.push([Type.float.majorEncoded | MINOR_NULL])\n  } else if (float === undefined) {\n    buf.push([Type.float.majorEncoded | MINOR_UNDEFINED])\n  } else {\n    let decoded\n    let success = false\n    if (!options || options.float64 !== true) {\n      encodeFloat16(float)\n      decoded = readFloat16(ui8a, 1)\n      if (float === decoded || Number.isNaN(float)) {\n        ui8a[0] = 0xf9\n        buf.push(ui8a.slice(0, 3))\n        success = true\n      } else {\n        encodeFloat32(float)\n        decoded = readFloat32(ui8a, 1)\n        if (float === decoded) {\n          ui8a[0] = 0xfa\n          buf.push(ui8a.slice(0, 5))\n          success = true\n        }\n      }\n    }\n    if (!success) {\n      encodeFloat64(float)\n      decoded = readFloat64(ui8a, 1)\n      ui8a[0] = 0xfb\n      buf.push(ui8a.slice(0, 9))\n    }\n  }\n}\n\n/**\n * @param {Token} token\n * @param {EncodeOptions} options\n * @returns {number}\n */\nencodeFloat.encodedSize = function encodedSize (token, options) {\n  const float = token.value\n\n  if (float === false || float === true || float === null || float === undefined) {\n    return 1\n  }\n\n  if (!options || options.float64 !== true) {\n    encodeFloat16(float)\n    let decoded = readFloat16(ui8a, 1)\n    if (float === decoded || Number.isNaN(float)) {\n      return 3\n    }\n    encodeFloat32(float)\n    decoded = readFloat32(ui8a, 1)\n    if (float === decoded) {\n      return 5\n    }\n  }\n  return 9\n}\n\nconst buffer = new ArrayBuffer(9)\nconst dataView = new DataView(buffer, 1)\nconst ui8a = new Uint8Array(buffer, 0)\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat16 (inp) {\n  if (inp === Infinity) {\n    dataView.setUint16(0, 0x7c00, false)\n  } else if (inp === -Infinity) {\n    dataView.setUint16(0, 0xfc00, false)\n  } else if (Number.isNaN(inp)) {\n    dataView.setUint16(0, 0x7e00, false)\n  } else {\n    dataView.setFloat32(0, inp)\n    const valu32 = dataView.getUint32(0)\n    const exponent = (valu32 & 0x7f800000) >> 23\n    const mantissa = valu32 & 0x7fffff\n\n    /* c8 ignore next 6 */\n    if (exponent === 0xff) {\n      // too big, Infinity, but this should be hard (impossible?) to trigger\n      dataView.setUint16(0, 0x7c00, false)\n    } else if (exponent === 0x00) {\n      // 0.0, -0.0 and subnormals, shouldn't be possible to get here because 0.0 should be counted as an int\n      dataView.setUint16(0, ((inp & 0x80000000) >> 16) | (mantissa >> 13), false)\n    } else { // standard numbers\n      // chunks of logic here borrowed from https://github.com/PJK/libcbor/blob/c78f437182533e3efa8d963ff4b945bb635c2284/src/cbor/encoding.c#L127\n      const logicalExponent = exponent - 127\n      // Now we know that 2^exponent <= 0 logically\n      /* c8 ignore next 6 */\n      if (logicalExponent < -24) {\n        /* No unambiguous representation exists, this float is not a half float\n          and is too small to be represented using a half, round off to zero.\n          Consistent with the reference implementation. */\n        // should be difficult (impossible?) to get here in JS\n        dataView.setUint16(0, 0)\n      } else if (logicalExponent < -14) {\n        /* Offset the remaining decimal places by shifting the significand, the\n          value is lost. This is an implementation decision that works around the\n          absence of standard half-float in the language. */\n        dataView.setUint16(0, ((valu32 & 0x80000000) >> 16) | /* sign bit */ (1 << (24 + logicalExponent)), false)\n      } else {\n        dataView.setUint16(0, ((valu32 & 0x80000000) >> 16) | ((logicalExponent + 15) << 10) | (mantissa >> 13), false)\n      }\n    }\n  }\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat16 (ui8a, pos) {\n  if (ui8a.length - pos < 2) {\n    throw new Error(`${decodeErrPrefix} not enough data for float16`)\n  }\n\n  const half = (ui8a[pos] << 8) + ui8a[pos + 1]\n  if (half === 0x7c00) {\n    return Infinity\n  }\n  if (half === 0xfc00) {\n    return -Infinity\n  }\n  if (half === 0x7e00) {\n    return NaN\n  }\n  const exp = (half >> 10) & 0x1f\n  const mant = half & 0x3ff\n  let val\n  if (exp === 0) {\n    val = mant * (2 ** -24)\n  } else if (exp !== 31) {\n    val = (mant + 1024) * (2 ** (exp - 25))\n  /* c8 ignore next 4 */\n  } else {\n    // may not be possible to get here\n    val = mant === 0 ? Infinity : NaN\n  }\n  return (half & 0x8000) ? -val : val\n}\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat32 (inp) {\n  dataView.setFloat32(0, inp, false)\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat32 (ui8a, pos) {\n  if (ui8a.length - pos < 4) {\n    throw new Error(`${decodeErrPrefix} not enough data for float32`)\n  }\n  const offset = (ui8a.byteOffset || 0) + pos\n  return new DataView(ui8a.buffer, offset, 4).getFloat32(0, false)\n}\n\n/**\n * @param {number} inp\n */\nfunction encodeFloat64 (inp) {\n  dataView.setFloat64(0, inp, false)\n}\n\n/**\n * @param {Uint8Array} ui8a\n * @param {number} pos\n * @returns {number}\n */\nfunction readFloat64 (ui8a, pos) {\n  if (ui8a.length - pos < 8) {\n    throw new Error(`${decodeErrPrefix} not enough data for float64`)\n  }\n  const offset = (ui8a.byteOffset || 0) + pos\n  return new DataView(ui8a.buffer, offset, 8).getFloat64(0, false)\n}\n\n/**\n * @param {Token} _tok1\n * @param {Token} _tok2\n * @returns {number}\n */\nencodeFloat.compareTokens = encodeUint.compareTokens\n/*\nencodeFloat.compareTokens = function compareTokens (_tok1, _tok2) {\n  return _tok1\n  throw new Error(`${encodeErrPrefix} cannot use floats as map keys`)\n}\n*/\n", "import { decodeErrPrefix } from './common.js'\nimport { Type } from './token.js'\nimport { jump, quick } from './jump.js'\n\n/**\n * @typedef {import('./token.js').Token} Token\n * @typedef {import('../interface').DecodeOptions} DecodeOptions\n * @typedef {import('../interface').DecodeTokenizer} DecodeTokenizer\n */\n\nconst defaultDecodeOptions = {\n  strict: false,\n  allowIndefinite: true,\n  allowUndefined: true,\n  allowBigInt: true\n}\n\n/**\n * @implements {DecodeTokenizer}\n */\nclass Tokeniser {\n  /**\n   * @param {Uint8Array} data\n   * @param {DecodeOptions} options\n   */\n  constructor (data, options = {}) {\n    this._pos = 0\n    this.data = data\n    this.options = options\n  }\n\n  pos () {\n    return this._pos\n  }\n\n  done () {\n    return this._pos >= this.data.length\n  }\n\n  next () {\n    const byt = this.data[this._pos]\n    let token = quick[byt]\n    if (token === undefined) {\n      const decoder = jump[byt]\n      /* c8 ignore next 4 */\n      // if we're here then there's something wrong with our jump or quick lists!\n      if (!decoder) {\n        throw new Error(`${decodeErrPrefix} no decoder for major type ${byt >>> 5} (byte 0x${byt.toString(16).padStart(2, '0')})`)\n      }\n      const minor = byt & 31\n      token = decoder(this.data, this._pos, minor, this.options)\n    }\n    // @ts-ignore we get to assume encodedLength is set (crossing fingers slightly)\n    this._pos += token.encodedLength\n    return token\n  }\n}\n\nconst DONE = Symbol.for('DONE')\nconst BREAK = Symbol.for('BREAK')\n\n/**\n * @param {Token} token\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokenToArray (token, tokeniser, options) {\n  const arr = []\n  for (let i = 0; i < token.value; i++) {\n    const value = tokensToObject(tokeniser, options)\n    if (value === BREAK) {\n      if (token.value === Infinity) {\n        // normal end to indefinite length array\n        break\n      }\n      throw new Error(`${decodeErrPrefix} got unexpected break to lengthed array`)\n    }\n    if (value === DONE) {\n      throw new Error(`${decodeErrPrefix} found array but not enough entries (got ${i}, expected ${token.value})`)\n    }\n    arr[i] = value\n  }\n  return arr\n}\n\n/**\n * @param {Token} token\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokenToMap (token, tokeniser, options) {\n  const useMaps = options.useMaps === true\n  const obj = useMaps ? undefined : {}\n  const m = useMaps ? new Map() : undefined\n  for (let i = 0; i < token.value; i++) {\n    const key = tokensToObject(tokeniser, options)\n    if (key === BREAK) {\n      if (token.value === Infinity) {\n        // normal end to indefinite length map\n        break\n      }\n      throw new Error(`${decodeErrPrefix} got unexpected break to lengthed map`)\n    }\n    if (key === DONE) {\n      throw new Error(`${decodeErrPrefix} found map but not enough entries (got ${i} [no key], expected ${token.value})`)\n    }\n    if (useMaps !== true && typeof key !== 'string') {\n      throw new Error(`${decodeErrPrefix} non-string keys not supported (got ${typeof key})`)\n    }\n    if (options.rejectDuplicateMapKeys === true) {\n      // @ts-ignore\n      if ((useMaps && m.has(key)) || (!useMaps && (key in obj))) {\n        throw new Error(`${decodeErrPrefix} found repeat map key \"${key}\"`)\n      }\n    }\n    const value = tokensToObject(tokeniser, options)\n    if (value === DONE) {\n      throw new Error(`${decodeErrPrefix} found map but not enough entries (got ${i} [no value], expected ${token.value})`)\n    }\n    if (useMaps) {\n      // @ts-ignore TODO reconsider this .. maybe needs to be strict about key types\n      m.set(key, value)\n    } else {\n      // @ts-ignore TODO reconsider this .. maybe needs to be strict about key types\n      obj[key] = value\n    }\n  }\n  // @ts-ignore c'mon man\n  return useMaps ? m : obj\n}\n\n/**\n * @param {DecodeTokenizer} tokeniser\n * @param {DecodeOptions} options\n * @returns {any|BREAK|DONE}\n */\nfunction tokensToObject (tokeniser, options) {\n  // should we support array as an argument?\n  // check for tokenIter[Symbol.iterator] and replace tokenIter with what that returns?\n  if (tokeniser.done()) {\n    return DONE\n  }\n\n  const token = tokeniser.next()\n\n  if (token.type === Type.break) {\n    return BREAK\n  }\n\n  if (token.type.terminal) {\n    return token.value\n  }\n\n  if (token.type === Type.array) {\n    return tokenToArray(token, tokeniser, options)\n  }\n\n  if (token.type === Type.map) {\n    return tokenToMap(token, tokeniser, options)\n  }\n\n  if (token.type === Type.tag) {\n    if (options.tags && typeof options.tags[token.value] === 'function') {\n      const tagged = tokensToObject(tokeniser, options)\n      return options.tags[token.value](tagged)\n    }\n    throw new Error(`${decodeErrPrefix} tag not supported (${token.value})`)\n  }\n  /* c8 ignore next */\n  throw new Error('unsupported')\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {[any, Uint8Array]}\n */\nfunction decodeFirst (data, options) {\n  if (!(data instanceof Uint8Array)) {\n    throw new Error(`${decodeErrPrefix} data to decode must be a Uint8Array`)\n  }\n  options = Object.assign({}, defaultDecodeOptions, options)\n  const tokeniser = options.tokenizer || new Tokeniser(data, options)\n  const decoded = tokensToObject(tokeniser, options)\n  if (decoded === DONE) {\n    throw new Error(`${decodeErrPrefix} did not find any content to decode`)\n  }\n  if (decoded === BREAK) {\n    throw new Error(`${decodeErrPrefix} got unexpected break`)\n  }\n  return [decoded, data.subarray(tokeniser.pos())]\n}\n\n/**\n * @param {Uint8Array} data\n * @param {DecodeOptions} [options]\n * @returns {any}\n */\nfunction decode (data, options) {\n  const [decoded, remainder] = decodeFirst(data, options)\n  if (remainder.length > 0) {\n    throw new Error(`${decodeErrPrefix} too many terminals, data makes no sense`)\n  }\n  return decoded\n}\n\nexport { Tokeniser, tokensToObject, decode, decodeFirst }\n", "import { coerce } from '../bytes.js'\nimport * as Digest from './digest.js'\n\nconst code = 0x0\nconst name = 'identity'\n\n/** @type {(input:Uint8Array) => Uint8Array} */\nconst encode = coerce\n\n/**\n * @param {Uint8Array} input\n * @returns {Digest.Digest<typeof code, number>}\n */\nconst digest = (input) => Digest.create(code, encode(input))\n\nexport const identity = { code, name, encode, digest }\n", "import * as dagCbor from '@ipld/dag-cbor'\nimport errCode from 'err-code'\nimport { CID } from 'multiformats/cid'\nimport type { Resolver } from '../index.js'\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  const block = await blockstore.get(cid, options)\n  const object = dagCbor.decode<any>(block)\n  let subObject = object\n  let subPath = path\n\n  while (toResolve.length > 0) {\n    const prop = toResolve[0]\n\n    if (prop in subObject) {\n      // remove the bit of the path we have resolved\n      toResolve.shift()\n      subPath = `${subPath}/${prop}`\n\n      const subObjectCid = CID.asCID(subObject[prop])\n      if (subObjectCid != null) {\n        return {\n          entry: {\n            type: 'object',\n            name,\n            path,\n            cid,\n            node: block,\n            depth,\n            size: BigInt(block.length),\n            content: async function * () {\n              yield object\n            }\n          },\n          next: {\n            cid: subObjectCid,\n            name: prop,\n            path: subPath,\n            toResolve\n          }\n        }\n      }\n\n      subObject = subObject[prop]\n    } else {\n      // cannot resolve further\n      throw errCode(new Error(`No property named ${prop} found in cbor node ${cid}`), 'ERR_NO_PROP')\n    }\n  }\n\n  return {\n    entry: {\n      type: 'object',\n      name,\n      path,\n      cid,\n      node: block,\n      depth,\n      size: BigInt(block.length),\n      content: async function * () {\n        yield object\n      }\n    }\n  }\n}\n\nexport default resolve\n", "import errCode from 'err-code'\nimport * as mh from 'multiformats/hashes/digest'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n  async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n    const buf = extractDataFromBlock(node, 0n, start, end)\n\n    options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:identity', {\n      bytesRead: BigInt(buf.byteLength),\n      totalBytes: end - start,\n      fileSize: BigInt(node.byteLength)\n    }))\n\n    yield buf\n  }\n\n  return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  if (toResolve.length > 0) {\n    throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n  }\n  const buf = mh.decode(cid.multihash.bytes)\n\n  return {\n    entry: {\n      type: 'identity',\n      name,\n      path,\n      cid,\n      content: rawContent(buf.digest),\n      depth,\n      size: BigInt(buf.digest.length),\n      node: buf.digest\n    }\n  }\n}\n\nexport default resolve\n", "\nfunction extractDataFromBlock (block: Uint8Array, blockStart: bigint, requestedStart: bigint, requestedEnd: bigint): Uint8Array {\n  const blockLength = BigInt(block.length)\n  const blockEnd = BigInt(blockStart + blockLength)\n\n  if (requestedStart >= blockEnd || requestedEnd < blockStart) {\n    // If we are looking for a byte range that is starts after the start of the block,\n    // return an empty block.  This can happen when internal nodes contain data\n    return new Uint8Array(0)\n  }\n\n  if (requestedEnd >= blockStart && requestedEnd < blockEnd) {\n    // If the end byte is in the current block, truncate the block to the end byte\n    block = block.subarray(0, Number(requestedEnd - blockStart))\n  }\n\n  if (requestedStart >= blockStart && requestedStart < blockEnd) {\n    // If the start byte is in the current block, skip to the start byte\n    block = block.subarray(Number(requestedStart - blockStart))\n  }\n\n  return block\n}\n\nexport default extractDataFromBlock\n", "import errCode from 'err-code'\n\nconst validateOffsetAndLength = (size: number | bigint, offset: number | bigint = 0, length: number | bigint = size): { start: bigint, end: bigint } => {\n  const fileSize = BigInt(size)\n  const start = BigInt(offset ?? 0)\n  let end = BigInt(length)\n\n  if (end !== fileSize) {\n    end = start + end\n  }\n\n  if (end > fileSize) {\n    end = fileSize\n  }\n\n  if (start < 0n) {\n    throw errCode(new Error('Offset must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (start > fileSize) {\n    throw errCode(new Error('Offset must be less than the file size'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (end < 0n) {\n    throw errCode(new Error('Length must be greater than or equal to 0'), 'ERR_INVALID_PARAMS')\n  }\n\n  if (end > fileSize) {\n    throw errCode(new Error('Length must be less than the file size'), 'ERR_INVALID_PARAMS')\n  }\n\n  return {\n    start,\n    end\n  }\n}\n\nexport default validateOffsetAndLength\n", "import errCode from 'err-code'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, Resolver, ExportProgress } from '../index.js'\n\nconst rawContent = (node: Uint8Array): ((options?: ExporterOptions) => AsyncGenerator<Uint8Array, void, undefined>) => {\n  async function * contentGenerator (options: ExporterOptions = {}): AsyncGenerator<Uint8Array, void, undefined> {\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(node.length, options.offset, options.length)\n\n    const buf = extractDataFromBlock(node, 0n, start, end)\n\n    options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:raw', {\n      bytesRead: BigInt(buf.byteLength),\n      totalBytes: end - start,\n      fileSize: BigInt(node.byteLength)\n    }))\n\n    yield buf\n  }\n\n  return contentGenerator\n}\n\nconst resolve: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  if (toResolve.length > 0) {\n    throw errCode(new Error(`No link named ${path} found in raw node ${cid}`), 'ERR_NOT_FOUND')\n  }\n\n  const block = await blockstore.get(cid, options)\n\n  return {\n    entry: {\n      type: 'raw',\n      name,\n      path,\n      cid,\n      content: rawContent(block),\n      depth,\n      size: BigInt(block.length),\n      node: block\n    }\n  }\n}\n\nexport default resolve\n", "import { decode, type PBNode } from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport findShardCid from '../../utils/find-cid-in-shard.js'\nimport contentDirectory from './content/directory.js'\nimport contentFile from './content/file.js'\nimport contentHamtShardedDirectory from './content/hamt-sharded-directory.js'\nimport type { Resolver, UnixfsV1Resolver } from '../../index.js'\nimport type { CID } from 'multiformats/cid'\n\nconst findLinkCid = (node: PBNode, name: string): CID | undefined => {\n  const link = node.Links.find(link => link.Name === name)\n\n  return link?.Hash\n}\n\nconst contentExporters: Record<string, UnixfsV1Resolver> = {\n  raw: contentFile,\n  file: contentFile,\n  directory: contentDirectory,\n  'hamt-sharded-directory': contentHamtShardedDirectory,\n  metadata: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n    return () => []\n  },\n  symlink: (cid, node, unixfs, path, resolve, depth, blockstore) => {\n    return () => []\n  }\n}\n\n// @ts-expect-error types are wrong\nconst unixFsResolver: Resolver = async (cid, name, path, toResolve, resolve, depth, blockstore, options) => {\n  const block = await blockstore.get(cid, options)\n  const node = decode(block)\n  let unixfs\n  let next\n\n  if (name == null) {\n    name = cid.toString()\n  }\n\n  if (node.Data == null) {\n    throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n  }\n\n  try {\n    unixfs = UnixFS.unmarshal(node.Data)\n  } catch (err: any) {\n    // non-UnixFS dag-pb node? It could happen.\n    throw errCode(err, 'ERR_NOT_UNIXFS')\n  }\n\n  if (path == null) {\n    path = name\n  }\n\n  if (toResolve.length > 0) {\n    let linkCid\n\n    if (unixfs?.type === 'hamt-sharded-directory') {\n      // special case - unixfs v1 hamt shards\n      linkCid = await findShardCid(node, toResolve[0], blockstore)\n    } else {\n      linkCid = findLinkCid(node, toResolve[0])\n    }\n\n    if (linkCid == null) {\n      throw errCode(new Error('file does not exist'), 'ERR_NOT_FOUND')\n    }\n\n    // remove the path component we have resolved\n    const nextName = toResolve.shift()\n    const nextPath = `${path}/${nextName}`\n\n    next = {\n      cid: linkCid,\n      toResolve,\n      name: nextName ?? '',\n      path: nextPath\n    }\n  }\n\n  const content = contentExporters[unixfs.type](cid, node, unixfs, path, resolve, depth, blockstore)\n\n  if (content == null) {\n    throw errCode(new Error('could not find content exporter'), 'ERR_NOT_FOUND')\n  }\n\n  if (unixfs.isDirectory()) {\n    return {\n      entry: {\n        type: 'directory',\n        name,\n        path,\n        cid,\n        content,\n        unixfs,\n        depth,\n        node,\n        size: unixfs.fileSize()\n      },\n      next\n    }\n  }\n\n  return {\n    entry: {\n      type: 'file',\n      name,\n      path,\n      cid,\n      content,\n      unixfs,\n      depth,\n      node,\n      size: unixfs.fileSize()\n    },\n    next\n  }\n}\n\nexport default unixFsResolver\n", "\nimport { decode, type PBLink, type PBNode } from '@ipld/dag-pb'\nimport { murmur3128 } from '@multiformats/murmur3'\nimport { Bucket, type BucketPosition, createHAMT } from 'hamt-sharding'\nimport type { ExporterOptions, ShardTraversalContext, ReadableStorage } from '../index.js'\nimport type { CID } from 'multiformats/cid'\n\n// FIXME: this is copy/pasted from ipfs-unixfs-importer/src/options.js\nconst hashFn = async function (buf: Uint8Array): Promise<Uint8Array> {\n  return (await murmur3128.encode(buf))\n    // Murmur3 outputs 128 bit but, accidentally, IPFS Go's\n    // implementation only uses the first 64, so we must do the same\n    // for parity..\n    .slice(0, 8)\n    // Invert buffer because that's how Go impl does it\n    .reverse()\n}\n\nconst addLinksToHamtBucket = async (links: PBLink[], bucket: Bucket<boolean>, rootBucket: Bucket<boolean>): Promise<void> => {\n  await Promise.all(\n    links.map(async link => {\n      if (link.Name == null) {\n        // TODO(@rvagg): what do? this is technically possible\n        throw new Error('Unexpected Link without a Name')\n      }\n      if (link.Name.length === 2) {\n        const pos = parseInt(link.Name, 16)\n\n        bucket._putObjectAt(pos, new Bucket({\n          hash: rootBucket._options.hash,\n          bits: rootBucket._options.bits\n        }, bucket, pos))\n        return\n      }\n\n      await rootBucket.put(link.Name.substring(2), true)\n    })\n  )\n}\n\nconst toPrefix = (position: number): string => {\n  return position\n    .toString(16)\n    .toUpperCase()\n    .padStart(2, '0')\n    .substring(0, 2)\n}\n\nconst toBucketPath = (position: BucketPosition<boolean>): Array<Bucket<boolean>> => {\n  let bucket = position.bucket\n  const path = []\n\n  while (bucket._parent != null) {\n    path.push(bucket)\n\n    bucket = bucket._parent\n  }\n\n  path.push(bucket)\n\n  return path.reverse()\n}\n\nconst findShardCid = async (node: PBNode, name: string, blockstore: ReadableStorage, context?: ShardTraversalContext, options?: ExporterOptions): Promise<CID | undefined> => {\n  if (context == null) {\n    const rootBucket = createHAMT<boolean>({\n      hashFn\n    })\n\n    context = {\n      rootBucket,\n      hamtDepth: 1,\n      lastBucket: rootBucket\n    }\n  }\n\n  await addLinksToHamtBucket(node.Links, context.lastBucket, context.rootBucket)\n\n  const position = await context.rootBucket._findNewBucketAndPos(name)\n  let prefix = toPrefix(position.pos)\n  const bucketPath = toBucketPath(position)\n\n  if (bucketPath.length > context.hamtDepth) {\n    context.lastBucket = bucketPath[context.hamtDepth]\n\n    prefix = toPrefix(context.lastBucket._posAtParent)\n  }\n\n  const link = node.Links.find(link => {\n    if (link.Name == null) {\n      return false\n    }\n\n    const entryPrefix = link.Name.substring(0, 2)\n    const entryName = link.Name.substring(2)\n\n    if (entryPrefix !== prefix) {\n      // not the entry or subshard we're looking for\n      return false\n    }\n\n    if (entryName !== '' && entryName !== name) {\n      // not the entry we're looking for\n      return false\n    }\n\n    return true\n  })\n\n  if (link == null) {\n    return\n  }\n\n  if (link.Name != null && link.Name.substring(2) === name) {\n    return link.Hash\n  }\n\n  context.hamtDepth++\n\n  const block = await blockstore.get(link.Hash, options)\n  node = decode(block)\n\n  return findShardCid(node, name, blockstore, context, options)\n}\n\nexport default findShardCid\n", "import filter from 'it-filter'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, ExportWalk, UnixfsV1DirectoryContent, UnixfsV1Resolver } from '../../../index.js'\n\nconst directoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  async function * yieldDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n    const offset = options.offset ?? 0\n    const length = options.length ?? node.Links.length\n    const links = node.Links.slice(offset, length)\n\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:directory', {\n      cid\n    }))\n\n    yield * pipe(\n      links,\n      source => map(source, link => {\n        return async () => {\n          const linkName = link.Name ?? ''\n          const linkPath = `${path}/${linkName}`\n          const result = await resolve(link.Hash, linkName, linkPath, [], depth + 1, blockstore, options)\n          return result.entry\n        }\n      }),\n      source => parallel(source, { ordered: true }),\n      source => filter(source, entry => entry != null)\n    )\n  }\n\n  return yieldDirectoryContent\n}\n\nexport default directoryContent\n", "/**\n * @packageDocumentation\n *\n * Filter values out of an (async)iterable\n *\n * @example\n *\n * ```javascript\n * import all from 'it-all'\n * import filter from 'it-filter'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const fn = (val, index) => val > 2 // Return boolean to keep item\n *\n * const arr = all(filter(values, fn))\n *\n * console.info(arr) // 3, 4\n * ```\n *\n * Async sources and filter functions must be awaited:\n *\n * ```javascript\n * import all from 'it-all'\n * import filter from 'it-filter'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const fn = async val => (val, index) > 2 // Return boolean or promise of boolean to keep item\n *\n * const arr = await all(filter(values, fn))\n *\n * console.info(arr) // 3, 4\n * ```\n */\n\nimport peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Filters the passed (async) iterable by using the filter function\n */\nfunction filter <T> (source: Iterable<T>, fn: (val: T, index: number) => Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T>, fn: (val: T, index: number) => boolean): Generator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T, index: number) => boolean | Promise<boolean>): AsyncGenerator<T, void, undefined>\nfunction filter <T> (source: Iterable<T> | AsyncIterable<T>, fn: (val: T, index: number) => boolean | Promise<boolean>): Generator<T, void, undefined> | AsyncGenerator<T, void, undefined> {\n  let index = 0\n\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      for await (const entry of source) {\n        if (await fn(entry, index++)) {\n          yield entry\n        }\n      }\n    })()\n  }\n\n  // if mapping function returns a promise we have to return an async generator\n  const peekable = peek(source)\n  const { value, done } = peekable.next()\n\n  if (done === true) {\n    return (function * () {}())\n  }\n\n  const res = fn(value, index++)\n\n  // @ts-expect-error .then is not present on O\n  if (typeof res.then === 'function') {\n    return (async function * () {\n      if (await res) {\n        yield value\n      }\n\n      for await (const entry of peekable) {\n        if (await fn(entry, index++)) {\n          yield entry\n        }\n      }\n    })()\n  }\n\n  const func = fn as (val: T, index: number) => boolean\n\n  return (function * () {\n    if (res === true) {\n      yield value\n    }\n\n    for (const entry of peekable) {\n      if (func(entry, index++)) {\n        yield entry\n      }\n    }\n  })()\n}\n\nexport default filter\n", "/**\n * @packageDocumentation\n *\n * Lets you look at the contents of an async iterator and decide what to do\n *\n * @example\n *\n * ```javascript\n * import peekable from 'it-peekable'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const it = peekable(value)\n *\n * const first = it.peek()\n *\n * console.info(first) // 0\n *\n * it.push(first)\n *\n * console.info([...it])\n * // [ 0, 1, 2, 3, 4 ]\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import peekable from 'it-peekable'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const it = peekable(values())\n *\n * const first = await it.peek()\n *\n * console.info(first) // 0\n *\n * it.push(first)\n *\n * console.info(await all(it))\n * // [ 0, 1, 2, 3, 4 ]\n * ```\n */\n\nexport interface Peek <T> {\n  peek(): IteratorResult<T, undefined>\n}\n\nexport interface AsyncPeek <T> {\n  peek(): Promise<IteratorResult<T, undefined>>\n}\n\nexport interface Push <T> {\n  push(value: T): void\n}\n\nexport type Peekable <T> = Iterable<T> & Peek<T> & Push<T> & Iterator<T>\n\nexport type AsyncPeekable <T> = AsyncIterable<T> & AsyncPeek<T> & Push<T> & AsyncIterator<T>\n\nfunction peekable <T> (iterable: Iterable<T>): Peekable<T>\nfunction peekable <T> (iterable: AsyncIterable<T>): AsyncPeekable<T>\nfunction peekable <T> (iterable: Iterable<T> | AsyncIterable<T>): Peekable<T> | AsyncPeekable<T> {\n  // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n  const [iterator, symbol] = iterable[Symbol.asyncIterator] != null\n    // @ts-expect-error can't use Symbol.asyncIterator to index iterable since it might be Iterable\n    ? [iterable[Symbol.asyncIterator](), Symbol.asyncIterator]\n    // @ts-expect-error can't use Symbol.iterator to index iterable since it might be AsyncIterable\n    : [iterable[Symbol.iterator](), Symbol.iterator]\n\n  const queue: any[] = []\n\n  // @ts-expect-error can't use symbol to index peekable\n  return {\n    peek: () => {\n      return iterator.next()\n    },\n    push: (value: any) => {\n      queue.push(value)\n    },\n    next: () => {\n      if (queue.length > 0) {\n        return {\n          done: false,\n          value: queue.shift()\n        }\n      }\n\n      return iterator.next()\n    },\n    [symbol] () {\n      return this\n    }\n  }\n}\n\nexport default peekable\n", "/**\n * @packageDocumentation\n *\n * Convert one value from an (async)iterator into another.\n *\n * @example\n *\n * ```javascript\n * import map from 'it-map'\n *\n * // This can also be an iterator, generator, etc\n * const values = [0, 1, 2, 3, 4]\n *\n * const result = map(values, (val, index) => val++)\n *\n * console.info(result) // [1, 2, 3, 4, 5]\n * ```\n *\n * Async sources and transforms must be awaited:\n *\n * ```javascript\n * import map from 'it-map'\n *\n * const values = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n *\n * const result = await map(values(), async (val, index) => val++)\n *\n * console.info(result) // [1, 2, 3, 4, 5]\n * ```\n */\n\nimport peek from 'it-peekable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Takes an (async) iterable and returns one with each item mapped by the passed\n * function\n */\nfunction map <I, O> (source: Iterable<I>, func: (val: I, index: number) => Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: Iterable<I>, func: (val: I, index: number) => O): Generator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I, index: number) => O | Promise<O>): AsyncGenerator<O, void, undefined>\nfunction map <I, O> (source: AsyncIterable<I> | Iterable<I>, func: (val: I, index: number) => O | Promise<O>): AsyncGenerator<O, void, undefined> | Generator<O, void, undefined> {\n  let index = 0\n\n  if (isAsyncIterable(source)) {\n    return (async function * () {\n      for await (const val of source) {\n        yield func(val, index++)\n      }\n    })()\n  }\n\n  // if mapping function returns a promise we have to return an async generator\n  const peekable = peek(source)\n  const { value, done } = peekable.next()\n\n  if (done === true) {\n    return (function * () {}())\n  }\n\n  const res = func(value, index++)\n\n  // @ts-expect-error .then is not present on O\n  if (typeof res.then === 'function') {\n    return (async function * () {\n      yield await res\n\n      for await (const val of peekable) {\n        yield func(val, index++)\n      }\n    })()\n  }\n\n  const fn = func as (val: I, index: number) => O\n\n  return (function * () {\n    yield res as O\n\n    for (const val of peekable) {\n      yield fn(val, index++)\n    }\n  })()\n}\n\nexport default map\n", "/**\n * @packageDocumentation\n *\n * Takes an (async) iterable that emits promise-returning functions, invokes them in parallel up to the concurrency limit and emits the results as they become available, optionally in the same order as the input\n *\n * @example\n *\n * ```javascript\n * import parallel from 'it-parallel'\n * import all from 'it-all'\n * import delay from 'delay'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const input = [\n *   async () => {\n *     console.info('start 1')\n *     await delay(500)\n *\n *     console.info('end 1')\n *     return 1\n *   },\n *   async () => {\n *     console.info('start 2')\n *     await delay(200)\n *\n *     console.info('end 2')\n *     return 2\n *   },\n *   async () => {\n *     console.info('start 3')\n *     await delay(100)\n *\n *     console.info('end 3')\n *     return 3\n *   }\n * ]\n *\n * const result = await all(parallel(input, {\n *   concurrency: 2\n * }))\n *\n * // output:\n * // start 1\n * // start 2\n * // end 2\n * // start 3\n * // end 3\n * // end 1\n *\n * console.info(result) // [2, 3, 1]\n * ```\n *\n * If order is important, pass `ordered: true` as an option:\n *\n * ```javascript\n * const result = await all(parallel(input, {\n *   concurrency: 2,\n *   ordered: true\n * }))\n *\n * // output:\n * // start 1\n * // start 2\n * // end 2\n * // start 3\n * // end 3\n * // end 1\n *\n * console.info(result) // [1, 2, 3]\n * ```\n */\n\nimport defer from 'p-defer'\n\ninterface Operation<T> {\n  done: boolean\n  ok: boolean\n  err: Error\n  value: T\n}\n\nconst CustomEvent = globalThis.CustomEvent ?? Event\n\nexport interface ParallelOptions {\n  /**\n   * How many jobs to execute in parallel (default: )\n   */\n  concurrency?: number\n  ordered?: boolean\n}\n\n/**\n * Takes an (async) iterator that emits promise-returning functions,\n * invokes them in parallel and emits the results as they become available but\n * in the same order as the input\n */\nexport default async function * parallel <T> (source: Iterable<() => Promise<T>> | AsyncIterable<() => Promise<T>>, options: ParallelOptions = {}): AsyncGenerator<T, void, undefined> {\n  let concurrency = options.concurrency ?? Infinity\n\n  if (concurrency < 1) {\n    concurrency = Infinity\n  }\n\n  const ordered = options.ordered == null ? false : options.ordered\n  const emitter = new EventTarget()\n\n  const ops: Array<Operation<T>> = []\n  let slotAvailable = defer()\n  let resultAvailable = defer()\n  let sourceFinished = false\n  let sourceErr: Error | undefined\n  let opErred = false\n\n  emitter.addEventListener('task-complete', () => {\n    resultAvailable.resolve()\n  })\n\n  void Promise.resolve().then(async () => {\n    try {\n      for await (const task of source) {\n        if (ops.length === concurrency) {\n          slotAvailable = defer()\n          await slotAvailable.promise\n        }\n\n        if (opErred) {\n          break\n        }\n\n        const op: any = {\n          done: false\n        }\n        ops.push(op)\n\n        task()\n          .then(result => {\n            op.done = true\n            op.ok = true\n            op.value = result\n            emitter.dispatchEvent(new CustomEvent('task-complete'))\n          }, err => {\n            op.done = true\n            op.err = err\n            emitter.dispatchEvent(new CustomEvent('task-complete'))\n          })\n      }\n\n      sourceFinished = true\n      emitter.dispatchEvent(new CustomEvent('task-complete'))\n    } catch (err: any) {\n      sourceErr = err\n      emitter.dispatchEvent(new CustomEvent('task-complete'))\n    }\n  })\n\n  function valuesAvailable (): boolean {\n    if (ordered) {\n      return ops[0]?.done\n    }\n\n    return Boolean(ops.find(op => op.done))\n  }\n\n  function * yieldOrderedValues (): Generator<T, void, unknown> {\n    while ((ops.length > 0) && ops[0].done) {\n      const op = ops[0]\n      ops.shift()\n\n      if (op.ok) {\n        yield op.value\n      } else {\n        // allow the source to exit\n        opErred = true\n        slotAvailable.resolve()\n\n        throw op.err\n      }\n\n      slotAvailable.resolve()\n    }\n  }\n\n  function * yieldUnOrderedValues (): Generator<T, void, unknown> {\n    // more values can become available while we wait for `yield`\n    // to return control to this function\n    while (valuesAvailable()) {\n      for (let i = 0; i < ops.length; i++) {\n        if (ops[i].done) {\n          const op = ops[i]\n          ops.splice(i, 1)\n          i--\n\n          if (op.ok) {\n            yield op.value\n          } else {\n            opErred = true\n            slotAvailable.resolve()\n\n            throw op.err\n          }\n\n          slotAvailable.resolve()\n        }\n      }\n    }\n  }\n\n  while (true) {\n    if (!valuesAvailable()) {\n      resultAvailable = defer()\n      await resultAvailable.promise\n    }\n\n    if (sourceErr != null) {\n      // the source threw an error, propagate it\n      throw sourceErr\n    }\n\n    if (ordered) {\n      yield * yieldOrderedValues()\n    } else {\n      yield * yieldUnOrderedValues()\n    }\n\n    if (sourceFinished && ops.length === 0) {\n      // not waiting for any results and no more tasks so we are done\n      break\n    }\n  }\n}\n", "export default function pDefer() {\n\tconst deferred = {};\n\n\tdeferred.promise = new Promise((resolve, reject) => {\n\t\tdeferred.resolve = resolve;\n\t\tdeferred.reject = reject;\n\t});\n\n\treturn deferred;\n}\n", "import { pushable } from 'it-pushable'\nimport merge from 'it-merge'\nimport type { Duplex, Transform, Sink } from 'it-stream-types'\n\ninterface SourceFn<A = any> { (): A }\n\ntype PipeSource<A = any> =\n  Iterable<A> |\n  AsyncIterable<A> |\n  SourceFn<A> |\n  Duplex<A, any, any>\n\ntype PipeTransform<A = any, B = any> =\n  Transform<A, B> |\n  Duplex<B, A>\n\ntype PipeSink<A = any, B = any> =\n  Sink<A, B> |\n  Duplex<any, A, B>\n\ntype PipeOutput<A> =\n  A extends Sink<any> ? ReturnType<A> :\n    A extends Duplex<any, any, any> ? ReturnType<A['sink']> :\n      never\n\n// single item pipe output includes pipe source types\ntype SingleItemPipeOutput<A> =\n  A extends Iterable<any> ? A :\n    A extends AsyncIterable<any> ? A :\n      A extends SourceFn ? ReturnType<A> :\n        A extends Duplex<any, any, any> ? A['source'] :\n          PipeOutput<A>\n\ntype PipeFnInput<A> =\n  A extends Iterable<any> ? A :\n    A extends AsyncIterable<any> ? A :\n      A extends SourceFn ? ReturnType<A> :\n        A extends Transform<any, any> ? ReturnType<A> :\n          A extends Duplex<any, any, any> ? A['source'] :\n            never\n\n// one item, just a pass-through\nexport function pipe<\n  A extends PipeSource\n> (\n  source: A\n): SingleItemPipeOutput<A>\n\n// two items, source to sink\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeSink<PipeFnInput<A>>\n> (\n  source: A,\n  sink: B\n): PipeOutput<B>\n\n// three items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeSink<PipeFnInput<B>>\n> (\n  source: A,\n  transform1: B,\n  sink: C\n): PipeOutput<C>\n\n// many items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeSink<PipeFnInput<C>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  sink: D\n): PipeOutput<D>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeSink<PipeFnInput<D>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  sink: E\n): PipeOutput<E>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeSink<PipeFnInput<E>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  sink: F\n): PipeOutput<F>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeSink<PipeFnInput<F>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  sink: G\n): PipeOutput<G>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeSink<PipeFnInput<G>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  sink: H\n): PipeOutput<H>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeSink<PipeFnInput<H>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  sink: I\n): PipeOutput<I>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeSink<PipeFnInput<I>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  sink: J\n): PipeOutput<J>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeTransform<PipeFnInput<I>>,\n  K extends PipeSink<PipeFnInput<J>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  transform9: J,\n  sink: K\n): PipeOutput<K>\n\n// lots of items, source to sink with transform(s) in between\nexport function pipe<\n  A extends PipeSource,\n  B extends PipeTransform<PipeFnInput<A>>,\n  C extends PipeTransform<PipeFnInput<B>>,\n  D extends PipeTransform<PipeFnInput<C>>,\n  E extends PipeTransform<PipeFnInput<D>>,\n  F extends PipeTransform<PipeFnInput<E>>,\n  G extends PipeTransform<PipeFnInput<F>>,\n  H extends PipeTransform<PipeFnInput<G>>,\n  I extends PipeTransform<PipeFnInput<H>>,\n  J extends PipeTransform<PipeFnInput<I>>,\n  K extends PipeTransform<PipeFnInput<J>>,\n  L extends PipeSink<PipeFnInput<K>>\n> (\n  source: A,\n  transform1: B,\n  transform2: C,\n  transform3: D,\n  transform4: E,\n  transform5: F,\n  transform6: G,\n  transform7: H,\n  transform8: I,\n  transform9: J,\n  transform10: K,\n  sink: L\n): PipeOutput<L>\n\nexport function pipe (first: any, ...rest: any[]): any {\n  if (first == null) {\n    throw new Error('Empty pipeline')\n  }\n\n  // Duplex at start: wrap in function and return duplex source\n  if (isDuplex(first)) {\n    const duplex = first\n    first = () => duplex.source\n  // Iterable at start: wrap in function\n  } else if (isIterable(first) || isAsyncIterable(first)) {\n    const source = first\n    first = () => source\n  }\n\n  const fns = [first, ...rest]\n\n  if (fns.length > 1) {\n    // Duplex at end: use duplex sink\n    if (isDuplex(fns[fns.length - 1])) {\n      fns[fns.length - 1] = fns[fns.length - 1].sink\n    }\n  }\n\n  if (fns.length > 2) {\n    // Duplex in the middle, consume source with duplex sink and return duplex source\n    for (let i = 1; i < fns.length - 1; i++) {\n      if (isDuplex(fns[i])) {\n        fns[i] = duplexPipelineFn(fns[i])\n      }\n    }\n  }\n\n  return rawPipe(...fns)\n}\n\nexport const rawPipe = (...fns: any): any => {\n  let res\n  while (fns.length > 0) {\n    res = fns.shift()(res)\n  }\n  return res\n}\n\nconst isAsyncIterable = (obj: any): obj is AsyncIterable<unknown> => {\n  return obj?.[Symbol.asyncIterator] != null\n}\n\nconst isIterable = (obj: any): obj is Iterable<unknown> => {\n  return obj?.[Symbol.iterator] != null\n}\n\nconst isDuplex = (obj: any): obj is Duplex => {\n  if (obj == null) {\n    return false\n  }\n\n  return obj.sink != null && obj.source != null\n}\n\nconst duplexPipelineFn = (duplex: Duplex<any, any, any>) => {\n  return (source: any) => {\n    const p = duplex.sink(source)\n\n    if (p?.then != null) {\n      const stream = pushable<any>({\n        objectMode: true\n      })\n      p.then(() => {\n        stream.end()\n      }, (err: Error) => {\n        stream.end(err)\n      })\n\n      let sourceWrap: () => Iterable<any> | AsyncIterable<any>\n      const source = duplex.source\n\n      if (isAsyncIterable(source)) {\n        sourceWrap = async function * () {\n          yield * source\n          stream.end()\n        }\n      } else if (isIterable(source)) {\n        sourceWrap = function * () {\n          yield * source\n          stream.end()\n        }\n      } else {\n        throw new Error('Unknown duplex source type - must be Iterable or AsyncIterable')\n      }\n\n      return merge(stream, sourceWrap())\n    }\n\n    return duplex.source\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * An iterable that you can push values into.\n *\n * @example\n *\n * ```js\n * import { pushable } from 'it-pushable'\n *\n * const source = pushable()\n *\n * setTimeout(() => source.push('hello'), 100)\n * setTimeout(() => source.push('world'), 200)\n * setTimeout(() => source.end(), 300)\n *\n * const start = Date.now()\n *\n * for await (const value of source) {\n *   console.log(`got \"${value}\" after ${Date.now() - start}ms`)\n * }\n * console.log(`done after ${Date.now() - start}ms`)\n *\n * // Output:\n * // got \"hello\" after 105ms\n * // got \"world\" after 207ms\n * // done after 309ms\n * ```\n *\n * @example\n *\n * ```js\n * import { pushableV } from 'it-pushable'\n * import all from 'it-all'\n *\n * const source = pushableV()\n *\n * source.push(1)\n * source.push(2)\n * source.push(3)\n * source.end()\n *\n * console.info(await all(source))\n *\n * // Output:\n * // [ [1, 2, 3] ]\n * ```\n */\n\nimport deferred from 'p-defer'\nimport { FIFO, type Next } from './fifo.js'\n\nexport class AbortError extends Error {\n  type: string\n  code: string\n\n  constructor (message?: string, code?: string) {\n    super(message ?? 'The operation was aborted')\n    this.type = 'aborted'\n    this.code = code ?? 'ABORT_ERR'\n  }\n}\n\nexport interface AbortOptions {\n  signal?: AbortSignal\n}\n\ninterface BasePushable<T> {\n  /**\n   * End the iterable after all values in the buffer (if any) have been yielded. If an\n   * error is passed the buffer is cleared immediately and the next iteration will\n   * throw the passed error\n   */\n  end(err?: Error): this\n\n  /**\n   * Push a value into the iterable. Values are yielded from the iterable in the order\n   * they are pushed. Values not yet consumed from the iterable are buffered.\n   */\n  push(value: T): this\n\n  /**\n   * Returns a promise that resolves when the underlying queue becomes empty (e.g.\n   * this.readableLength === 0).\n   *\n   * If an AbortSignal is passed as an option and that signal aborts, it only\n   * causes the returned promise to reject - it does not end the pushable.\n   */\n  onEmpty(options?: AbortOptions): Promise<void>\n\n  /**\n   * This property contains the number of bytes (or objects) in the queue ready to be read.\n   *\n   * If `objectMode` is true, this is the number of objects in the queue, if false it's the\n   * total number of bytes in the queue.\n   */\n  readableLength: number\n}\n\n/**\n * An iterable that you can push values into.\n */\nexport interface Pushable<T, R = void, N = unknown> extends AsyncGenerator<T, R, N>, BasePushable<T> {}\n\n/**\n * Similar to `pushable`, except it yields multiple buffered chunks at a time. All values yielded from the iterable will be arrays.\n */\nexport interface PushableV<T, R = void, N = unknown> extends AsyncGenerator<T[], R, N>, BasePushable<T> {}\n\nexport interface Options {\n  /**\n   * A boolean value that means non-`Uint8Array`s will be passed to `.push`, default: `false`\n   */\n  objectMode?: boolean\n\n  /**\n   * A function called after *all* values have been yielded from the iterator (including\n   * buffered values). In the case when the iterator is ended with an error it will be\n   * passed the error as a parameter.\n   */\n  onEnd?(err?: Error): void\n}\n\nexport interface DoneResult { done: true }\nexport interface ValueResult<T> { done: false, value: T }\nexport type NextResult<T> = ValueResult<T> | DoneResult\n\ninterface getNext<T, V = T> { (buffer: FIFO<T>): NextResult<V> }\n\nexport interface ObjectPushableOptions extends Options {\n  objectMode: true\n}\n\nexport interface BytePushableOptions extends Options {\n  objectMode?: false\n}\n\n/**\n * Create a new async iterable. The values yielded from calls to `.next()`\n * or when used in a `for await of`loop are \"pushed\" into the iterable.\n * Returns an async iterable object with additional methods.\n */\nexport function pushable<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): Pushable<T>\nexport function pushable<T> (options: ObjectPushableOptions): Pushable<T>\nexport function pushable<T> (options: Options = {}): Pushable<T> {\n  const getNext = (buffer: FIFO<T>): NextResult<T> => {\n    const next: Next<T> | undefined = buffer.shift()\n\n    if (next == null) {\n      return { done: true }\n    }\n\n    if (next.error != null) {\n      throw next.error\n    }\n\n    return {\n      done: next.done === true,\n      // @ts-expect-error if done is false, value will be present\n      value: next.value\n    }\n  }\n\n  return _pushable<T, T, Pushable<T>>(getNext, options)\n}\n\nexport function pushableV<T extends { byteLength: number } = Uint8Array> (options?: BytePushableOptions): PushableV<T>\nexport function pushableV<T> (options: ObjectPushableOptions): PushableV<T>\nexport function pushableV<T> (options: Options = {}): PushableV<T> {\n  const getNext = (buffer: FIFO<T>): NextResult<T[]> => {\n    let next: Next<T> | undefined\n    const values: T[] = []\n\n    while (!buffer.isEmpty()) {\n      next = buffer.shift()\n\n      if (next == null) {\n        break\n      }\n\n      if (next.error != null) {\n        throw next.error\n      }\n\n      if (next.done === false) {\n        // @ts-expect-error if done is false value should be pushed\n        values.push(next.value)\n      }\n    }\n\n    if (next == null) {\n      return { done: true }\n    }\n\n    return {\n      done: next.done === true,\n      value: values\n    }\n  }\n\n  return _pushable<T, T[], PushableV<T>>(getNext, options)\n}\n\nfunction _pushable<PushType, ValueType, ReturnType> (getNext: getNext<PushType, ValueType>, options?: Options): ReturnType {\n  options = options ?? {}\n  let onEnd = options.onEnd\n  let buffer = new FIFO<PushType>()\n  let pushable: any\n  let onNext: ((next: Next<PushType>) => ReturnType) | null\n  let ended: boolean\n  let drain = deferred()\n\n  const waitNext = async (): Promise<NextResult<ValueType>> => {\n    try {\n      if (!buffer.isEmpty()) {\n        return getNext(buffer)\n      }\n\n      if (ended) {\n        return { done: true }\n      }\n\n      return await new Promise<NextResult<ValueType>>((resolve, reject) => {\n        onNext = (next: Next<PushType>) => {\n          onNext = null\n          buffer.push(next)\n\n          try {\n            resolve(getNext(buffer))\n          } catch (err) {\n            reject(err)\n          }\n\n          return pushable\n        }\n      })\n    } finally {\n      if (buffer.isEmpty()) {\n        // settle promise in the microtask queue to give consumers a chance to\n        // await after calling .push\n        queueMicrotask(() => {\n          drain.resolve()\n          drain = deferred()\n        })\n      }\n    }\n  }\n\n  const bufferNext = (next: Next<PushType>): ReturnType => {\n    if (onNext != null) {\n      return onNext(next)\n    }\n\n    buffer.push(next)\n    return pushable\n  }\n\n  const bufferError = (err: Error): ReturnType => {\n    buffer = new FIFO()\n\n    if (onNext != null) {\n      return onNext({ error: err })\n    }\n\n    buffer.push({ error: err })\n    return pushable\n  }\n\n  const push = (value: PushType): ReturnType => {\n    if (ended) {\n      return pushable\n    }\n\n    // @ts-expect-error `byteLength` is not declared on PushType\n    if (options?.objectMode !== true && value?.byteLength == null) {\n      throw new Error('objectMode was not true but tried to push non-Uint8Array value')\n    }\n\n    return bufferNext({ done: false, value })\n  }\n  const end = (err?: Error): ReturnType => {\n    if (ended) return pushable\n    ended = true\n\n    return (err != null) ? bufferError(err) : bufferNext({ done: true })\n  }\n  const _return = (): DoneResult => {\n    buffer = new FIFO()\n    end()\n\n    return { done: true }\n  }\n  const _throw = (err: Error): DoneResult => {\n    end(err)\n\n    return { done: true }\n  }\n\n  pushable = {\n    [Symbol.asyncIterator] () { return this },\n    next: waitNext,\n    return: _return,\n    throw: _throw,\n    push,\n    end,\n    get readableLength (): number {\n      return buffer.size\n    },\n    onEmpty: async (options?: AbortOptions) => {\n      const signal = options?.signal\n      signal?.throwIfAborted()\n\n      if (buffer.isEmpty()) {\n        return\n      }\n\n      let cancel: Promise<void> | undefined\n      let listener: (() => void) | undefined\n\n      if (signal != null) {\n        cancel = new Promise((resolve, reject) => {\n          listener = () => {\n            reject(new AbortError())\n          }\n\n          signal.addEventListener('abort', listener)\n        })\n      }\n\n      try {\n        await Promise.race([\n          drain.promise,\n          cancel\n        ])\n      } finally {\n        if (listener != null && signal != null) {\n          signal?.removeEventListener('abort', listener)\n        }\n      }\n    }\n  }\n\n  if (onEnd == null) {\n    return pushable\n  }\n\n  const _pushable = pushable\n\n  pushable = {\n    [Symbol.asyncIterator] () { return this },\n    next () {\n      return _pushable.next()\n    },\n    throw (err: Error) {\n      _pushable.throw(err)\n\n      if (onEnd != null) {\n        onEnd(err)\n        onEnd = undefined\n      }\n\n      return { done: true }\n    },\n    return () {\n      _pushable.return()\n\n      if (onEnd != null) {\n        onEnd()\n        onEnd = undefined\n      }\n\n      return { done: true }\n    },\n    push,\n    end (err: Error) {\n      _pushable.end(err)\n\n      if (onEnd != null) {\n        onEnd(err)\n        onEnd = undefined\n      }\n\n      return pushable\n    },\n    get readableLength () {\n      return _pushable.readableLength\n    },\n    onEmpty: (opts?: AbortOptions) => {\n      return _pushable.onEmpty(opts)\n    }\n  }\n\n  return pushable\n}\n", "// ported from https://www.npmjs.com/package/fast-fifo\n\nexport interface Next<T> {\n  done?: boolean\n  error?: Error\n  value?: T\n}\n\nclass FixedFIFO<T> {\n  public buffer: Array<Next<T> | undefined>\n  private readonly mask: number\n  private top: number\n  private btm: number\n  public next: FixedFIFO<T> | null\n\n  constructor (hwm: number) {\n    if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) {\n      throw new Error('Max size for a FixedFIFO should be a power of two')\n    }\n\n    this.buffer = new Array(hwm)\n    this.mask = hwm - 1\n    this.top = 0\n    this.btm = 0\n    this.next = null\n  }\n\n  push (data: Next<T>): boolean {\n    if (this.buffer[this.top] !== undefined) {\n      return false\n    }\n\n    this.buffer[this.top] = data\n    this.top = (this.top + 1) & this.mask\n\n    return true\n  }\n\n  shift (): Next<T> | undefined {\n    const last = this.buffer[this.btm]\n\n    if (last === undefined) {\n      return undefined\n    }\n\n    this.buffer[this.btm] = undefined\n    this.btm = (this.btm + 1) & this.mask\n    return last\n  }\n\n  isEmpty (): boolean {\n    return this.buffer[this.btm] === undefined\n  }\n}\n\nexport interface FIFOOptions {\n  /**\n   * When the queue reaches this size, it will be split into head/tail parts\n   */\n  splitLimit?: number\n}\n\nexport class FIFO<T> {\n  public size: number\n  private readonly hwm: number\n  private head: FixedFIFO<T>\n  private tail: FixedFIFO<T>\n\n  constructor (options: FIFOOptions = {}) {\n    this.hwm = options.splitLimit ?? 16\n    this.head = new FixedFIFO<T>(this.hwm)\n    this.tail = this.head\n    this.size = 0\n  }\n\n  calculateSize (obj: any): number {\n    if (obj?.byteLength != null) {\n      return obj.byteLength\n    }\n\n    return 1\n  }\n\n  push (val: Next<T>): void {\n    if (val?.value != null) {\n      this.size += this.calculateSize(val.value)\n    }\n\n    if (!this.head.push(val)) {\n      const prev = this.head\n      this.head = prev.next = new FixedFIFO<T>(2 * this.head.buffer.length)\n      this.head.push(val)\n    }\n  }\n\n  shift (): Next<T> | undefined {\n    let val = this.tail.shift()\n\n    if (val === undefined && (this.tail.next != null)) {\n      const next = this.tail.next\n      this.tail.next = null\n      this.tail = next\n      val = this.tail.shift()\n    }\n\n    if (val?.value != null) {\n      this.size -= this.calculateSize(val.value)\n    }\n\n    return val\n  }\n\n  isEmpty (): boolean {\n    return this.head.isEmpty()\n  }\n}\n", "/**\n * @packageDocumentation\n *\n * Merge several (async)iterables into one, yield values as they arrive.\n *\n * Nb. sources are iterated over in parallel so the order of emitted items is not guaranteed.\n *\n * @example\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, generator, etc\n * const values1 = [0, 1, 2, 3, 4]\n * const values2 = [5, 6, 7, 8, 9]\n *\n * const arr = all(merge(values1, values2))\n *\n * console.info(arr) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n * ```\n *\n * Async sources must be awaited:\n *\n * ```javascript\n * import merge from 'it-merge'\n * import all from 'it-all'\n *\n * // This can also be an iterator, async iterator, generator, etc\n * const values1 = async function * () {\n *   yield * [0, 1, 2, 3, 4]\n * }\n * const values2 = async function * () {\n *   yield * [5, 6, 7, 8, 9]\n * }\n *\n * const arr = await all(merge(values1(), values2()))\n *\n * console.info(arr) // 0, 1, 5, 6, 2, 3, 4, 7, 8, 9  <- nb. order is not guaranteed\n * ```\n */\n\nimport { pushable } from 'it-pushable'\n\nfunction isAsyncIterable <T> (thing: any): thing is AsyncIterable<T> {\n  return thing[Symbol.asyncIterator] != null\n}\n\n/**\n * Treat one or more iterables as a single iterable.\n *\n * Nb. sources are iterated over in parallel so the\n * order of emitted items is not guaranteed.\n */\nfunction merge <T> (...sources: Array<Iterable<T>>): Generator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined>\nfunction merge <T> (...sources: Array<AsyncIterable<T> | Iterable<T>>): AsyncGenerator<T, void, undefined> | Generator<T, void, undefined> {\n  const syncSources: Array<Iterable<T>> = []\n\n  for (const source of sources) {\n    if (!isAsyncIterable(source)) {\n      syncSources.push(source)\n    }\n  }\n\n  if (syncSources.length === sources.length) {\n    // all sources are synchronous\n    return (function * () {\n      for (const source of syncSources) {\n        yield * source\n      }\n    })()\n  }\n\n  return (async function * () {\n    const output = pushable<T>({\n      objectMode: true\n    })\n\n    void Promise.resolve().then(async () => {\n      try {\n        await Promise.all(\n          sources.map(async (source) => {\n            for await (const item of source) {\n              output.push(item)\n            }\n          })\n        )\n\n        output.end()\n      } catch (err: any) {\n        output.end(err)\n      }\n    })\n\n    yield * output\n  })()\n}\n\nexport default merge\n", "import * as dagPb from '@ipld/dag-pb'\nimport errCode from 'err-code'\nimport { UnixFS } from 'ipfs-unixfs'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { type Pushable, pushable } from 'it-pushable'\nimport * as raw from 'multiformats/codecs/raw'\nimport PQueue from 'p-queue'\nimport { CustomProgressEvent } from 'progress-events'\nimport extractDataFromBlock from '../../../utils/extract-data-from-block.js'\nimport validateOffsetAndLength from '../../../utils/validate-offset-and-length.js'\nimport type { ExporterOptions, UnixfsV1FileContent, UnixfsV1Resolver, ReadableStorage, ExportProgress, ExportWalk } from '../../../index.js'\n\nasync function walkDAG (blockstore: ReadableStorage, node: dagPb.PBNode | Uint8Array, queue: Pushable<Uint8Array>, streamPosition: bigint, start: bigint, end: bigint, options: ExporterOptions): Promise<void> {\n  // a `raw` node\n  if (node instanceof Uint8Array) {\n    const buf = extractDataFromBlock(node, streamPosition, start, end)\n\n    queue.push(buf)\n\n    return\n  }\n\n  if (node.Data == null) {\n    throw errCode(new Error('no data in PBNode'), 'ERR_NOT_UNIXFS')\n  }\n\n  let file: UnixFS\n\n  try {\n    file = UnixFS.unmarshal(node.Data)\n  } catch (err: any) {\n    throw errCode(err, 'ERR_NOT_UNIXFS')\n  }\n\n  // might be a unixfs `raw` node or have data on intermediate nodes\n  if (file.data != null) {\n    const data = file.data\n    const buf = extractDataFromBlock(data, streamPosition, start, end)\n\n    queue.push(buf)\n\n    streamPosition += BigInt(buf.byteLength)\n  }\n\n  const childOps: Array<{ link: dagPb.PBLink, blockStart: bigint }> = []\n\n  if (node.Links.length !== file.blockSizes.length) {\n    throw errCode(new Error('Inconsistent block sizes and dag links'), 'ERR_NOT_UNIXFS')\n  }\n\n  for (let i = 0; i < node.Links.length; i++) {\n    const childLink = node.Links[i]\n    const childStart = streamPosition // inclusive\n    const childEnd = childStart + file.blockSizes[i] // exclusive\n\n    if ((start >= childStart && start < childEnd) || // child has offset byte\n        (end >= childStart && end <= childEnd) || // child has end byte\n        (start < childStart && end > childEnd)) { // child is between offset and end bytes\n      childOps.push({\n        link: childLink,\n        blockStart: streamPosition\n      })\n    }\n\n    streamPosition = childEnd\n\n    if (streamPosition > end) {\n      break\n    }\n  }\n\n  await pipe(\n    childOps,\n    (source) => map(source, (op) => {\n      return async () => {\n        const block = await blockstore.get(op.link.Hash, options)\n\n        return {\n          ...op,\n          block\n        }\n      }\n    }),\n    (source) => parallel(source, {\n      ordered: true\n    }),\n    async (source) => {\n      for await (const { link, block, blockStart } of source) {\n        let child: dagPb.PBNode | Uint8Array\n        switch (link.Hash.code) {\n          case dagPb.code:\n            child = dagPb.decode(block)\n            break\n          case raw.code:\n            child = block\n            break\n          default:\n            queue.end(errCode(new Error(`Unsupported codec: ${link.Hash.code}`), 'ERR_NOT_UNIXFS'))\n            return\n        }\n\n        // create a queue for this child - we use a queue instead of recursion\n        // to avoid overflowing the stack\n        const childQueue = new PQueue({\n          concurrency: 1\n        })\n        // if any of the child jobs error, end the read queue with the error\n        childQueue.on('error', error => {\n          queue.end(error)\n        })\n\n        // if the job rejects the 'error' event will be emitted on the child queue\n        void childQueue.add(async () => {\n          options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n            cid: link.Hash\n          }))\n\n          await walkDAG(blockstore, child, queue, blockStart, start, end, options)\n        })\n\n        // wait for this child to complete before moving on to the next\n        await childQueue.onIdle()\n      }\n    }\n  )\n\n  if (streamPosition >= end) {\n    queue.end()\n  }\n}\n\nconst fileContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  async function * yieldFileContent (options: ExporterOptions = {}): UnixfsV1FileContent {\n    const fileSize = unixfs.fileSize()\n\n    if (fileSize === undefined) {\n      throw new Error('File was a directory')\n    }\n\n    const {\n      start,\n      end\n    } = validateOffsetAndLength(fileSize, options.offset, options.length)\n\n    if (end === 0n) {\n      return\n    }\n\n    let read = 0n\n    const wanted = end - start\n    const queue = pushable()\n\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:file', {\n      cid\n    }))\n\n    void walkDAG(blockstore, node, queue, 0n, start, end, options)\n      .catch(err => {\n        queue.end(err)\n      })\n\n    for await (const buf of queue) {\n      if (buf == null) {\n        continue\n      }\n\n      read += BigInt(buf.byteLength)\n\n      if (read > wanted) {\n        queue.end()\n        throw errCode(new Error('Read too many bytes - the file size reported by the UnixFS data in the root node may be incorrect'), 'ERR_OVER_READ')\n      }\n\n      if (read === wanted) {\n        queue.end()\n      }\n\n      options.onProgress?.(new CustomProgressEvent<ExportProgress>('unixfs:exporter:progress:unixfs:file', {\n        bytesRead: read,\n        totalBytes: wanted,\n        fileSize\n      }))\n\n      yield buf\n    }\n\n    if (read < wanted) {\n      throw errCode(new Error('Traversed entire DAG but did not read enough bytes'), 'ERR_UNDER_READ')\n    }\n  }\n\n  return yieldFileContent\n}\n\nexport default fileContent\n", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PQueue_instances, _PQueue_carryoverConcurrencyCount, _PQueue_isIntervalIgnored, _PQueue_intervalCount, _PQueue_intervalCap, _PQueue_interval, _PQueue_intervalEnd, _PQueue_intervalId, _PQueue_timeoutId, _PQueue_queue, _PQueue_queueClass, _PQueue_pending, _PQueue_concurrency, _PQueue_isPaused, _PQueue_throwOnTimeout, _PQueue_doesIntervalAllowAnother_get, _PQueue_doesConcurrentAllowAnother_get, _PQueue_next, _PQueue_onResumeInterval, _PQueue_isIntervalPaused_get, _PQueue_tryToStartAnother, _PQueue_initializeIntervalIfNeeded, _PQueue_onInterval, _PQueue_processQueue, _PQueue_throwOnAbort, _PQueue_onEvent;\nimport { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nThe error thrown by `queue.add()` when a job is aborted before it is run. See `signal`.\n*/\nexport class AbortError extends Error {\n}\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n    // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super();\n        _PQueue_instances.add(this);\n        _PQueue_carryoverConcurrencyCount.set(this, void 0);\n        _PQueue_isIntervalIgnored.set(this, void 0);\n        _PQueue_intervalCount.set(this, 0);\n        _PQueue_intervalCap.set(this, void 0);\n        _PQueue_interval.set(this, void 0);\n        _PQueue_intervalEnd.set(this, 0);\n        _PQueue_intervalId.set(this, void 0);\n        _PQueue_timeoutId.set(this, void 0);\n        _PQueue_queue.set(this, void 0);\n        _PQueue_queueClass.set(this, void 0);\n        _PQueue_pending.set(this, 0);\n        // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n        _PQueue_concurrency.set(this, void 0);\n        _PQueue_isPaused.set(this, void 0);\n        _PQueue_throwOnTimeout.set(this, void 0);\n        /**\n        Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n    \n        Applies to each future operation.\n        */\n        Object.defineProperty(this, \"timeout\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        options = {\n            carryoverConcurrencyCount: false,\n            intervalCap: Number.POSITIVE_INFINITY,\n            interval: 0,\n            concurrency: Number.POSITIVE_INFINITY,\n            autoStart: true,\n            queueClass: PriorityQueue,\n            ...options,\n        };\n        if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n            throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n        }\n        if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n            throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_carryoverConcurrencyCount, options.carryoverConcurrencyCount, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isIntervalIgnored, options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0, \"f\");\n        __classPrivateFieldSet(this, _PQueue_intervalCap, options.intervalCap, \"f\");\n        __classPrivateFieldSet(this, _PQueue_interval, options.interval, \"f\");\n        __classPrivateFieldSet(this, _PQueue_queue, new options.queueClass(), \"f\");\n        __classPrivateFieldSet(this, _PQueue_queueClass, options.queueClass, \"f\");\n        this.concurrency = options.concurrency;\n        this.timeout = options.timeout;\n        __classPrivateFieldSet(this, _PQueue_throwOnTimeout, options.throwOnTimeout === true, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isPaused, options.autoStart === false, \"f\");\n    }\n    get concurrency() {\n        return __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n    }\n    set concurrency(newConcurrency) {\n        if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n            throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_concurrency, newConcurrency, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n    }\n    async add(function_, options = {}) {\n        options = {\n            timeout: this.timeout,\n            throwOnTimeout: __classPrivateFieldGet(this, _PQueue_throwOnTimeout, \"f\"),\n            ...options,\n        };\n        return new Promise((resolve, reject) => {\n            __classPrivateFieldGet(this, _PQueue_queue, \"f\").enqueue(async () => {\n                var _a;\n                var _b, _c;\n                __classPrivateFieldSet(this, _PQueue_pending, (_b = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _b++, _b), \"f\");\n                __classPrivateFieldSet(this, _PQueue_intervalCount, (_c = __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\"), _c++, _c), \"f\");\n                try {\n                    // TODO: Use options.signal?.throwIfAborted() when targeting Node.js 18\n                    if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n                        // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n                        throw new AbortError('The task was aborted.');\n                    }\n                    let operation = function_({ signal: options.signal });\n                    if (options.timeout) {\n                        operation = pTimeout(Promise.resolve(operation), options.timeout);\n                    }\n                    if (options.signal) {\n                        operation = Promise.race([operation, __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_throwOnAbort).call(this, options.signal)]);\n                    }\n                    const result = await operation;\n                    resolve(result);\n                    this.emit('completed', result);\n                }\n                catch (error) {\n                    if (error instanceof TimeoutError && !options.throwOnTimeout) {\n                        resolve();\n                        return;\n                    }\n                    reject(error);\n                    this.emit('error', error);\n                }\n                finally {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_next).call(this);\n                }\n            }, options);\n            this.emit('add');\n            __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n        });\n    }\n    async addAll(functions, options) {\n        return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n    }\n    /**\n    Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n    */\n    start() {\n        if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n            return this;\n        }\n        __classPrivateFieldSet(this, _PQueue_isPaused, false, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n        return this;\n    }\n    /**\n    Put queue execution on hold.\n    */\n    pause() {\n        __classPrivateFieldSet(this, _PQueue_isPaused, true, \"f\");\n    }\n    /**\n    Clear the queue.\n    */\n    clear() {\n        __classPrivateFieldSet(this, _PQueue_queue, new (__classPrivateFieldGet(this, _PQueue_queueClass, \"f\"))(), \"f\");\n    }\n    /**\n    Can be called multiple times. Useful if you for example add additional items at a later time.\n\n    @returns A promise that settles when the queue becomes empty.\n    */\n    async onEmpty() {\n        // Instantly resolve if the queue is empty\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'empty');\n    }\n    /**\n    @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n    If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n    Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n    */\n    async onSizeLessThan(limit) {\n        // Instantly resolve if the queue is empty.\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'next', () => __classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit);\n    }\n    /**\n    The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n    @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n    */\n    async onIdle() {\n        // Instantly resolve if none pending and if nothing else is queued\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'idle');\n    }\n    /**\n    Size of the queue, the number of queued items waiting to run.\n    */\n    get size() {\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").size;\n    }\n    /**\n    Size of the queue, filtered by the given options.\n\n    For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n    */\n    sizeBy(options) {\n        // eslint-disable-next-line unicorn/no-array-callback-reference\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").filter(options).length;\n    }\n    /**\n    Number of running items (no longer in the queue).\n    */\n    get pending() {\n        return __classPrivateFieldGet(this, _PQueue_pending, \"f\");\n    }\n    /**\n    Whether the queue is currently paused.\n    */\n    get isPaused() {\n        return __classPrivateFieldGet(this, _PQueue_isPaused, \"f\");\n    }\n}\n_PQueue_carryoverConcurrencyCount = new WeakMap(), _PQueue_isIntervalIgnored = new WeakMap(), _PQueue_intervalCount = new WeakMap(), _PQueue_intervalCap = new WeakMap(), _PQueue_interval = new WeakMap(), _PQueue_intervalEnd = new WeakMap(), _PQueue_intervalId = new WeakMap(), _PQueue_timeoutId = new WeakMap(), _PQueue_queue = new WeakMap(), _PQueue_queueClass = new WeakMap(), _PQueue_pending = new WeakMap(), _PQueue_concurrency = new WeakMap(), _PQueue_isPaused = new WeakMap(), _PQueue_throwOnTimeout = new WeakMap(), _PQueue_instances = new WeakSet(), _PQueue_doesIntervalAllowAnother_get = function _PQueue_doesIntervalAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") < __classPrivateFieldGet(this, _PQueue_intervalCap, \"f\");\n}, _PQueue_doesConcurrentAllowAnother_get = function _PQueue_doesConcurrentAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_pending, \"f\") < __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n}, _PQueue_next = function _PQueue_next() {\n    var _a;\n    __classPrivateFieldSet(this, _PQueue_pending, (_a = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _a--, _a), \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n    this.emit('next');\n}, _PQueue_onResumeInterval = function _PQueue_onResumeInterval() {\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n    __classPrivateFieldSet(this, _PQueue_timeoutId, undefined, \"f\");\n}, _PQueue_isIntervalPaused_get = function _PQueue_isIntervalPaused_get() {\n    const now = Date.now();\n    if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\") === undefined) {\n        const delay = __classPrivateFieldGet(this, _PQueue_intervalEnd, \"f\") - now;\n        if (delay < 0) {\n            // Act as the interval was done\n            // We don't need to resume it here because it will be resumed on line 160\n            __classPrivateFieldSet(this, _PQueue_intervalCount, (__classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\")) ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n        }\n        else {\n            // Act as the interval is pending\n            if (__classPrivateFieldGet(this, _PQueue_timeoutId, \"f\") === undefined) {\n                __classPrivateFieldSet(this, _PQueue_timeoutId, setTimeout(() => {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onResumeInterval).call(this);\n                }, delay), \"f\");\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_tryToStartAnother = function _PQueue_tryToStartAnother() {\n    if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n        // We can clear the interval (\"pause\")\n        // Because we can redo it later (\"resume\")\n        if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n            clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        }\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n        this.emit('empty');\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0) {\n            this.emit('idle');\n        }\n        return false;\n    }\n    if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n        const canInitializeInterval = !__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_isIntervalPaused_get);\n        if (__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesIntervalAllowAnother_get) && __classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesConcurrentAllowAnother_get)) {\n            const job = __classPrivateFieldGet(this, _PQueue_queue, \"f\").dequeue();\n            if (!job) {\n                return false;\n            }\n            this.emit('active');\n            job();\n            if (canInitializeInterval) {\n                __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_initializeIntervalIfNeeded = function _PQueue_initializeIntervalIfNeeded() {\n    if (__classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalId, \"f\") !== undefined) {\n        return;\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalId, setInterval(() => {\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    }, __classPrivateFieldGet(this, _PQueue_interval, \"f\")), \"f\");\n    __classPrivateFieldSet(this, _PQueue_intervalEnd, Date.now() + __classPrivateFieldGet(this, _PQueue_interval, \"f\"), \"f\");\n}, _PQueue_onInterval = function _PQueue_onInterval() {\n    if (__classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n        clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalCount, __classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\") ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n}, _PQueue_processQueue = function _PQueue_processQueue() {\n    // eslint-disable-next-line no-empty\n    while (__classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this)) { }\n}, _PQueue_throwOnAbort = async function _PQueue_throwOnAbort(signal) {\n    return new Promise((_resolve, reject) => {\n        signal.addEventListener('abort', () => {\n            // TODO: Reject with signal.throwIfAborted() when targeting Node.js 18\n            // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n            reject(new AbortError('The task was aborted.'));\n        }, { once: true });\n    });\n}, _PQueue_onEvent = async function _PQueue_onEvent(event, filter) {\n    return new Promise(resolve => {\n        const listener = () => {\n            if (filter && !filter()) {\n                return;\n            }\n            this.off(event, listener);\n            resolve();\n        };\n        this.on(event, listener);\n    });\n};\nexport default PQueue;\n", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined ?\n\tnew AbortError(errorMessage) :\n\tnew DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined ?\n\t\tgetDOMException('This operation was aborted.') :\n\t\tsignal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, milliseconds, fallback, options) {\n\tlet timer;\n\n\tconst cancelablePromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\n\t\t};\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PriorityQueue_queue;\nimport lowerBound from './lower-bound.js';\nclass PriorityQueue {\n    constructor() {\n        _PriorityQueue_queue.set(this, []);\n    }\n    enqueue(run, options) {\n        options = {\n            priority: 0,\n            ...options,\n        };\n        const element = {\n            priority: options.priority,\n            run,\n        };\n        if (this.size && __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\")[this.size - 1].priority >= options.priority) {\n            __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").push(element);\n            return;\n        }\n        const index = lowerBound(__classPrivateFieldGet(this, _PriorityQueue_queue, \"f\"), element, (a, b) => b.priority - a.priority);\n        __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").splice(index, 0, element);\n    }\n    dequeue() {\n        const item = __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").shift();\n        return item === null || item === void 0 ? void 0 : item.run;\n    }\n    filter(options) {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").filter((element) => element.priority === options.priority).map((element) => element.run);\n    }\n    get size() {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").length;\n    }\n}\n_PriorityQueue_queue = new WeakMap();\nexport default PriorityQueue;\n", "// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n    let first = 0;\n    let count = array.length;\n    while (count > 0) {\n        const step = Math.trunc(count / 2);\n        let it = first + step;\n        if (comparator(array[it], value) <= 0) {\n            first = ++it;\n            count -= step + 1;\n        }\n        else {\n            count = step;\n        }\n    }\n    return first;\n}\n", "import { decode, type PBNode } from '@ipld/dag-pb'\nimport map from 'it-map'\nimport parallel from 'it-parallel'\nimport { pipe } from 'it-pipe'\nimport { CustomProgressEvent } from 'progress-events'\nimport type { ExporterOptions, Resolve, UnixfsV1DirectoryContent, UnixfsV1Resolver, ReadableStorage, ExportWalk } from '../../../index.js'\n\nconst hamtShardedDirectoryContent: UnixfsV1Resolver = (cid, node, unixfs, path, resolve, depth, blockstore) => {\n  function yieldHamtDirectoryContent (options: ExporterOptions = {}): UnixfsV1DirectoryContent {\n    options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n      cid\n    }))\n\n    return listDirectory(node, path, resolve, depth, blockstore, options)\n  }\n\n  return yieldHamtDirectoryContent\n}\n\nasync function * listDirectory (node: PBNode, path: string, resolve: Resolve, depth: number, blockstore: ReadableStorage, options: ExporterOptions): UnixfsV1DirectoryContent {\n  const links = node.Links\n\n  const results = pipe(\n    links,\n    source => map(source, link => {\n      return async () => {\n        const name = link.Name != null ? link.Name.substring(2) : null\n\n        if (name != null && name !== '') {\n          const result = await resolve(link.Hash, name, `${path}/${name}`, [], depth + 1, blockstore, options)\n\n          return { entries: result.entry == null ? [] : [result.entry] }\n        } else {\n          // descend into subshard\n          const block = await blockstore.get(link.Hash, options)\n          node = decode(block)\n\n          options.onProgress?.(new CustomProgressEvent<ExportWalk>('unixfs:exporter:walk:hamt-sharded-directory', {\n            cid: link.Hash\n          }))\n\n          return { entries: listDirectory(node, path, resolve, depth, blockstore, options) }\n        }\n      }\n    }),\n    source => parallel(source, { ordered: true })\n  )\n\n  for await (const { entries } of results) {\n    yield * entries\n  }\n}\n\nexport default hamtShardedDirectoryContent\n", "import type { ImportResult } from 'ipfs-unixfs-importer';\nimport type { DataStore, DataStoreGetResult, DataStorePutResult } from '../types/data-store.js';\n\nimport { BlockstoreLevel } from './blockstore-level.js';\nimport { createLevelDatabase } from './level-wrapper.js';\nimport { exporter } from 'ipfs-unixfs-exporter';\nimport { importer } from 'ipfs-unixfs-importer';\nimport { Readable } from 'readable-stream';\n\n/**\n * A simple implementation of {@link DataStore} that works in both the browser and server-side.\n * Leverages LevelDB under the hood.\n *\n * It has the following structure (`+` represents an additional sublevel/partition):\n *   'data' + <tenant> + <recordId> + <dataCid> -> <data>\n */\nexport class DataStoreLevel implements DataStore {\n  config: DataStoreLevelConfig;\n\n  blockstore: BlockstoreLevel;\n\n  constructor(config: DataStoreLevelConfig = {}) {\n    this.config = {\n      blockstoreLocation: 'DATASTORE',\n      createLevelDatabase,\n      ...config\n    };\n\n    this.blockstore = new BlockstoreLevel({\n      location            : this.config.blockstoreLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n  }\n\n  public async open(): Promise<void> {\n    await this.blockstore.open();\n  }\n\n  async close(): Promise<void> {\n    await this.blockstore.close();\n  }\n\n  async put(tenant: string, recordId: string, dataCid: string, dataStream: Readable): Promise<DataStorePutResult> {\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, recordId, dataCid);\n\n    const asyncDataBlocks = importer([{ content: dataStream }], blockstoreForData, { cidVersion: 1 });\n\n    // NOTE: the last block contains the root CID as well as info to derive the data size\n    let dataDagRoot!: ImportResult;\n    for await (dataDagRoot of asyncDataBlocks) { ; }\n\n    return {\n      dataSize: Number(dataDagRoot.unixfs?.fileSize() ?? dataDagRoot.size)\n    };\n  }\n\n  public async get(tenant: string, recordId: string, dataCid: string): Promise<DataStoreGetResult | undefined> {\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, recordId, dataCid);\n\n    const exists = await blockstoreForData.has(dataCid);\n    if (!exists) {\n      return undefined;\n    }\n\n    // data is chunked into dag-pb unixfs blocks. re-inflate the chunks.\n    const dataDagRoot = await exporter(dataCid, blockstoreForData);\n    const contentIterator = dataDagRoot.content();\n\n    const dataStream = new Readable({\n      async read(): Promise<void> {\n        const result = await contentIterator.next();\n        if (result.done) {\n          this.push(null); // end the stream\n        } else {\n          this.push(result.value);\n        }\n      }\n    });\n\n    let dataSize = dataDagRoot.size;\n\n    if (dataDagRoot.type === 'file' || dataDagRoot.type === 'directory') {\n      dataSize = dataDagRoot.unixfs.fileSize();\n    }\n\n    return {\n      dataSize: Number(dataSize),\n      dataStream,\n    };\n  }\n\n  public async delete(tenant: string, recordId: string, dataCid: string): Promise<void> {\n    const blockstoreForData = await this.getBlockstoreForStoringData(tenant, recordId, dataCid);\n    await blockstoreForData.clear();\n  }\n\n  /**\n   * Deletes everything in the store. Mainly used in tests.\n   */\n  public async clear(): Promise<void> {\n    await this.blockstore.clear();\n  }\n\n  /**\n   * Gets the blockstore used for storing data for the given `tenant -> `recordId` -> `dataCid`.\n   */\n  private async getBlockstoreForStoringData(tenant: string, recordId: string, dataCid: string): Promise<BlockstoreLevel> {\n    const dataPartitionName = 'data';\n    const blockstoreForData = await this.blockstore.partition(dataPartitionName);\n    const blockstoreOfGivenTenant = await blockstoreForData.partition(tenant);\n    const blockstoreOfGivenRecordId = await blockstoreOfGivenTenant.partition(recordId);\n    const blockstoreOfGivenDataCidOfRecordId = await blockstoreOfGivenRecordId.partition(dataCid);\n    return blockstoreOfGivenDataCidOfRecordId;\n  }\n}\n\ntype DataStoreLevelConfig = {\n  blockstoreLocation?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import type { EqualFilter, Filter, KeyValues, PaginationCursor, QueryOptions, RangeFilter } from '../types/query-types.js';\nimport type { LevelWrapperBatchOperation, LevelWrapperIteratorOptions, } from './level-wrapper.js';\n\nimport { isEmptyObject } from '../utils/object.js';\nimport { lexicographicalCompare } from '../utils/string.js';\nimport { SortDirection } from '../types/query-types.js';\nimport { createLevelDatabase, LevelWrapper } from './level-wrapper.js';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\nimport { FilterSelector, FilterUtility } from '../utils/filter.js';\n\ntype IndexLevelConfig = {\n  location: string,\n  createLevelDatabase?: typeof createLevelDatabase\n};\n\nexport type IndexedItem = { messageCid: string, indexes: KeyValues };\n\nconst INDEX_SUBLEVEL_NAME = 'index';\n\nexport interface IndexLevelOptions {\n  signal?: AbortSignal;\n}\n\n/**\n * A LevelDB implementation for indexing the messages and events stored in the DWN.\n */\nexport class IndexLevel {\n  db: LevelWrapper<string>;\n  config: IndexLevelConfig;\n\n  constructor(config: IndexLevelConfig) {\n    this.config = {\n      createLevelDatabase,\n      ...config,\n    };\n\n    this.db = new LevelWrapper<string>({\n      location            : this.config.location,\n      createLevelDatabase : this.config.createLevelDatabase,\n      keyEncoding         : 'utf8'\n    });\n  }\n\n  async open(): Promise<void> {\n    await this.db.open();\n  }\n\n  async close(): Promise<void> {\n    await this.db.close();\n  }\n\n  /**\n   * deletes everything in the underlying index db.\n   */\n  async clear(): Promise<void> {\n    await this.db.clear();\n  }\n\n  /**\n   * Put an item into the index using information that will allow it to be queried for.\n   *\n   * @param tenant\n   * @param messageCid a unique ID that represents the item being indexed, this is also used as the cursor value in a query.\n   * @param indexes - (key-value pairs) to be included as part of indexing this item. Must include at least one indexing property.\n   * @param options IndexLevelOptions that include an AbortSignal.\n   */\n  async put(\n    tenant: string,\n    messageCid: string,\n    indexes: KeyValues,\n    options?: IndexLevelOptions\n  ): Promise<void> {\n\n    // ensure we have something valid to index\n    if (isEmptyObject(indexes)) {\n      throw new DwnError(DwnErrorCode.IndexMissingIndexableProperty, 'Index must include at least one valid indexable property');\n    }\n\n    const item: IndexedItem = { messageCid, indexes };\n    const opCreationPromises: Promise<LevelWrapperBatchOperation<string>>[] = [];\n\n    // create an index entry for each property index\n    // these indexes are all sortable lexicographically.\n    for (const indexName in indexes) {\n      const indexValue = indexes[indexName];\n      if (Array.isArray(indexValue)) {\n        for (const indexValueItem of indexValue) {\n          const partitionOperationPromise = this.createPutIndexedItemOperation(tenant, item, indexName, indexValueItem);\n          opCreationPromises.push(partitionOperationPromise);\n        }\n      } else {\n        const partitionOperationPromise = this.createPutIndexedItemOperation(tenant, item, indexName, indexValue);\n        opCreationPromises.push(partitionOperationPromise);\n      }\n    }\n\n    // create a reverse lookup for the sortedIndex values. This is used during deletion and cursor starting point lookup.\n    const partitionOperationPromise = this.createOperationForIndexesLookupPartition(\n      tenant,\n      { type: 'put', key: messageCid, value: JSON.stringify(indexes) }\n    );\n    opCreationPromises.push(partitionOperationPromise);\n\n    const indexOps = await Promise.all(opCreationPromises);\n    const tenantPartition = await this.db.partition(tenant);\n    await tenantPartition.batch(indexOps, options);\n  }\n\n  /**\n   *  Deletes all of the index data associated with the item.\n   */\n  async delete(tenant: string, messageCid: string, options?: IndexLevelOptions): Promise<void> {\n    const opCreationPromises: Promise<LevelWrapperBatchOperation<string>>[] = [];\n\n    const indexes = await this.getIndexes(tenant, messageCid);\n    if (indexes === undefined) {\n      // invalid messageCid\n      return;\n    }\n\n    // delete the reverse lookup\n    const partitionOperationPromise = this.createOperationForIndexesLookupPartition(tenant, { type: 'del', key: messageCid });\n    opCreationPromises.push(partitionOperationPromise);\n\n    // delete the keys for each index\n    for (const indexName in indexes) {\n      const indexValue = indexes[indexName];\n      if (Array.isArray(indexValue)) {\n        for (const indexValueItem of indexValue) {\n          const partitionOperationPromise = this.createDeleteIndexedItemOperation(tenant, messageCid, indexName, indexValueItem);\n          opCreationPromises.push(partitionOperationPromise);\n        }\n      } else {\n        const partitionOperationPromise = this.createDeleteIndexedItemOperation(tenant, messageCid, indexName, indexValue);\n        opCreationPromises.push(partitionOperationPromise);\n      }\n    }\n\n    const indexOps = await Promise.all(opCreationPromises);\n    const tenantPartition = await this.db.partition(tenant);\n    await tenantPartition.batch(indexOps, options);\n  }\n\n  /**\n   * Creates an IndexLevel `put` operation for indexing an item, creating a partition by `tenant` and by `indexName`\n   */\n  private async createPutIndexedItemOperation(\n    tenant: string,\n    item: IndexedItem,\n    indexName: string,\n    indexValue: string | number | boolean\n  ): Promise<LevelWrapperBatchOperation<string>> {\n    const { messageCid } = item;\n\n    // The key is the indexValue followed by the messageCid as a tie-breaker.\n    // for example if the property is messageTimestamp the key would look like:\n    // '\"2023-05-25T18:23:29.425008Z\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n    const key = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(indexValue), messageCid);\n\n    return this.createOperationForIndexPartition(\n      tenant,\n      indexName,\n      { type: 'put', key, value: JSON.stringify(item) }\n    );\n  }\n\n  /**\n   * Creates an IndexLevel `del` operation for deleting an item, creating a partition by `tenant` and by `indexName`\n   */\n  private async createDeleteIndexedItemOperation(\n    tenant: string,\n    messageCid: string,\n    indexName: string,\n    indexValue: string | number | boolean\n  ): Promise<LevelWrapperBatchOperation<string>> {\n\n    // The key is the indexValue followed by the messageCid as a tie-breaker.\n    // for example if the property is messageTimestamp the key would look like:\n    // '\"2023-05-25T18:23:29.425008Z\"\\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'\n    const key = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(indexValue), messageCid);\n\n    return this.createOperationForIndexPartition(\n      tenant,\n      indexName,\n      { type: 'del', key }\n    );\n  }\n\n  /**\n   * Wraps the given operation as an operation for the specified index partition.\n   */\n  private async createOperationForIndexPartition(tenant: string, indexName: string, operation: LevelWrapperBatchOperation<string>)\n    : Promise<LevelWrapperBatchOperation<string>> {\n    // we write the index entry into a sublevel-partition of tenantPartition.\n    // putting each index entry within a sublevel allows the levelDB system to calculate a gt minKey and lt maxKey for each of the properties\n    // this prevents them from clashing, especially when iterating in reverse without iterating through other properties.\n    const tenantPartition = await this.db.partition(tenant);\n    const indexPartitionName = IndexLevel.getIndexPartitionName(indexName);\n    const partitionOperation = tenantPartition.createPartitionOperation(indexPartitionName, operation);\n    return partitionOperation;\n  }\n\n  /**\n   * Wraps the given operation as an operation for the messageCid to indexes lookup partition.\n   */\n  private async createOperationForIndexesLookupPartition(tenant: string, operation: LevelWrapperBatchOperation<string>)\n    : Promise<LevelWrapperBatchOperation<string>> {\n    const tenantPartition = await this.db.partition(tenant);\n    const partitionOperation = tenantPartition.createPartitionOperation(INDEX_SUBLEVEL_NAME, operation);\n    return partitionOperation;\n  }\n\n  private static getIndexPartitionName(indexName: string): string {\n    // we create index partition names in __${indexName}__ wrapping so they do not clash with other sublevels that are created for other purposes.\n    return `__${indexName}__`;\n  }\n\n  /**\n   * Gets the index partition of the given indexName.\n   */\n  private async getIndexPartition(tenant: string, indexName: string): Promise<LevelWrapper<string>> {\n    const indexPartitionName = IndexLevel.getIndexPartitionName(indexName);\n    return (await this.db.partition(tenant)).partition(indexPartitionName);\n  }\n\n  /**\n   * Gets the messageCid to indexes lookup partition.\n   */\n  private async getIndexesLookupPartition(tenant: string): Promise<LevelWrapper<string>> {\n    return (await this.db.partition(tenant)).partition(INDEX_SUBLEVEL_NAME);\n  }\n\n  /**\n   * Queries the index for items that match the filters. If no filters are provided, all items are returned.\n   *\n   * @param filters Array of filters that are treated as an OR query.\n   * @param queryOptions query options for sort and pagination, requires at least `sortProperty`. The default sort direction is ascending.\n   * @param options IndexLevelOptions that include an AbortSignal.\n   * @returns {IndexedItem[]} an array of `IndexedItem` that match the given filters.\n   */\n  async query(tenant: string, filters: Filter[], queryOptions: QueryOptions, options?: IndexLevelOptions): Promise<IndexedItem[]> {\n\n    // check if we should query using in-memory paging or iterator paging\n    if (IndexLevel.shouldQueryWithInMemoryPaging(filters, queryOptions)) {\n      return this.queryWithInMemoryPaging(tenant, filters, queryOptions, options);\n    }\n    return this.queryWithIteratorPaging(tenant, filters, queryOptions, options);\n  }\n\n  /**\n   * Queries the sort property index for items that match the filters. If no filters are provided, all items are returned.\n   * This query is a linear iterator over the sorted index, checking each item for a match.\n   * If a cursor is provided it starts the iteration from the cursor point.\n   */\n  async queryWithIteratorPaging(\n    tenant: string,\n    filters: Filter[],\n    queryOptions: QueryOptions,\n    options?: IndexLevelOptions\n  ): Promise<IndexedItem[]> {\n    const { cursor: queryCursor , limit } = queryOptions;\n\n    // if there is a cursor we fetch the starting key given the sort property, otherwise we start from the beginning of the index.\n    const startKey = queryCursor ? this.createStartingKeyFromCursor(queryCursor) : '';\n\n    const matches: IndexedItem[] = [];\n    for await ( const item of this.getIndexIterator(tenant, startKey, queryOptions, options)) {\n      if (limit !== undefined && limit === matches.length) {\n        break;\n      }\n\n      const { indexes } = item;\n      if (FilterUtility.matchAnyFilter(indexes, filters)) {\n        matches.push(item);\n      }\n    }\n\n    return matches;\n  }\n\n  /**\n   * Creates an AsyncGenerator that returns each sorted index item given a specific sortProperty.\n   * If a cursor is passed, the starting value (gt or lt) is derived from that.\n   */\n  private async * getIndexIterator(\n    tenant: string, startKey:string, queryOptions: QueryOptions, options?: IndexLevelOptions\n  ): AsyncGenerator<IndexedItem> {\n    const { sortProperty, sortDirection = SortDirection.Ascending, cursor } = queryOptions;\n\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = {\n      gt: startKey\n    };\n\n    // if we are sorting in descending order we can iterate in reverse.\n    if (sortDirection === SortDirection.Descending) {\n      iteratorOptions.reverse = true;\n\n      // if a cursor is provided and we are sorting in descending order, the startKey should be the upper bound.\n      if (cursor !== undefined) {\n        iteratorOptions.lt = startKey;\n        delete iteratorOptions.gt;\n      }\n    }\n\n    const sortPartition = await this.getIndexPartition(tenant, sortProperty);\n    for await (const [ _, val ] of sortPartition.iterator(iteratorOptions, options)) {\n      const { indexes, messageCid } = JSON.parse(val);\n      yield { indexes, messageCid };\n    }\n  }\n\n  /**\n   * Creates the starting point for a LevelDB query given an messageCid as a cursor and the indexed property.\n   * Used as (gt) for ascending queries, or (lt) for descending queries.\n   */\n  private createStartingKeyFromCursor(cursor: PaginationCursor): string {\n    const { messageCid , value } = cursor;\n    return IndexLevel.keySegmentJoin(IndexLevel.encodeValue(value), messageCid);\n  }\n\n  /**\n   * Returns a PaginationCursor using the last item of a given array of IndexedItems.\n   * If the given array is empty, undefined is returned.\n   *\n   * @throws {DwnError} if the sort property or cursor value is invalid.\n   */\n  static createCursorFromLastArrayItem(items: IndexedItem[], sortProperty: string): PaginationCursor | undefined {\n    if (items.length > 0) {\n      return this.createCursorFromItem(items.at(-1)!, sortProperty);\n    }\n  }\n\n  /**\n   * Creates a PaginationCursor from a given IndexedItem and sortProperty.\n   *\n   * @throws {DwnError} if the sort property or cursor value is invalid.\n   */\n  static createCursorFromItem(item: IndexedItem, sortProperty: string): PaginationCursor {\n    const { messageCid , indexes } = item;\n    const value = indexes[sortProperty];\n\n    if (value === undefined) {\n      throw new DwnError(DwnErrorCode.IndexInvalidCursorSortProperty, `the sort property '${sortProperty}' is not defined within the given item.`);\n    }\n\n    // we only support cursors for string or number types\n    if (typeof value === 'boolean' || Array.isArray(value)) {\n      throw new DwnError(\n        DwnErrorCode.IndexInvalidCursorValueType,\n        `only string or number values are supported for cursors, a(n) ${typeof value} was given.`\n      );\n    }\n\n    return { messageCid , value };\n  }\n\n  /**\n   * Queries the provided searchFilters asynchronously, returning results that match the matchFilters.\n   *\n   * @param filters the filters passed to the parent query.\n   * @param searchFilters the modified filters used for the LevelDB query to search for a subset of items to match against.\n   *\n   * @throws {DwnErrorCode.IndexLevelInMemoryInvalidSortProperty} if an invalid sort property is provided.\n   */\n  async queryWithInMemoryPaging(\n    tenant: string,\n    filters: Filter[],\n    queryOptions: QueryOptions,\n    options?: IndexLevelOptions\n  ): Promise<IndexedItem[]> {\n    const { sortProperty, sortDirection = SortDirection.Ascending, cursor: queryCursor, limit } = queryOptions;\n\n    // we get the cursor start key here so that we match the failing behavior of `queryWithIteratorPaging`\n    const cursorStartingKey = queryCursor ? this.createStartingKeyFromCursor(queryCursor) : undefined;\n\n    // we create a matches map so that we can short-circuit matched items within the async single query below.\n    const matches:Map<string, IndexedItem> = new Map();\n\n    // If the filter is empty, we just give it an empty filter so that we can iterate over all the items later in executeSingleFilterQuery().\n    // We could do the iteration here, but it would be duplicating the same logic, so decided to just setup the data structure here.\n    if (filters.length === 0) {\n      filters = [{}];\n    }\n\n    try {\n      await Promise.all(filters.map(filter => {\n        return this.executeSingleFilterQuery(tenant, filter, sortProperty, matches, options );\n      }));\n    } catch (error) {\n      if ((error as DwnError).code === DwnErrorCode.IndexInvalidSortPropertyInMemory) {\n        // return empty results if the sort property is invalid.\n        return [];\n      }\n    }\n\n    const sortedValues = [...matches.values()].sort((a,b) => this.sortItems(a,b, sortProperty, sortDirection));\n\n    const start = cursorStartingKey !== undefined ? this.findCursorStartingIndex(sortedValues, sortDirection, sortProperty, cursorStartingKey) : 0;\n    if (start < 0) {\n      // if the provided cursor does not come before any of the results, we return no results\n      return [];\n    }\n\n    const end = limit !== undefined ? start + limit: undefined;\n    return sortedValues.slice(start, end);\n  }\n\n  /**\n   * Execute a filtered query against a single filter and return all results.\n   */\n  private async executeSingleFilterQuery(\n    tenant: string,\n    filter: Filter,\n    sortProperty: string,\n    matches: Map<string, IndexedItem>,\n    levelOptions?: IndexLevelOptions\n  ): Promise<void> {\n\n    // Note: We have an array of Promises in order to support OR (anyOf) matches when given a list of accepted values for a property\n    const filterPromises: Promise<IndexedItem[]>[] = [];\n\n    // If the filter is empty, then we just iterate over one of the indexes that contains all the records and return all items.\n    if (isEmptyObject(filter)) {\n      const getAllItemsPromise = this.getAllItems(tenant, sortProperty);\n      filterPromises.push(getAllItemsPromise);\n    }\n\n    // else the filter is not empty\n    const searchFilter = FilterSelector.reduceFilter(filter);\n    for (const propertyName in searchFilter) {\n      const propertyFilter = searchFilter[propertyName];\n      // We will find the union of these many individual queries later.\n      if (FilterUtility.isEqualFilter(propertyFilter)) {\n        // propertyFilter is an EqualFilter, meaning it is a non-object primitive type\n        const exactMatchesPromise = this.filterExactMatches(tenant, propertyName, propertyFilter, levelOptions);\n        filterPromises.push(exactMatchesPromise);\n      } else if (FilterUtility.isOneOfFilter(propertyFilter)) {\n        // `propertyFilter` is a OneOfFilter\n        // Support OR matches by querying for each values separately, then adding them to the promises array.\n        for (const propertyValue of new Set(propertyFilter)) {\n          const exactMatchesPromise = this.filterExactMatches(tenant, propertyName, propertyValue, levelOptions);\n          filterPromises.push(exactMatchesPromise);\n        }\n      } else if (FilterUtility.isRangeFilter(propertyFilter)) {\n        // `propertyFilter` is a `RangeFilter`\n        const rangeMatchesPromise = this.filterRangeMatches(tenant, propertyName, propertyFilter, levelOptions);\n        filterPromises.push(rangeMatchesPromise);\n      }\n    }\n\n    // acting as an OR match for the property, any of the promises returning a match will be treated as a property match\n    for (const promise of filterPromises) {\n      const indexItems = await promise;\n      // reminder: the promise returns a list of IndexedItem satisfying a particular property match\n      for (const indexedItem of indexItems) {\n        // short circuit: if a data is already included to the final matched key set (by a different `Filter`),\n        // no need to evaluate if the data satisfies this current filter being evaluated\n        // otherwise check that the item is a match.\n        if (matches.has(indexedItem.messageCid) || !FilterUtility.matchFilter(indexedItem.indexes, filter)) {\n          continue;\n        }\n\n        // ensure that each matched item has the sortProperty, otherwise fail the entire query.\n        if (indexedItem.indexes[sortProperty] === undefined) {\n          throw new DwnError(DwnErrorCode.IndexInvalidSortPropertyInMemory, `invalid sort property ${sortProperty}`);\n        }\n\n        matches.set(indexedItem.messageCid, indexedItem);\n      }\n    }\n  }\n\n  private async getAllItems(tenant: string, sortProperty: string): Promise<IndexedItem[]> {\n    const filterPartition = await this.getIndexPartition(tenant, sortProperty);\n    const items: IndexedItem[] = [];\n    for await (const [ _key, value ] of filterPartition.iterator()) {\n      items.push(JSON.parse(value) as IndexedItem);\n    }\n    return items;\n  }\n\n  /**\n   * Returns items that match the exact property and value.\n   */\n  private async filterExactMatches(\n    tenant:string,\n    propertyName: string,\n    propertyValue: EqualFilter,\n    options?: IndexLevelOptions\n  ): Promise<IndexedItem[]> {\n\n    const matchPrefix = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(propertyValue));\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = {\n      gt: matchPrefix\n    };\n\n    const filterPartition = await this.getIndexPartition(tenant, propertyName);\n    const matches: IndexedItem[] = [];\n    for await (const [ key, value ] of filterPartition.iterator(iteratorOptions, options)) {\n      // immediately stop if we arrive at an index that contains a different property value\n      if (!key.startsWith(matchPrefix)) {\n        break;\n      }\n      matches.push(JSON.parse(value) as IndexedItem);\n    }\n    return matches;\n  }\n\n  /**\n   * Returns items that match the range filter.\n   */\n  private async filterRangeMatches(\n    tenant: string,\n    propertyName: string,\n    rangeFilter: RangeFilter,\n    options?: IndexLevelOptions\n  ): Promise<IndexedItem[]> {\n    const iteratorOptions: LevelWrapperIteratorOptions<string> = {};\n    for (const comparator in rangeFilter) {\n      const comparatorName = comparator as keyof RangeFilter;\n      iteratorOptions[comparatorName] = IndexLevel.encodeValue(rangeFilter[comparatorName]!);\n    }\n\n    // if there is no lower bound specified (`gt` or `gte`), we need to iterate from the upper bound,\n    // so that we will iterate over all the matches before hitting mismatches.\n    if (iteratorOptions.gt === undefined && iteratorOptions.gte === undefined) {\n      iteratorOptions.reverse = true;\n    }\n\n    const matches: IndexedItem[] = [];\n    const filterPartition = await this.getIndexPartition(tenant, propertyName);\n\n    for await (const [ key, value ] of filterPartition.iterator(iteratorOptions, options)) {\n      // if \"greater-than\" is specified, skip all keys that contains the exact value given in the \"greater-than\" condition\n      if ('gt' in rangeFilter && this.extractIndexValueFromKey(key) === IndexLevel.encodeValue(rangeFilter.gt!)) {\n        continue;\n      }\n      matches.push(JSON.parse(value) as IndexedItem);\n    }\n\n    if ('lte' in rangeFilter) {\n      // When `lte` is used, we must also query the exact match explicitly because the exact match will not be included in the iterator above.\n      // This is due to the extra data appended to the (property + value) key prefix, e.g.\n      // the key '\"2023-05-25T11:22:33.000000Z\"\\u0000bayfreigu....'\n      // would be considered greater than `lte` value in { lte: '\"2023-05-25T11:22:33.000000Z\"' } iterator options,\n      // thus would not be included in the iterator even though we'd like it to be.\n      for (const item of await this.filterExactMatches(tenant, propertyName, rangeFilter.lte as EqualFilter, options)) {\n        matches.push(item);\n      }\n    }\n\n    return matches;\n  }\n\n  /**\n   * Sorts Items lexicographically in ascending or descending order given a specific indexName, using the messageCid as a tie breaker.\n   * We know the indexes include the indexName and they are only of string or number type and not Arrays or booleans.\n   * because they have already been checked within executeSingleFilterQuery.\n   */\n  private sortItems(itemA: IndexedItem, itemB: IndexedItem, indexName: string, direction: SortDirection): number {\n    const itemAValue = itemA.indexes[indexName] as string | number;\n    const itemBValue = itemB.indexes[indexName] as string | number;\n\n    const aCompareValue = IndexLevel.encodeValue(itemAValue) + itemA.messageCid;\n    const bCompareValue = IndexLevel.encodeValue(itemBValue) + itemB.messageCid;\n\n    return direction === SortDirection.Ascending ?\n      lexicographicalCompare(aCompareValue, bCompareValue) :\n      lexicographicalCompare(bCompareValue, aCompareValue);\n  }\n\n  /**\n   * Find the starting position for pagination within the IndexedItem array.\n   * Returns the index of the first item found which is either greater than or less than the given cursor, depending on sort order.\n   */\n  private findCursorStartingIndex(items: IndexedItem[], sortDirection: SortDirection, sortProperty: string, cursorStartingKey: string): number {\n\n    const firstItemAfterCursor = (item: IndexedItem): boolean => {\n      const { messageCid, indexes } = item;\n      const sortValue = indexes[sortProperty] as string | number;\n      const itemCompareValue = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(sortValue), messageCid);\n\n      return sortDirection === SortDirection.Ascending ?\n        itemCompareValue > cursorStartingKey :\n        itemCompareValue < cursorStartingKey;\n    };\n\n    return items.findIndex(firstItemAfterCursor);\n  }\n\n  /**\n   * Gets the indexes given an messageCid. This is a reverse lookup to construct starting keys, as well as deleting indexed items.\n   */\n  private async getIndexes(tenant: string, messageCid: string): Promise<KeyValues|undefined> {\n    const indexesLookupPartition = await this.getIndexesLookupPartition(tenant);\n    const serializedIndexes = await indexesLookupPartition.get(messageCid);\n    if (serializedIndexes === undefined) {\n      // invalid messageCid\n      return;\n    }\n\n    return JSON.parse(serializedIndexes) as KeyValues;\n  }\n\n  /**\n   * Given a key from an indexed partitioned property key.\n   *  ex:\n   *    key: '\"2023-05-25T11:22:33.000000Z\"\\u0000bayfreigu....'\n   *    returns \"2023-05-25T11:22:33.000000Z\"\n   */\n  private extractIndexValueFromKey(key: string): string {\n    const [value] = key.split(IndexLevel.delimiter);\n    return value;\n  }\n\n  /**\n   * Joins the given values using the `\\x00` (\\u0000) character.\n   */\n  private static delimiter = `\\x00`;\n  private static keySegmentJoin(...values: string[]): string {\n    return values.join(IndexLevel.delimiter);\n  }\n\n  /**\n   *  Encodes a numerical value as a string for lexicographical comparison.\n   *  If the number is positive it simply pads it with leading zeros.\n   *  ex.: input:  1024 => \"0000000000001024\"\n   *       input: -1024 => \"!9007199254739967\"\n   *\n   * @param value the number to encode.\n   * @returns a string representation of the number.\n   */\n  static encodeNumberValue(value: number): string {\n    const NEGATIVE_OFFSET = Number.MAX_SAFE_INTEGER;\n    const NEGATIVE_PREFIX = '!'; // this will be sorted below positive numbers lexicographically\n    const PADDING_LENGTH = String(Number.MAX_SAFE_INTEGER).length;\n\n    const prefix: string = value < 0 ? NEGATIVE_PREFIX : '';\n    const offset: number = value < 0 ? NEGATIVE_OFFSET : 0;\n    return prefix + String(value + offset).padStart(PADDING_LENGTH, '0');\n  }\n\n  /**\n   * Encodes an indexed value to a string\n   *\n   * NOTE: we currently only use this for strings, numbers and booleans.\n   */\n  static encodeValue(value: string | number | boolean): string {\n    switch (typeof value) {\n    case 'number':\n      return this.encodeNumberValue(value);\n    default:\n      return JSON.stringify(value);\n    }\n  }\n\n  private static shouldQueryWithInMemoryPaging(filters: Filter[], queryOptions: QueryOptions): boolean {\n    for (const filter of filters) {\n      if (!IndexLevel.isFilterConcise(filter, queryOptions)) {\n        return false;\n      }\n    }\n\n    // only use in-memory paging if all filters are concise\n    return true;\n  }\n\n  public static isFilterConcise(filter: Filter, queryOptions: QueryOptions): boolean {\n    // if there is a specific recordId in the filter, return true immediately.\n    if (filter.recordId !== undefined) {\n      return true;\n    }\n\n    // unless a recordId is present, if there is a cursor we never use in memory paging\n    if (queryOptions.cursor !== undefined) {\n      return false;\n    }\n    // NOTE: remaining conditions will not have cursor\n    if (\n      filter.protocolPath !== undefined ||\n      filter.contextId !== undefined ||\n      filter.parentId !== undefined ||\n      filter.schema !== undefined\n    ) {\n      return true;\n    }\n\n    // all else\n    return false;\n  }\n}\n", "import { Layerr } from 'layerr';\n\n// These values should NEVER change. The values are precisely for\n// generating ULIDs.\nconst ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\"; // Crockford's Base32\nconst ENCODING_LEN = 32; // from ENCODING.length;\nconst TIME_MAX = 281474976710655; // from Math.pow(2, 48) - 1;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\nconst ERROR_INFO = Object.freeze({\n    source: \"ulid\"\n});\nfunction decodeTime(id) {\n    if (id.length !== TIME_LEN + RANDOM_LEN) {\n        throw new Layerr({\n            info: {\n                code: \"DEC_TIME_MALFORMED\",\n                ...ERROR_INFO\n            }\n        }, \"Malformed ULID\");\n    }\n    const time = id\n        .substr(0, TIME_LEN)\n        .toUpperCase()\n        .split(\"\")\n        .reverse()\n        .reduce((carry, char, index) => {\n        const encodingIndex = ENCODING.indexOf(char);\n        if (encodingIndex === -1) {\n            throw new Layerr({\n                info: {\n                    code: \"DEC_TIME_CHAR\",\n                    ...ERROR_INFO\n                }\n            }, `Time decode error: Invalid character: ${char}`);\n        }\n        return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n    }, 0);\n    if (time > TIME_MAX) {\n        throw new Layerr({\n            info: {\n                code: \"DEC_TIME_CHAR\",\n                ...ERROR_INFO\n            }\n        }, `Malformed ULID: timestamp too large: ${time}`);\n    }\n    return time;\n}\nfunction detectPRNG(root) {\n    const rootLookup = root || detectRoot();\n    const globalCrypto = (rootLookup && (rootLookup.crypto || rootLookup.msCrypto)) ||\n        (null);\n    if (typeof globalCrypto?.getRandomValues === \"function\") {\n        return () => {\n            const buffer = new Uint8Array(1);\n            globalCrypto.getRandomValues(buffer);\n            return buffer[0] / 0xff;\n        };\n    }\n    else if (typeof globalCrypto?.randomBytes === \"function\") {\n        return () => globalCrypto.randomBytes(1).readUInt8() / 0xff;\n    }\n    else ;\n    throw new Layerr({\n        info: {\n            code: \"PRNG_DETECT\",\n            ...ERROR_INFO\n        }\n    }, \"Failed to find a reliable PRNG\");\n}\nfunction detectRoot() {\n    if (inWebWorker())\n        return self;\n    if (typeof window !== \"undefined\") {\n        return window;\n    }\n    if (typeof global !== \"undefined\") {\n        return global;\n    }\n    if (typeof globalThis !== \"undefined\") {\n        return globalThis;\n    }\n    return null;\n}\nfunction encodeRandom(len, prng) {\n    let str = \"\";\n    for (; len > 0; len--) {\n        str = randomChar(prng) + str;\n    }\n    return str;\n}\nfunction encodeTime(now, len) {\n    if (isNaN(now)) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_NAN\",\n                ...ERROR_INFO\n            }\n        }, `Time must be a number: ${now}`);\n    }\n    else if (now > TIME_MAX) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_SIZE_EXCEED\",\n                ...ERROR_INFO\n            }\n        }, `Cannot encode a time larger than ${TIME_MAX}: ${now}`);\n    }\n    else if (now < 0) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_NEG\",\n                ...ERROR_INFO\n            }\n        }, `Time must be positive: ${now}`);\n    }\n    else if (Number.isInteger(now) === false) {\n        throw new Layerr({\n            info: {\n                code: \"ENC_TIME_TYPE\",\n                ...ERROR_INFO\n            }\n        }, `Time must be an integer: ${now}`);\n    }\n    let mod, str = \"\";\n    for (let currentLen = len; currentLen > 0; currentLen--) {\n        mod = now % ENCODING_LEN;\n        str = ENCODING.charAt(mod) + str;\n        now = (now - mod) / ENCODING_LEN;\n    }\n    return str;\n}\n/**\n * Fix a ULID's Base32 encoding -\n * i and l (case-insensitive) will be treated as 1 and o (case-insensitive) will be treated as 0.\n * hyphens are ignored during decoding.\n * @param id\n * @returns The cleaned up ULID\n */\nfunction fixULIDBase32(id) {\n    return id.replace(/i/gi, \"1\").replace(/l/gi, \"1\").replace(/o/gi, \"0\").replace(/-/g, \"\");\n}\nfunction incrementBase32(str) {\n    let done = undefined, index = str.length, char, charIndex, output = str;\n    const maxCharIndex = ENCODING_LEN - 1;\n    while (!done && index-- >= 0) {\n        char = output[index];\n        charIndex = ENCODING.indexOf(char);\n        if (charIndex === -1) {\n            throw new Layerr({\n                info: {\n                    code: \"B32_INC_ENC\",\n                    ...ERROR_INFO\n                }\n            }, \"Incorrectly encoded string\");\n        }\n        if (charIndex === maxCharIndex) {\n            output = replaceCharAt(output, index, ENCODING[0]);\n            continue;\n        }\n        done = replaceCharAt(output, index, ENCODING[charIndex + 1]);\n    }\n    if (typeof done === \"string\") {\n        return done;\n    }\n    throw new Layerr({\n        info: {\n            code: \"B32_INC_INVALID\",\n            ...ERROR_INFO\n        }\n    }, \"Failed incrementing string\");\n}\nfunction inWebWorker() {\n    // @ts-ignore\n    return typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope;\n}\nfunction isValid(id) {\n    return (typeof id === \"string\" &&\n        id.length === TIME_LEN + RANDOM_LEN &&\n        id\n            .toUpperCase()\n            .split(\"\")\n            .every(char => ENCODING.indexOf(char) !== -1));\n}\nfunction monotonicFactory(prng) {\n    const currentPRNG = prng || detectPRNG();\n    let lastTime = 0, lastRandom;\n    return function _ulid(seedTime) {\n        const seed = isNaN(seedTime) ? Date.now() : seedTime;\n        if (seed <= lastTime) {\n            const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n            return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n        }\n        lastTime = seed;\n        const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, currentPRNG));\n        return encodeTime(seed, TIME_LEN) + newRandom;\n    };\n}\nfunction randomChar(prng) {\n    let rand = Math.floor(prng() * ENCODING_LEN);\n    if (rand === ENCODING_LEN) {\n        rand = ENCODING_LEN - 1;\n    }\n    return ENCODING.charAt(rand);\n}\nfunction replaceCharAt(str, index, char) {\n    if (index > str.length - 1) {\n        return str;\n    }\n    return str.substr(0, index) + char + str.substr(index + 1);\n}\nfunction ulid(seedTime, prng) {\n    const currentPRNG = prng || detectPRNG();\n    const seed = isNaN(seedTime) ? Date.now() : seedTime;\n    return encodeTime(seed, TIME_LEN) + encodeRandom(RANDOM_LEN, currentPRNG);\n}\n\nexport { decodeTime, detectPRNG, encodeTime, fixULIDBase32, isValid, monotonicFactory, ulid };\n", "export { Layerr } from \"./layerr.js\";\nexport { assertError, isError } from \"./error.js\";\nexport * from \"./types.js\";\n", "import { assertError, isError } from \"./error.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n    constructor(errorOptionsOrMessage, messageText) {\n        const args = [...arguments];\n        const { options, shortMessage } = parseArguments(args);\n        let message = shortMessage;\n        if (options.cause) {\n            message = `${message}: ${options.cause.message}`;\n        }\n        super(message);\n        this.message = message;\n        if (options.name && typeof options.name === \"string\") {\n            this.name = options.name;\n        }\n        else {\n            this.name = \"Layerr\";\n        }\n        if (options.cause) {\n            Object.defineProperty(this, \"_cause\", { value: options.cause });\n        }\n        Object.defineProperty(this, \"_info\", { value: {} });\n        if (options.info && typeof options.info === \"object\") {\n            Object.assign(this._info, options.info);\n        }\n        if (Error.captureStackTrace) {\n            const ctor = options.constructorOpt || this.constructor;\n            Error.captureStackTrace(this, ctor);\n        }\n    }\n    static cause(err) {\n        assertError(err);\n        if (!err._cause)\n            return null;\n        return isError(err._cause) ? err._cause : null;\n    }\n    static fullStack(err) {\n        assertError(err);\n        const cause = Layerr.cause(err);\n        if (cause) {\n            return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n        }\n        return err.stack;\n    }\n    static info(err) {\n        assertError(err);\n        const output = {};\n        const cause = Layerr.cause(err);\n        if (cause) {\n            Object.assign(output, Layerr.info(cause));\n        }\n        if (err._info) {\n            Object.assign(output, err._info);\n        }\n        return output;\n    }\n    cause() {\n        return Layerr.cause(this);\n    }\n    toString() {\n        let output = this.name || this.constructor.name || this.constructor.prototype.name;\n        if (this.message) {\n            output = `${output}: ${this.message}`;\n        }\n        return output;\n    }\n}\n", "export function assertError(err) {\n    if (!isError(err)) {\n        throw new Error(\"Parameter was not an error\");\n    }\n}\nexport function isError(err) {\n    return objectToString(err) === \"[object Error]\" || err instanceof Error;\n}\nfunction objectToString(obj) {\n    return Object.prototype.toString.call(obj);\n}\n", "import { isError } from \"./error.js\";\nexport function parseArguments(args) {\n    let options, shortMessage = \"\";\n    if (args.length === 0) {\n        options = {};\n    }\n    else if (isError(args[0])) {\n        options = {\n            cause: args[0]\n        };\n        shortMessage = args.slice(1).join(\" \") || \"\";\n    }\n    else if (args[0] && typeof args[0] === \"object\") {\n        options = Object.assign({}, args[0]);\n        shortMessage = args.slice(1).join(\" \") || \"\";\n    }\n    else if (typeof args[0] === \"string\") {\n        options = {};\n        shortMessage = shortMessage = args.join(\" \") || \"\";\n    }\n    else {\n        throw new Error(\"Invalid arguments passed to Layerr\");\n    }\n    return {\n        options,\n        shortMessage\n    };\n}\n", "export {};\n", "import type { EventLog } from '../types/event-log.js';\nimport type { EventStream } from '../types/subscriptions.js';\nimport type { ULIDFactory } from 'ulidx';\nimport type { Filter, KeyValues, PaginationCursor } from '../types/query-types.js';\n\nimport { createLevelDatabase } from '../store/level-wrapper.js';\nimport { IndexLevel } from '../store/index-level.js';\nimport { monotonicFactory } from 'ulidx';\n\ntype EventLogLevelConfig = {\n /**\n   * must be a directory path (relative or absolute) where\n   *  LevelDB will store its files, or in browsers, the name of the\n   * {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase IDBDatabase} to be opened.\n  */\n  location?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n  eventStream?: EventStream,\n};\n\nexport class EventLogLevel implements EventLog {\n  ulidFactory: ULIDFactory;\n  index: IndexLevel;\n\n  constructor(config?: EventLogLevelConfig) {\n    this.index = new IndexLevel({\n      location: 'EVENTLOG',\n      createLevelDatabase,\n      ...config,\n    });\n\n    this.ulidFactory = monotonicFactory();\n  }\n\n  async open(): Promise<void> {\n    return this.index.open();\n  }\n\n  async close(): Promise<void> {\n    return this.index.close();\n  }\n\n  async clear(): Promise<void> {\n    return this.index.clear();\n  }\n\n  async append(tenant: string, messageCid: string, indexes: KeyValues): Promise<void> {\n    const watermark = this.ulidFactory();\n    await this.index.put(tenant, messageCid, { ...indexes, watermark });\n  }\n\n  async queryEvents(tenant: string, filters: Filter[], cursor?: PaginationCursor): Promise<{ events: string[], cursor?: PaginationCursor }> {\n    const results = await this.index.query(tenant, filters, { sortProperty: 'watermark', cursor });\n    return {\n      events : results.map(({ messageCid }) => messageCid),\n      cursor : IndexLevel.createCursorFromLastArrayItem(results, 'watermark'),\n    };\n  }\n\n  async getEvents(tenant: string, cursor?: PaginationCursor): Promise<{ events: string[], cursor?: PaginationCursor }> {\n    return this.queryEvents(tenant, [], cursor);\n  }\n\n  async deleteEventsByCid(tenant: string, messageCids: Array<string>): Promise<void> {\n    const indexDeletePromises: Promise<void>[] = [];\n    for (const messageCid of messageCids) {\n      indexDeletePromises.push(this.index.delete(tenant, messageCid));\n    }\n\n    await Promise.all(indexDeletePromises);\n  }\n}", "import { bytes as binary, CID } from './index.js'\n// Linter can see that API is used in types.\n// eslint-disable-next-line\nimport * as API from './interface.js'\n\nfunction readonly ({ enumerable = true, configurable = false } = {}) {\n  return { enumerable, configurable, writable: false }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<[string, CID]>}\n */\nfunction * linksWithin (path, value) {\n  if (value != null && typeof value === 'object') {\n    if (Array.isArray(value)) {\n      for (const [index, element] of value.entries()) {\n        const elementPath = [...path, index]\n        const cid = CID.asCID(element)\n        if (cid) {\n          yield [elementPath.join('/'), cid]\n        } else if (typeof element === 'object') {\n          yield * links(element, elementPath)\n        }\n      }\n    } else {\n      const cid = CID.asCID(value)\n      if (cid) {\n        yield [path.join('/'), cid]\n      } else {\n        yield * links(value, path)\n      }\n    }\n  }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<[string, CID]>}\n */\nfunction * links (source, base) {\n  if (source == null || source instanceof Uint8Array) {\n    return\n  }\n  const cid = CID.asCID(source)\n  if (cid) {\n    yield [base.join('/'), cid]\n  }\n  for (const [key, value] of Object.entries(source)) {\n    const path = /** @type {[string|number, string]} */ ([...base, key])\n    yield * linksWithin(path, value)\n  }\n}\n\n/**\n * @param {[string|number, string]} path\n * @param {any} value\n * @returns {Iterable<string>}\n */\nfunction * treeWithin (path, value) {\n  if (Array.isArray(value)) {\n    for (const [index, element] of value.entries()) {\n      const elementPath = [...path, index]\n      yield elementPath.join('/')\n      if (typeof element === 'object' && !CID.asCID(element)) {\n        yield * tree(element, elementPath)\n      }\n    }\n  } else {\n    yield * tree(value, path)\n  }\n}\n\n/**\n * @template T\n * @param {T} source\n * @param {Array<string|number>} base\n * @returns {Iterable<string>}\n */\nfunction * tree (source, base) {\n  if (source == null || typeof source !== 'object') {\n    return\n  }\n  for (const [key, value] of Object.entries(source)) {\n    const path = /** @type {[string|number, string]} */ ([...base, key])\n    yield path.join('/')\n    if (value != null && !(value instanceof Uint8Array) && typeof value === 'object' && !CID.asCID(value)) {\n      yield * treeWithin(path, value)\n    }\n  }\n}\n\n/**\n *\n * @template T\n * @param {T} source\n * @param {string[]} path\n * @returns {API.BlockCursorView<unknown>}\n */\nfunction get (source, path) {\n  let node = /** @type {Record<string, any>} */(source)\n  for (const [index, key] of path.entries()) {\n    node = node[key]\n    if (node == null) {\n      throw new Error(`Object has no property at ${path.slice(0, index + 1).map(part => `[${JSON.stringify(part)}]`).join('')}`)\n    }\n    const cid = CID.asCID(node)\n    if (cid) {\n      return { value: cid, remaining: path.slice(index + 1).join('/') }\n    }\n  }\n  return { value: node }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} C - multicodec code corresponding to codec used to encode the block\n * @template {number} A - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @implements {API.BlockView<T, C, A, V>}\n */\nclass Block {\n  /**\n   * @param {object} options\n   * @param {CID<T, C, A, V>} options.cid\n   * @param {API.ByteView<T>} options.bytes\n   * @param {T} options.value\n   */\n  constructor ({ cid, bytes, value }) {\n    if (!cid || !bytes || typeof value === 'undefined') { throw new Error('Missing required argument') }\n\n    this.cid = cid\n    this.bytes = bytes\n    this.value = value\n    this.asBlock = this\n\n    // Mark all the properties immutable\n    Object.defineProperties(this, {\n      cid: readonly(),\n      bytes: readonly(),\n      value: readonly(),\n      asBlock: readonly()\n    })\n  }\n\n  links () {\n    return links(this.value, [])\n  }\n\n  tree () {\n    return tree(this.value, [])\n  }\n\n  /**\n   *\n   * @param {string} [path]\n   * @returns {API.BlockCursorView<unknown>}\n   */\n  get (path = '/') {\n    return get(this.value, path.split('/').filter(Boolean))\n  }\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {T} options.value\n * @param {API.BlockEncoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function encode ({ value, codec, hasher }) {\n  if (typeof value === 'undefined') throw new Error('Missing required argument \"value\"')\n  if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n  const bytes = codec.encode(value)\n  const hash = await hasher.digest(bytes)\n  /** @type {CID<T, Code, Alg, 1>} */\n  const cid = CID.create(\n    1,\n    codec.code,\n    hash\n  )\n\n  return new Block({ value, bytes, cid })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @param {object} options\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg>>}\n */\nasync function decode ({ bytes, codec, hasher }) {\n  if (!bytes) throw new Error('Missing required argument \"bytes\"')\n  if (!codec || !hasher) throw new Error('Missing required argument: codec or hasher')\n\n  const value = codec.decode(bytes)\n  const hash = await hasher.digest(bytes)\n  /** @type {CID<T, Code, Alg, 1>} */\n  const cid = CID.create(1, codec.code, hash)\n\n  return new Block({ value, bytes, cid })\n}\n\n/**\n * @typedef {object} RequiredCreateOptions\n * @property {CID} options.cid\n */\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {{ cid: API.Link<T, Code, Alg, V>, value:T, codec?: API.BlockDecoder<Code, T>, bytes: API.ByteView<T> }|{cid:API.Link<T, Code, Alg, V>, bytes:API.ByteView<T>, value?:void, codec:API.BlockDecoder<Code, T>}} options\n * @returns {API.BlockView<T, Code, Alg, V>}\n */\nfunction createUnsafe ({ bytes, cid, value: maybeValue, codec }) {\n  const value = maybeValue !== undefined\n    ? maybeValue\n    : (codec && codec.decode(bytes))\n\n  if (value === undefined) throw new Error('Missing required argument, must either provide \"value\" or \"codec\"')\n\n  return new Block({\n    // eslint-disable-next-line object-shorthand\n    cid: /** @type {CID<T, Code, Alg, V>} */ (cid),\n    bytes,\n    value\n  })\n}\n\n/**\n * @template {unknown} T - Logical type of the data encoded in the block\n * @template {number} Code - multicodec code corresponding to codec used to encode the block\n * @template {number} Alg - multicodec code corresponding to the hashing algorithm used in CID creation.\n * @template {API.Version} V - CID version\n * @param {object} options\n * @param {API.Link<T, Code, Alg, V>} options.cid\n * @param {API.ByteView<T>} options.bytes\n * @param {API.BlockDecoder<Code, T>} options.codec\n * @param {API.MultihashHasher<Alg>} options.hasher\n * @returns {Promise<API.BlockView<T, Code, Alg, V>>}\n */\nasync function create ({ bytes, cid, hasher, codec }) {\n  if (!bytes) throw new Error('Missing required argument \"bytes\"')\n  if (!hasher) throw new Error('Missing required argument \"hasher\"')\n  const value = codec.decode(bytes)\n  const hash = await hasher.digest(bytes)\n  if (!binary.equals(cid.multihash.bytes, hash.bytes)) {\n    throw new Error('CID hash does not match bytes')\n  }\n\n  return createUnsafe({\n    bytes,\n    cid,\n    value,\n    codec\n  })\n}\n\nexport { encode, decode, create, createUnsafe, Block }\n", "\nimport type { Filter, KeyValues, PaginationCursor, QueryOptions } from '../types/query-types.js';\nimport type { GenericMessage, MessageSort, Pagination } from '../types/message-types.js';\nimport type { MessageStore, MessageStoreOptions } from '../types/message-store.js';\n\nimport * as block from 'multiformats/block';\nimport * as cbor from '@ipld/dag-cbor';\n\nimport { BlockstoreLevel } from './blockstore-level.js';\nimport { Cid } from '../utils/cid.js';\nimport { CID } from 'multiformats/cid';\nimport { createLevelDatabase } from './level-wrapper.js';\nimport { executeUnlessAborted } from '../utils/abort.js';\nimport { IndexLevel } from './index-level.js';\nimport { Message } from '../core/message.js';\nimport { sha256 } from 'multiformats/hashes/sha2';\nimport { SortDirection } from '../types/query-types.js';\n\n\n/**\n * A simple implementation of {@link MessageStore} that works in both the browser and server-side.\n * Leverages LevelDB under the hood.\n */\nexport class MessageStoreLevel implements MessageStore {\n  config: MessageStoreLevelConfig;\n\n  blockstore: BlockstoreLevel;\n  index: IndexLevel;\n\n  /**\n   * @param {MessageStoreLevelConfig} config\n   * @param {string} config.blockstoreLocation - must be a directory path (relative or absolute) where\n   *  LevelDB will store its files, or in browsers, the name of the\n   * {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase IDBDatabase} to be opened.\n   * @param {string} config.indexLocation - same as config.blockstoreLocation\n   */\n  constructor(config: MessageStoreLevelConfig = {}) {\n    this.config = {\n      blockstoreLocation : 'MESSAGESTORE',\n      indexLocation      : 'INDEX',\n      createLevelDatabase,\n      ...config\n    };\n\n    this.blockstore = new BlockstoreLevel({\n      location            : this.config.blockstoreLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n\n    this.index = new IndexLevel({\n      location            : this.config.indexLocation!,\n      createLevelDatabase : this.config.createLevelDatabase,\n    });\n  }\n\n  async open(): Promise<void> {\n    await this.blockstore.open();\n    await this.index.open();\n  }\n\n  async close(): Promise<void> {\n    await this.blockstore.close();\n    await this.index.close();\n  }\n\n  async get(tenant: string, cidString: string, options?: MessageStoreOptions): Promise<GenericMessage | undefined> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const cid = CID.parse(cidString);\n    const bytes = await partition.get(cid, options);\n\n    if (!bytes) {\n      return undefined;\n    }\n\n    const decodedBlock = await executeUnlessAborted(block.decode({ bytes, codec: cbor, hasher: sha256 }), options?.signal);\n\n    const message = decodedBlock.value as GenericMessage;\n    return message;\n  }\n\n  async query(\n    tenant: string,\n    filters: Filter[],\n    messageSort?: MessageSort,\n    pagination?: Pagination,\n    options?: MessageStoreOptions\n  ): Promise<{ messages: GenericMessage[], cursor?: PaginationCursor}> {\n    options?.signal?.throwIfAborted();\n\n    // creates the query options including sorting and pagination.\n    // this adds 1 to the limit if provided, that way we can check to see if there are additional results and provide a return cursor.\n    const queryOptions = MessageStoreLevel.buildQueryOptions(messageSort, pagination);\n    const results = await this.index.query(tenant, filters, queryOptions, options);\n\n    let cursor: PaginationCursor | undefined;\n    // checks to see if the returned results are greater than the limit, which would indicate additional results.\n    if (pagination?.limit !== undefined && pagination.limit < results.length) {\n      // has additional records, remove last record and set cursor\n      results.splice(-1);\n\n      // set cursor to the last item remaining after the spliced result.\n      cursor = IndexLevel.createCursorFromLastArrayItem(results, queryOptions.sortProperty);\n    }\n\n    const messages: GenericMessage[] = [];\n    for (let i = 0; i < results.length; i++) {\n      const { messageCid } = results[i];\n      const message = await this.get(tenant, messageCid, options);\n      if (message) { messages.push(message); }\n    }\n\n    return { messages, cursor };\n  }\n\n  /**\n   * Builds the IndexLevel QueryOptions object given MessageStore sort and pagination parameters.\n   */\n  static buildQueryOptions(messageSort: MessageSort = {}, pagination: Pagination = {}): QueryOptions {\n    let { limit, cursor } = pagination;\n    const { dateCreated, datePublished, messageTimestamp } = messageSort;\n\n    let sortDirection = SortDirection.Ascending; // default\n    // `keyof MessageSort` = name of all properties of `MessageSort` defaults to messageTimestamp\n    let sortProperty: keyof MessageSort = 'messageTimestamp';\n\n    // set the sort property\n    if (dateCreated !== undefined) {\n      sortProperty = 'dateCreated';\n    } else if (datePublished !== undefined) {\n      sortProperty = 'datePublished';\n    } else if (messageTimestamp !== undefined) {\n      sortProperty = 'messageTimestamp';\n    }\n\n    if (messageSort[sortProperty] !== undefined) {\n      sortDirection = messageSort[sortProperty]!;\n    }\n\n    // we add one more to the limit to determine whether there are additional results and to return a cursor.\n    if (limit !== undefined && limit > 0) {\n      limit = limit + 1;\n    }\n\n    return { sortDirection, sortProperty, limit, cursor };\n  }\n\n  async delete(tenant: string, cidString: string, options?: MessageStoreOptions): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const cid = CID.parse(cidString);\n    await partition.delete(cid, options);\n    await this.index.delete(tenant, cidString, options);\n  }\n\n  async put(\n    tenant: string,\n    message: GenericMessage,\n    indexes: KeyValues,\n    options?: MessageStoreOptions\n  ): Promise<void> {\n    options?.signal?.throwIfAborted();\n\n    const partition = await executeUnlessAborted(this.blockstore.partition(tenant), options?.signal);\n\n    const encodedMessageBlock = await executeUnlessAborted(block.encode({ value: message, codec: cbor, hasher: sha256 }), options?.signal);\n\n    // MessageStore data may contain `encodedData` which is not taken into account when calculating the blockCID as it is optional data.\n    const messageCid = Cid.parseCid(await Message.getCid(message));\n    await partition.put(messageCid, encodedMessageBlock.bytes, options);\n\n    const messageCidString = messageCid.toString();\n\n    await this.index.put(tenant, messageCidString, indexes, options);\n  }\n\n\n  /**\n   * deletes everything in the underlying blockstore and indices.\n   */\n  async clear(): Promise<void> {\n    await this.blockstore.clear();\n    await this.index.clear();\n  }\n}\n\ntype MessageStoreLevelConfig = {\n  blockstoreLocation?: string,\n  indexLocation?: string,\n  createLevelDatabase?: typeof createLevelDatabase,\n};", "import type { ManagedResumableTask, ResumableTaskStore } from '../types/resumable-task-store.js';\n\nimport { Cid } from '../utils/cid.js';\nimport { createLevelDatabase, LevelWrapper } from './level-wrapper.js';\n\ntype ResumableTaskStoreLevelConfig = {\n  location?: string,\n  createLevelDatabase?: typeof createLevelDatabase\n};\n\n/**\n * A simple single-instance implementation of {@link ResumableTaskStore} that works in both browsers and node.js.\n * Leverages LevelDB under the hood.\n */\nexport class ResumableTaskStoreLevel implements ResumableTaskStore {\n  private static readonly taskTimeoutInSeconds = 60;\n\n  db: LevelWrapper<string>;\n  config: ResumableTaskStoreLevelConfig;\n\n  constructor(config: ResumableTaskStoreLevelConfig) {\n    this.config = {\n      // defaults:\n      location: 'RESUMABLE-TASK-STORE',\n      createLevelDatabase,\n      // user-provided overrides:\n      ...config,\n    };\n\n    this.db = new LevelWrapper<string>({\n      location            : this.config.location!,\n      createLevelDatabase : this.config.createLevelDatabase,\n      keyEncoding         : 'utf8'\n    });\n  }\n\n  async open(): Promise<void> {\n    await this.db.open();\n  }\n\n  async close(): Promise<void> {\n    await this.db.close();\n  }\n\n  public async register(task: any, timeoutInSeconds: number): Promise<ManagedResumableTask> {\n    const taskId = await Cid.computeCid(task);\n\n    const managedResumableTask: ManagedResumableTask = {\n      id         : taskId,\n      timeout    : Date.now() + (timeoutInSeconds * 1000),\n      retryCount : 0,\n      task,\n    };\n\n    await this.db.put(taskId, JSON.stringify(managedResumableTask));\n\n    return managedResumableTask;\n  }\n\n  public async grab(count: number): Promise<ManagedResumableTask[]> {\n    const tasks: ManagedResumableTask[] = [];\n\n    // iterate over the tasks to find unhandled (timed-out) tasks to return to the caller,\n    // tasks that are not timed-out are considered in-flight/under processing\n    // NOTE: there is an opportunity here to introduce an additional index where we can query by timed-out tasks,\n    // but it requires an additional index thus more complexity\n    for await (const [ _, value ] of this.db.iterator()) {\n      const task = JSON.parse(value) as ManagedResumableTask;\n\n      // if the task is timed-out, we can give it to the caller to handle\n      if (Date.now() >= task.timeout) {\n        // update the task metadata first before adding to list of tasks to return\n        task.timeout = Date.now() + (ResumableTaskStoreLevel.taskTimeoutInSeconds * 1000);\n        task.retryCount++;\n        await this.db.put(task.id, JSON.stringify(task));\n\n        tasks.push(task);\n      }\n\n      if (tasks.length >= count) {\n        break;\n      }\n    }\n\n    return tasks;\n  }\n\n  public async read(taskId: string): Promise<ManagedResumableTask | undefined> {\n    const value = await this.db.get(taskId);\n\n    if (value) {\n      const task = JSON.parse(value) as ManagedResumableTask;\n      return task;\n    } else {\n      return undefined;\n    }\n  }\n\n  public async extend(taskId: string, timeoutInSeconds: number): Promise<void> {\n    const value = await this.db.get(taskId);\n\n    if (value) {\n      const task = JSON.parse(value) as ManagedResumableTask;\n      task.timeout = Date.now() + (timeoutInSeconds * 1000);\n\n      await this.db.put(task.id, JSON.stringify(task));\n    }\n  }\n\n  public async delete(taskId: string): Promise<void> {\n    return this.db.delete(taskId);\n  }\n\n  /**\n   * Deletes everything in the store. Mainly used in tests.\n   */\n  public async clear(): Promise<void> {\n    await this.db.clear();\n  }\n}\n", "import type { KeyValues } from '../types/query-types.js';\nimport type { EventListener, EventStream, EventSubscription, MessageEvent } from '../types/subscriptions.js';\n\nimport { EventEmitter } from 'events';\nimport { DwnError, DwnErrorCode } from '../core/dwn-error.js';\n\nconst EVENTS_LISTENER_CHANNEL = 'events';\n\nexport interface EventEmitterStreamConfig {\n  /**\n   * An optional error handler in order to be able to react to any errors or warnings triggers by `EventEmitter`.\n   * By default we log errors with `console.error`.\n   */\n  errorHandler?: (error: any) => void;\n};\n\nexport class EventEmitterStream implements EventStream {\n  private eventEmitter: EventEmitter;\n  private isOpen: boolean = false;\n\n  constructor(config: EventEmitterStreamConfig = {}) {\n    // we capture the rejections and currently just log the errors that are produced\n    this.eventEmitter = new EventEmitter({ captureRejections: true });\n\n    // number of listeners per particular eventName before a warning is emitted\n    // we set to 0 which represents infinity.\n    // https://nodejs.org/api/events.html#emittersetmaxlistenersn\n    this.eventEmitter.setMaxListeners(0);\n\n    if (config.errorHandler) {\n      this.errorHandler = config.errorHandler;\n    }\n\n    this.eventEmitter.on('error', this.errorHandler);\n  }\n\n  /**\n   * we subscribe to the `EventEmitter` error handler with a provided handler or set one which logs the errors.\n   */\n  private errorHandler: (error:any) => void = (error) => { console.error('event emitter error', error); };\n\n  async subscribe(tenant: string, id: string, listener: EventListener): Promise<EventSubscription> {\n    this.eventEmitter.on(`${tenant}_${EVENTS_LISTENER_CHANNEL}`, listener);\n    return {\n      id,\n      close: async (): Promise<void> => { this.eventEmitter.off(`${tenant}_${EVENTS_LISTENER_CHANNEL}`, listener); }\n    };\n  }\n\n  async open(): Promise<void> {\n    this.isOpen = true;\n  }\n\n  async close(): Promise<void> {\n    this.isOpen = false;\n    this.eventEmitter.removeAllListeners();\n  }\n\n  emit(tenant: string, event: MessageEvent, indexes: KeyValues): void {\n    if (!this.isOpen) {\n      this.errorHandler(new DwnError(\n        DwnErrorCode.EventEmitterStreamNotOpenError,\n        'a message emitted when EventEmitterStream is closed'\n      ));\n      return;\n    }\n    this.eventEmitter.emit(`${tenant}_${EVENTS_LISTENER_CHANNEL}`, tenant, event, indexes);\n  }\n}", null, "export * from './types/did-core.js';\nexport * from './types/did-resolution.js';\nexport type * from './types/multibase.js';\nexport type * from './types/portable-did.js';\n\nexport * from './did.js';\nexport * from './did-error.js';\nexport * from './bearer-did.js';\n\nexport * from './methods/did-dht.js';\nexport * from './methods/did-ion.js';\nexport * from './methods/did-jwk.js';\nexport * from './methods/did-key.js';\nexport * from './methods/did-method.js';\nexport * from './methods/did-web.js';\n\nexport * from './resolver/resolver-cache-level.js';\nexport * from './resolver/resolver-cache-noop.js';\nexport * from './resolver/universal-resolver.js';\n\nexport * as utils from './utils.js';", "import { Jwk } from '@web5/crypto';\n\n/**\n * Represents metadata related to the process of DID dereferencing.\n *\n * This type includes fields that provide information about the outcome of a DID dereferencing operation,\n * including the content type of the returned resource and any errors that occurred during the dereferencing process.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-metadata | DID Core Specification, \u00A7 DID URL Dereferencing Metadata}\n */\nexport type DidDereferencingMetadata = {\n  /**\n   * The Media Type of the returned contentStream SHOULD be expressed using this property if\n   * dereferencing is successful.\n   */\n  contentType?: string;\n\n  /**\n   * The error code from the dereferencing process. This property is REQUIRED when there is an\n   * error in the dereferencing process. The value of this property MUST be a single keyword\n   * expressed as an ASCII string. The possible property values of this field SHOULD be registered\n   * in the {@link https://www.w3.org/TR/did-spec-registries/ | DID Specification Registries}.\n   * The DID Core specification defines the following common error values:\n   *\n   * - `invalidDidUrl`: The DID URL supplied to the DID URL dereferencing function does not conform\n   *                    to valid syntax.\n   * - `notFound`: The DID URL dereferencer was unable to find the `contentStream` resulting from\n   *               this dereferencing request.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-metadata | DID Core Specification, \u00A7 DID URL Dereferencing Metadata}\n   */\n  error?: string;\n\n  // Additional output metadata generated during DID Resolution.\n  [key: string]: any;\n}\n\n/**\n * Represents the options that can be used during the process of DID dereferencing.\n *\n * This interface allows the caller to specify preferences and additional parameters for the DID\n * dereferencing operation.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing-options}\n */\nexport interface DidDereferencingOptions {\n  /** The Media Type that the caller prefers for contentStream. */\n  accept?: string;\n\n  /** Additional properties used during DID dereferencing. */\n  [key: string]: any;\n}\n\n/**\n * Represents the result of a DID dereferencing operation.\n *\n * This type encapsulates the outcomes of the DID URL dereferencing process, including metadata\n * about the dereferencing operation, the content stream retrieved (if any), and metadata about the\n * content stream.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core Specification, \u00A7 DID URL Dereferencing}\n */\nexport type DidDereferencingResult = {\n  /**\n   * A metadata structure consisting of values relating to the results of the DID URL dereferencing\n   * process. This structure is REQUIRED, and in the case of an error in the dereferencing process,\n   * this MUST NOT be empty. Properties defined by this specification are in 7.2.2 DID URL\n   * Dereferencing Metadata. If the dereferencing is not successful, this structure MUST contain an\n   * `error` property describing the error.\n   */\n  dereferencingMetadata: DidDereferencingMetadata;\n\n  /**\n   * If the `dereferencing` function was called and successful, this MUST contain a resource\n   * corresponding to the DID URL. The contentStream MAY be a resource such as:\n   *   - a DID document that is serializable in one of the conformant representations\n   *   - a Verification Method\n   *   - a service.\n   *   - any other resource format that can be identified via a Media Type and obtained through the\n   *     resolution process.\n   *\n   * If the dereferencing is unsuccessful, this value MUST be empty.\n   */\n  contentStream: DidResource | null;\n\n  /**\n   * If the dereferencing is successful, this MUST be a metadata structure, but the structure MAY be\n   * empty. This structure contains metadata about the contentStream. If the contentStream is a DID\n   * document, this MUST be a didDocumentMetadata structure as described in DID Resolution. If the\n   * dereferencing is unsuccessful, this output MUST be an empty metadata structure.\n   */\n  contentMetadata: DidDocumentMetadata;\n}\n\n/**\n * A set of data describing the Decentralized Identifierr (DID) subject.\n *\n * A DID Document contains information associated with the DID, such as cryptographic public keys\n * and service endpoints, enabling trustable interactions associated with the DID subject.\n *\n * - Cryptographic public keys - Used by the DID subject or a DID delegate to authenticate itself\n *                               and prove its association with the DID.\n * - Service endpoints - Used to communicate or interact with the DID subject or associated\n *                       entities. Examples include discovery, agent, social networking, file\n *                       storage, and verifiable credential repository services.\n *\n * A DID Document can be retrieved by resolving a DID, as described in\n * {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core Specification, \u00A7 DID Resolution}.\n */\nexport interface DidDocument {\n  /**\n   * A JSON-LD context link, which provides a JSON-LD processor with the information necessary to\n   * interpret the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'.\n   */\n  '@context'?: 'https://www.w3.org/ns/did/v1' | string | (string | Record<string, any>)[];\n\n  /**\n   * The DID Subject to which this DID Document pertains.\n   *\n   * The `id` property is REQUIRED and must be a valid DID.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-subject | DID Core Specification, \u00A7 DID Subject}\n   */\n  id: string;\n\n  /**\n   * A DID subject can have multiple identifiers for different purposes, or at different times.\n   * The assertion that two or more DIDs (or other types of URI) refer to the same DID subject can\n   * be made using the `alsoKnownAs` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#also-known-as | DID Core Specification, \u00A7 Also Known As}\n   */\n  alsoKnownAs?: string[];\n\n  /**\n   * A DID controller is an entity that is authorized to make changes to a DID document. Typically,\n   * only the DID Subject (i.e., the value of `id` property in the DID document) is authoritative.\n   * However, another DID can be specified as the DID controller, and when doing so, any\n   * verification methods contained in the DID document for the other DID should be accepted as\n   * authoritative.  In other words, proofs created by the controller DID should be considered\n   * equivalent to proofs created by the DID Subject.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-controller | DID Core Specification, \u00A7 DID Controller}\n   */\n  controller?: string | string[];\n\n  /**\n   * A DID document can express verification methods, such as cryptographic public keys, which can\n   * be used to authenticate or authorize interactions with the DID subject or associated parties.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n   */\n  verificationMethod?: DidVerificationMethod[];\n\n  /**\n   * The `assertionMethod` verification relationship is used to specify how the DID subject is\n   * expected to express claims, such as for the purposes of issuing a Verifiable Credential.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#assertion | DID Core Specification, \u00A7 Assertion}\n   */\n  assertionMethod?: (DidVerificationMethod | string)[];\n\n  /**\n   * The `authentication` verification relationship is used to specify how the DID subject is expected\n   * to be authenticated, for purposes such as logging into a website or engaging in any sort of\n   * challenge-response protocol.\n\n   * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, \u00A7 Authentication}\n   */\n  authentication?: (DidVerificationMethod | string)[];\n\n  /**\n   * The `keyAgreement` verification relationship is used to specify how an entity can generate\n   * encryption material in order to transmit confidential  information intended for the DID\n   * subject, such as for the purposes of establishing a secure communication channel with the\n   * recipient.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, \u00A7 Key Agreement}\n   */\n  keyAgreement?: (DidVerificationMethod | string)[];\n\n  /**\n   *  The `capabilityDelegation` verification relationship is used to specify a mechanism that might\n   * be used by the DID subject to delegate a cryptographic capability to another party, such as\n   * delegating the authority to access a specific HTTP API to a subordinate.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, \u00A7 Capability Delegation}\n   */\n  capabilityDelegation?: (DidVerificationMethod | string)[];\n\n  /**\n   * The `capabilityInvocation` verification relationship is used to specify a verification method\n   * that might be used by the DID subject to invoke a cryptographic capability, such as the\n   * authorization to update the DID Document.\n   */\n  capabilityInvocation?: (DidVerificationMethod | string)[];\n\n  /**\n   * Services are used in DID documents to express ways of communicating with the DID subject or\n   * associated entities. A service can be any type of service the DID subject wants to advertise,\n   * including decentralized identity management services for further discovery, authentication,\n   * authorization, or interaction.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, \u00A7 Services}\n   */\n  service?: DidService[];\n}\n\n/**\n * Represents metadata about the DID document resulting from a DID resolution operation.\n *\n * This metadata typically does not change between invocations of the `resolve` and\n * `resolveRepresentation` functions unless the DID document changes, as it represents metadata\n * about the DID document.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-document-metadata | DID Core Specification, \u00A7 DID Document Metadata}\n */\nexport interface DidDocumentMetadata {\n  /**\n   * Timestamp of the Create operation.\n   *\n   * The value of the property MUST be a string formatted as an XML Datetime normalized to\n   * UTC 00:00:00 and  without sub-second decimal precision. For example: `2020-12-20T19:17:47Z`.\n   */\n  created?: string;\n\n  /**\n   * Timestamp of the last Update operation for the document version which was resolved.\n   *\n   * The value of the property MUST follow the same formatting rules as the `created` property.\n   * The `updated` property is omitted if an Update operation has never been performed on the DID\n   * document. If an `updated` property exists, it can be the same value as the `created` property\n   * when the difference between the two timestamps is less than one second.\n   */\n  updated?: string;\n\n  /**\n   * Whether the DID has been deactivated.\n   *\n   * If a DID has been deactivated, DID document metadata MUST include this property with the\n   * boolean value `true`. If a DID has not been deactivated, this properrty is OPTIONAL, but if\n   * present, MUST have the boolean value `false`.\n   */\n  deactivated?: boolean;\n\n  /**\n   * Version ID of the last Update operation for the document version which was resolved.\n   */\n  versionId?: string;\n\n  /**\n   * Timestamp of the next Update operation if the resolved document version is not the latest\n   * version of the document.\n   *\n   * The value of the property MUST follow the same formatting rules as the `created` property.\n   */\n  nextUpdate?: string;\n\n  /**\n   * Version ID of the next Update operation if the resolved document version is not the latest\n   * version of the document.\n   */\n  nextVersionId?: string;\n\n  /**\n   * A DID method can define different forms of a DID that are logically equivalent. An example is\n   * when a DID takes one form prior to registration in a verifiable data registry and another form\n   * after such registration. In this case, the DID method specification might need to express one\n   * or more DIDs that are logically equivalent to the resolved DID as a property of the DID\n   * document. This is the purpose of the `equivalentId` property.\n   *\n   * A requesting party is expected to retain the values from the id and equivalentId properties to\n   * ensure any subsequent interactions with any of the values they contain are correctly handled as\n   * logically equivalent (e.g., retain all variants in a database so an interaction with any one\n   * maps to the same underlying account).\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-equivalentid | DID Core Specification, \u00A7 DID Document Metadata}\n  */\n equivalentId?: string[];\n\n /**\n  * The `canonicalId` property is identical to the `equivalentId` property except:\n  * - it is associated with a single value rather than a set\n  * - the DID is defined to be the canonical ID for the DID subject within the scope of the\n  *   containing DID document.\n  *\n  * A requesting party is expected to use the `canonicalId` value as its primary ID value for the\n  * DID subject and treat all other equivalent values as secondary aliases (e.g., update\n  * corresponding primary references in their systems to reflect the new canonical ID directive).\n  *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-canonicalid | DID Core Specification, \u00A7 DID Document Metadata}\n   */\n  canonicalId?: string;\n\n  // Additional output metadata generated during DID Resolution.\n  [key: string]: any;\n}\n\n/**\n * Represents metadata related to the result of a DID resolution operation.\n *\n * This type includes fields that provide information about the outcome of a DID resolution process,\n * including the content type of the returned DID document and any errors that occurred during the\n * resolution process.\n *\n * This metadata typically changes between invocations of the `resolve` and `resolveRepresentation`\n * functions, as it represents data about the resolution process itself.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution-metadata | DID Core Specification, \u00A7 DID Resolution Metadata}\n */\nexport type DidResolutionMetadata = {\n  /**\n   * The Media Type of the returned `didDocumentStream`.\n   *\n   * This property is REQUIRED if resolution is successful and if the `resolveRepresentation`\n   * function was called. This property MUST NOT be present if the `resolve` function was called.\n   * The value of this property MUST be an ASCII string that is the Media Type of the conformant\n   * representations. The caller of the `resolveRepresentation` function MUST use this value when\n   * determining how to parse and process the `didDocumentStream` returned by this function into the\n   * data model.\n   */\n  contentType?: string;\n\n  /**\n   * An error code indicating issues encountered during the DID Resolution or DID URL\n   * Dereferencing process.\n   *\n   * Defined error codes include:\n   *   - `internalError`: An unexpected error occurred during DID Resolution or DID URL\n   *                      dereferencing process.\n   *   - `invalidDid`: The provided DID is invalid.\n   *   - `methodNotSupported`: The DID method specified is not supported.\n   *   - `notFound`: The DID or DID URL does not exist.\n   *   - `representationNotSupported`: The DID document representation is not supported.\n   *   - Custom error codes can also be provided as strings.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-resolution-metadata | DID Core Specification, \u00A7 DID Resolution Metadata}\n   * @see {@link https://www.w3.org/TR/did-spec-registries/#error | DID Specification Registries, \u00A7 Error}\n   */\n  error?: string;\n\n  // Additional output metadata generated during DID Resolution.\n  [key: string]: any;\n};\n\n/**\n * DID Resolution input metadata.\n*\n* The DID Core specification defines the following common properties:\n*  - `accept`: The Media Type that the caller prefers for the returned representation of the DID\n*              Document.\n*\n* The possible properties within this structure and their possible values are registered in the\n* {@link https://www.w3.org/TR/did-spec-registries/#did-resolution-options | DID Specification Registries}.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options | DID Core Specification, \u00A7 DID Resolution Options}\n */\nexport interface DidResolutionOptions {\n  /**\n   * The Media Type that the caller prefers for the returned representation of the DID Document.\n   *\n   * This property is REQUIRED if the `resolveRepresentation` function was called. This property\n   * MUST NOT be present if the `resolve` function was called.\n   *\n   * The value of this property MUST be an ASCII string that is the Media Type of the conformant\n   * representations. The caller of the `resolveRepresentation` function MUST use this value when\n   * determining how to parse and process the `didDocumentStream` returned by this function into the\n   * data model.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-resolution-options | DID Core Specification, \u00A7 DID Resolution Options}\n   */\n  accept?: string;\n\n  // Additional properties used during DID Resolution.\n  [key: string]: any;\n}\n\n/**\n * Represents the result of a Decentralized Identifier (DID) resolution operation.\n *\n * This type encapsulates the complete outcome of resolving a DID, including the resolution metadata,\n * the DID document (if resolution is successful), and metadata about the DID document.\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core Specification, \u00A7 DID Resolution}\n */\nexport type DidResolutionResult = {\n  /**\n   * A JSON-LD context link, which provides the JSON-LD processor with the information necessary to\n   * interpret the resolution result JSON. The default context URL is\n   * 'https://w3id.org/did-resolution/v1'.\n   */\n  '@context'?: 'https://w3id.org/did-resolution/v1' | string | (string | Record<string, any>)[];\n\n  /**\n   * A metadata structure consisting of values relating to the results of the DID resolution\n   * process.\n   *\n   * This structure is REQUIRED, and in the case of an error in the resolution process,\n   * this MUST NOT be empty. If the resolution is not successful, this structure MUST contain an\n   * `error` property describing the error.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-didresolutionmetadata | DID Core Specification, \u00A7 DID Resolution Metadata}\n   */\n  didResolutionMetadata: DidResolutionMetadata;\n\n  /**\n   * The DID document resulting from the resolution process, if successful.\n   *\n   * If the `resolve` function was called and successful, this MUST contain a DID document\n   * corresponding to the DID. If the resolution is unsuccessful, this value MUST be empty.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocument | DID Core Specification, \u00A7 DID Document}\n   */\n  didDocument: DidDocument | null;\n\n  /**\n   * Metadata about the DID Document.\n   *\n   * This structure contains information about the DID Document like creation and update timestamps,\n   * deactivation status, versioning information, and other details relevant to the DID Document.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata | DID Core Specification, \u00A7 DID Document Metadata}\n   */\n  didDocumentMetadata: DidDocumentMetadata;\n};\n\n/**\n * A DID Resource is either a DID Document, a DID Verification method or a DID Service\n */\nexport type DidResource = DidDocument | DidService | DidVerificationMethod;\n\n/**\n * Services are used in DID documents to express ways of communicating with the DID subject or\n * associated entities. A service can be any type of service the DID subject wants to advertise.\n *\n * @see {@link https://www.w3.org/TR/did-core/#services}\n */\nexport type DidService = {\n  /**\n   * Identifier of the service.\n   *\n   * The `id` property is REQUIRED. It MUST be a URI conforming to\n   * {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986} and MUST be unique within the\n   * DID document.\n   */\n  id: string;\n\n  /**\n   * The type of service being described.\n   *\n   * The `type` property is REQUIRED. It MUST be a string. To maximize interoperability, the value\n   * SHOULD be registered in the\n   * {@link https://www.w3.org/TR/did-spec-registries/ | DID Specification Registries}. Examples of\n   * service types can be found in\n   * {@link https://www.w3.org/TR/did-spec-registries/#service-types | \u00A7 Service Types}.\n   */\n  type: string;\n\n  /**\n   * A URI that can be used to interact with the DID service.\n   *\n   * The value of the `serviceEndpoint` property MUST be a string, an object containing key/value\n   * pairs, or an array composed of strings or objects. All string values MUST be valid URIs\n   * conforming to {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986}.\n   */\n  serviceEndpoint: DidServiceEndpoint | DidServiceEndpoint[];\n\n  // DID methods MAY include additional service properties.\n  [key: string]: any;\n};\n\n/**\n * A service endpoint is a URI (Uniform Resource Identifier) that can be used to interact with the\n * DID service.\n *\n * The value of the `serviceEndpoint` property MUST be a string or an object containing key/value\n * pairs. All string values MUST be valid URIs conforming to\n * {@link https://datatracker.ietf.org/doc/html/rfc3986 | RFC3986}.\n *\n * @see {@link https://www.w3.org/TR/did-core/#dfn-serviceendpoint | RFC3986, \u00A7 5.4 Services}\n */\nexport type DidServiceEndpoint = string | Record<string, any>;\n\n/**\n * Represents a verification method in the context of a DID document.\n *\n * A verification method is a mechanism by which a DID controller can cryptographically assert proof\n * of ownership or control over a DID or DID document. This can include, but is not limited to,\n * cryptographic public keys or other data that can be used to authenticate or authorize actions.\n *\n * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n */\nexport interface DidVerificationMethod {\n  /**\n   * The identifier of the verification method, which must be a URI.\n   */\n  id: string;\n\n  /**\n   * The type of the verification method.\n   *\n   * To maximize interoperability this value SHOULD be one of the valid verification method types\n   * registered in the {@link https://www.w3.org/TR/did-spec-registries/#verification-method-types | DID Specification Registries}.\n   */\n  type: string;\n\n  /**\n   * The DID of the entity that controls this verification method.\n   */\n  controller: string;\n\n  /**\n   * (Optional) A public key in JWK format.\n   *\n   * A JSON Web Key (JWK) that conforms to {@link https://datatracker.ietf.org/doc/html/rfc7517 | RFC 7517}.\n   */\n  publicKeyJwk?: Jwk;\n\n  /**\n   * (Optional) A public key in Multibase format.\n   *\n   * A multibase key that conforms to the draft\n   * {@link https://datatracker.ietf.org/doc/draft-multiformats-multibase/ | Multibase specification}.\n   */\n  publicKeyMultibase?: string;\n}\n\n/**\n * Represents the various verification relationships defined in a DID document.\n *\n * These verification relationships indicate the intended usage of verification methods within a DID\n * document. Each relationship signifies a different purpose or context in which a verification\n * method can be used, such as authentication, assertionMethod, keyAgreement, capabilityDelegation,\n * and capabilityInvocation. The array provides a standardized set of relationship names for\n * consistent referencing and implementation across different DID methods.\n *\n * @see {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Specification, \u00A7 Verification Relationships}\n */\nexport enum DidVerificationRelationship {\n  /**\n   * Specifies how the DID subject is expected to be authenticated. This is commonly used for\n   * purposes like logging into a website or participating in challenge-response protocols.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#authentication | DID Core Specification, \u00A7 Authentication}\n   */\n  authentication = 'authentication',\n\n  /**\n   * Specifies how the DID subject is expected to express claims, such as for issuing Verifiable\n   * Credentials. This relationship is typically used when the DID subject is the issuer of a\n   * credential.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#assertion | DID Core Specification, \u00A7 Assertion}\n   */\n  assertionMethod = 'assertionMethod',\n\n  /**\n   * Specifies how an entity can generate encryption material to communicate confidentially with the\n   * DID subject. Often used in scenarios requiring secure communication channels.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#key-agreement | DID Core Specification, \u00A7 Key Agreement}\n   */\n  keyAgreement = 'keyAgreement',\n\n  /**\n   * Specifies a verification method used by the DID subject to invoke a cryptographic capability.\n   * This is frequently associated with authorization actions, like updating the DID Document.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#capability-invocation | DID Core Specification, \u00A7 Capability Invocation}\n   */\n  capabilityInvocation = 'capabilityInvocation',\n\n  /**\n   * Specifies a mechanism used by the DID subject to delegate a cryptographic capability to another\n   * party. This can include delegating access to a specific resource or API.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#capability-delegation | DID Core Specification, \u00A7 Capability Delegation}\n   */\n  capabilityDelegation = 'capabilityDelegation',\n}", "import type { KeyValueStore } from '@web5/common';\n\nimport type { DidDereferencingOptions, DidDereferencingResult, DidResolutionOptions, DidResolutionResult } from './did-core.js';\n\n/**\n * Represents the interface for resolving a Decentralized Identifier (DID) to its corresponding DID\n * document.\n *\n * The `DidResolver` interface defines a single method, `resolve`, which takes a DID URL as input\n * and returns a `Promise` that resolves to a `DidResolutionResult`. This result contains the DID\n * document associated with the given DID, along with metadata about the resolution process.\n *\n * Implementations of this interface are expected to support resolution of DIDs according to the\n * specific rules and methods defined by the DID scheme in use.\n *\n * More information on DID URL dereferencing can be found in the\n * {@link https://www.w3.org/TR/did-core/#did-resolution | DID Core specification}.\n *\n * @example\n * ```typescript\n * const resolutionResult = await didResolver.resolve('did:example:123456789abcdefghi');\n * ```\n */\nexport interface DidResolver {\n  /**\n   * Resolves a DID URI to a DID document and associated metadata.\n   *\n   * This function should resolve the DID URI in accordance with the relevant DID method\n   * specification, using the provided `options`.\n   *\n   * @param didUri - The DID URI to be resolved.\n   * @param options - Optional. The options used for resolving the DID.\n   * @returns A {@link DidResolutionResult} object containing the DID document and metadata or an\n   *          error.\n   */\n  resolve(didUrl: string, options?: DidResolutionOptions): Promise<DidResolutionResult>;\n}\n\n/**\n * Interface for cache implementations used by to store resolved DID documents.\n */\nexport interface DidResolverCache extends KeyValueStore<string, DidResolutionResult | void> {}\n\n/**\n * Represents the interface for dereferencing a DID URL to a specific resource within a DID\n * document.\n *\n * The `DidUrlDereferencer` interface defines a single method, `dereference`, which takes a DID URL\n * as input and returns a `Promise` that resolves to a `DidDereferencingResult`. This result\n * includes the dereferenced resource (if found) and metadata about the dereferencing process.\n *\n * Dereferencing a DID URL involves parsing the URL to identify the specific part of the DID\n * document being referenced, which could be a verification method, a service endpoint, or the\n * entire document itself.\n *\n * Implementations of this interface must adhere to the dereferencing mechanisms defined in the DID\n * Core specifications, handling various components of the DID URL including the DID itself, path,\n * query, and fragment.\n *\n * More information on DID URL dereferencing can be found in the\n * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}.\n *\n * @example\n * ```typescript\n * const dereferenceResult = await didUrlDereferencer.dereference('did:example:123456789abcdefghi#keys-1');\n * ```\n */\nexport interface DidUrlDereferencer {\n  /**\n   * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource.\n   *\n   * This method interprets the DID URL's components, which include the DID method, method-specific\n   * identifier, path, query, and fragment, and retrieves the related resource as per the DID Core\n   * specifications.\n   *\n   * @param didUrl - The DID URL string to dereference.\n   * @param options - Input options to the dereference function. Optional.\n   * @returns a {@link DidDereferencingResult}\n   */\n  dereference(didUrl: string, options?: DidDereferencingOptions): Promise<DidDereferencingResult>;\n}\n\n/**\n * A constant representing an empty DID Resolution Result. This object is used as the basis for a\n * result of DID resolution and is typically augmented with additional properties by the\n * DID method resolver.\n */\nexport const EMPTY_DID_RESOLUTION_RESULT: DidResolutionResult = {\n  '@context'            : 'https://w3id.org/did-resolution/v1',\n  didResolutionMetadata : {},\n  didDocument           : null,\n  didDocumentMetadata   : {},\n};", "/**\n * The `Did` class represents a Decentralized Identifier (DID) Uniform Resource Identifier (URI).\n *\n * This class provides a method for parsing a DID URI string into its component parts, as well as a\n * method for serializing a DID URI object into a string.\n *\n * A DID URI is composed of the following components:\n * - scheme\n * - method\n * - id\n * - path\n * - query\n * - fragment\n * - params\n *\n * @see {@link https://www.w3.org/TR/did-core/#did-syntax | DID Core Specification, \u00A7 DID Syntax}\n */\nexport class Did {\n  /** Regular expression pattern for matching the method component of a DID URI. */\n  static readonly METHOD_PATTERN = '([a-z0-9]+)';\n  /** Regular expression pattern for matching percent-encoded characters in a method identifier. */\n  static readonly PCT_ENCODED_PATTERN = '(?:%[0-9a-fA-F]{2})';\n  /** Regular expression pattern for matching the characters allowed in a method identifier. */\n  static readonly ID_CHAR_PATTERN = `(?:[a-zA-Z0-9._-]|${Did.PCT_ENCODED_PATTERN})`;\n  /** Regular expression pattern for matching the method identifier component of a DID URI. */\n  static readonly METHOD_ID_PATTERN = `((?:${Did.ID_CHAR_PATTERN}*:)*(${Did.ID_CHAR_PATTERN}+))`;\n  /** Regular expression pattern for matching the path component of a DID URI. */\n  static readonly PATH_PATTERN = `(/[^#?]*)?`;\n  /** Regular expression pattern for matching the query component of a DID URI. */\n  static readonly QUERY_PATTERN = `([?][^#]*)?`;\n  /** Regular expression pattern for matching the fragment component of a DID URI. */\n  static readonly FRAGMENT_PATTERN = `(#.*)?`;\n  /** Regular expression pattern for matching all of the components of a DID URI. */\n  static readonly DID_URI_PATTERN = new RegExp(\n    `^did:(?<method>${Did.METHOD_PATTERN}):(?<id>${Did.METHOD_ID_PATTERN})(?<path>${Did.PATH_PATTERN})(?<query>${Did.QUERY_PATTERN})(?<fragment>${Did.FRAGMENT_PATTERN})$`\n  );\n\n  /**\n   * A string representation of the DID.\n   *\n   * A DID is a URI composed of three parts: the scheme `did:`, a method identifier, and a unique,\n   * method-specific identifier specified by the DID method.\n   *\n   * @example\n   * did:dht:h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o\n   */\n  uri: string;\n\n  /**\n   * The name of the DID method.\n   *\n   * Examples of DID method names are `dht`, `jwk`, and `web`, among others.\n   */\n  method: string;\n\n  /**\n   * The DID method identifier.\n   *\n   * @example\n   * h4d3ixkwt6q5a455tucw7j14jmqyghdtbr6cpiz6on5oxj5bpr3o\n   */\n  id: string;\n\n  /**\n      * Optional path component of the DID URI.\n      *\n      * @example\n      * did:web:tbd.website/path\n      */\n  path?: string;\n\n  /**\n      * Optional query component of the DID URI.\n      *\n      * @example\n      * did:web:tbd.website?versionId=1\n      */\n  query?: string;\n\n  /**\n   * Optional fragment component of the DID URI.\n   *\n   * @example\n   * did:web:tbd.website#key-1\n   */\n  fragment?: string;\n\n  /**\n    * Optional query parameters in the DID URI.\n    *\n    * @example\n    * did:web:tbd.website?service=files&relativeRef=/whitepaper.pdf\n    */\n  params?: Record<string, string>;\n\n  /**\n   * Constructs a new `Did` instance from individual components.\n   *\n   * @param params - An object containing the parameters to be included in the DID URI.\n   * @param params.method - The name of the DID method.\n   * @param params.id - The DID method identifier.\n   * @param params.path - Optional. The path component of the DID URI.\n   * @param params.query - Optional. The query component of the DID URI.\n   * @param params.fragment - Optional. The fragment component of the DID URI.\n   * @param params.params - Optional. The query parameters in the DID URI.\n   */\n  constructor({ method, id, path, query, fragment, params }: {\n    method: string,\n    id: string,\n    path?: string,\n    query?: string,\n    fragment?: string,\n    params?: Record<string, string>\n  }) {\n    this.uri = `did:${method}:${id}`;\n    this.method = method;\n    this.id = id;\n    this.path = path;\n    this.query = query;\n    this.fragment = fragment;\n    this.params = params;\n  }\n\n  /**\n   * Parses a DID URI string into its individual components.\n   *\n   * @example\n   * ```ts\n   * const did = Did.parse('did:example:123?service=agent&relativeRef=/credentials#degree');\n   *\n   * console.log(did.uri)      // Output: 'did:example:123'\n   * console.log(did.method)   // Output: 'example'\n   * console.log(did.id)       // Output: '123'\n   * console.log(did.query)    // Output: 'service=agent&relativeRef=/credentials'\n   * console.log(did.fragment) // Output: 'degree'\n   * console.log(did.params)   // Output: { service: 'agent', relativeRef: '/credentials' }\n   * ```\n   *\n   * @params didUri - The DID URI string to be parsed.\n   * @returns A `Did` object representing the parsed DID URI, or `null` if the input string is not a valid DID URI.\n   */\n  static parse(didUri: string): Did | null {\n    // Return null if the input string is empty or not provided.\n    if (!didUri) return null;\n\n    // Execute the regex pattern on the input string to extract URI components.\n    const match = Did.DID_URI_PATTERN.exec(didUri);\n\n    // If the pattern does not match, or if the required groups are not found, return null.\n    if (!match || !match.groups) return null;\n\n    // Extract the method, id, params, path, query, and fragment from the regex match groups.\n    const { method, id, path, query, fragment } = match.groups;\n\n    // Initialize a new Did object with the uri, method and id.\n    const did: Did = {\n      uri: `did:${method}:${id}`,\n      method,\n      id,\n    };\n\n    // If path is present, add it to the Did object.\n    if (path) did.path = path;\n\n    // If query is present, add it to the Did object, removing the leading '?'.\n    if (query) did.query = query.slice(1);\n\n    // If fragment is present, add it to the Did object, removing the leading '#'.\n    if (fragment) did.fragment = fragment.slice(1);\n\n    // If query params are present, parse them into a key-value object and add to the Did object.\n    if (query) {\n      const parsedParams = {} as Record<string, string>;\n      // Split the query string by '&' to get individual parameter strings.\n      const paramPairs = query.slice(1).split('&');\n      for (const pair of paramPairs) {\n        // Split each parameter string by '=' to separate keys and values.\n        const [key, value] = pair.split('=');\n        parsedParams[key] = value;\n      }\n      did.params = parsedParams;\n    }\n\n    return did;\n  }\n}", "/**\n * A custom error class for DID-related errors.\n */\nexport class DidError extends Error {\n  /**\n   * Constructs an instance of DidError, a custom error class for handling DID-related errors.\n   *\n   * @param code - A {@link DidErrorCode} representing the specific type of error encountered.\n   * @param message - A human-readable description of the error.\n   */\n  constructor(public code: DidErrorCode, message: string) {\n    super(`${code}: ${message}`);\n    this.name = 'DidError';\n\n    // Ensures that instanceof works properly, the correct prototype chain when using inheritance,\n    // and that V8 stack traces (like Chrome, Edge, and Node.js) are more readable and relevant.\n    Object.setPrototypeOf(this, new.target.prototype);\n\n    // Captures the stack trace in V8 engines (like Chrome, Edge, and Node.js).\n    // In non-V8 environments, the stack trace will still be captured.\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, DidError);\n    }\n  }\n}\n\n/**\n * An enumeration of possible DID error codes.\n */\nexport enum DidErrorCode {\n  /** The DID supplied does not conform to valid syntax. */\n  InvalidDid = 'invalidDid',\n\n  /** The supplied method name is not supported by the DID method and/or DID resolver implementation. */\n  MethodNotSupported = 'methodNotSupported',\n\n  /** An unexpected error occurred during the requested DID operation. */\n  InternalError = 'internalError',\n\n  /** The DID document supplied does not conform to valid syntax. */\n  InvalidDidDocument = 'invalidDidDocument',\n\n  /** The byte length of a DID document does not match the expected value. */\n  InvalidDidDocumentLength = 'invalidDidDocumentLength',\n\n  /** The DID URL supplied to the dereferencing function does not conform to valid syntax. */\n  InvalidDidUrl = 'invalidDidUrl',\n\n  /** The given proof of a previous DID is invalid */\n  InvalidPreviousDidProof = 'invalidPreviousDidProof',\n\n  /** An invalid public key is detected during a DID operation. */\n  InvalidPublicKey = 'invalidPublicKey',\n\n  /** The byte length of a public key does not match the expected value. */\n  InvalidPublicKeyLength = 'invalidPublicKeyLength',\n\n  /** An invalid public key type was detected during a DID operation. */\n  InvalidPublicKeyType = 'invalidPublicKeyType',\n\n  /** Verification of a signature failed during a DID operation. */\n  InvalidSignature = 'invalidSignature',\n\n  /** The DID resolver was unable to find the DID document resulting from the resolution request. */\n  NotFound = 'notFound',\n\n  /**\n   * The representation requested via the `accept` input metadata property is not supported by the\n   * DID method and/or DID resolver implementation.\n   */\n  RepresentationNotSupported = 'representationNotSupported',\n\n  /** The type of a public key is not supported by the DID method and/or DID resolver implementation. */\n  UnsupportedPublicKeyType = 'unsupportedPublicKeyType',\n}", "export * from './local-key-manager.js';\nexport * from './utils.js';\n\nexport * from './algorithms/aes-ctr.js';\nexport * from './algorithms/aes-gcm.js';\nexport * from './algorithms/crypto-algorithm.js';\nexport * from './algorithms/ecdsa.js';\nexport * from './algorithms/eddsa.js';\nexport * from './algorithms/sha-2.js';\n\nexport * from './jose/jwe.js';\nexport * from './jose/jwk.js';\nexport * from './jose/jws.js';\nexport * from './jose/jwt.js';\nexport * from './jose/utils.js';\n\nexport * from './primitives/aes-ctr.js';\nexport * from './primitives/aes-gcm.js';\nexport * from './primitives/concat-kdf.js';\nexport * from './primitives/ed25519.js';\nexport * from './primitives/secp256r1.js';\nexport * from './primitives/pbkdf2.js';\nexport * from './primitives/secp256k1.js';\nexport * from './primitives/sha256.js';\nexport * from './primitives/x25519.js';\nexport * from './primitives/xchacha20.js';\nexport * from './primitives/xchacha20-poly1305.js';\n\nexport type * from './types/cipher.js';\nexport type * from './types/crypto-api.js';\nexport type * from './types/hasher.js';\nexport type * from './types/identifier.js';\nexport type * from './types/key-compressor.js';\nexport type * from './types/key-converter.js';\nexport type * from './types/key-deriver.js';\nexport type * from './types/key-generator.js';\nexport type * from './types/key-io.js';\nexport type * from './types/key-wrapper.js';\nexport type * from './types/params-direct.js';\nexport type * from './types/params-enclosed.js';\nexport type * from './types/params-kms.js';\nexport type * from './types/signer.js';", "export type * from './types.js';\n\nexport * from './cache.js';\nexport * from './convert.js';\nexport * from './logger.js';\nexport * from './multicodec.js';\nexport * from './object.js';\nexport * from './stores.js';\nexport * from './stream.js';\nexport * from './stream-node.js';\nexport * from './type-utils.js';", "import TTLCache from '@isaacs/ttlcache';\nexport { TTLCache as TtlCache };", "/**\n * Represents an array of a fixed length, preventing modifications to its size.\n *\n * The `FixedLengthArray` utility type transforms a standard array into a variant where\n * methods that could alter the length are omitted. It leverages TypeScript's advanced types,\n * such as conditional types and mapped types, to ensure that the array cannot be resized\n * through methods like `push`, `pop`, `splice`, `shift`, and `unshift`. The utility type\n * maintains all other characteristics of a standard array, including indexing, iteration,\n * and type checking for its elements.\n *\n * Note: The type does not prevent direct assignment to indices, even if it would exceed\n * the original length. However, such actions would lead to TypeScript type errors.\n *\n * @example\n * ```ts\n * // Declare a variable with a type of fixed-length array of three strings.\n * let myFixedLengthArray: FixedLengthArray< [string, string, string]>;\n *\n * // Array declaration tests\n * myFixedLengthArray = [ 'a', 'b', 'c' ];  // OK\n * myFixedLengthArray = [ 'a', 'b', 123 ];  // TYPE ERROR\n * myFixedLengthArray = [ 'a' ];            // LENGTH ERROR\n * myFixedLengthArray = [ 'a', 'b' ];       // LENGTH ERROR\n *\n * // Index assignment tests\n * myFixedLengthArray[1] = 'foo';           // OK\n * myFixedLengthArray[1000] = 'foo';        // INVALID INDEX ERROR\n *\n * // Methods that mutate array length\n * myFixedLengthArray.push('foo');          // MISSING METHOD ERROR\n * myFixedLengthArray.pop();                // MISSING METHOD ERROR\n *\n * // Direct length manipulation\n * myFixedLengthArray.length = 123;         // READ-ONLY ERROR\n *\n * // Destructuring\n * let [ a ] = myFixedLengthArray;          // OK\n * let [ a, b ] = myFixedLengthArray;       // OK\n * let [ a, b, c ] = myFixedLengthArray;    // OK\n * let [ a, b, c, d ] = myFixedLengthArray; // INVALID INDEX ERROR\n * ```\n *\n * @template T extends any[] - The array type to be transformed.\n */\nexport type FixedLengthArray<T extends any[]> =\n  Pick<T, Exclude<keyof T, ArrayLengthMutationKeys>>\n  & {\n    /**\n     * Custom iterator for the `FixedLengthArray` type.\n     *\n     * This iterator allows the `FixedLengthArray` to be used in standard iteration\n     * contexts, such as `for...of` loops and spread syntax. It ensures that even though\n     * the array is of a fixed length with disabled mutation methods, it still retains\n     * iterable behavior similar to a regular array.\n     *\n     * @returns An IterableIterator for the array items.\n     */\n    [Symbol.iterator]: () => IterableIterator<ArrayItems<T>>\n  };\n\n/** Helper types for {@link FixedLengthArray} */\ntype ArrayLengthMutationKeys = 'splice' | 'push' | 'pop' | 'shift' | 'unshift' | number;\ntype ArrayItems<T extends Array<any>> = T extends Array<infer TItems> ? TItems : never;\n\n/**\n * isArrayBufferSlice\n *\n * Checks if the ArrayBufferView represents a slice (subarray or a subview)\n * of an ArrayBuffer.\n *\n * An ArrayBufferView (TypedArray or DataView) can represent a portion of an\n * ArrayBuffer - such a view is said to be a \"slice\" of the original buffer.\n * This can occur when the `subarray` or `slice` method is called on a\n * TypedArray or when a DataView is created with a byteOffset and/or\n * byteLength that doesn't cover the full ArrayBuffer.\n *\n * @param arrayBufferView - The ArrayBufferView to be checked\n * @returns true if the ArrayBufferView represents a slice of an ArrayBuffer; false otherwise.\n */\nexport function isArrayBufferSlice(arrayBufferView: ArrayBufferView): boolean {\n  return arrayBufferView.byteOffset !== 0 || arrayBufferView.byteLength !== arrayBufferView.buffer.byteLength;\n}\n\n/**\n * Checks if the given object is an AsyncIterable.\n *\n * An AsyncIterable is an object that implements the AsyncIterable protocol,\n * which means it has a [Symbol.asyncIterator] method. This function checks\n * if the provided object conforms to this protocol by verifying the presence\n * and type of the [Symbol.asyncIterator] method.\n *\n * @param obj - The object to be checked for AsyncIterable conformity.\n * @returns True if the object is an AsyncIterable, false otherwise.\n *\n * @example\n * ```ts\n * // Returns true for a valid AsyncIterable\n * const asyncIterable = {\n *   async *[Symbol.asyncIterator]() {\n *     yield 1;\n *     yield 2;\n *   }\n * };\n * console.log(isAsyncIterable(asyncIterable)); // true\n * ```\n *\n * @example\n * ```ts\n * // Returns false for a regular object\n * console.log(isAsyncIterable({ a: 1, b: 2 })); // false\n * ```\n */\nexport function isAsyncIterable(obj: any): obj is AsyncIterable<any> {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  return typeof obj[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * isDefined\n *\n * Utility function to check if a variable is neither null nor undefined.\n * This function helps in making TypeScript infer the type of the variable\n * as being defined, excluding `null` and `undefined`.\n *\n * The function uses strict equality (`!==`) for the comparison, ensuring\n * that the variable is not just falsy (like an empty string or zero),\n * but is truly either `null` or `undefined`.\n *\n * @param arg - The variable to be checked\n * @returns true if the variable is neither `null` nor `undefined`\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n  return arg !== null && typeof arg !== 'undefined';\n}\n\n/**\n * Utility type that transforms a type `T` to have only certain keys `K` as required, while the\n * rest remain optional, except for keys specified in `O`, which are omitted entirely.\n *\n * This type is useful when you need a variation of a type where only specific properties are\n * required, and others are either optional or not included at all. It allows for more flexible type\n * definitions based on existing types without the need to redefine them.\n *\n * @template T - The original type to be transformed.\n * @template K - The keys of `T` that should be required.\n * @template O - The keys of `T` that should be omitted from the resulting type (optional).\n *\n * @example\n * ```ts\n * // Given an interface\n * interface Example {\n *   requiredProp: string;\n *   optionalProp?: number;\n *   anotherOptionalProp?: boolean;\n * }\n *\n * // Making 'optionalProp' required and omitting 'anotherOptionalProp'\n * type ModifiedExample = RequireOnly<Example, 'optionalProp', 'anotherOptionalProp'>;\n * // Result: { requiredProp?: string; optionalProp: number; }\n * ```\n */\nexport type RequireOnly<T, K extends keyof T, O extends keyof T = never> = Required<Pick<T, K>> & Omit<Partial<T>, O>;\n\n/**\n * universalTypeOf\n *\n * Why does this function exist?\n *\n * You can typically check if a value is of a particular type, such as\n * Uint8Array or ArrayBuffer, by using the `instanceof` operator. The\n * `instanceof` operator checks the prototype property of a constructor\n * in the object's prototype chain.\n *\n * However, there is a caveat with the `instanceof` check if the value\n * was created from a different JavaScript context (like an iframe or\n * a web worker). In those cases, the `instanceof` check might fail\n * because each context has a different global object, and therefore,\n * different built-in constructor functions.\n *\n * The `typeof` operator provides information about the type of the\n * operand in a less detailed way. For basic data types like number,\n * string, boolean, and undefined, the `typeof` operator works as\n * expected.  However, for objects, including arrays and null,\n * it always returns \"object\".  For functions, it returns \"function\".\n * So, while `typeof` is good for basic type checking, it doesn't\n * give detailed information about complex data types.\n *\n * Unlike `instanceof` and `typeof`, `Object.prototype.toString.call(value)`\n * can ensure a consistent result across different JavaScript\n * contexts.\n *\n * Credit for inspiration:\n *   Angus Croll\n *   https://github.com/angus-c\n *   https://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/\n */\nexport function universalTypeOf(value: unknown) {\n  // Returns '[Object Type]' string.\n  const typeString = Object.prototype.toString.call(value);\n  // Returns ['Object', 'Type'] array or null.\n  const match = typeString.match(/\\s([a-zA-Z0-9]+)/);\n  // Deconstructs the array and gets just the type from index 1.\n  const [_, type] = match as RegExpMatchArray;\n\n  return type;\n}\n\n/**\n * Utility type to extract the type resolved by a Promise.\n *\n * This type unwraps the type `T` from `Promise<T>` if `T` is a Promise, otherwise returns `T` as\n * is. It's useful in situations where you need to handle the type returned by a promise-based\n * function in a synchronous context, such as defining types for test vectors or handling return\n * types in non-async code blocks.\n *\n * @template T - The type to unwrap from the Promise.\n *\n * @example\n * ```ts\n * // For a Promise type, it extracts the resolved type.\n * type AsyncNumber = Promise<number>;\n * type UnwrappedNumber = UnwrapPromise<AsyncNumber>; // number\n *\n * // For a non-Promise type, it returns the type as is.\n * type StringValue = string;\n * type UnwrappedString = UnwrapPromise<StringValue>; // string\n * ```\n */\nexport type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;", "import type { Multibase } from 'multiformats';\n\nimport { base32z } from 'multiformats/bases/base32';\nimport { base58btc } from 'multiformats/bases/base58';\nimport { base64url } from 'multiformats/bases/base64';\n\nimport { isAsyncIterable, isArrayBufferSlice, universalTypeOf } from './type-utils.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\nexport class Convert {\n  data: any;\n  format: string;\n\n  constructor(data: any, format: string) {\n    this.data = data;\n    this.format = format;\n  }\n\n  static arrayBuffer(data: ArrayBuffer): Convert {\n    return new Convert(data, 'ArrayBuffer');\n  }\n\n  static asyncIterable(data: AsyncIterable<any>): Convert {\n    if (!isAsyncIterable(data)) {\n      throw new TypeError('Input must be of type AsyncIterable.');\n    }\n    return new Convert(data, 'AsyncIterable');\n  }\n\n  static base32Z(data: string): Convert {\n    return new Convert(data, 'Base32Z');\n  }\n\n  static base58Btc(data: string): Convert {\n    return new Convert(data, 'Base58Btc');\n  }\n\n  static base64Url(data: string): Convert {\n    return new Convert(data, 'Base64Url');\n  }\n\n  /**\n   * Reference:\n   * The BufferSource type is a TypeScript type that represents an ArrayBuffer\n   * or one of the ArrayBufferView types, such a TypedArray (e.g., Uint8Array)\n   * or a DataView.\n   */\n  static bufferSource(data: BufferSource): Convert {\n    return new Convert(data, 'BufferSource');\n  }\n\n  static hex(data: string): Convert {\n    if (typeof data !== 'string') {\n      throw new TypeError('Hex input must be a string.');\n    }\n    if (data.length % 2 !== 0) {\n      throw new TypeError('Hex input must have an even number of characters.');\n    }\n    return new Convert(data, 'Hex');\n  }\n\n  static multibase(data: string): Convert {\n    return new Convert(data, 'Multibase');\n  }\n\n  static object(data: Record<string, any>): Convert {\n    return new Convert(data, 'Object');\n  }\n\n  static string(data: string): Convert {\n    return new Convert(data, 'String');\n  }\n\n  static uint8Array(data: Uint8Array): Convert {\n    return new Convert(data, 'Uint8Array');\n  }\n\n  toArrayBuffer(): ArrayBuffer {\n    switch (this.format) {\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data).buffer;\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data).buffer;\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'ArrayBuffer') {\n          // Data is already an ArrayBuffer, No conversion is necessary.\n          return this.data;\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          if (isArrayBufferSlice(this.data)) {\n            // Data is a slice of an ArrayBuffer. Return a new ArrayBuffer or ArrayBufferView of the same slice.\n            return this.data.buffer.slice(this.data.byteOffset, this.data.byteOffset + this.data.byteLength);\n          } else {\n            // Data is a whole ArrayBuffer viewed as a different TypedArray or DataView. Return the whole ArrayBuffer.\n            return this.data.buffer;\n          }\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'String': {\n        return this.toUint8Array().buffer;\n      }\n\n      case 'Uint8Array': {\n        return this.data.buffer;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  async toArrayBufferAsync(): Promise<ArrayBuffer> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const blob = await this.toBlobAsync();\n        return await blob.arrayBuffer();\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to ArrayBuffer is not supported.`);\n    }\n  }\n\n  toBase32Z(): string {\n    switch (this.format) {\n\n      case 'Uint8Array': {\n        return base32z.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Z is not supported.`);\n    }\n  }\n\n  toBase58Btc(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base58btc.baseEncode(u8a);\n      }\n\n      case 'Multibase': {\n        return this.data.substring(1);\n      }\n\n      case 'Uint8Array': {\n        return base58btc.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base58Btc is not supported.`);\n    }\n  }\n\n  toBase64Url(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = new Uint8Array(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'BufferSource': {\n        const u8a = this.toUint8Array();\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        const u8a = textEncoder.encode(string);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'String': {\n        const u8a = textEncoder.encode(this.data);\n        return base64url.baseEncode(u8a);\n      }\n\n      case 'Uint8Array': {\n        return base64url.baseEncode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Base64Url is not supported.`);\n    }\n  }\n\n  async toBlobAsync(): Promise<Blob> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an array to hold the chunks from the AsyncIterable.\n        const chunks = [];\n\n        // Asynchronously iterate over each chunk in the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // Append each chunk to the chunks array. These chunks can be of any type, typically binary data or text.\n          chunks.push(chunk);\n        }\n\n        // Create a new Blob from the aggregated chunks.\n        // The Blob constructor combines these chunks into a single Blob object.\n        const blob = new Blob(chunks);\n\n        return blob;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Blob is not supported.`);\n    }\n  }\n\n  toHex(): string {\n    // pre-calculating Hex values improves runtime by 6-10x.\n    const hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Base64Url': {\n        const u8a = this.toUint8Array();\n        return Convert.uint8Array(u8a).toHex();\n      }\n\n      case 'Uint8Array': {\n        let hex = '';\n        for (let i = 0; i < this.data.length; i++) {\n          hex += hexes[this.data[i]];\n        }\n        return hex;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Hex is not supported.`);\n    }\n  }\n\n  toMultibase(): Multibase<any> {\n    switch (this.format) {\n      case 'Base58Btc': {\n        return `z${this.data}`;\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Multibase is not supported.`);\n    }\n  }\n\n  toObject(): object {\n    switch (this.format) {\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        const text = textDecoder.decode(u8a);\n        return JSON.parse(text);\n      }\n\n      case 'String': {\n        return JSON.parse(this.data);\n      }\n\n      case 'Uint8Array': {\n        const text = textDecoder.decode(this.data);\n        return JSON.parse(text);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  async toObjectAsync(): Promise<any> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Convert the AsyncIterable to a String.\n        const text = await this.toStringAsync();\n\n        // Parse the string as JSON. This step assumes that the string represents a valid JSON structure.\n        // JSON.parse() will convert the string into a corresponding JavaScript object.\n        const json = JSON.parse(text);\n\n        // Return the parsed JavaScript object. The type of this object will depend on the structure\n        // of the JSON in the stream. It could be an object, array, string, number, etc.\n        return json;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Object is not supported.`);\n    }\n  }\n\n  toString(): string {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        return textDecoder.decode(this.data);\n      }\n\n      case 'Base64Url': {\n        const u8a = base64url.baseDecode(this.data);\n        return textDecoder.decode(u8a);\n      }\n\n      case 'Object': {\n        return JSON.stringify(this.data);\n      }\n\n      case 'Uint8Array': {\n        return textDecoder.decode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  async toStringAsync(): Promise<string> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        // Initialize an empty string to accumulate the decoded text.\n        let str = '';\n\n        // Iterate over the chunks from the AsyncIterable.\n        for await (const chunk of (this.data as AsyncIterable<any>)) {\n          // If the chunk is already a string, concatenate it directly.\n          if (typeof chunk === 'string')\n            str += chunk;\n          else\n          // If the chunk is a Uint8Array or similar, use the decoder to convert it to a string.\n          // The `stream: true` option lets the decoder handle multi-byte characters spanning\n          // multiple chunks.\n            str += textDecoder.decode(chunk, { stream: true });\n        }\n\n        // Finalize the decoding process to handle any remaining bytes and signal the end of the stream.\n        // The `stream: false` option flushes the decoder's internal state.\n        str += textDecoder.decode(undefined, { stream: false });\n\n        // Return the accumulated string.\n        return str;\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to String is not supported.`);\n    }\n  }\n\n  toUint8Array(): Uint8Array {\n    switch (this.format) {\n\n      case 'ArrayBuffer': {\n        // \u00C7reate Uint8Array as a view on the ArrayBuffer.\n        // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n        return new Uint8Array(this.data);\n      }\n\n      case 'Base32Z': {\n        return base32z.baseDecode(this.data);\n      }\n\n      case 'Base58Btc': {\n        return base58btc.baseDecode(this.data);\n      }\n\n      case 'Base64Url': {\n        return base64url.baseDecode(this.data);\n      }\n\n      case 'BufferSource': {\n        const dataType = universalTypeOf(this.data);\n        if (dataType === 'Uint8Array') {\n          // Data is already a Uint8Array. No conversion is necessary.\n          // Note: Uint8Array is a type of BufferSource.\n          return this.data;\n        } else if (dataType === 'ArrayBuffer') {\n          // Data is an ArrayBuffer, create Uint8Array as a view on the ArrayBuffer.\n          // Note: The Uint8Array shares the same memory as the ArrayBuffer, so this operation is very efficient.\n          return new Uint8Array(this.data);\n        } else if (ArrayBuffer.isView(this.data)) {\n          // Data is a DataView or a different TypedArray (e.g., Uint16Array).\n          return new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength);\n        } else {\n          throw new TypeError(`${this.format} value is not of type: ArrayBuffer, DataView, or TypedArray.`);\n        }\n      }\n\n      case 'Hex': {\n        const u8a = new Uint8Array(this.data.length / 2);\n        for (let i = 0; i < this.data.length; i += 2) {\n          const byteValue = parseInt(this.data.substring(i, i + 2), 16);\n          if (isNaN(byteValue)) {\n            throw new TypeError('Input is not a valid hexadecimal string.');\n          }\n          u8a[i / 2] = byteValue;\n        }\n        return u8a;\n      }\n\n      case 'Object': {\n        const string = JSON.stringify(this.data);\n        return textEncoder.encode(string);\n      }\n\n      case 'String': {\n        return textEncoder.encode(this.data);\n      }\n\n      default:\n        throw new TypeError(`Conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n\n  async toUint8ArrayAsync(): Promise<Uint8Array> {\n    switch (this.format) {\n      case 'AsyncIterable': {\n        const arrayBuffer = await this.toArrayBufferAsync();\n        return new Uint8Array(arrayBuffer);\n      }\n\n      default:\n        throw new TypeError(`Asynchronous conversion from ${this.format} to Uint8Array is not supported.`);\n    }\n  }\n}", "/**\n * Web5 logger level.\n */\nexport enum Web5LogLevel {\n  Debug = 'debug',\n  Silent = 'silent',\n}\n\n/**\n * Web5 logger interface.\n */\nexport interface Web5LoggerInterface {\n\n  /**\n   * Sets the log verbose level.\n   */\n  setLogLevel(logLevel: Web5LogLevel): void;\n\n  /**\n   * Same as `info()`.\n   * Logs an informational message.\n   */\n  log (message: string): void;\n\n  /**\n   * Logs an informational message.\n   */\n  info(message: string): void;\n\n  /**\n   * Logs an error message.\n   */\n  error(message: string): void;\n}\n\n/**\n * A Web5 logger implementation.\n */\nclass Web5Logger implements Web5LoggerInterface {\n  private logLevel: Web5LogLevel = Web5LogLevel.Silent; // Default to silent/no-op log level\n\n  setLogLevel(logLevel: Web5LogLevel): void {\n    this.logLevel = logLevel;\n  }\n\n  public log(message: string): void {\n    this.info(message);\n  }\n\n  public info(message: string): void {\n    if (this.logLevel === Web5LogLevel.Silent) { return; }\n\n    console.info(message);\n  }\n\n  public error(message: string): void {\n    if (this.logLevel === Web5LogLevel.Silent) { return; }\n\n    console.error(message);\n  }\n}\n\n// Export a singleton logger instance\nexport const logger = new Web5Logger();\n\n// Attach logger to the global window object in browser environment for easy access to the logger instance.\n// e.g. can call `web5logger.setLogLevel('debug');` directly in browser console.\nif (typeof window !== 'undefined') {\n  (window as any).web5logger = logger; // Makes `web5Logger` accessible globally in browser\n}", "import { varint } from 'multiformats';\n\nexport type MulticodecCode = number;\n\nexport type MulticodecDefinition<MulticodecCode> = {\n  code: MulticodecCode;\n  // codeBytes: Uint8Array;\n  name: string;\n}\n\n/**\n * The `Multicodec` class provides an interface to prepend binary data\n * with a prefix that identifies the data that follows.\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Multicodec is a self-describing multiformat, it wraps other formats with\n * a tiny bit of self-description. A multicodec identifier is a\n * varint (variable integer) that indicates the format of the data.\n *\n * The canonical table of multicodecs can be access at the following URL:\n * https://github.com/multiformats/multicodec/blob/master/table.csv\n *\n * Example usage:\n *\n * ```ts\n * Multicodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\n * const prefixedData = Multicodec.addPrefix({ code: 0xed, data: new Uint8Array(32) });\n * ```\n */\nexport class Multicodec {\n  /**\n   * A static field containing a map of codec codes to their corresponding names.\n   */\n  static codeToName = new Map<MulticodecCode, string>();\n\n  /**\n   * A static field containing a map of codec names to their corresponding codes.\n   */\n  static nameToCode = new Map<string, MulticodecCode>();\n\n  /**\n   * Adds a multicodec prefix to input data.\n   *\n   * @param options - The options for adding a prefix.\n   * @param options.code - The codec code. Either the code or name must be provided.\n   * @param options.name - The codec name. Either the code or name must be provided.\n   * @param options.data - The data to be prefixed.\n   * @returns The data with the added prefix as a Uint8Array.\n   */\n  public static addPrefix(options: {\n    code?: MulticodecCode,\n    data: Uint8Array,\n    name?: string,\n  }): Uint8Array {\n    let { code, data, name } = options;\n\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If code was given, confirm it exists, or lookup code by name.\n    code = Multicodec.codeToName.has(code!) ? code : Multicodec.nameToCode.get(name!);\n\n    // Throw error if a registered Codec wasn't found.\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${options.name ?? options.code}`);\n    }\n\n    // Create a new array to store the prefix and input data.\n    const prefixLength = varint.encodingLength(code);\n    const dataWithPrefix = new Uint8Array(prefixLength + data.byteLength);\n    dataWithPrefix.set(data, prefixLength);\n\n    // Prepend the prefix.\n    varint.encodeTo(code, dataWithPrefix);\n\n    return dataWithPrefix;\n  }\n\n  /**\n   * Get the Multicodec code from given prefixed data.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.prefixedData - The data to extract the codec code from.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromData(options: {\n    prefixedData: Uint8Array\n  }): MulticodecCode {\n    const { prefixedData } = options;\n    const [code, _] = varint.decode(prefixedData);\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec code from given Multicodec name.\n   *\n   * @param options - The options for getting the codec code.\n   * @param options.name - The name to lookup.\n   * @returns - The Multicodec code as a number.\n   */\n  public static getCodeFromName(options: {\n    name: string\n  }): MulticodecCode {\n    const { name } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const code = Multicodec.nameToCode.get(name);\n    if (code === undefined) {\n      throw new Error(`Unsupported multicodec: ${name}`);\n    }\n\n    return code;\n  }\n\n  /**\n   * Get the Multicodec name from given Multicodec code.\n   *\n   * @param options - The options for getting the codec name.\n   * @param options.name - The code to lookup.\n   * @returns - The Multicodec name as a string.\n   */\n  public static getNameFromCode(options: {\n    code: MulticodecCode\n  }): string {\n    const { code } = options;\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return name;\n  }\n\n  /**\n   * Registers a new codec in the Multicodec class.\n   *\n   * @param codec - The codec to be registered.\n   */\n  public static registerCodec(codec: MulticodecDefinition<MulticodecCode>) {\n    Multicodec.codeToName.set(codec.code, codec.name);\n    Multicodec.nameToCode.set(codec.name, codec.code);\n  }\n\n  /**\n   * Returns the data with the Multicodec prefix removed.\n   *\n   * @param refixedData - The data to extract the codec code from.\n   * @returns {Uint8Array}\n   */\n  public static removePrefix(options: {\n    prefixedData: Uint8Array\n  }): { code: MulticodecCode, name: string, data: Uint8Array } {\n    const { prefixedData } = options;\n    const [code, codeByteLength] = varint.decode(prefixedData);\n\n    // Throw error if a registered Codec wasn't found.\n    const name = Multicodec.codeToName.get(code);\n    if (name === undefined) {\n      throw new Error(`Unsupported multicodec: ${code}`);\n    }\n\n    return { code, data: prefixedData.slice(codeByteLength), name };\n  }\n}\n\n// Pre-defined registered codecs:\nMulticodec.registerCodec({ code: 0xed, name: 'ed25519-pub' });\nMulticodec.registerCodec({ code: 0x1300, name: 'ed25519-priv' });\nMulticodec.registerCodec({ code: 0xec, name: 'x25519-pub' });\nMulticodec.registerCodec({ code: 0x1302, name: 'x25519-priv' });\nMulticodec.registerCodec({ code: 0xe7, name: 'secp256k1-pub' });\nMulticodec.registerCodec({ code: 0x1301, name: 'secp256k1-priv' });", "/**\n * Checks whether the given object has any properties.\n */\nexport function isEmptyObject(obj: unknown): boolean {\n  if (typeof obj !== 'object' || obj === null) {\n    return false;\n  }\n\n  if (Object.getOwnPropertySymbols(obj).length > 0) {\n    return false;\n  }\n\n  return Object.keys(obj).length === 0;\n}\n\n/**\n * Recursively removes all properties with an empty object or array as its value from the given object.\n */\nexport function removeEmptyObjects(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (typeof(obj[key]) === 'object') {\n      // recursive remove empty object or array properties in nested objects\n      removeEmptyObjects(obj[key] as Record<string, unknown>);\n    }\n\n    if (isEmptyObject(obj[key])) {\n      delete obj[key];\n    }\n  });\n}\n\n/**\n * Recursively removes all properties with `undefined` as its value from the given object.\n */\nexport function removeUndefinedProperties(obj: Record<string, unknown>): void {\n  Object.keys(obj).forEach(key => {\n    if (obj[key] === undefined) {\n      delete obj[key];\n    } else if (typeof(obj[key]) === 'object') {\n      removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects\n    }\n  });\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\n\nimport type { KeyValueStore } from './types.js';\n\nexport class LevelStore<K = string, V = any> implements KeyValueStore<K, V> {\n  private store: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n\n  constructor({ db, location = 'DATASTORE' }: {\n    db?: AbstractLevel<string | Buffer | Uint8Array, K, V>;\n    location?: string;\n  } = {}) {\n    this.store = db ?? new Level<K, V>(location);\n  }\n\n  async clear(): Promise<void> {\n    await this.store.clear();\n  }\n\n  async close(): Promise<void> {\n    await this.store.close();\n  }\n\n  async delete(key: K): Promise<void> {\n    await this.store.del(key);\n  }\n\n  async get(key: K): Promise<V | undefined> {\n    try {\n      return await this.store.get(key);\n    } catch (error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) return undefined;\n      throw error;\n    }\n  }\n\n  async set(key: K, value: V): Promise<void> {\n    await this.store.put(key, value);\n  }\n}\n\n/**\n * The `MemoryStore` class is an implementation of\n * `KeyValueStore` that holds data in memory.\n *\n * It provides a basic key-value store that works synchronously and keeps all\n * data in memory. This can be used for testing, or for handling small amounts\n * of data with simple key-value semantics.\n *\n * Example usage:\n *\n * ```ts\n * const memoryStore = new MemoryStore<string, number>();\n * await memoryStore.set(\"key1\", 1);\n * const value = await memoryStore.get(\"key1\");\n * console.log(value); // 1\n * ```\n *\n * @public\n */\nexport class MemoryStore<K, V> implements KeyValueStore<K, V> {\n  /**\n   * A private field that contains the Map used as the key-value store.\n   */\n  private store: Map<K, V> = new Map();\n\n  /**\n   * Clears all entries in the key-value store.\n   *\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async clear(): Promise<void> {\n    this.store.clear();\n  }\n\n  /**\n   * This operation is no-op for `MemoryStore`\n   * and will log a warning if called.\n   */\n  async close(): Promise<void> {\n    /** no-op */\n  }\n\n  /**\n   * Deletes an entry from the key-value store by its key.\n   *\n   * @param id - The key of the entry to delete.\n   * @returns A Promise that resolves to a boolean indicating whether the entry was successfully deleted.\n   */\n  async delete(id: K): Promise<boolean> {\n    return this.store.delete(id);\n  }\n\n  /**\n   * Retrieves the value of an entry by its key.\n   *\n   * @param id - The key of the entry to retrieve.\n   * @returns A Promise that resolves to the value of the entry, or `undefined` if the entry does not exist.\n   */\n  async get(id: K): Promise<V | undefined> {\n    return this.store.get(id);\n  }\n\n  /**\n   * Checks for the presence of an entry by key.\n   *\n   * @param id - The key to check for the existence of.\n   * @returns A Promise that resolves to a boolean indicating whether an element with the specified key exists or not.\n   */\n  async has(id: K): Promise<boolean> {\n    return this.store.has(id);\n  }\n\n  /**\n   * Retrieves all values in the key-value store.\n   *\n   * @returns A Promise that resolves to an array of all values in the store.\n   */\n  async list(): Promise<V[]> {\n    return Array.from(this.store.values());\n  }\n\n  /**\n   * Sets the value of an entry in the key-value store.\n   *\n   * @param id - The key of the entry to set.\n   * @param key - The new value for the entry.\n   * @returns A Promise that resolves when the operation is complete.\n   */\n  async set(id: K, key: V): Promise<void> {\n    this.store.set(id, key);\n  }\n}", "import { Convert } from './convert.js';\n\nexport class Stream {\n  /**\n   * Transforms a `ReadableStream` into an `AsyncIterable`. This allows for the asynchronous\n   * iteration over the stream's data chunks.\n   *\n   * This method creates an async iterator from a `ReadableStream`, enabling the use of\n   * `for await...of` loops to process stream data. It reads from the stream until it's closed or\n   * errored, yielding each chunk as it becomes available.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * for await (const chunk of Stream.asAsyncIterator(readableStream)) {\n   *   // process each chunk\n   * }\n   * ```\n   *\n   * @remarks\n   * - The method ensures proper cleanup by releasing the reader lock when iteration is completed or\n   *   if an error occurs.\n   *\n   * @param readableStream - The Web `ReadableStream` to be transformed into an `AsyncIterable`.\n   * @returns An `AsyncIterable` that yields data chunks from the `ReadableStream`.\n   */\n  public static async * asAsyncIterator<T>(readableStream: ReadableStream<T>): AsyncIterable<T> {\n    const reader = readableStream.getReader();\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n        yield value;\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a `ReadableStream`, collects it, and converts it into an\n   * `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const arrayBuffer = await Stream.consumeToArrayBuffer({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readableStream }: { readableStream: ReadableStream}): Promise<ArrayBuffer> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const arrayBuffer = await Convert.asyncIterable(iterableStream).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a `ReadableStream`, collects it, and converts it into a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const blob = await Stream.consumeToBlob({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readableStream }: { readableStream: ReadableStream}): Promise<Blob> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const blob = await Convert.asyncIterable(iterableStream).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a `ReadableStream`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const bytes = await Stream.consumeToBytes({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readableStream }: { readableStream: ReadableStream }): Promise<Uint8Array> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const bytes = await Convert.asyncIterable(iterableStream).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const jsonData = await Stream.consumeToJson({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readableStream }: { readableStream: ReadableStream}): Promise<any> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const object = await Convert.asyncIterable(iterableStream).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `ReadableStream` and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const text = await Stream.consumeToText({ readableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readableStream }: { readableStream: ReadableStream}): Promise<string> {\n    const iterableStream = Stream.asAsyncIterator(readableStream);\n    const text = await Convert.asyncIterable(iterableStream).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Generates a `ReadableStream` of `Uint8Array` chunks with customizable length and fill value.\n   *\n   * This method creates a `ReadableStream` that emits `Uint8Array` chunks. You can specify the\n   * total length of the stream, the length of individual chunks, and a fill value or range for the\n   * chunks. It's useful for testing or when specific binary data streams are required.\n   *\n   * @example\n   * ```ts\n   * // Create a stream of 1000 bytes with 100-byte chunks filled with 0xAA.\n   * const byteStream = Stream.generateByteStream({\n   *   streamLength: 1000,\n   *   chunkLength: 100,\n   *   fillValue: 0xAA\n   * });\n   *\n   * // Create an unending stream of 100KB chunks filled with values that range from 1 to 99.\n   * const byteStream = Stream.generateByteStream({\n   *  chunkLength: 100 * 1024,\n   *  fillValue: [1, 99]\n   * });\n   * ```\n   *\n   * @param streamLength - The total length of the stream in bytes. If omitted, the stream is infinite.\n   * @param chunkLength - The length of each chunk. If omitted, each chunk is the size of `streamLength`.\n   * @param fillValue - A value or range to fill the chunks with. Can be a single number or a tuple [min, max].\n   * @returns A `ReadableStream` that emits `Uint8Array` chunks.\n   */\n  public static generateByteStream({ streamLength, chunkLength, fillValue }: {\n    streamLength?: number,\n    chunkLength?: number,\n    fillValue?: number | [number, number]\n  }): ReadableStream<Uint8Array> {\n    let bytesRemaining = streamLength ?? Infinity;\n    let controller: ReadableStreamDefaultController<Uint8Array>;\n\n    function enqueueChunk() {\n      const currentChunkLength = Math.min(bytesRemaining, chunkLength ?? Infinity);\n      bytesRemaining -= currentChunkLength;\n\n      let chunk: Uint8Array;\n\n      if (typeof fillValue === 'number') {\n        chunk = new Uint8Array(currentChunkLength).fill(fillValue);\n\n      } else if (Array.isArray(fillValue)) {\n        chunk = new Uint8Array(currentChunkLength);\n        const [min, max] = fillValue;\n        const range = max - min + 1;\n        for (let i = 0; i < currentChunkLength; i++) {\n          chunk[i] = Math.floor(Math.random() * range) + min;\n        }\n\n      } else {\n        chunk = new Uint8Array(currentChunkLength);\n      }\n\n      controller.enqueue(chunk);\n\n      // If there are no more bytes to send, close the stream\n      if (bytesRemaining <= 0) {\n        controller.close();\n      }\n    }\n\n    return new ReadableStream<Uint8Array>({\n      start(c) {\n        controller = c;\n        enqueueChunk();\n      },\n      pull() {\n        enqueueChunk();\n      },\n    });\n  }\n\n  /**\n   * Checks if the provided Web `ReadableStream` is in a readable state.\n   *\n   * After verifying that the stream is a Web {@link https://streams.spec.whatwg.org/#rs-model | ReadableStream},\n   * this method checks the {@link https://streams.spec.whatwg.org/#readablestream-locked | locked}\n   * property of the ReadableStream. The `locked` property is `true` if a reader is currently\n   * active, meaning the stream is either being read or has already been read (and hence is not in a\n   * readable state). If `locked` is `false`, it means the stream is still in a state where it can\n   * be read.\n   *\n   * In the case where a `ReadableStream` has been unlocked but is no longer readable (for example,\n   * if it has been fully read or cancelled), additional checks are needed beyond just examining the\n   * locked property. The ReadableStream API does not provide a direct way to check if the stream\n   * has data left or if it's in a readable state once it's been unlocked.\n   *\n   * Per {@link https://streams.spec.whatwg.org/#other-specs-rs-introspect | WHATWG Streams, Section 9.1.3. Introspection}:\n   *\n   * > ...note that apart from checking whether or not the stream is locked, this direct\n   * > introspection is not possible via the public JavaScript API, and so specifications should\n   * > instead use the algorithms in \u00A79.1.2 Reading. (For example, instead of testing if the stream\n   * > is readable, attempt to get a reader and handle any exception.)\n   *\n   * This implementation employs the technique suggested by the WHATWG Streams standard by\n   * attempting to acquire a reader and checking the state of the reader. If acquiring a reader\n   * succeeds, it immediately releases the lock and returns `true`, indicating the stream is\n   * readable. If an error occurs while trying to get a reader (which can happen if the stream is\n   * already closed or errored), it catches the error and returns `false`, indicating the stream is\n   * not readable.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream({ ... });\n   * const isStreamReadable = Stream.isReadable({ readableStream });\n   * console.log(isStreamReadable); // Output: true or false\n   * ```\n   *\n   * @remarks\n   * - This method does not check whether the stream has data left to read; it only checks if the\n   *   stream is in a state that allows reading. It is possible for a stream to be unlocked but\n   *   still have no data left if it has never been locked to a reader.\n   *\n   * @param readableStream - The Web `ReadableStream` to be checked for readability.\n   *\n   * @returns `true` if the stream is a `ReadableStream` and is in a readable state (not locked and\n   *          no error on getting a reader); otherwise, `false`.\n   */\n  public static isReadable({ readableStream }: { readableStream: ReadableStream }): boolean {\n    // Check if the stream is a WHATWG `ReadableStream`.\n    if (!Stream.isReadableStream(readableStream)) {\n      return false;\n    }\n\n    // Check if the stream is locked.\n    if (readableStream.locked) {\n      return false;\n    }\n\n    try {\n      // Try to get a reader to check if the stream is readable.\n      const reader = readableStream.getReader();\n      // If successful, immediately release the lock.\n      reader.releaseLock();\n      return true;\n    } catch (error) {\n      // If an error occurs (e.g., the stream is not readable), return false.\n      return false;\n    }\n  }\n\n  /**\n   * Checks if an object is a Web `ReadableStream`.\n   *\n   * This method verifies whether the given object is a `ReadableStream` by checking its type and\n   * the presence of the `getReader` function.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (Stream.isReadableStream(obj)) {\n   *   // obj is a ReadableStream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a `ReadableStream`; otherwise, `false`.\n   */\n  public static isReadableStream(obj: unknown): obj is ReadableStream {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      'getReader' in obj && typeof obj.getReader === 'function'\n    );\n  }\n\n  /**\n   * Checks if an object is a Web `ReadableStream`, `WritableStream`, or `TransformStream`.\n   *\n   * This method verifies the type of a given object to determine if it is one of the standard\n   * stream types in the Web Streams API: `ReadableStream`, `WritableStream`, or `TransformStream`.\n   * It employs type-checking strategies that are specific to each stream type.\n   *\n   * The method checks for the specific functions and properties associated with each stream type:\n   * - `ReadableStream`: Identified by the presence of a `getReader` method.\n   * - `WritableStream`: Identified by the presence of a `getWriter` and `abort` methods.\n   * - `TransformStream`: Identified by having both `readable` and `writable` properties.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new ReadableStream();\n   * console.log(Stream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new WritableStream();\n   * console.log(Stream.isStream(writableStream)); // Output: true\n   *\n   * const transformStream = new TransformStream();\n   * console.log(Stream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(Stream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between `ReadableStream`, `WritableStream`, and\n   *   `TransformStream`. It checks if the object conforms to any of these types.\n   * - This method is specific to the Web Streams API and may not recognize non-standard or custom\n   *   stream-like objects that do not adhere to the Web Streams API specifications.\n   *\n   * @param obj - The object to be checked for being a Web `ReadableStream`, `WritableStream`, or `TransformStream`.\n   * @returns `true` if the object is a `ReadableStream`, `WritableStream`, or `TransformStream`; otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is ReadableStream | WritableStream | TransformStream {\n    return Stream.isReadableStream(obj) || Stream.isWritableStream(obj) || Stream.isTransformStream(obj);\n  }\n\n  /**\n   * Checks if an object is a `TransformStream`.\n   *\n   * This method verifies whether the given object is a `TransformStream` by checking its type and\n   * the presence of `readable` and `writable` properties.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (Stream.isTransformStream(obj)) {\n   *   // obj is a TransformStream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a `TransformStream`; otherwise, `false`.\n   */\n  public static isTransformStream(obj: unknown): obj is TransformStream {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      'readable' in obj && typeof obj.readable === 'object' &&\n      'writable' in obj && typeof obj.writable === 'object'\n    );\n  }\n\n  /**\n   * Checks if an object is a `WritableStream`.\n   *\n   * This method determines whether the given object is a `WritableStream` by verifying its type and\n   * the presence of the `getWriter` and `abort` functions.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (Stream.isWritableStream(obj)) {\n   *   // obj is a WritableStream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n     * @returns `true` if `obj` is a `TransformStream`; otherwise, `false`.\n     */\n  public static isWritableStream(obj: unknown): obj is WritableStream {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      'getWriter' in obj && typeof obj.getWriter === 'function' &&\n      'abort' in obj && typeof obj.abort === 'function'\n    );\n  }\n}", "import type { Duplex, ReadableStateOptions, Transform, Writable } from 'readable-stream';\n\nimport { Readable } from 'readable-stream';\nimport { Stream } from './stream.js';\nimport { Convert } from './convert.js';\n\nexport { Readable } from 'readable-stream';\n\nexport class NodeStream {\n  /**\n   * Consumes a `Readable` stream and returns its contents as an `ArrayBuffer`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * an `ArrayBuffer`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const arrayBuffer = await NodeStream.consumeToArrayBuffer({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js Readable stream whose data will be consumed.\n   * @returns A Promise that resolves to an `ArrayBuffer` containing all the data from the stream.\n   */\n  public static async consumeToArrayBuffer({ readable }: { readable: Readable}): Promise<ArrayBuffer> {\n    const arrayBuffer = await Convert.asyncIterable(readable).toArrayBufferAsync();\n\n    return arrayBuffer;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Blob`.\n   *\n   * This method reads all data from a Node.js `Readable` stream, collects it, and converts it into\n   * a `Blob`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const blob = await NodeStream.consumeToBlob({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Blob` containing all the data from the stream.\n   */\n  public static async consumeToBlob({ readable }: { readable: Readable }): Promise<Blob> {\n    const blob = await Convert.asyncIterable(readable).toBlobAsync();\n\n    return blob;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a `Uint8Array`.\n   *\n   * This method reads all data from a Node.js `Readable`, collects it, and converts it into a\n   * `Uint8Array`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const bytes = await NodeStream.consumeToBytes({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose data will be consumed.\n   * @returns A Promise that resolves to a `Uint8Array` containing all the data from the stream.\n   */\n  public static async consumeToBytes({ readable }: { readable: Readable }): Promise<Uint8Array> {\n    const bytes = await Convert.asyncIterable(readable).toUint8ArrayAsync();\n\n    return bytes;\n  }\n\n  /**\n   * Consumes a `Readable` stream and parses its contents as JSON.\n   *\n   * This method reads all the data from the stream, converts it to a text string, and then parses\n   * it as JSON, returning the resulting object.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const jsonData = await NodeStream.consumeToJson({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose JSON content will be consumed.\n   * @returns A Promise that resolves to the parsed JSON object from the stream's data.\n   */\n  public static async consumeToJson({ readable }: { readable: Readable }): Promise<any> {\n    const object = await Convert.asyncIterable(readable).toObjectAsync();\n\n    return object;\n  }\n\n  /**\n   * Consumes a `Readable` stream and returns its contents as a text string.\n   *\n   * This method reads all the data from the stream, converting it into a single string.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getReadableStreamSomehow();\n   * const text = await NodeStream.consumeToText({ readable: nodeReadable });\n   * ```\n   *\n   * @param readableStream - The Node.js `Readable` stream whose text content will be consumed.\n   * @returns A Promise that resolves to a string containing all the data from the stream.\n   */\n  public static async consumeToText({ readable }: { readable: Readable}): Promise<string> {\n    const text = await Convert.asyncIterable(readable).toStringAsync();\n\n    return text;\n  }\n\n  /**\n   * Converts a Web `ReadableStream` to a Node.js `Readable` stream.\n   *\n   * This method takes a Web `ReadableStream` and converts it to a Node.js `Readable` stream.\n   * The conversion is done by reading chunks from the Web `ReadableStream` and pushing them\n   * into the Node.js `Readable` stream.\n   *\n   * @example\n   * ```ts\n   * const webReadableStream = getWebReadableStreamSomehow();\n   * const nodeReadableStream = NodeStream.fromWebReadable({ readableStream: webReadableStream });\n   * ```\n   *\n   * @param readableStream - The Web `ReadableStream` to be converted.\n   * @param readableOptions - Optional `Readable` stream options for the Node.js stream.\n   * @returns The Node.js `Readable` stream.\n   */\n  public static fromWebReadable({ readableStream, readableOptions }: {\n    readableStream: ReadableStream,\n    readableOptions?: ReadableStateOptions\n  }): Readable {\n    if (!Stream.isReadableStream(readableStream)) {\n      throw new TypeError(`NodeStream.fromWebReadable: 'readableStream' is not a Web ReadableStream.`);\n    }\n\n    const reader = readableStream.getReader();\n    let closed = false;\n\n    const nodeReadable = new Readable({\n      ...readableOptions,\n\n      read: function () {\n        reader.read().then(({ done, value }) => {\n          if (done) {\n            this.push(null); // Push null to signify end of stream.\n          } else {\n            if (!this.push(value)) {\n              // When push returns false, we should stop reading until _read is called again.\n              return;\n            }\n          }\n        }).catch((error) => {\n          // If an error occurs while reading, destroy the stream.\n          this.destroy(error);\n        });\n      },\n\n      destroy: function (error, callback) {\n        function done() {\n          callback(error);\n        }\n\n        if (!closed) {\n          reader.cancel(error)\n            .then(done)\n            .catch(done);\n          return;\n        }\n        done();\n      }\n    });\n\n    reader.closed\n      .then(() => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n      })\n      .catch((error) => {\n        closed = true; // Prevents reader.cancel() from being called in destroy()\n        nodeReadable.destroy(error);\n      });\n\n    return nodeReadable;\n  }\n\n  /**\n   * Checks if a Node.js stream (`Readable`, `Writable`, `Duplex`, or `Transform`) has been destroyed.\n   *\n   * This method determines whether the provided Node.js stream has been destroyed. A stream\n   * is considered destroyed if its 'destroyed' property is set to true or if its internal state\n   * indicates it has been destroyed.\n   *\n   * @example\n   * ```ts\n   * const stream = getStreamSomehow();\n   * stream.destroy(); // Destroy the stream.\n   * const isDestroyed = NodeStream.isDestroyed({ stream });\n   * console.log(isDestroyed); // Output: true\n   * ```\n   *\n   * @param stream - The Node.js stream to check.\n   * @returns `true` if the stream has been destroyed; otherwise, `false`.\n   */\n  public static isDestroyed({ stream }: { stream: Readable | Writable | Duplex | Transform }): boolean {\n    if (!NodeStream.isStream(stream)) {\n      throw new TypeError(`NodeStream.isDestroyed: 'stream' is not a Node stream.`);\n    }\n\n    const writableState = '_writableState' in stream ? stream._writableState : undefined;\n    const readableState = stream._readableState;\n    const state = writableState || readableState;\n\n    return !!(stream.destroyed || state.destroyed);\n  }\n\n  /**\n   * Checks if a Node.js `Readable` stream is still readable.\n   *\n   * This method checks if a Node.js `Readable` stream is still in a state that allows reading from\n   * it. A stream is considered readable if it has not ended, has not been destroyed, and is not\n   * currently paused.\n   *\n   * @example\n   * ```ts\n   * const readableStream = new Readable();\n   * const isReadable = NodeStream.isReadable({ readable: readableStream });\n   * console.log(isReadable); // Output: true or false\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be checked.\n   * @returns `true` if the stream is still readable; otherwise, `false`.\n   */\n  public static isReadable({ readable }: { readable: Readable }): boolean {\n    // Check if the object is a Node Readable stream.\n    if (!NodeStream.isReadableStream(readable)) {\n      return false;\n    }\n\n    // Check if the stream is still readable.\n    return (\n      readable.readable && // Is the stream readable?\n        (typeof readable._readableState.ended === 'boolean' && !readable._readableState.ended) && // Has the 'end' method been called?\n        (typeof readable._readableState.endEmitted === 'boolean' && !readable._readableState.endEmitted) && // Has the 'end' event been emitted?\n        !readable.destroyed && // Has the 'destroy' method been called?\n        !readable.isPaused() // Is the stream paused?\n    );\n  }\n\n  /**\n   * Checks if an object is a Node.js `Readable` stream.\n   *\n   * This method verifies if the provided object is a Node.js `Readable` stream by checking for\n   * specific properties and methods typical of a `Readable` stream in Node.js.\n   *\n   * @example\n   * ```ts\n   * const obj = getSomeObject();\n   * if (NodeStream.isReadableStream(obj)) {\n   *   // obj is a Node.js Readable stream\n   * }\n   * ```\n   *\n   * @param obj - The object to be checked.\n   * @returns `true` if `obj` is a Node.js `Readable` stream; otherwise, `false`.\n   */\n  static isReadableStream(obj: unknown): obj is Readable {\n    return (\n      typeof obj === 'object' &&\n        obj !== null &&\n        ('pipe' in obj && typeof obj.pipe === 'function') &&\n        ('on' in obj && typeof obj.on === 'function') &&\n        (!('_writableState' in obj) && '_readableState' in obj)\n    );\n  }\n\n  /**\n   * Checks if the provided object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`).\n   *\n   * This method checks for the presence of internal properties specific to Node.js streams:\n   * `_readableState` and `_writableState`. These properties are present in Node.js stream\n   * instances, allowing identification of the stream type.\n   *\n   * The `_readableState` property is found in `Readable` and `Duplex` streams (including\n   * `Transform` streams, which are a type of `Duplex` stream), indicating that the stream can be\n   * read from. The `_writableState` property is found in `Writable` and `Duplex` streams,\n   * indicating that the stream can be written to.\n   *\n   * @example\n   * ```ts\n   * const { Readable, Writable, Duplex, Transform } = require('stream');\n   *\n   * const readableStream = new Readable();\n   * console.log(NodeStream.isStream(readableStream)); // Output: true\n   *\n   * const writableStream = new Writable();\n   * console.log(NodeStream.isStream(writableStream)); // Output: true\n   *\n   * const duplexStream = new Duplex();\n   * console.log(NodeStream.isStream(duplexStream)); // Output: true\n   *\n   * const transformStream = new Transform();\n   * console.log(NodeStream.isStream(transformStream)); // Output: true\n   *\n   * const nonStreamObject = {};\n   * console.log(NodeStream.isStream(nonStreamObject)); // Output: false\n   * ```\n   *\n   * @remarks\n   * - This method does not differentiate between the different types of streams (Readable,\n   *   Writable, Duplex, Transform). It simply checks if the object is any kind of Node.js stream.\n   * - While this method can identify standard Node.js streams, it may not recognize custom or\n   *   third-party stream-like objects that do not inherit directly from Node.js's stream classes\n   *   or do not have these internal state properties. This is intentional as many of the methods\n   *   in this library are designed to work with standard Node.js streams.\n   *\n   * @param obj - The object to be checked for being a Node.js stream.\n   * @returns `true` if the object is a Node.js stream (`Duplex`, `Readable`, `Writable`, or `Transform`); otherwise, `false`.\n   */\n  public static isStream(obj: unknown): obj is Duplex | Readable | Writable | Transform  {\n    return (\n      typeof obj === 'object' && obj !== null &&\n      ('_readableState' in obj || '_writableState' in obj)\n    );\n  }\n\n  /**\n   * Converts a Node.js `Readable` stream to a Web `ReadableStream`.\n   *\n   * This method provides a bridge between Node.js streams and the Web Streams API by converting a\n   * Node.js `Readable` stream into a Web `ReadableStream`. It listens for 'data', 'end', and 'error'\n   * events on the Node.js stream and appropriately enqueues data, closes, or errors the Web\n   * `ReadableStream`.\n   *\n   * If the Node.js stream is already destroyed, the method returns an immediately cancelled\n   * Web `ReadableStream`.\n   *\n   * @example\n   * ```ts\n   * const nodeReadable = getNodeReadableStreamSomehow();\n   * const webReadableStream = NodeStream.toWebReadable({ readable: nodeReadable });\n   * ```\n   *\n   * @param readable - The Node.js `Readable` stream to be converted.\n   * @returns A Web `ReadableStream` corresponding to the provided Node.js `Readable` stream.\n   * @throws TypeError if `readable` is not a Node.js `Readable` stream.\n   * @throws Error if the Node.js `Readable` stream is already destroyed.\n   */\n  static toWebReadable({ readable }: { readable: Readable }): ReadableStream {\n    if (!NodeStream.isReadableStream(readable)) {\n      throw new TypeError(`NodeStream.toWebReadable: 'readable' is not a Node Readable stream.`);\n    }\n\n    if (NodeStream.isDestroyed({ stream: readable })) {\n      const readable = new ReadableStream();\n      readable.cancel();\n      return readable;\n    }\n\n    return new ReadableStream({\n      start(controller) {\n        readable.on('data', (chunk) => {\n          controller.enqueue(chunk);\n        });\n\n        readable.on('end', () => {\n          controller.close();\n        });\n\n        readable.on('error', (err) => {\n          controller.error(err);\n        });\n      },\n\n      cancel() {\n        readable.destroy();\n      }\n    });\n  }\n}", "import { sha256 } from '@noble/hashes/sha256';\n\n/**\n * The `Sha256` class provides an interface for generating SHA-256 hash digests.\n *\n * This class utilizes the '@noble/hashes/sha256' function to generate hash digests\n * of the provided data. The SHA-256 algorithm is widely used in cryptographic\n * applications to produce a fixed-size 256-bit (32-byte) hash.\n *\n * The methods of this class are asynchronous and return Promises. They use the Uint8Array\n * type for input data and the resulting digest, ensuring a consistent interface\n * for binary data processing.\n *\n * @example\n * ```ts\n * const data = new Uint8Array([...]);\n * const hash = await Sha256.digest({ data });\n * ```\n */\nexport class Sha256 {\n  /**\n   * Generates a SHA-256 hash digest for the given data.\n   *\n   * @remarks\n   * This method produces a hash digest using the SHA-256 algorithm. The resultant digest\n   * is deterministic, meaning the same data will always produce the same hash, but\n   * is computationally infeasible to regenerate the original data from the hash.\n   *\n   * @example\n   * ```ts\n   * const data = new Uint8Array([...]);\n   * const hash = await Sha256.digest({ data });\n   * ```\n   *\n   * @param params - The parameters for the hashing operation.\n   * @param params.data - The data to hash, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the SHA-256 hash digest of the provided data as a Uint8Array.\n   */\n  public static async digest({ data }: {\n    data: Uint8Array;\n  }): Promise<Uint8Array> {\n    const hash = sha256(data);\n\n    return hash;\n  }\n}", "/**\n * Base class for all cryptographic algorithm implementations.\n */\nexport abstract class CryptoAlgorithm {}", "import type { Hasher } from '../types/hasher.js';\nimport type { DigestParams } from '../types/params-direct.js';\n\nimport { Sha256 } from '../primitives/sha256.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\n\n/**\n * The `Sha2DigestParams` interface defines the algorithm-specific parameters that should be\n * passed into the `digest()` method when using the SHA-2 algorithm.\n */\nexport interface Sha2DigestParams extends DigestParams {\n  /**\n   * A string defining the name of hash function to use. The value must be one of the following:\n   * - `\"SHA-256\"`: Generates a 256-bit digest.\n   */\n  algorithm: 'SHA-256';\n}\n\n/**\n * The `Sha2Algorithm` class is an implementation of the {@link Hasher | `Hasher`} interface for the\n * SHA-2 family of cryptographic hash functions. The `digest` method takes the algorithm identifier\n * of the hash function and arbitrary data as input and returns the hash digest of the data.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class Sha2Algorithm extends CryptoAlgorithm\n  implements Hasher<Sha2DigestParams> {\n\n  /**\n   * Generates a hash digest of the provided data.\n   *\n   * @remarks\n   * A digest is the output of the hash function. It's a fixed-size string of bytes\n   * that uniquely represents the data input into the hash function. The digest is often used for\n   * data integrity checks, as any alteration in the input data results in a significantly\n   * different digest.\n   *\n   * It takes the algorithm identifier of the hash function and data to digest as input and returns\n   * the digest of the data.\n   *\n   * @example\n   * ```ts\n   * const sha2 = new Sha2Algorithm();\n   * const data = new TextEncoder().encode('Messsage');\n   * const digest = await sha2.digest({ data });\n   * ```\n   *\n   * @param params - The parameters for the digest operation.\n   * @param params.algorithm - The name of hash function to use.\n   * @param params.data - The data to digest.\n   *\n   * @returns A Promise which will be fulfilled with the hash digest.\n   */\n  public async digest({ algorithm, data }: Sha2DigestParams): Promise<Uint8Array> {\n    switch (algorithm) {\n\n      case 'SHA-256': {\n        const hash = await Sha256.digest({ data });\n        return hash;\n      }\n    }\n\n  }\n}", "/**\n * Canonicalizes a given object according to RFC 8785 (https://tools.ietf.org/html/rfc8785),\n * which describes JSON Canonicalization Scheme (JCS). This function sorts the keys of the\n * object and its nested objects alphabetically and then returns a stringified version of it.\n * This method handles nested objects, array values, and null values appropriately.\n *\n * @param obj - The object to canonicalize.\n * @returns The stringified version of the input object with its keys sorted alphabetically\n * per RFC 8785.\n */\nexport function canonicalize(obj: { [key: string]: any }): string {\n  /**\n   * Recursively sorts the keys of an object.\n   *\n   * @param obj - The object whose keys are to be sorted.\n   * @returns A new object with sorted keys.\n   */\n  const sortObjKeys = (obj: { [key: string]: any }): { [key: string]: any } => {\n    if (obj !== null && typeof obj === 'object' && !Array.isArray(obj)) {\n      const sortedKeys = Object.keys(obj).sort();\n      const sortedObj: { [key: string]: any } = {};\n      for (const key of sortedKeys) {\n        // Recursively sort keys of nested objects.\n        sortedObj[key] = sortObjKeys(obj[key]);\n      }\n      return sortedObj;\n    }\n    return obj;\n  };\n\n  // Stringify and return the final sorted object.\n  const sortedObj = sortObjKeys(obj);\n  return JSON.stringify(sortedObj);\n}", "import { Convert, removeUndefinedProperties } from '@web5/common';\n\nimport { canonicalize } from './utils.js';\nimport { Sha256 } from '../primitives/sha256.js';\n\n/**\n * Constant defining the prefix for JSON Web Keys (JWK) key URIs in this library.\n *\n * The prefix 'urn:jwk:' makes it explicit that a string represents a JWK, referenced by a\n * {@link https://datatracker.ietf.org/doc/html/rfc3986 | URI} (Uniform Resource Identifier),\n * which ensures consistent key referencing across all Web5 Key Management System (KMS)\n * implementations.\n *\n * These key URIs take the form `urn:jwk:<JWK thumbprint>`, where the\n * {@link https://datatracker.ietf.org/doc/html/rfc7638 | JWK thumbprint}, derived from the JWK, is\n * unique to the key's material, unaffected by the order or optional properties in the JWK.\n */\nexport const KEY_URI_PREFIX_JWK = 'urn:jwk:';\n\n/**\n * JSON Web Key Operations\n *\n * The \"key_ops\" (key operations) parameter identifies the operation(s)\n * for which the key is intended to be used.  The \"key_ops\" parameter is\n * intended for use cases in which public, private, or symmetric keys\n * may be present.\n *\n * Its value is an array of key operation values.  Values defined by\n * {@link https://www.rfc-editor.org/rfc/rfc7517.html#section-4.3 | RFC 7517 Section 4.3} are:\n *\n * - \"decrypt\"    : Decrypt content and validate decryption, if applicable\n * - \"deriveBits\" : Derive bits not to be used as a key\n * - \"deriveKey\"  : Derive key\n * - \"encrypt\"    : Encrypt content\n * - \"sign\"       : Compute digital signature or MAC\n * - \"unwrapKey\"  : Decrypt key and validate decryption, if applicable\n * - \"verify\"     : Verify digital signature or MAC\n * - \"wrapKey\"    : Encrypt key\n *\n * Other values MAY be used.  The key operation values are case-\n * sensitive strings.  Duplicate key operation values MUST NOT be\n * present in the array.  Use of the \"key_ops\" member is OPTIONAL,\n * unless the application requires its presence.\n *\n * The \"use\" and \"key_ops\" JWK members SHOULD NOT be used together;\n * however, if both are used, the information they convey MUST be\n * consistent.  Applications should specify which of these members they\n * use, if either is to be used by the application.\n */\nexport type JwkOperation = 'encrypt' | 'decrypt' | 'sign' | 'verify' | 'deriveKey' | 'deriveBits' | 'wrapKey' | 'unwrapKey';\n\n/**\n * JSON Web Key Use\n *\n * The \"use\" (public key use) parameter identifies the intended use of\n * the public key.  The \"use\" parameter is employed to indicate whether\n * a public key is used for encrypting data or verifying the signature\n * on data.\n *\n * Values defined by {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4.2 | RFC 7517 Section 4.2} are:\n *\n * - \"sig\" (signature)\n * - \"enc\" (encryption)\n *\n * Other values MAY be used.  The \"use\" value is a case-sensitive\n * string.  Use of the \"use\" member is OPTIONAL, unless the application\n * requires its presence.\n *\n * The \"use\" and \"key_ops\" JWK members SHOULD NOT be used together;\n * however, if both are used, the information they convey MUST be\n * consistent.  Applications should specify which of these members they\n * use, if either is to be used by the application.\n *\n * When a key is used to wrap another key and a public key use\n * designation for the first key is desired, the \"enc\" (encryption) key\n * use value is used, since key wrapping is a kind of encryption.  The\n * \"enc\" value is also to be used for public keys used for key agreement\n * operations.\n */\nexport type JwkUse = 'sig' | 'enc' | string;\n\n/**\n * JSON Web Key Types\n */\nexport type JwkType =\n  /**\n   * Elliptic Curve\n   * Used with Elliptic Curve Digital Signature Algorithm (ECDSA) and Elliptic\n   * Curve Diffie-Hellman (ECDH), including secp256k1, P-256, P-384, and P-521.\n   */\n  | 'EC'\n  /**\n   * RSA\n   * Widely used for encryption and digital signatures. RSA keys are used in\n   * various algorithms like RS256, RS384, RS512, etc.\n   */\n  | 'RSA'\n  /**\n   * Octet sequence\n   * Used with symmetric signing (e.g., HMAC HS256, HS512, etc.) and\n   * symmetric encryption (e.g., A256CBC-HS512, A256GCM, etc.) algorithms.\n   */\n  | 'oct'\n  /**\n   * Octet string key pairs (OKP)\n   * A type of public key that is used with algorithms such as EdDSA (Ed25519 and\n   * Ed448 curves) and ECDH (X25519 and X448 curves).\n   */\n  | 'OKP'\n\n/**\n * JSON Web Key Elliptic Curve\n */\nexport type JwkNamedCurves =\n  // P-256 Curve\n  | 'P-256'\n  // P-384 Curve\n  | 'P-384'\n  // P-521 Curve\n  | 'P-521'\n  // Ed25519 signature algorithm key pairs\n  | 'Ed25519'\n  // Ed448 signature algorithm key pairs\n  | 'Ed448'\n  // X25519 function key pairs\n  | 'X25519'\n  // X448 function key pairs\n  | 'X448'\n  // SECG secp256k1 curve\n  | 'secp256k1';\n\n/**\n * JSON Web Key Parameters\n */\n\n/** Parameters used with any \"kty\" (key type) value. */\nexport type JwkParamsAnyKeyType = {\n  /** JWK Algorithm Parameter. The algorithm intended for use with the key. */\n  alg?: string;\n  /** JWK Extractable Parameter */\n  ext?: 'true' | 'false';\n  /** JWK Key Operations Parameter */\n  key_ops?: JwkOperation[];\n  /** JWK Key ID Parameter */\n  kid?: string;\n  /** JWK Key Type Parameter */\n  kty: JwkType;\n  /** JWK Public Key Use Parameter */\n  use?: JwkUse;\n  /** JWK X.509 Certificate Chain Parameter */\n  x5c?: string;\n  /** JWK X.509 Certificate SHA-1 Thumbprint Parameter */\n  x5t?: string;\n  /** JWK X.509 Certificate SHA-256 Thumbprint Parameter */\n  'x5t#S256'?: string;\n  /** JWK X.509 URL Parameter */\n  x5u?: string;\n}\n\n/** Parameters used with \"EC\" (elliptic curve) public keys. */\nexport type JwkParamsEcPublic = Omit<JwkParamsAnyKeyType, 'alg' | 'kty'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * ES256  : ECDSA using P-256 and SHA-256\n   * ES256K : ECDSA using secp256k1 curve and SHA-256\n   * ES384  : ECDSA using P-384 and SHA-384\n   * ES512  : ECDSA using P-521 and SHA-512\n   */\n  alg?: 'ES256' | 'ES256K' | 'ES384' | 'ES512';\n\n  /**\n   * Elliptic Curve key pair.\n   */\n  kty: 'EC';\n\n  /**\n   * The cryptographic curve used with the key.\n   * MUST be present for all EC public keys.\n   */\n  crv: 'secp256k1' | 'P-256' | 'P-384' | 'P-521';\n\n  /**\n   * The x-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC public keys\n   */\n  x: string;\n\n  /**\n   * The y-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present only for secp256k1 public keys.\n   */\n  y?: string;\n}\n\n/** Parameters used with \"EC\" (elliptic curve) private keys. */\nexport type JwkParamsEcPrivate = JwkParamsEcPublic & {\n  /**\n   * The d-coordinate for the Elliptic Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC private keys.\n   */\n  d: string;\n}\n\n/** Parameters used with \"OKP\" (octet key pair) public keys. */\nexport type JwkParamsOkpPublic =\n  Omit<JwkParamsAnyKeyType, 'kty' | 'alg' | 'crv'> &\n  Pick<JwkParamsEcPublic, 'x'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * EdDSA: Edwards Curve Digital Signature Algorithm\n   */\n  alg?: 'EdDSA';\n\n  /**\n   * The cryptographic curve used with the key.\n   * MUST be present for all OKP public keys.\n   */\n  crv: 'Ed25519' | 'Ed448' | 'X25519' | 'X448';\n\n  /**\n   * Key type\n   * OKP (Octet Key Pair) is defined for public key algorithms that use octet\n   * strings as private and public keys.\n   */\n  kty: 'OKP';\n}\n\n/** Parameters used with \"OKP\" (octet key pair) private keys. */\nexport type JwkParamsOkpPrivate = JwkParamsOkpPublic & {\n  /**\n   * The d-coordinate for the Edwards Curve point.\n   * Represented as the base64url encoding of the octet string\n   * representation of the coordinate.\n   * MUST be present for all EC private keys.\n   */\n  d: string;\n};\n\n/** Parameters used with \"oct\" (octet sequence) private keys. */\nexport type JwkParamsOctPrivate = Omit<JwkParamsAnyKeyType, 'alg' | 'kty'> & {\n  /**\n   * The algorithm intended for use with the key.\n   * Used with symmetric signing (e.g., HMAC HS256, etc.) and\n   * symmetric encryption (e.g., A256GCM, etc.) algorithms.\n   */\n  alg?:\n    // AES CBC using 128-bit key\n    | 'A128CBC'\n    // AES CBC using 192-bit key\n    | 'A192CBC'\n    // AES CBC using 256-bit key\n    | 'A256CBC'\n    // AES CTR using 128-bit key\n    | 'A128CTR'\n    // AES CTR using 192-bit key\n    | 'A192CTR'\n    // AES CTR using 256-bit key\n    | 'A256CTR'\n    // AES GCM using a 128-bit key\n    | 'A128GCM'\n    // AES GCM using a 192-bit key\n    | 'A192GCM'\n    // AES GCM using a 256-bit key\n    | 'A256GCM'\n    // HMAC using SHA-256\n    | 'HS256'\n    // HMAC using SHA-384\n    | 'HS384'\n    // HMAC using SHA-512\n    | 'HS512'\n\n  /**\n   * The \"k\" (key value) parameter contains the value of the symmetric\n   * (or other single-valued) key.  It is represented as the base64url\n   * encoding of the octet sequence containing the key value.\n   */\n  k: string;\n\n  /**\n   * Key type\n   * oct (Octet Sequence) is defined for symmetric encryption and\n   * symmetric signature algorithms.\n   */\n  kty: 'oct';\n}\n\n/** Parameters Used with \"RSA\" public keys. */\nexport type JwkParamsRsaPublic = Omit<JwkParamsAnyKeyType, 'kty'> & {\n  /** Public exponent for RSA */\n  e: string;\n\n  /**\n   * Key type\n   * RSA is widely used for encryption and digital signatures.\n   */\n  kty: 'RSA';\n\n  /** Modulus for RSA */\n  n: string;\n};\n\n/** Parameters used with \"RSA\" private keys. */\nexport type JwkParamsRsaPrivate = JwkParamsRsaPublic & {\n  /** Private exponent for RSA */\n  d: string;\n  /** First prime factor for RSA */\n  p?: string;\n  /** Second prime factor for RSA */\n  q?: string;\n  /** First factor's CRT exponent for RSA */\n  dp?: string;\n  /** Second factor's CRT exponent for RSA */\n  dq?: string;\n  /** First CRT coefficient for RSA */\n  qi?: string;\n  /** Other primes information (optional in RFC 7518) */\n  oth?: {\n    /** Other primes' factor */\n    r: string;\n    /** Other primes' CRT exponent */\n    d: string;\n    /** Other primes' CRT coefficient */\n    t: string;\n  }[];\n};\n\n/** Parameters used with public keys in JWK format. */\nexport type PublicKeyJwk = JwkParamsEcPublic | JwkParamsOkpPublic | JwkParamsRsaPublic;\n\n/** Parameters used with private keys in JWK format. */\nexport type PrivateKeyJwk = JwkParamsEcPrivate | JwkParamsOkpPrivate | JwkParamsOctPrivate | JwkParamsRsaPrivate;\n\n/**\n * JSON Web Key ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK}).\n * \"RSA\", \"EC\", \"OKP\", and \"oct\" key types are supported.\n */\nexport interface Jwk {\n  // Common properties that apply to all key types.\n\n  /** JWK Algorithm Parameter. The algorithm intended for use with the key. */\n  alg?: string;\n  /** JWK Extractable Parameter */\n  ext?: 'true' | 'false';\n  /** JWK Key Operations Parameter */\n  key_ops?: JwkOperation[];\n  /** JWK Key ID Parameter */\n  kid?: string;\n  /** JWK Key Type Parameter */\n  kty: JwkType;\n  /** JWK Public Key Use Parameter */\n  use?: JwkUse;\n  /** JWK X.509 Certificate Chain Parameter */\n  x5c?: string;\n  /** JWK X.509 Certificate SHA-1 Thumbprint Parameter */\n  x5t?: string;\n  /** JWK X.509 Certificate SHA-256 Thumbprint Parameter */\n  'x5t#S256'?: string;\n  /** JWK X.509 URL Parameter */\n  x5u?: string;\n\n  // Elliptic Curve (EC or OKP) public key properties.\n\n  /** The cryptographic curve used with the key. */\n  crv?: string;\n  /** The x-coordinate for the Elliptic Curve point. */\n  x?: string;\n  /** The y-coordinate for the Elliptic Curve point. */\n  y?: string;\n\n  // Symmetric key properties.\n\n  /** The \"k\" (key value) parameter contains the value of the symmetric (or other single-valued) key. */\n  k?: string;\n\n  // RSA public key properties.\n\n  /** Public exponent for RSA */\n  e?: string;\n  /** Modulus for RSA */\n  n?: string;\n  /** First prime factor for RSA */\n  p?: string;\n  /** Second prime factor for RSA */\n  q?: string;\n  /** First factor's CRT exponent for RSA */\n  dp?: string;\n  /** Second factor's CRT exponent for RSA */\n  dq?: string;\n  /** First CRT coefficient for RSA */\n  qi?: string;\n  /** Other primes information (optional in RFC 7518) */\n  oth?: {\n    /** Other primes' factor */\n    r: string;\n    /** Other primes' CRT exponent */\n    d: string;\n    /** Other primes' CRT coefficient */\n    t: string;\n  }[];\n\n  // Elliptic Curve and RSA private key properties.\n\n  /** Private key component for EC, OKP, or RSA keys. */\n  d?: string;\n\n  // Additional public or private properties.\n  [key: string]: unknown;\n}\n\n/**\n * JSON Web Key Set ({@link https://datatracker.ietf.org/doc/html/rfc7517 | JWK Set})\n *\n * @remarks\n * A JWK Set is a JSON object that represents a set of JWKs. The JSON object MUST have a \"keys\"\n * member, with its value being an array of JWKs.\n *\n * Additional members can be present in the JWK Set but member names MUST be unique. If not\n * understood by implementations encountering them, they MUST be ignored. Parameters for\n * representing additional properties of JWK Sets should either be registered in the IANA\n * \"JSON Web Key Set Parameters\" registry or be a value that contains a Collision-Resistant Name.\n */\nexport interface JwkSet {\n  /** Array of JWKs */\n  keys: Jwk[]\n}\n\n/**\n * Computes the thumbprint of a JSON Web Key (JWK) using the method\n * specified in RFC 7638. This function accepts RSA, EC, OKP, and oct keys\n * and returns the thumbprint as a base64url encoded SHA-256 hash of the\n * JWK's required members, serialized and sorted lexicographically.\n *\n * Purpose:\n * - Uniquely Identifying Keys: The thumbprint allows the unique\n *   identification of a specific JWK within a set of JWKs. It provides a\n *   deterministic way to generate a value that can be used as a key\n *   identifier (kid) or to match a specific key.\n *\n * - Simplifying Key Management: In systems where multiple keys are used,\n *   managing and identifying individual keys can become complex. The\n *   thumbprint method simplifies this by creating a standardized, unique\n *   identifier for each key.\n *\n * - Enabling Interoperability: By standardizing the method to compute a\n *   thumbprint, different systems can compute the same thumbprint value for\n *   a given JWK. This enables interoperability among systems that use JWKs.\n *\n * - Secure Comparison: The thumbprint provides a way to securely compare\n *   JWKs to determine if they are equivalent.\n *\n * @example\n * ```ts\n * const jwk: PublicKeyJwk = {\n *   'kty': 'EC',\n *   'crv': 'secp256k1',\n *   'x': '61iPYuGefxotzBdQZtDvv6cWHZmXrTTscY-u7Y2pFZc',\n *   'y': '88nPCVLfrAY9i-wg5ORcwVbHWC_tbeAd1JE2e0co0lU'\n * };\n *\n * const thumbprint = jwkThumbprint(jwk);\n * console.log(`JWK thumbprint: ${thumbprint}`);\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7638 | RFC7638} for\n * the specification of JWK thumbprint computation.\n *\n * @param jwk - The JSON Web Key for which the thumbprint will be computed.\n *              This must be an RSA, EC, OKP, or oct key.\n * @returns The thumbprint as a base64url encoded string.\n * @throws Throws an `Error` if the provided key type is unsupported.\n */\nexport async function computeJwkThumbprint({ jwk }: {\n  jwk: Jwk\n}): Promise<string> {\n  /** Step 1 - Normalization: The JWK is normalized to include only specific\n   * members and in lexicographic order.\n   */\n  const keyType = jwk.kty;\n  let normalizedJwk: Jwk;\n  if (keyType === 'EC') {\n    normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n  } else if (keyType === 'oct') {\n    normalizedJwk = { k: jwk.k, kty: jwk.kty };\n  } else if (keyType === 'OKP') {\n    normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n  } else if (keyType === 'RSA') {\n    normalizedJwk = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n  } else {\n    throw new Error(`Unsupported key type: ${keyType}`);\n  }\n  removeUndefinedProperties(normalizedJwk);\n\n  /** Step 2 - Serialization: The normalized JWK is serialized to a UTF-8\n   * representation of its JSON encoding. */\n  const serializedJwk = canonicalize(normalizedJwk);\n\n  /** Step 3 - Digest Calculation: A cryptographic hash function\n   * (SHA-256 is recommended) is applied to the serialized JWK,\n   * resulting in the thumbprint. */\n  const utf8Bytes = Convert.string(serializedJwk).toUint8Array();\n  const digest = await Sha256.digest({ data: utf8Bytes });\n\n  // Encode as Base64Url.\n  const thumbprint = Convert.uint8Array(digest).toBase64Url();\n\n  return thumbprint;\n}\n\n/**\n * Checks if the provided object is a valid elliptic curve private key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid EC private JWK; otherwise, false.\n */\nexport function isEcPrivateJwk(obj: unknown): obj is JwkParamsEcPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj && 'd' in obj)) return false;\n  if (obj.kty !== 'EC') return false;\n  if (typeof obj.d !== 'string') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid elliptic curve public key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid EC public JWK; otherwise, false.\n */\nexport function isEcPublicJwk(obj: unknown): obj is JwkParamsEcPublic {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj)) return false;\n  if ('d' in obj) return false;\n  if (obj.kty !== 'EC') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet sequence (symmetric key) in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid oct private JWK; otherwise, false.\n */\nexport function isOctPrivateJwk(obj: unknown): obj is JwkParamsOctPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'k' in obj)) return false;\n  if (obj.kty !== 'oct') return false;\n  if (typeof obj.k !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet key pair private key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid OKP private JWK; otherwise, false.\n */\nexport function isOkpPrivateJwk(obj: unknown): obj is JwkParamsOkpPrivate {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj && 'd' in obj)) return false;\n  if (obj.kty !== 'OKP') return false;\n  if (typeof obj.d !== 'string') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid octet key pair public key in JWK format.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid OKP public JWK; otherwise, false.\n */\nexport function isOkpPublicJwk(obj: unknown): obj is JwkParamsOkpPublic {\n  if (!obj || typeof obj !== 'object') return false;\n  if ('d' in obj) return false;\n  if (!('kty' in obj && 'crv' in obj && 'x' in obj)) return false;\n  if (obj.kty !== 'OKP') return false;\n  if (typeof obj.x !== 'string') return false;\n  return true;\n}\n\n/**\n * Checks if the provided object is a valid private key in JWK format of any supported type.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid private JWK; otherwise, false.\n */\nexport function isPrivateJwk(obj: unknown): obj is PrivateKeyJwk {\n  if (!obj || typeof obj !== 'object') return false;\n\n  const kty = (obj as { kty: string }).kty;\n\n  switch (kty) {\n    case 'EC':\n    case 'OKP':\n    case 'RSA':\n      return 'd' in obj;\n    case 'oct':\n      return 'k' in obj;\n    default:\n      return false;\n  }\n}\n\n/**\n * Checks if the provided object is a valid public key in JWK format of any supported type.\n *\n * @param obj - The object to check.\n * @returns True if the object is a valid public JWK; otherwise, false.\n */\nexport function isPublicJwk(obj: unknown): obj is PublicKeyJwk {\n  if (!obj || typeof obj !== 'object') return false;\n\n  const kty = (obj as { kty: string }).kty;\n\n  switch (kty) {\n    case 'EC':\n    case 'OKP':\n      return 'x' in obj && !('d' in obj);\n    case 'RSA':\n      return 'n' in obj && 'e' in obj && !('d' in obj);\n    default:\n      return false;\n  }\n}", "import type { AffinePoint } from '@noble/curves/abstract/weierstrass';\n\nimport { Convert } from '@web5/common';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Secp256k1` class provides a comprehensive suite of utilities for working with\n * the secp256k1 elliptic curve, commonly used in blockchain and cryptographic applications.\n * This class includes methods for key generation, conversion, signing, verification, and\n * Elliptic Curve Diffie-Hellman (ECDH) key agreement.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH.\n *\n * Key Features:\n * - Key Generation: Generate secp256k1 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n * - ECDSA Signing and Verification: Sign data and verify signatures with secp256k1 keys.\n * - Key Validation: Validate the mathematical correctness of secp256k1 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Secp256k1.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Secp256k1.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Secp256k1.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await Secp256k1.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // ECDSA Signing\n * const signature = await Secp256k1.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // ECDSA Signature Verification\n * const isValid = await Secp256k1.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey });\n * const compressedPublicKey = await Secp256k1.compressPublicKey({ publicKeyBytes });\n * const uncompressedPublicKey = await Secp256k1.decompressPublicKey({ publicKeyBytes });\n *\n * // Key Validation\n * const isPrivateKeyValid = await Secp256k1.validatePrivateKey({ privateKeyBytes });\n * const isPublicKeyValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Secp256k1 {\n  /**\n   * Adjusts an ECDSA signature to a normalized, low-S form.\n   *\n   * @remarks\n   * All ECDSA signatures, regardless of the curve, consist of two components, `r` and `s`, both of\n   * which are integers. The curve's order (the total number of points on the curve) is denoted by\n   * `n`. In a valid ECDSA signature, both `r` and `s` must be in the range [1, n-1]. However, due\n   * to the mathematical properties of ECDSA, if `(r, s)` is a valid signature, then `(r, n - s)` is\n   * also a valid signature for the same message and public key. In other words, for every\n   * signature, there's a \"mirror\" signature that's equally valid. For these elliptic curves:\n   *\n   * - Low S Signature: A signature where the `s` component is in the lower half of the range,\n   *                    specifically less than or equal to `n/2`.\n   *\n   * - High S Signature: This is where the `s` component is in the upper half of the range, greater\n   *                     than `n/2`.\n   *\n   * The practical implication is that a third-party can forge a second valid signature for the same\n   * message by negating the `s` component of the original signature, without any knowledge of the\n   * private key. This is known as a \"signature malleability\" attack.\n   *\n   * This type of forgery is not a problem in all systems, but it can be an issue in systems that\n   * rely on digital signature uniqueness to ensure transaction integrity. For example, in Bitcoin,\n   * transaction malleability is an issue because it allows for the modification of transaction\n   * identifiers (and potentially, transactions themselves) after they're signed but before they're\n   * confirmed in a block. By enforcing low `s` values, the Bitcoin network reduces the likelihood of\n   * this occurring, making the system more secure and predictable.\n   *\n   * For this reason, it's common practice to normalize ECDSA signatures to a low-S form. This\n   * form is considered standard and preferable in some systems and is known as the \"normalized\"\n   * form of the signature.\n   *\n   * This method takes a signature, and if it's high-S, returns the normalized low-S form. If the\n   * signature is already low-S, it's returned unmodified. It's important to note that this\n   * method does not change the validity of the signature but makes it compliant with systems that\n   * enforce low-S signatures.\n   *\n   * @example\n   * ```ts\n   * const signature = new Uint8Array([...]); // Your ECDSA signature\n   * const adjustedSignature = await Secp256k1.adjustSignatureToLowS({ signature });\n   * // Now 'adjustedSignature' is in the low-S form.\n   * ```\n   *\n   * @param params - The parameters for the signature adjustment.\n   * @param params.signature - The ECDSA signature as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the adjusted signature in low-S form as a `Uint8Array`.\n   */\n  public static async adjustSignatureToLowS({ signature }: {\n    signature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the signature to a `secp256k1.Signature` object.\n    const signatureObject = secp256k1.Signature.fromCompact(signature);\n\n    if (signatureObject.hasHighS()) {\n      // Adjust the signature to low-S format if it's high-S.\n      const adjustedSignatureObject = signatureObject.normalizeS();\n\n      // Convert the adjusted signature object back to a byte array.\n      const adjustedSignature = adjustedSignatureObject.toCompactRawBytes();\n\n      return adjustedSignature;\n\n    } else {\n      // Return the unmodified signature if it is already in low-S format.\n      return signature;\n    }\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a private key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object. The conversion involves extracting the\n   * elliptic curve point (x and y coordinates) from the private key and encoding\n   * them into base64url format, alongside other JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Secp256k1.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key in a byte array (Uint8Array) format and\n   * transforms it to a JWK object. It involves decoding the elliptic curve point\n   * (x and y coordinates) from the raw public key bytes and encoding them into\n   * base64url format, along with setting appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await Secp256k1.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided public key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: publicKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a public key to its compressed form.\n   *\n   * @remarks\n   * This method takes a public key represented as a byte array and compresses it. Public key\n   * compression is a process that reduces the size of the public key by removing the y-coordinate,\n   * making it more efficient for storage and transmission. The compressed key retains the same\n   * level of security as the uncompressed key.\n   *\n   * @example\n   * ```ts\n   * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes\n   * const compressedPublicKey = await Secp256k1.compressPublicKey({\n   *   publicKeyBytes: uncompressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key compression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the compressed public key as a Uint8Array.\n   */\n  public static async compressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the compressed form of the public key.\n    return point.toRawBytes(true);\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The derivation process involves converting the private key to a raw\n   * byte array, then computing the elliptic curve point (x and y coordinates) from this private\n   * key. These coordinates are then encoded into base64url format to construct the public key in\n   * JWK format.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the secp256k1 elliptic curve standards. This method is useful in cryptographic\n   * operations where a public key is needed for operations like signature verification, but only\n   * the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const publicKey = await Secp256k1.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Secp256k1.privateKeyToBytes({ privateKey: key });\n\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256k1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'secp256k1',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an ASN.1 DER encoded ECDSA signature to a compact R+S format.\n   *\n   * @remarks\n   * This method is used for converting an ECDSA signature from the ASN.1 DER encoding to the more\n   * compact R+S format. This conversion is often required when dealing with ECDSA signatures in\n   * certain cryptographic standards such as JWS (JSON Web Signature).\n   *\n   * The method decodes the DER-encoded signature, extracts the R and S values, and concatenates\n   * them into a single byte array. This process involves handling the ASN.1 structure to correctly\n   * parse the R and S values, considering padding and integer encoding specifics of DER.\n   *\n   * @example\n   * ```ts\n   * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature\n   * const signature = await Secp256k1.convertDerToCompactSignature({ derSignature });\n   * ```\n   *\n   * @param params - The parameters for the signature conversion.\n   * @param params.derSignature - The signature in ASN.1 DER format as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the signature in compact R+S format as a `Uint8Array`.\n   */\n  public static async convertDerToCompactSignature({ derSignature }: {\n    derSignature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the DER-encoded signature into a `secp256k1.Signature` object.\n    // This involves parsing the ASN.1 DER structure to extract the R and S components.\n    const signatureObject = secp256k1.Signature.fromDER(derSignature);\n\n    // Convert the signature object into compact R+S format, which concatenates the R and S values\n    // into a single byte array.\n    const compactSignature = signatureObject.toCompactRawBytes();\n\n    return  compactSignature;\n  }\n\n  /**\n   * Converts a public key to its uncompressed form.\n   *\n   * @remarks\n   * This method takes a compressed public key represented as a byte array and decompresses it.\n   * Public key decompression involves reconstructing the y-coordinate from the x-coordinate,\n   * resulting in the full public key. This method is used when the uncompressed key format is\n   * required for certain cryptographic operations or interoperability.\n   *\n   * @example\n   * ```ts\n   * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes\n   * const decompressedPublicKey = await Secp256k1.decompressPublicKey({\n   *   publicKeyBytes: compressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key decompression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the uncompressed public key as a Uint8Array.\n   */\n  public static async decompressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the uncompressed form of the public key.\n    return point.toRawBytes(false);\n  }\n\n  /**\n   * Generates a secp256k1 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the secp256k1\n   * elliptic curve. The key is generated using cryptographically secure random\n   * number generation to ensure its uniqueness and security. The resulting\n   * private key adheres to the JWK format, specifically tailored for secp256k1,\n   * making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The private key generated by this method includes the following components:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'secp256k1'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, derived from the private key, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, derived from the private key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in signin and key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Secp256k1.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = secp256k1.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Secp256k1.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from a secp256k1 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const publicKey = await Secp256k1.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    // Verify the provided JWK represents an elliptic curve (EC) secp256k1 private key.\n    if (!(isEcPrivateJwk(key) && key.crv === 'secp256k1')) {\n      throw new Error(`Secp256k1: The provided key is not a secp256k1 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a private key in JWK format and extracts its raw byte representation.\n   * It specifically focuses on the 'd' parameter of the JWK, which represents the private\n   * key component in base64url encoding. The method decodes this value into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC secp256k1 private key.\n    if (!isEcPrivateJwk(privateKey)) {\n      throw new Error(`Secp256k1: The provided key is not a valid EC private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'x' and 'y' parameters of the JWK\n   * (which represent the x and y coordinates of the elliptic curve point, respectively)\n   * from base64url format into a byte array. The method then concatenates these values,\n   * along with a prefix indicating the key format, to form the full public key.\n   *\n   * This function is particularly useful for use cases where the public key is needed\n   * in its raw byte format, such as for certain cryptographic operations or when\n   * interfacing with systems that require raw key formats.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // A Jwk public key object\n   * const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC secp256k1 public key, which must have a 'y' value.\n    if (!(isEcPublicJwk(publicKey) && publicKey.y)) {\n      throw new Error(`Secp256k1: The provided key is not a valid EC public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n    const x = Convert.base64Url(publicKey.x).toUint8Array();\n    const y = Convert.base64Url(publicKey.y).toUint8Array();\n\n    // Concatenate the prefix, x-coordinate, and y-coordinate as a single byte array.\n    const publicKeyBytes = new Uint8Array([...prefix, ...x, ...y]);\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256k1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk private key object for party A\n   * const publicKeyB = { ... }; // A Jwk public key object for party B\n   * const sharedSecret = await Secp256k1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`Secp256k1: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await Secp256k1.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await Secp256k1.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the compact representation shared secret between the public and private keys.\n    const sharedSecret = secp256k1.getSharedSecret(privateKeyABytes, publicKeyBBytes, true);\n\n    // Remove the leading byte that indicates the sign of the y-coordinate\n    // of the point on the elliptic curve.  See note above.\n    return sharedSecret.slice(1);\n  }\n\n  /**\n   * Generates an RFC6979-compliant ECDSA signature of given data using a secp256k1 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the ECDSA\n   * (Elliptic Curve Digital Signature Algorithm) signature algorithm, as defined in RFC6979.\n   * The data to be signed is first hashed using the SHA-256 algorithm, and this hash is then\n   * signed using the private key. The output is a digital signature in the form of a\n   * Uint8Array, which uniquely corresponds to both the data and the private key used for signing.\n   *\n   * This method is commonly used in cryptographic applications to ensure data integrity and\n   * authenticity. The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing a secp256k1 private key\n   * const signature = await Secp256k1.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ data, key }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Secp256k1.privateKeyToBytes({ privateKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    // Sign the provided data using the ECDSA algorithm.\n    // The `secp256k1.sign` operation returns a signature object with { r, s, recovery } properties.\n    const signatureObject = secp256k1.sign(digest, privateKeyBytes);\n\n    // Convert the signature object to Uint8Array.\n    const signature = signatureObject.toCompactRawBytes();\n\n    return signature;\n  }\n\n  /**\n   * Validates a given private key to ensure its compliance with the secp256k1 curve standards.\n   *\n   * @remarks\n   * This method checks whether a provided private key is a valid 32-byte number and falls within\n   * the range defined by the secp256k1 curve's order. It is essential for ensuring the private\n   * key's mathematical correctness in the context of secp256k1-based cryptographic operations.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key\n   * const isValid = await Secp256k1.validatePrivateKey({ privateKeyBytes });\n   * console.log(isValid); // true or false based on the key's validity\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.privateKeyBytes - The private key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the private key is valid.\n   */\n  public static async validatePrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    return secp256k1.utils.isValidPrivateKey(privateKeyBytes);\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the secp256k1 curve.\n   *\n   * @remarks\n   * This method checks if the provided public key represents a valid point on the secp256k1 curve.\n   * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity\n   * against the curve's parameters. A valid point must lie on the curve and meet specific\n   * mathematical criteria defined by the curve's equation.\n   *\n   * It's important to note that this method does not verify the key's ownership or whether it has\n   * been compromised; it solely focuses on the key's adherence to the curve's mathematical\n   * principles.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the secp256k1 curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating the public key's validity on\n   *          the secp256k1 curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n      // Decode Weierstrass points from key bytes.\n      const point = secp256k1.ProjectivePoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Short Weierstrass curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC6979-compliant ECDSA signature against given data and a secp256k1 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure that it was generated by the holder of the\n   * corresponding private key and that the signed data has not been altered. The signature\n   * verification is performed using the ECDSA (Elliptic Curve Digital Signature Algorithm) as\n   * specified in RFC6979. The data to be verified is first hashed using the SHA-256 algorithm, and\n   * this hash is then used along with the public key to verify the signature.\n   *\n   * The method returns a boolean value indicating whether the signature is valid. A valid signature\n   * proves that the signed data was indeed signed by the owner of the private key corresponding to\n   * the provided public key and that the data has not been tampered with since it was signed.\n   *\n   * Note: The verification process does not consider the malleability of low-s signatures, which\n   * may be relevant in certain contexts, such as Bitcoin transactions.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isSignatureValid = await Secp256k1.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * console.log(isSignatureValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key used for verification, represented in JWK format.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    /** Perform the verification of the signature.\n     * This verify operation has the malleability check disabled. Guaranteed support\n     * for low-s signatures across languages is unlikely especially in the context\n     * of SSI. Notable Cloud KMS providers do not natively support it either. It is\n     * also worth noting that low-s signatures are a requirement for Bitcoin. */\n    const isValid = secp256k1.verify(signature, digest, publicKeyBytes, { lowS: false });\n\n    return isValid;\n  }\n\n  /**\n   * Returns the elliptic curve point (x and y coordinates) for a given secp256k1 key.\n   *\n   * @remarks\n   * This method extracts the elliptic curve point from a given secp256k1 key, whether\n   * it's a private or a public key. For a private key, the method first computes the\n   * corresponding public key and then extracts the x and y coordinates. For a public key,\n   * it directly returns these coordinates. The coordinates are represented as Uint8Array.\n   *\n   * The x and y coordinates represent the key's position on the elliptic curve and can be\n   * used in various cryptographic operations, such as digital signatures or key agreement\n   * protocols.\n   *\n   * @example\n   * ```ts\n   * // For a private key\n   * const privateKey = new Uint8Array([...]); // A 32-byte private key\n   * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256k1.getCurvePoint({ keyBytes: privateKey });\n   *\n   * // For a public key\n   * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key\n   * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256k1.getCurvePoint({ keyBytes: publicKey });\n   * ```\n   *\n   * @param params - The parameters for the curve point decoding operation.\n   * @param params.keyBytes - The key for which to get the elliptic curve point.\n   *                          Can be either a private key or a public key.\n   *                          The key should be passed as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to an object with properties 'x' and 'y',\n   *          each being a Uint8Array representing the x and y coordinates of the key point on the\n   *          elliptic curve.\n   */\n  private static async getCurvePoint({ keyBytes }: {\n    keyBytes: Uint8Array;\n  }): Promise<AffinePoint<Uint8Array>> {\n    // If key is a private key, first compute the public key.\n    if (keyBytes.byteLength === 32) {\n      keyBytes = secp256k1.getPublicKey(keyBytes);\n    }\n\n    // Decode Weierstrass affine point from key bytes.\n    const point = secp256k1.ProjectivePoint.fromHex(keyBytes);\n\n    // Get x- and y-coordinate values and convert to Uint8Array.\n    const x = numberToBytesBE(point.x, 32);\n    const y = numberToBytesBE(point.y, 32);\n\n    return { x, y };\n  }\n}", "import type { AffinePoint } from '@noble/curves/abstract/weierstrass';\n\nimport { Convert } from '@web5/common';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { secp256r1 } from '@noble/curves/p256';\nimport { numberToBytesBE } from '@noble/curves/abstract/utils';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Secp256r1` class provides a comprehensive suite of utilities for working with\n * the secp256r1 (aka P-256) elliptic curve, commonly used in blockchain and cryptographic\n * applications. This class includes methods for key generation, conversion, signing, verification,\n * and Elliptic Curve Diffie-Hellman (ECDH) key agreement.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * adheres to RFC6979 for ECDSA signing and verification and RFC6090 for ECDH.\n *\n * Key Features:\n * - Key Generation: Generate secp256r1 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n * - ECDSA Signing and Verification: Sign data and verify signatures with secp256r1 keys.\n * - Key Validation: Validate the mathematical correctness of secp256r1 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Secp256r1.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Secp256r1.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Secp256r1.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await Secp256r1.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // ECDSA Signing\n * const signature = await Secp256r1.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // ECDSA Signature Verification\n * const isValid = await Secp256r1.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey });\n * const compressedPublicKey = await Secp256r1.compressPublicKey({ publicKeyBytes });\n * const uncompressedPublicKey = await Secp256r1.decompressPublicKey({ publicKeyBytes });\n *\n * // Key Validation\n * const isPrivateKeyValid = await Secp256r1.validatePrivateKey({ privateKeyBytes });\n * const isPublicKeyValid = await Secp256r1.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Secp256r1 {\n/**\n   * Adjusts an ECDSA signature to a normalized, low-S form.\n   *\n   * @remarks\n   * All ECDSA signatures, regardless of the curve, consist of two components, `r` and `s`, both of\n   * which are integers. The curve's order (the total number of points on the curve) is denoted by\n   * `n`. In a valid ECDSA signature, both `r` and `s` must be in the range [1, n-1]. However, due\n   * to the mathematical properties of ECDSA, if `(r, s)` is a valid signature, then `(r, n - s)` is\n   * also a valid signature for the same message and public key. In other words, for every\n   * signature, there's a \"mirror\" signature that's equally valid. For these elliptic curves:\n   *\n   * - Low S Signature: A signature where the `s` component is in the lower half of the range,\n   *                    specifically less than or equal to `n/2`.\n   *\n   * - High S Signature: This is where the `s` component is in the upper half of the range, greater\n   *                     than `n/2`.\n   *\n   * The practical implication is that a third-party can forge a second valid signature for the same\n   * message by negating the `s` component of the original signature, without any knowledge of the\n   * private key. This is known as a \"signature malleability\" attack.\n   *\n   * This type of forgery is not a problem in all systems, but it can be an issue in systems that\n   * rely on digital signature uniqueness to ensure transaction integrity. For example, in Bitcoin,\n   * transaction malleability is an issue because it allows for the modification of transaction\n   * identifiers (and potentially, transactions themselves) after they're signed but before they're\n   * confirmed in a block. By enforcing low `s` values, the Bitcoin network reduces the likelihood of\n   * this occurring, making the system more secure and predictable.\n   *\n   * For this reason, it's common practice to normalize ECDSA signatures to a low-S form. This\n   * form is considered standard and preferable in some systems and is known as the \"normalized\"\n   * form of the signature.\n   *\n   * This method takes a signature, and if it's high-S, returns the normalized low-S form. If the\n   * signature is already low-S, it's returned unmodified. It's important to note that this\n   * method does not change the validity of the signature but makes it compliant with systems that\n   * enforce low-S signatures.\n   *\n   * @example\n   * ```ts\n   * const signature = new Uint8Array([...]); // Your ECDSA signature\n   * const adjustedSignature = await Secp256r1.adjustSignatureToLowS({ signature });\n   * // Now 'adjustedSignature' is in the low-S form.\n   * ```\n   *\n   * @param params - The parameters for the signature adjustment.\n   * @param params.signature - The ECDSA signature as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the adjusted signature in low-S form as a `Uint8Array`.\n   */\n  public static async adjustSignatureToLowS({ signature }: {\n    signature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the signature to a `Secp256r1.Signature` object.\n    const signatureObject = secp256r1.Signature.fromCompact(signature);\n\n    if (signatureObject.hasHighS()) {\n      // Adjust the signature to low-S format if it's high-S.\n      const adjustedSignatureObject = signatureObject.normalizeS();\n\n      // Convert the adjusted signature object back to a byte array.\n      const adjustedSignature = adjustedSignatureObject.toCompactRawBytes();\n\n      return adjustedSignature;\n\n    } else {\n      // Return the unmodified signature if it is already in low-S format.\n      return signature;\n    }\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a private key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object. The conversion involves extracting the\n   * elliptic curve point (x and y coordinates) from the private key and encoding\n   * them into base64url format, alongside other JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve points (x and y coordinates) for the provided private key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key in a byte array (Uint8Array) format and\n   * transforms it to a JWK object. It involves decoding the elliptic curve point\n   * (x and y coordinates) from the raw public key bytes and encoding them into\n   * base64url format, along with setting appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `x`: The x-coordinate of the public key point, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Get the elliptic curve point (x and y coordinates) for the provided public key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: publicKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a public key to its compressed form.\n   *\n   * @remarks\n   * This method takes a public key represented as a byte array and compresses it. Public key\n   * compression is a process that reduces the size of the public key by removing the y-coordinate,\n   * making it more efficient for storage and transmission. The compressed key retains the same\n   * level of security as the uncompressed key.\n   *\n   * @example\n   * ```ts\n   * const uncompressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual uncompressed public key bytes\n   * const compressedPublicKey = await Secp256r1.compressPublicKey({\n   *   publicKeyBytes: uncompressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key compression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the compressed public key as a Uint8Array.\n   */\n  public static async compressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the compressed form of the public key.\n    return point.toRawBytes(true);\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The derivation process involves converting the private key to a raw\n   * byte array, then computing the elliptic curve point (x and y coordinates) from this private\n   * key. These coordinates are then encoded into base64url format to construct the public key in\n   * JWK format.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the secp256r1 elliptic curve standards. This method is useful in cryptographic\n   * operations where a public key is needed for operations like signature verification, but only\n   * the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const publicKey = await Secp256r1.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Secp256r1.privateKeyToBytes({ privateKey: key });\n\n    // Get the elliptic curve point (x and y coordinates) for the provided private key.\n    const point = await Secp256r1.getCurvePoint({ keyBytes: privateKeyBytes });\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'EC',\n      crv : 'P-256',\n      x   : Convert.uint8Array(point.x).toBase64Url(),\n      y   : Convert.uint8Array(point.y).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an ASN.1 DER encoded ECDSA signature to a compact R+S format.\n   *\n   * @remarks\n   * This method is used for converting an ECDSA signature from the ASN.1 DER encoding to the more\n   * compact R+S format. This conversion is often required when dealing with ECDSA signatures in\n   * certain cryptographic standards such as JWS (JSON Web Signature).\n   *\n   * The method decodes the DER-encoded signature, extracts the R and S values, and concatenates\n   * them into a single byte array. This process involves handling the ASN.1 structure to correctly\n   * parse the R and S values, considering padding and integer encoding specifics of DER.\n   *\n   * @example\n   * ```ts\n   * const derSignature = new Uint8Array([...]); // Replace with your DER-encoded signature\n   * const signature = await Secp256r1.convertDerToCompactSignature({ derSignature });\n   * ```\n   *\n   * @param params - The parameters for the signature conversion.\n   * @param params.derSignature - The signature in ASN.1 DER format as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the signature in compact R+S format as a `Uint8Array`.\n   */\n  public static async convertDerToCompactSignature({ derSignature }: {\n    derSignature: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Convert the DER-encoded signature into a `Secp256r1.Signature` object.\n    // This involves parsing the ASN.1 DER structure to extract the R and S components.\n    const signatureObject = secp256r1.Signature.fromDER(derSignature);\n\n    // Convert the signature object into compact R+S format, which concatenates the R and S values\n    // into a single byte array.\n    const compactSignature = signatureObject.toCompactRawBytes();\n\n    return  compactSignature;\n  }\n\n  /**\n   * Converts a public key to its uncompressed form.\n   *\n   * @remarks\n   * This method takes a compressed public key represented as a byte array and decompresses it.\n   * Public key decompression involves reconstructing the y-coordinate from the x-coordinate,\n   * resulting in the full public key. This method is used when the uncompressed key format is\n   * required for certain cryptographic operations or interoperability.\n   *\n   * @example\n   * ```ts\n   * const compressedPublicKeyBytes = new Uint8Array([...]); // Replace with actual compressed public key bytes\n   * const decompressedPublicKey = await Secp256r1.decompressPublicKey({\n   *   publicKeyBytes: compressedPublicKeyBytes\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key decompression.\n   * @param params.publicKeyBytes - The public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the uncompressed public key as a Uint8Array.\n   */\n  public static async decompressPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Uint8Array> {\n    // Decode Weierstrass points from the public key byte array.\n    const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n    // Return the uncompressed form of the public key.\n    return point.toRawBytes(false);\n  }\n\n  /**\n   * Generates a secp256r1 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the secp256r1\n   * elliptic curve. The key is generated using cryptographically secure random\n   * number generation to ensure its uniqueness and security. The resulting\n   * private key adheres to the JWK format, specifically tailored for secp256r1,\n   * making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The private key generated by this method includes the following components:\n   * - `kty`: Key Type, set to 'EC' for Elliptic Curve.\n   * - `crv`: Curve Name, set to 'P-256'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The x-coordinate of the public key point, derived from the private key, base64url-encoded.\n   * - `y`: The y-coordinate of the public key point, derived from the private key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in signin and key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Secp256r1.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = secp256r1.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from a secp256r1 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const publicKey = await Secp256r1.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    // Verify the provided JWK represents an elliptic curve (EC) secp256r1 private key.\n    if (!(isEcPrivateJwk(key) && key.crv === 'P-256')) {\n      throw new Error(`Secp256r1: The provided key is not a 'P-256' private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a private key in JWK format and extracts its raw byte representation.\n   * It specifically focuses on the 'd' parameter of the JWK, which represents the private\n   * key component in base64url encoding. The method decodes this value into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC P-256 private key.\n    if (!isEcPrivateJwk(privateKey)) {\n      throw new Error(`Secp256r1: The provided key is not a valid EC private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'x' and 'y' parameters of the JWK\n   * (which represent the x and y coordinates of the elliptic curve point, respectively)\n   * from base64url format into a byte array. The method then concatenates these values,\n   * along with a prefix indicating the key format, to form the full public key.\n   *\n   * This function is particularly useful for use cases where the public key is needed\n   * in its raw byte format, such as for certain cryptographic operations or when\n   * interfacing with systems that require raw key formats.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // A Jwk public key object\n   * const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid EC P-256 public key, which must have a 'y' value.\n    if (!(isEcPublicJwk(publicKey) && publicKey.y)) {\n      throw new Error(`Secp256r1: The provided key is not a valid EC public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const prefix = new Uint8Array([0x04]); // Designates an uncompressed key.\n    const x = Convert.base64Url(publicKey.x).toUint8Array();\n    const y = Convert.base64Url(publicKey.y).toUint8Array();\n\n    // Concatenate the prefix, x-coordinate, and y-coordinate as a single byte array.\n    const publicKeyBytes = new Uint8Array([...prefix, ...x, ...y]);\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256r1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256r1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk private key object for party A\n   * const publicKeyB = { ... }; // A Jwk public key object for party B\n   * const sharedSecret = await Secp256r1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`Secp256r1: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await Secp256r1.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await Secp256r1.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the compact representation shared secret between the public and private keys.\n    const sharedSecret = secp256r1.getSharedSecret(privateKeyABytes, publicKeyBBytes, true);\n\n    // Remove the leading byte that indicates the sign of the y-coordinate\n    // of the point on the elliptic curve.  See note above.\n    return sharedSecret.slice(1);\n  }\n\n  /**\n   * Generates an RFC6979-compliant ECDSA signature of given data using a secp256r1 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the ECDSA\n   * (Elliptic Curve Digital Signature Algorithm) signature algorithm, as defined in RFC6979.\n   * The data to be signed is first hashed using the SHA-256 algorithm, and this hash is then\n   * signed using the private key. The output is a digital signature in the form of a\n   * Uint8Array, which uniquely corresponds to both the data and the private key used for signing.\n   *\n   * This method is commonly used in cryptographic applications to ensure data integrity and\n   * authenticity. The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing a secp256r1 private key\n   * const signature = await Secp256r1.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ data, key }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Secp256r1.privateKeyToBytes({ privateKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    // Sign the provided data using the ECDSA algorithm.\n    // The `Secp256r1.sign` operation returns a signature object with { r, s, recovery } properties.\n    const signatureObject = secp256r1.sign(digest, privateKeyBytes);\n\n    // Convert the signature object to Uint8Array.\n    const signature = signatureObject.toCompactRawBytes();\n\n    return signature;\n  }\n\n  /**\n   * Validates a given private key to ensure its compliance with the secp256r1 curve standards.\n   *\n   * @remarks\n   * This method checks whether a provided private key is a valid 32-byte number and falls within\n   * the range defined by the secp256r1 curve's order. It is essential for ensuring the private\n   * key's mathematical correctness in the context of secp256r1-based cryptographic operations.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // A 32-byte private key\n   * const isValid = await Secp256r1.validatePrivateKey({ privateKeyBytes });\n   * console.log(isValid); // true or false based on the key's validity\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.privateKeyBytes - The private key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the private key is valid.\n   */\n  public static async validatePrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    return secp256r1.utils.isValidPrivateKey(privateKeyBytes);\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the secp256r1 curve.\n   *\n   * @remarks\n   * This method checks if the provided public key represents a valid point on the secp256r1 curve.\n   * It decodes the key's Weierstrass points (x and y coordinates) and verifies their validity\n   * against the curve's parameters. A valid point must lie on the curve and meet specific\n   * mathematical criteria defined by the curve's equation.\n   *\n   * It's important to note that this method does not verify the key's ownership or whether it has\n   * been compromised; it solely focuses on the key's adherence to the curve's mathematical\n   * principles.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Secp256r1.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the secp256r1 curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating the public key's validity on\n   *          the secp256r1 curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n      // Decode Weierstrass points from key bytes.\n      const point = secp256r1.ProjectivePoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Short Weierstrass curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC6979-compliant ECDSA signature against given data and a secp256r1 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure that it was generated by the holder of the\n   * corresponding private key and that the signed data has not been altered. The signature\n   * verification is performed using the ECDSA (Elliptic Curve Digital Signature Algorithm) as\n   * specified in RFC6979. The data to be verified is first hashed using the SHA-256 algorithm, and\n   * this hash is then used along with the public key to verify the signature.\n   *\n   * The method returns a boolean value indicating whether the signature is valid. A valid signature\n   * proves that the signed data was indeed signed by the owner of the private key corresponding to\n   * the provided public key and that the data has not been tampered with since it was signed.\n   *\n   * Note: The verification process does not consider the malleability of low-s signatures, which\n   * may be relevant in certain contexts, such as Bitcoin transactions.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isSignatureValid = await Secp256r1.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * console.log(isSignatureValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key used for verification, represented in JWK format.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey: key });\n\n    // Generate a digest of the data using the SHA-256 hash function.\n    const digest = sha256(data);\n\n    /** Perform the verification of the signature.\n     * This verify operation has the malleability check disabled. Guaranteed support\n     * for low-s signatures across languages is unlikely especially in the context\n     * of SSI. Notable Cloud KMS providers do not natively support it either. It is\n     * also worth noting that low-s signatures are a requirement for Bitcoin. */\n    const isValid = secp256r1.verify(signature, digest, publicKeyBytes, { lowS: false });\n\n    return isValid;\n  }\n\n  /**\n   * Returns the elliptic curve point (x and y coordinates) for a given secp256r1 key.\n   *\n   * @remarks\n   * This method extracts the elliptic curve point from a given secp256r1 key, whether\n   * it's a private or a public key. For a private key, the method first computes the\n   * corresponding public key and then extracts the x and y coordinates. For a public key,\n   * it directly returns these coordinates. The coordinates are represented as Uint8Array.\n   *\n   * The x and y coordinates represent the key's position on the elliptic curve and can be\n   * used in various cryptographic operations, such as digital signatures or key agreement\n   * protocols.\n   *\n   * @example\n   * ```ts\n   * // For a private key\n   * const privateKey = new Uint8Array([...]); // A 32-byte private key\n   * const { x: xFromPrivateKey, y: yFromPrivateKey } = await Secp256r1.getCurvePoint({ keyBytes: privateKey });\n   *\n   * // For a public key\n   * const publicKey = new Uint8Array([...]); // A 33-byte or 65-byte public key\n   * const { x: xFromPublicKey, y: yFromPublicKey } = await Secp256r1.getCurvePoint({ keyBytes: publicKey });\n   * ```\n   *\n   * @param params - The parameters for the curve point decoding operation.\n   * @param params.keyBytes - The key for which to get the elliptic curve point.\n   *                          Can be either a private key or a public key.\n   *                          The key should be passed as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to an object with properties 'x' and 'y',\n   *          each being a Uint8Array representing the x and y coordinates of the key point on the\n   *          elliptic curve.\n   */\n  private static async getCurvePoint({ keyBytes }: {\n    keyBytes: Uint8Array;\n  }): Promise<AffinePoint<Uint8Array>> {\n    // If key is a private key, first compute the public key.\n    if (keyBytes.byteLength === 32) {\n      keyBytes = secp256r1.getPublicKey(keyBytes);\n    }\n\n    // Decode Weierstrass affine point from key bytes.\n    const point = secp256r1.ProjectivePoint.fromHex(keyBytes);\n\n    // Get x- and y-coordinate values and convert to Uint8Array.\n    const x = numberToBytesBE(point.x, 32);\n    const y = numberToBytesBE(point.y, 32);\n\n    return { x, y };\n  }\n}\n\nexport { Secp256r1 as P256 };", "import type { Jwk } from '../jose/jwk.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AsymmetricKeyGenerator } from '../types/key-generator.js';\nimport type { ComputePublicKeyParams, GenerateKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { Secp256k1 } from '../primitives/secp256k1.js';\nimport { Secp256r1 } from '../primitives/secp256r1.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { isEcPrivateJwk, isEcPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `EcdsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the ECDSA algorithm.\n */\nexport interface EcdsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"ES256\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   * - `\"ES256K\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256k1\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256r1\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   */\n  algorithm: 'ES256' | 'ES256K' | 'secp256k1' | 'secp256r1';\n}\n\n/**\n * The `EcdsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Elliptic Curve Digital Signature Algorithm (ECDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EcdsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EcdsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             Signer<SignParams, VerifyParams> {\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.computePublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.computePublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = await ecdsa.generateKey({ algorithm: 'ES256K' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    EcdsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'ES256K':\n      case 'secp256k1': {\n        const privateKey = await Secp256k1.generateKey();\n        privateKey.alg = 'ES256K';\n        return privateKey;\n      }\n\n      case 'ES256':\n      case 'secp256r1': {\n        const privateKey = await Secp256r1.generateKey();\n        privateKey.alg = 'ES256';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an ECDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.getPublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.getPublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an ECDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await ecdsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.sign({ key, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.sign({ key, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an ECDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await ecdsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isEcPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) public key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.verify({ key, signature, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n}", "import { Convert } from '@web5/common';\nimport { ed25519, edwardsToMontgomeryPub, edwardsToMontgomeryPriv, x25519 } from '@noble/curves/ed25519';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams, SignParams, VerifyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `Ed25519` class provides a comprehensive suite of utilities for working with the Ed25519\n * elliptic curve, widely used in modern cryptographic applications. This class includes methods for\n * key generation, conversion, signing, verification, and public key derivation.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats. It\n * follows the guidelines and specifications outlined in RFC8032 for EdDSA (Edwards-curve Digital\n * Signature Algorithm) operations.\n *\n * Key Features:\n * - Key Generation: Generate Ed25519 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - Signing and Verification: Sign data and verify signatures with Ed25519 keys.\n * - Key Validation: Validate the mathematical correctness of Ed25519 keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments, and use `Uint8Array` for binary data handling.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await Ed25519.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await Ed25519.computePublicKey({ key: privateKey });\n * console.log(publicKey === await Ed25519.getPublicKey({ key: privateKey })); // Output: true\n *\n * // EdDSA Signing\n * const signature = await Ed25519.sign({\n *   key: privateKey,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // EdDSA Signature Verification\n * const isValid = await Ed25519.verify({\n *   key: publicKey,\n *   signature: signature,\n *   data: new TextEncoder().encode('Message')\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n * const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n *\n * // Key Validation\n * const isPublicKeyValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n * ```\n */\nexport class Ed25519 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a private key as a byte array (Uint8Array) for the Curve25519 curve in\n   * Twisted Edwards form and transforms it into a JWK object. The process involves first deriving\n   * the public key from the private key, then encoding both the private and public keys into\n   * base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'Ed25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The computed public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await Ed25519.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Derive the public key from the private key.\n    const publicKeyBytes  = ed25519.getPublicKey(privateKeyBytes);\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      crv : 'Ed25519',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'OKP',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key as a byte array (Uint8Array) for the Curve25519 curve in\n   * Twisted Edwards form and transforms it into a JWK object. The process involves encoding the\n   * public key bytes into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `x`: The public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await X25519.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a `Uint8Array`.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'Ed25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Derives the public key in JWK format from a given Ed25519 private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format.  The derivation process involves converting the private key to a\n   * raw byte array and then computing the corresponding public key on the Curve25519 curve in\n   * Twisted Edwards form. The public key is then encoded into base64url format to construct\n   * a JWK representation.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const publicKey = await Ed25519.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the computed public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await Ed25519.privateKeyToBytes({ privateKey: key });\n\n    // Derive the public key from the private key.\n    const publicKeyBytes  = ed25519.getPublicKey(privateKeyBytes);\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'Ed25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts an Ed25519 private key to its X25519 counterpart.\n   *\n   * @remarks\n   * This method enables the use of the same key pair for both digital signature (Ed25519)\n   * and key exchange (X25519) operations. It takes an Ed25519 private key and converts it\n   * to the corresponding X25519 format, facilitating interoperability between signing\n   * and encryption protocols.\n   *\n   * @example\n   * ```ts\n   * const ed25519PrivateKey = { ... }; // An Ed25519 private key in JWK format\n   * const x25519PrivateKey = await Ed25519.convertPrivateKeyToX25519({\n   *   privateKey: ed25519PrivateKey\n   * });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The Ed25519 private key to convert, in JWK format.\n   *\n   * @returns A Promise that resolves to the X25519 private key in JWK format.\n   */\n  public static async convertPrivateKeyToX25519({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Jwk> {\n    // Convert the provided Ed25519 private key to bytes.\n    const ed25519PrivateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n\n    // Convert the Ed25519 private key to an X25519 private key.\n    const x25519PrivateKeyBytes = edwardsToMontgomeryPriv(ed25519PrivateKeyBytes);\n\n    // Derive the X25519 public key from the X25519 private key.\n    const x25519PublicKeyBytes = x25519.getPublicKey(x25519PrivateKeyBytes);\n\n    // Construct the X25519 private key in JWK format.\n    const x25519PrivateKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      d   : Convert.uint8Array(x25519PrivateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(x25519PublicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    x25519PrivateKey.kid = await computeJwkThumbprint({ jwk: x25519PrivateKey });\n\n    return x25519PrivateKey;\n  }\n\n  /**\n   * Converts an Ed25519 public key to its X25519 counterpart.\n   *\n   * @remarks\n   * This method enables the use of the same key pair for both digital signature (Ed25519)\n   * and key exchange (X25519) operations. It takes an Ed25519 public key and converts it\n   * to the corresponding X25519 format, facilitating interoperability between signing\n   * and encryption protocols.\n   *\n   * @example\n   * ```ts\n   * const ed25519PublicKey = { ... }; // An Ed25519 public key in JWK format\n   * const x25519PublicKey = await Ed25519.convertPublicKeyToX25519({\n   *   publicKey: ed25519PublicKey\n   * });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The Ed25519 public key to convert, in JWK format.\n   *\n   * @returns A Promise that resolves to the X25519 public key in JWK format.\n   */\n  public static async convertPublicKeyToX25519({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const ed25519PublicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n\n    // Verify Edwards public key is valid.\n    const isValid = await Ed25519.validatePublicKey({ publicKeyBytes: ed25519PublicKeyBytes });\n    if (!isValid) {\n      throw new Error('Ed25519: Invalid public key.');\n    }\n\n    // Convert the Ed25519 public key to an X25519 private key.\n    const x25519PublicKeyBytes = edwardsToMontgomeryPub(ed25519PublicKeyBytes);\n\n    // Construct the X25519 private key in JWK format.\n    const x25519PublicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(x25519PublicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    x25519PublicKey.kid = await computeJwkThumbprint({ jwk: x25519PublicKey });\n\n    return x25519PublicKey;\n  }\n\n  /**\n   * Generates an Ed25519 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the Curve25519 elliptic curve in\n   * Twisted Edwards form. The key generation process involves using cryptographically secure\n   * random number generation to ensure the uniqueness and security of the key. The resulting\n   * private key adheres to the JWK format making it compatible with common cryptographic\n   * standards and easy to use in various cryptographic processes.\n   *\n   * The generated private key in JWK format includes the following components:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'Ed25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await Ed25519.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = ed25519.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await Ed25519.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an Ed25519 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 100 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const publicKey = await Ed25519.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n  // Verify the provided JWK represents an octet key pair (OKP) Ed25519 private key.\n    if (!(isOkpPrivateJwk(key) && key.crv === 'Ed25519')) {\n      throw new Error(`Ed25519: The provided key is not an Ed25519 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a private key in JWK format and extracts its raw byte representation.\n   *\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'd' parameter of the JWK\n   * from base64url format into a byte array.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An Ed25519 private key in JWK format\n   * const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP private key.\n    if (!isOkpPrivateJwk(privateKey)) {\n      throw new Error(`Ed25519: The provided key is not a valid OKP private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary form.\n   * The conversion process involves decoding the 'x' parameter of the JWK (which represent the\n   * x coordinate of the elliptic curve point) from base64url format into a byte array.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // An Ed25519 public key in JWK format\n   * const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP public key.\n    if (!isOkpPublicJwk(publicKey)) {\n      throw new Error(`Ed25519: The provided key is not a valid OKP public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const publicKeyBytes = Convert.base64Url(publicKey.x).toUint8Array();\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Generates an RFC8032-compliant EdDSA signature of given data using an Ed25519 private key.\n   *\n   * @remarks\n   * This method signs the provided data with a specified private key using the EdDSA\n   * (Edwards-curve Digital Signature Algorithm) as defined in RFC8032. It\n   * involves converting the private key from JWK format to a byte array and then employing\n   * the Ed25519 algorithm to sign the data. The output is a digital signature in the form\n   * of a Uint8Array, uniquely corresponding to both the data and the private key used for\n   * signing.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data to be signed\n   * const privateKey = { ... }; // A Jwk object representing an Ed25519 private key\n   * const signature = await Ed25519.sign({ key: privateKey, data });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the signature as a Uint8Array.\n   */\n  public static async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Convert the private key from JWK format to bytes.\n    const privateKeyBytes = await Ed25519.privateKeyToBytes({ privateKey: key });\n\n    // Sign the provided data using the EdDSA algorithm.\n    const signature = ed25519.sign(data, privateKeyBytes);\n\n    return signature;\n  }\n\n  /**\n   * Validates a given public key to confirm its mathematical correctness on the Edwards curve.\n   *\n   * @remarks\n   * This method decodes the Edwards points from the key bytes and asserts their validity on the\n   * Curve25519 curve in Twisted Edwards form. If the points are not valid, the method returns\n   * false. If the points are valid, the method returns true.\n   *\n   * Note that this validation strictly pertains to the key's format and numerical validity; it does\n   * not assess whether the key corresponds to a known entity or its security status (e.g., whether\n   * it has been compromised).\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // A public key in byte format\n   * const isValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n   * console.log(isValid); // true if the key is valid on the Edwards curve, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the public key validation.\n   * @param params.publicKeyBytes - The public key to validate, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the key\n   *          corresponds to a valid point on the Edwards curve.\n   */\n  public static async validatePublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<boolean> {\n    try {\n    // Decode Edwards points from key bytes.\n      const point = ed25519.ExtendedPoint.fromHex(publicKeyBytes);\n\n      // Check if points are on the Twisted Edwards curve.\n      point.assertValidity();\n\n    } catch(error: any) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Verifies an RFC8032-compliant EdDSA signature against given data using an Ed25519 public key.\n   *\n   * @remarks\n   * This method validates a digital signature to ensure its authenticity and integrity.\n   * It uses the EdDSA (Edwards-curve Digital Signature Algorithm) as specified in RFC8032.\n   * The verification process involves converting the public key from JWK format to a raw\n   * byte array and using the Ed25519 algorithm to validate the signature against the provided data.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage'); // Data that was signed\n   * const publicKey = { ... }; // A Jwk object representing an Ed25519 public key\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const isValid = await Ed25519.verify({ key: publicKey, signature, data });\n   * console.log(isValid); // true if the signature is valid, false otherwise\n   * ```\n   *\n   * @param params - The parameters for the signature verification.\n   * @param params.key - The public key in JWK format used for verification.\n   * @param params.signature - The signature to verify, represented as a Uint8Array.\n   * @param params.data - The data that was signed, represented as a Uint8Array.\n   *\n   * @returns A Promise that resolves to a boolean indicating whether the signature is valid.\n   */\n  public static async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Convert the public key from JWK format to bytes.\n    const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: key });\n\n    // Perform the verification of the signature.\n    const isValid = ed25519.verify(signature, data, publicKeyBytes);\n\n    return isValid;\n  }\n}", "import type { Jwk } from '../jose/jwk.js';\nimport type { Signer } from '../types/signer.js';\nimport type { AsymmetricKeyGenerator } from '../types/key-generator.js';\nimport type {\n  SignParams,\n  VerifyParams,\n  GenerateKeyParams,\n  GetPublicKeyParams,\n  ComputePublicKeyParams,\n} from '../types/params-direct.js';\n\nimport { Ed25519 } from '../primitives/ed25519.js';\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `EdDsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the EdDSA algorithm.\n */\nexport interface EdDsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"Ed25519\"`: EdDSA using the Ed25519 curve.\n   */\n  algorithm: 'Ed25519';\n}\n\n/**\n * The `EdDsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Edwards-curve Digital Signature Algorithm (EdDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EdDsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EdDsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             Signer<SignParams, VerifyParams> {\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.computePublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = await eddsa.generateKey({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  async generateKey({ algorithm }:\n    EdDsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'Ed25519': {\n        const privateKey = await Ed25519.generateKey();\n        privateKey.alg = 'EdDSA';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an EdDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 100 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.getPublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an EdDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await eddsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.sign({ key, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an EdDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await eddsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isOkpPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) public key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n}", "import { KeyValueStore, MemoryStore } from '@web5/common';\n\nimport type { Jwk } from './jose/jwk.js';\nimport type { Hasher } from './types/hasher.js';\nimport type { Signer } from './types/signer.js';\nimport type { CryptoApi } from './types/crypto-api.js';\nimport type { KeyIdentifier } from './types/identifier.js';\nimport type { KeyImporterExporter } from './types/key-io.js';\nimport type { KeyGenerator, AsymmetricKeyGenerator } from './types/key-generator.js';\nimport type { GetPublicKeyParams, SignParams, VerifyParams } from './types/params-direct.js';\nimport type {\n  KmsSignParams,\n  KmsDigestParams,\n  KmsVerifyParams,\n  KmsExportKeyParams,\n  KmsGetKeyUriParams,\n  KmsImportKeyParams,\n  KmsGenerateKeyParams,\n  KmsGetPublicKeyParams,\n} from './types/params-kms.js';\n\nimport { Sha2Algorithm } from './algorithms/sha-2.js';\nimport { EcdsaAlgorithm } from './algorithms/ecdsa.js';\nimport { EdDsaAlgorithm } from './algorithms/eddsa.js';\nimport { CryptoAlgorithm } from './algorithms/crypto-algorithm.js';\nimport { computeJwkThumbprint, isPrivateJwk, KEY_URI_PREFIX_JWK } from './jose/jwk.js';\n\n/**\n * `supportedAlgorithms` is an object mapping algorithm names to their respective implementations\n * Each entry in this map specifies the algorithm name and its associated properties, including the\n * implementation class and any relevant names or identifiers for the algorithm. This structure\n * allows for easy retrieval and instantiation of algorithm implementations based on the algorithm\n * name or key specification. It facilitates the support of multiple algorithms within the\n * `LocalKeyManager` class.\n */\nconst supportedAlgorithms = {\n  'Ed25519': {\n    implementation : EdDsaAlgorithm,\n    names          : ['Ed25519'],\n  },\n  'secp256k1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256K', 'secp256k1'],\n  },\n  'secp256r1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256', 'secp256r1'],\n  },\n  'SHA-256': {\n    implementation : Sha2Algorithm,\n    names          : ['SHA-256']\n  }\n} satisfies {\n  [key: string]: {\n    implementation : typeof CryptoAlgorithm;\n    names          : string[];\n  }\n};\n\n/* Helper type for `supportedAlgorithms`. */\ntype SupportedAlgorithm = keyof typeof supportedAlgorithms;\n\n/* Helper type for `supportedAlgorithms` implementations. */\ntype AlgorithmConstructor = typeof supportedAlgorithms[SupportedAlgorithm]['implementation'];\n\n/**\n * The `LocalKeyManagerParams` interface specifies the parameters for initializing an instance of\n * `LocalKeyManager`. It allows the optional inclusion of a `KeyValueStore` instance for key\n * management. If not provided, a default `MemoryStore` instance will be used for storing keys in\n * memory. Note that the `MemoryStore` is not persistent and will be cleared when the application\n * exits.\n */\nexport type LocalKeyManagerParams = {\n  /**\n   * An optional property to specify a custom `KeyValueStore` instance for key management. If not\n   * provided, {@link LocalKeyManager | `LocalKeyManager`} uses a default `MemoryStore` instance.\n   * This store is responsible for managing cryptographic keys, allowing them to be retrieved,\n   * stored, and managed during cryptographic operations.\n   */\n  keyStore?: KeyValueStore<KeyIdentifier, Jwk>;\n};\n\n/**\n * The `LocalKeyManagerDigestParams` interface defines the algorithm-specific parameters that should\n * be passed into the {@link LocalKeyManager.digest | `LocalKeyManager.digest()`} method.\n */\nexport interface LocalKeyManagerDigestParams extends KmsDigestParams {\n  /**\n   * A string defining the name of hash function to use. The value must be one of the following:\n   * - `\"SHA-256\"`: Generates a 256-bit digest.\n   */\n  algorithm: 'SHA-256';\n}\n\n/**\n * The `LocalKeyManagerGenerateKeyParams` interface defines the algorithm-specific parameters that\n * should be passed into the {@link LocalKeyManager.generateKey | `LocalKeyManager.generateKey()`}\n * method when generating a key in the local KMS.\n */\nexport interface LocalKeyManagerGenerateKeyParams extends KmsGenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"Ed25519\"`\n   * - `\"secp256k1\"`\n   */\n  algorithm: 'Ed25519' | 'secp256k1' | 'secp256r1';\n}\n\nexport class LocalKeyManager implements\n    CryptoApi,\n    KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams> {\n\n  /**\n   * A private map that stores instances of cryptographic algorithm implementations. Each key in\n   * this map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class\n   * that implements a specific cryptographic algorithm. This map is used to cache and reuse\n   * instances for performance optimization, ensuring that each algorithm is instantiated only once.\n   */\n  private _algorithmInstances: Map<AlgorithmConstructor, InstanceType<typeof CryptoAlgorithm>> = new Map();\n\n  /**\n   * The `_keyStore` private variable in `LocalKeyManager` is a `KeyValueStore` instance used for\n   * storing and managing cryptographic keys. It allows the `LocalKeyManager` class to save,\n   * retrieve, and handle keys efficiently within the local Key Management System (KMS) context.\n   * This variable can be configured to use different storage backends, like in-memory storage or\n   * persistent storage, providing flexibility in key management according to the application's\n   * requirements.\n   */\n  private _keyStore: KeyValueStore<KeyIdentifier, Jwk>;\n\n  constructor(params?: LocalKeyManagerParams) {\n    this._keyStore = params?.keyStore ?? new MemoryStore<KeyIdentifier, Jwk>();\n  }\n\n  /**\n   * Generates a hash digest of the provided data.\n   *\n   * @remarks\n   * A digest is the output of the hash function. It's a fixed-size string of bytes\n   * that uniquely represents the data input into the hash function. The digest is often used for\n   * data integrity checks, as any alteration in the input data results in a significantly\n   * different digest.\n   *\n   * It takes the algorithm identifier of the hash function and data to digest as input and returns\n   * the digest of the data.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const data = new Uint8Array([...]);\n   * const digest = await keyManager.digest({ algorithm: 'SHA-256', data });\n   * ```\n   *\n   * @param params - The parameters for the digest operation.\n   * @param params.algorithm - The name of hash function to use.\n   * @param params.data - The data to digest.\n   *\n   * @returns A Promise which will be fulfilled with the hash digest.\n   */\n  public async digest({ algorithm, data }:\n    LocalKeyManagerDigestParams\n  ): Promise<Uint8Array> {\n    // Get the hash function implementation based on the specified `algorithm` parameter.\n    const hasher = this.getAlgorithm({ algorithm }) as Hasher<KmsDigestParams>;\n\n    // Compute the hash.\n    const hash = await hasher.digest({ algorithm, data });\n\n    return hash;\n  }\n\n  /**\n   * Exports a private key identified by the provided key URI from the local KMS.\n   *\n   * @remarks\n   * This method retrieves the key from the key store and returns it. It is primarily used\n   * for extracting keys for backup or transfer purposes.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const privateKey = await keyManager.exportKey({ keyUri });\n   * ```\n   *\n   * @param params - Parameters for exporting the key.\n   * @param params.keyUri - The key URI identifying the key to export.\n   *\n   * @returns A Promise resolving to the JWK representation of the exported key.\n   */\n  public async exportKey({ keyUri }:\n    KmsExportKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    return privateKey;\n  }\n\n  /**\n   * Generates a new cryptographic key in the local KMS with the specified algorithm and returns a\n   * unique key URI which can be used to reference the key in subsequent operations.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * console.log(keyUri); // Outputs the key URI\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation, defined in `SupportedAlgorithm`.\n   *\n   * @returns A Promise that resolves to the key URI, a unique identifier for the generated key.\n   */\n  public async generateKey({ algorithm }:\n    LocalKeyManagerGenerateKeyParams\n  ): Promise<KeyIdentifier> {\n    // Get the key generator implementation based on the specified `algorithm` parameter.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as KeyGenerator<LocalKeyManagerGenerateKeyParams, Jwk>;\n\n    // Generate the key.\n    const key = await keyGenerator.generateKey({ algorithm });\n\n    if (key?.kid === undefined) {\n      throw new Error('Generated key is missing a required property: kid');\n    }\n\n    // Construct the key URI.\n    const keyUri = `${KEY_URI_PREFIX_JWK}${key.kid}`;\n\n    // Store the key in the key store.\n    await this._keyStore.set(keyUri, key);\n\n    return keyUri;\n  }\n\n  /**\n   * Computes the Key URI for a given public JWK (JSON Web Key).\n   *\n   * @remarks\n   * This method generates a {@link https://datatracker.ietf.org/doc/html/rfc3986 | URI}\n   * (Uniform Resource Identifier) for the given JWK, which uniquely identifies the key across all\n   * `CryptoApi` implementations. The key URI is constructed by appending the\n   * {@link https://datatracker.ietf.org/doc/html/rfc7638 | JWK thumbprint} to the prefix\n   * `urn:jwk:`. The JWK thumbprint is deterministically computed from the JWK and is consistent\n   * regardless of property order or optional property inclusion in the JWK. This ensures that the\n   * same key material represented as a JWK will always yield the same thumbprint, and therefore,\n   * the same key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * const keyUriFromPublicKey = await keyManager.getKeyUri({ key: publicKey });\n   * console.log(keyUri === keyUriFromPublicKey); // Outputs `true`\n   * ```\n   *\n   * @param params - The parameters for getting the key URI.\n   * @param params.key - The JWK for which to compute the key URI.\n   *\n   * @returns A Promise that resolves to the key URI as a string.\n   */\n  public async getKeyUri({ key }:\n    KmsGetKeyUriParams\n  ): Promise<KeyIdentifier> {\n    // Compute the JWK thumbprint.\n    const jwkThumbprint = await computeJwkThumbprint({ jwk: key });\n\n    // Construct the key URI by appending the JWK thumbprint to the key URI prefix.\n    const keyUri = `${KEY_URI_PREFIX_JWK}${jwkThumbprint}`;\n\n    return keyUri;\n  }\n\n  /**\n   * Retrieves the public key associated with a previously generated private key, identified by\n   * the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key.\n   * @param params.keyUri - The key URI of the private key to retrieve the public key for.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ keyUri }:\n    KmsGetPublicKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the key generator based on the algorithm name.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator<LocalKeyManagerGenerateKeyParams, Jwk, GetPublicKeyParams>;\n\n    // Get the public key properties from the private JWK.\n    const publicKey = await keyGenerator.getPublicKey({ key: privateKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Imports a private key into the local KMS.\n   *\n   * @remarks\n   * This method stores the provided JWK in the key store, making it available for subsequent\n   * cryptographic operations. It is particularly useful for initializing the KMS with pre-existing\n   * keys or for restoring keys from backups.\n   *\n   * Note that, if defined, the `kid` (key ID) property of the JWK is used as the key URI for the\n   * imported key. If the `kid` property is not provided, the key URI is computed from the JWK\n   * thumbprint of the key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const privateKey = { ... } // A private key in JWK format\n   * const keyUri = await keyManager.importKey({ key: privateKey });\n   * ```\n   *\n   * @param params - Parameters for importing the key.\n   * @param params.key - The private key to import to in JWK format.\n   *\n   * @returns A Promise resolving to the key URI, uniquely identifying the imported key.\n   */\n  public async importKey({ key }:\n    KmsImportKeyParams\n  ): Promise<KeyIdentifier> {\n    if (!isPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be a private key in JWK format.');\n\n    // Make a deep copy of the key to avoid mutating the original.\n    const privateKey = structuredClone(key);\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    privateKey.kid ??= await computeJwkThumbprint({ jwk: privateKey });\n\n    // Compute the key URI for the key.\n    const keyUri = await this.getKeyUri({ key: privateKey });\n\n    // Store the key in the key store.\n    await this._keyStore.set(keyUri, privateKey);\n\n    return keyUri;\n  }\n\n  /**\n   * Signs the provided data using the private key identified by the provided key URI.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * private key identified by the provided key URI to sign the provided data. The signature can\n   * later be verified by parties with access to the corresponding public key, ensuring that the\n   * data has not been tampered with and was indeed signed by the holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.keyUri - The key URI of the private key to use for signing.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ keyUri, data }:\n    KmsSignParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Sign the data.\n    const signature = signer.sign({ data, key: privateKey });\n\n    return signature;\n  }\n\n  /**\n   * Verifies a digital signature associated the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * provided key to check the validity of a digital signature against the original data. It\n   * confirms whether the signature was created by the holder of the corresponding private key and\n   * that the data has not been tampered with.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * const isSignatureValid = await keyManager.verify({ keyUri, data, signature });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    KmsVerifyParams\n  ): Promise<boolean> {\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Verify the signature.\n    const isSignatureValid = signer.verify({ key, signature, data });\n\n    return isSignatureValid;\n  }\n\n  /**\n   * Retrieves an algorithm implementation instance based on the provided algorithm name.\n   *\n   * @remarks\n   * This method checks if the requested algorithm is supported and returns a cached instance\n   * if available. If an instance does not exist, it creates and caches a new one. This approach\n   * optimizes performance by reusing algorithm instances across cryptographic operations.\n   *\n   * @example\n   * ```ts\n   * const signer = this.getAlgorithm({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for retrieving the algorithm implementation.\n   * @param params.algorithm - The name of the algorithm to retrieve.\n   *\n   * @returns An instance of the requested algorithm implementation.\n   *\n   * @throws Error if the requested algorithm is not supported.\n   */\n  private getAlgorithm({ algorithm }: {\n    algorithm: SupportedAlgorithm;\n  }): InstanceType<typeof CryptoAlgorithm> {\n    // Check if algorithm is supported.\n    const AlgorithmImplementation = supportedAlgorithms[algorithm]?.['implementation'];\n    if (!AlgorithmImplementation) {\n      throw new Error(`Algorithm not supported: ${algorithm}`);\n    }\n\n    // Check if instance already exists for the `AlgorithmImplementation`.\n    if (!this._algorithmInstances.has(AlgorithmImplementation)) {\n    // If not, create a new instance and store it in the cache\n      this._algorithmInstances.set(AlgorithmImplementation, new AlgorithmImplementation());\n    }\n\n    // Return the cached instance\n    return this._algorithmInstances.get(AlgorithmImplementation)!;\n  }\n\n  /**\n   * Determines the name of the algorithm based on the key's properties.\n   *\n   * @remarks\n   * This method facilitates the identification of the correct algorithm for cryptographic\n   * operations based on the `alg` or `crv` properties of a {@link Jwk | JWK}.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // Public key in JWK format\n   * const algorithm = this.getAlgorithmName({ key: publicKey });\n   * ```\n   *\n   * @param params - The parameters for determining the algorithm name.\n   * @param params.key - A JWK containing the `alg` or `crv` properties.\n   *\n   * @returns The name of the algorithm associated with the key.\n   *\n   * @throws Error if the algorithm cannot be determined from the provided input.\n   */\n  private getAlgorithmName({ key }: {\n    key: { alg?: string, crv?: string };\n  }): SupportedAlgorithm {\n    const algProperty = key.alg;\n    const crvProperty = key.crv;\n\n    for (const algName in supportedAlgorithms) {\n      const algorithmInfo = supportedAlgorithms[algName as SupportedAlgorithm];\n      if (algProperty && algorithmInfo.names.includes(algProperty)) {\n        return algName as SupportedAlgorithm;\n      } else if (crvProperty && algorithmInfo.names.includes(crvProperty)) {\n        return algName as SupportedAlgorithm;\n      }\n    }\n\n    throw new Error(`Unable to determine algorithm based on provided input: alg=${algProperty}, crv=${crvProperty}`);\n  }\n\n  /**\n   * Retrieves a private key from the key store based on the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const privateKey = this.getPrivateKey({ keyUri: 'urn:jwk:...' });\n   * ```\n   *\n   * @param params - Parameters for retrieving the private key.\n   * @param params.keyUri - The key URI identifying the private key to retrieve.\n   *\n   * @returns A Promise resolving to the JWK representation of the private key.\n   *\n   * @throws Error if the key is not found in the key store.\n   */\n  private async getPrivateKey({ keyUri }: {\n    keyUri: KeyIdentifier;\n  }): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this._keyStore.get(keyUri);\n\n    if (!privateKey) {\n      throw new Error(`Key not found: ${keyUri}`);\n    }\n\n    return privateKey;\n  }\n}", "import type { Jwk } from './jose/jwk.js';\n\nimport { crypto } from '@noble/hashes/crypto';\nimport { randomBytes as nobleRandomBytes } from '@noble/hashes/utils';\n\n/**\n * A collection of cryptographic utility methods.\n */\nexport class CryptoUtils {\n\n  /**\n   * Determines the JOSE algorithm identifier of the digital signature algorithm based on the `alg` or\n   * `crv` property of a {@link Jwk | JWK}.\n   *\n   * If the `alg` property is present, its value takes precedence and is returned. Otherwise, the\n   * `crv` property is used to determine the algorithm.\n   *\n   * @memberof CryptoUtils\n   * @see {@link https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms | JOSE Algorithms}\n   * @see {@link https://datatracker.ietf.org/doc/draft-ietf-jose-fully-specified-algorithms/ | Fully-Specified Algorithms for JOSE and COSE}\n   *\n   * @example\n   * ```ts\n   * const publicKey: Jwk = {\n   *   \"kty\": \"OKP\",\n   *   \"crv\": \"Ed25519\",\n   *   \"x\": \"FEJG7OakZi500EydXxuE8uMc8uaAzEJkmQeG8khXANw\"\n   * }\n   * const algorithm = getJoseSignatureAlgorithmFromPublicKey(publicKey);\n   * console.log(algorithm); // Output: \"EdDSA\"\n   * ```\n   * @param publicKey - A JWK containing the `alg` and/or `crv` properties.\n   * @returns The name of the algorithm associated with the key.\n   * @throws Error if the algorithm cannot be determined from the provided input.\n   */\n  static getJoseSignatureAlgorithmFromPublicKey(publicKey: Jwk): string {\n    const curveToJoseAlgorithm: Record<string, string> = {\n      'Ed25519'   : 'EdDSA',\n      'P-256'     : 'ES256',\n      'P-384'     : 'ES384',\n      'P-521'     : 'ES512',\n      'secp256k1' : 'ES256K',\n    };\n\n    // If the key contains an `alg` property that matches a JOSE registered algorithm identifier,\n    // return its value.\n    if (publicKey.alg && Object.values(curveToJoseAlgorithm).includes(publicKey.alg)) {\n      return publicKey.alg;\n    }\n\n    // If the key contains a `crv` property, return the corresponding algorithm.\n    if (publicKey.crv && Object.keys(curveToJoseAlgorithm).includes(publicKey.crv)) {\n      return curveToJoseAlgorithm[publicKey.crv];\n    }\n\n    throw new Error(\n      `Unable to determine algorithm based on provided input: alg=${publicKey.alg}, crv=${publicKey.crv}. ` +\n      `Supported 'alg' values: ${Object.values(curveToJoseAlgorithm).join(', ')}. ` +\n      `Supported 'crv' values: ${Object.keys(curveToJoseAlgorithm).join(', ')}.`\n    );\n  }\n\n  /**\n   * Generates secure pseudorandom values of the specified length using\n   * `crypto.getRandomValues`, which defers to the operating system.\n   *\n   * @memberof CryptoUtils\n   * @remarks\n   * This function is a wrapper around `randomBytes` from the '@noble/hashes'\n   * package. It's designed to be cryptographically strong, suitable for\n   * generating initialization vectors, nonces, and other random values.\n   *\n   * @see {@link https://www.npmjs.com/package/@noble/hashes | @noble/hashes on NPM} for more\n   * information about the underlying implementation.\n   *\n   * @example\n   * ```ts\n   * const bytes = randomBytes(32); // Generates 32 random bytes\n   * ```\n   *\n   * @param bytesLength - The number of bytes to generate.\n   * @returns A Uint8Array containing the generated random bytes.\n   */\n  static randomBytes(bytesLength: number): Uint8Array {\n    return nobleRandomBytes(bytesLength);\n  }\n\n  /**\n   * Generates a UUID (Universally Unique Identifier) using a\n   * cryptographically strong random number generator following\n   * the version 4 format, as specified in RFC 4122.\n   *\n   * A version 4 UUID is a randomly generated UUID. The 13th character\n   * is set to '4' to denote version 4, and the 17th character is one\n   * of '8', '9', 'A', or 'B' to comply with the variant 1 format of\n   * UUIDs (the high bits are set to '10').\n   *\n   * The UUID is a 36 character string, including hyphens, and looks like this:\n   * xxxxxxxx-xxxx-4xxx-axxx-xxxxxxxxxxxx\n   *\n   * Note that while UUIDs are not guaranteed to be unique, they are\n   * practically unique\" given the large number of possible UUIDs and\n   * the randomness of generation.\n   * @memberof CryptoUtils\n   * @example\n   * ```ts\n   * const uuid = randomUuid();\n   * console.log(uuid); // Outputs a version 4 UUID, e.g., '123e4567-e89b-12d3-a456-426655440000'\n   * ```\n   *\n   * @returns A string containing a randomly generated, 36 character long v4 UUID.\n   */\n  static randomUuid(): string {\n    const uuid = crypto.randomUUID();\n\n    return uuid;\n  }\n\n\n  /**\n   * Generates a secure random PIN (Personal Identification Number) of a\n   * specified length.\n   *\n   * This function ensures that the generated PIN is cryptographically secure and\n   * uniformly distributed by using rejection sampling. It repeatedly generates\n   * random numbers until it gets one in the desired range [0, max]. This avoids\n   * bias introduced by simply taking the modulus or truncating the number.\n   *\n   * Note: The function can generate PINs of 3 to 10 digits in length.\n   * Any request for a PIN outside this range will result in an error.\n   *\n   * Example usage:\n   *\n   * ```ts\n   * const pin = randomPin({ length: 4 });\n   * console.log(pin); // Outputs a 4-digit PIN, e.g., \"0231\"\n   * ```\n   * @memberof CryptoUtils\n   * @param options - The options object containing the desired length of the generated PIN.\n   * @param options.length - The desired length of the generated PIN. The value should be\n   *                         an integer between 3 and 8 inclusive.\n   *\n   * @returns A string representing the generated PIN. The PIN will be zero-padded\n   *          to match the specified length, if necessary.\n   *\n   * @throws Will throw an error if the requested PIN length is less than 3 or greater than 8.\n   */\n  static randomPin({ length }: { length: number }): string {\n    if (3 > length || length > 10) {\n      throw new Error('randomPin() can securely generate a PIN between 3 to 10 digits.');\n    }\n\n    const max = Math.pow(10, length) - 1;\n\n    let pin;\n\n    if (length <= 6) {\n      const rejectionRange = Math.pow(10, length);\n      do {\n        // Adjust the byte generation based on length.\n        const randomBuffer = CryptoUtils.randomBytes(Math.ceil(length / 2) );  // 2 digits per byte.\n        const view = new DataView(randomBuffer.buffer);\n        // Convert the buffer to integer and take modulus based on length.\n        pin = view.getUint16(0, false) % rejectionRange;\n      } while (pin > max);\n    } else {\n      const rejectionRange = Math.pow(10, 10); // For max 10 digit number.\n      do {\n      // Generates 4 random bytes.\n        const randomBuffer = CryptoUtils.randomBytes(4);\n        // Create a DataView to read from the randomBuffer.\n        const view = new DataView(randomBuffer.buffer);\n        // Transform bytes to number (big endian).\n        pin = view.getUint32(0, false) % rejectionRange;\n      } while (pin > max);  // Reject if the number is outside the desired range.\n    }\n\n    // Pad the PIN with leading zeros to the desired length.\n    return pin.toString().padStart(length, '0');\n  }\n}\n", "import { Convert } from '@web5/common';\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\n\nimport type { Jwk } from '../jose/jwk.js';\n\nimport { computeJwkThumbprint, isOctPrivateJwk } from '../jose/jwk.js';\n\n/**\n * Const defining the AES-GCM initialization vector (IV) length in bits.\n *\n * @remarks\n * NIST Special Publication 800-38D, Section 5.2.1.1 states that the IV length:\n * > For IVs, it is recommended that implementations restrict support to the length of 96 bits, to\n * > promote interoperability, efficiency, and simplicity of design.\n *\n * This implementation does not support IV lengths that are different from the value defined by\n * this constant.\n *\n * @see {@link https://doi.org/10.6028/NIST.SP.800-38D | NIST SP 800-38D}\n */\nconst AES_GCM_IV_LENGTH = 96;\n\n/**\n * Constant defining the AES key length values in bits.\n *\n * @remarks\n * NIST publication FIPS 197 states:\n * > The AES algorithm is capable of using cryptographic keys of 128, 192, and 256 bits to encrypt\n * > and decrypt data in blocks of 128 bits.\n *\n * This implementation does not support key lengths that are different from the three values\n * defined by this constant.\n *\n * @see {@link https://doi.org/10.6028/NIST.FIPS.197-upd1 | NIST FIPS 197}\n */\nconst AES_KEY_LENGTHS = [128, 192, 256] as const;\n\n/**\n * Constant defining the AES-GCM tag length values in bits.\n *\n * @remarks\n * NIST Special Publication 800-38D, Section 5.2.1.2 states that the tag length:\n * > may be any one of the following five values: 128, 120, 112, 104, or 96\n *\n * Although the NIST specification allows for tag lengths of 32 or 64 bits in certain applications,\n * the use of shorter tag lengths can be problematic for GCM due to targeted forgery attacks. As a\n * precaution, this implementation does not support tag lengths that are different from the five\n * values defined by this constant. See Appendix C of the NIST SP 800-38D specification for\n * additional guidance and details.\n *\n * @see {@link https://doi.org/10.6028/NIST.SP.800-38D | NIST SP 800-38D}\n */\nexport const AES_GCM_TAG_LENGTHS = [96, 104, 112, 120, 128] as const;\n\n/**\n * The `AesGcm` class provides a comprehensive set of utilities for cryptographic operations\n * using the Advanced Encryption Standard (AES) in Galois/Counter Mode (GCM). This class includes\n * methods for key generation, encryption, decryption, and conversions between raw byte arrays\n * and JSON Web Key (JWK) formats. It is designed to support AES-GCM, a symmetric key algorithm\n * that is widely used for its efficiency, security, and provision of authenticated encryption.\n *\n * AES-GCM is particularly favored for scenarios that require both confidentiality and integrity\n * of data. It integrates the counter mode of encryption with the Galois mode of authentication,\n * offering high performance and parallel processing capabilities.\n *\n * Key Features:\n * - Key Generation: Generate AES symmetric keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Encryption: Encrypt data using AES-GCM with the provided symmetric key.\n * - Decryption: Decrypt data encrypted with AES-GCM using the corresponding symmetric key.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const length = 256; // Length of the key in bits (e.g., 128, 192, 256)\n * const privateKey = await AesGcm.generateKey({ length });\n *\n * // Encryption\n * const data = new TextEncoder().encode('Messsage');\n * const iv = new Uint8Array(12); // 12-byte initialization vector\n * const encryptedData = await AesGcm.encrypt({\n *   data,\n *   iv,\n *   key: privateKey\n * });\n *\n * // Decryption\n * const decryptedData = await AesGcm.decrypt({\n *   data: encryptedData,\n *   iv,\n *   key: privateKey\n * });\n *\n * // Key Conversion\n * const privateKeyBytes = await AesGcm.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class AesGcm {\n  /**\n * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n *\n * @remarks\n * This method accepts a symmetric key represented as a byte array (Uint8Array) and\n * converts it into a JWK object for use with AES-GCM (Advanced Encryption Standard -\n * Galois/Counter Mode). The conversion process involves encoding the key into\n * base64url format and setting the appropriate JWK parameters.\n *\n * The resulting JWK object includes the following properties:\n * - `kty`: Key Type, set to 'oct' for Octet Sequence (representing a symmetric key).\n * - `k`: The symmetric key, base64url-encoded.\n * - `kid`: Key ID, generated based on the JWK thumbprint.\n *\n * @example\n * ```ts\n * const privateKeyBytes = new Uint8Array([...]); // Replace with actual symmetric key bytes\n * const privateKey = await AesGcm.bytesToPrivateKey({ privateKeyBytes });\n * ```\n *\n * @param params - The parameters for the symmetric key conversion.\n * @param params.privateKeyBytes - The raw symmetric key as a Uint8Array.\n *\n * @returns A Promise that resolves to the symmetric key in JWK format.\n */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      k   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'oct'\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Decrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM decryption on the given encrypted data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the decrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag used when encrypting the data. If not specified, the default tag length of 128 bits is\n   * used.\n   *\n   * @example\n   * ```ts\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const iv = new Uint8Array([...]); // Initialization vector used during encryption\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing the AES key\n   * const decryptedData = await AesGcm.decrypt({\n   *   data: encryptedData,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   * @param params.key - The key to use for decryption, represented in JWK format.\n   * @param params.data - The encrypted data to decrypt, represented as a Uint8Array.\n   * @param params.iv - The initialization vector, represented as a Uint8Array.\n   * @param params.additionalData - Optional additional authenticated data. Optional.\n   * @param params.tagLength - The length of the authentication tag in bits. Optional.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public static async decrypt({ key, data, iv, additionalData, tagLength }: {\n    key: Jwk;\n    data: Uint8Array;\n    iv: Uint8Array;\n    additionalData?: Uint8Array;\n    tagLength?: typeof AES_GCM_TAG_LENGTHS[number];\n  }): Promise<Uint8Array> {\n    // Validate the initialization vector length.\n    if (iv.byteLength !== AES_GCM_IV_LENGTH / 8) {\n      throw new TypeError(`The initialization vector must be ${AES_GCM_IV_LENGTH} bits in length`);\n    }\n\n    // Validate the tag length.\n    if (tagLength && !AES_GCM_TAG_LENGTHS.includes(tagLength as any)) {\n      throw new RangeError(`The tag length is invalid: Must be ${AES_GCM_TAG_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Import the JWK into the Web Crypto API to use for the decrypt operation.\n    const webCryptoKey = await webCrypto.importKey('jwk', key, { name: 'AES-GCM' }, true, ['decrypt']);\n\n    // Note: Some browser implementations of the Web Crypto API throw an error if additionalData or\n    // tagLength are undefined, so only include them in the algorithm object if they are defined.\n    const algorithm = {\n      name: 'AES-GCM',\n      iv,\n      ...(tagLength && { tagLength }),\n      ...(additionalData && { additionalData})\n    };\n\n    // Decrypt the data.\n    const plaintextBuffer = await webCrypto.decrypt(algorithm, webCryptoKey, data);\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const plaintext = new Uint8Array(plaintextBuffer);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM encryption on the given data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the encrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag generated in the encryption operation and used for authentication in the corresponding\n   * decryption. If not specified, the default tag length of 128 bits is used.\n   *\n   * @example\n   * ```ts\n   * const data = new TextEncoder().encode('Messsage');\n   * const iv = new Uint8Array([...]); // Initialization vector\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing an AES key\n   * const encryptedData = await AesGcm.encrypt({\n   *   data,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   * @param params.key - The key to use for encryption, represented in JWK format.\n   * @param params.data - The data to encrypt, represented as a Uint8Array.\n   * @param params.iv - The initialization vector, represented as a Uint8Array.\n   * @param params.additionalData - Optional additional authenticated data. Optional.\n   * @param params.tagLength - The length of the authentication tag in bits. Optional.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public static async encrypt({ data, iv, key, additionalData, tagLength }: {\n    key: Jwk;\n    data: Uint8Array;\n    iv: Uint8Array;\n    additionalData?: Uint8Array;\n    tagLength?: typeof AES_GCM_TAG_LENGTHS[number];\n  }): Promise<Uint8Array> {\n    // Validate the initialization vector length.\n    if (iv.byteLength !== AES_GCM_IV_LENGTH / 8) {\n      throw new TypeError(`The initialization vector must be ${AES_GCM_IV_LENGTH} bits in length`);\n    }\n\n    // Validate the tag length.\n    if (tagLength && !AES_GCM_TAG_LENGTHS.includes(tagLength as any)) {\n      throw new RangeError(`The tag length is invalid: Must be ${AES_GCM_TAG_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Import the JWK into the Web Crypto API to use for the encrypt operation.\n    const webCryptoKey = await webCrypto.importKey('jwk', key, { name: 'AES-GCM' }, true, ['encrypt']);\n\n    // Note: Some browser implementations of the Web Crypto API throw an error if additionalData or\n    // tagLength are undefined, so only include them in the algorithm object if they are defined.\n    const algorithm = {\n      name: 'AES-GCM',\n      iv,\n      ...(tagLength && { tagLength }),\n      ...(additionalData && { additionalData})\n    };\n\n    // Encrypt the data.\n    const ciphertextBuffer = await webCrypto.encrypt(algorithm, webCryptoKey, data);\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const ciphertext = new Uint8Array(ciphertextBuffer);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for AES in Galois/Counter Mode (GCM) in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new symmetric key of a specified length suitable for use with\n   * AES-GCM encryption. It leverages cryptographically secure random number generation\n   * to ensure the uniqueness and security of the key. The generated key adheres to the JWK\n   * format, facilitating compatibility with common cryptographic standards and ease of use\n   * in various cryptographic applications.\n   *\n   * The generated key includes these components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence, indicating a symmetric key.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint, providing a unique identifier.\n   *\n   * @example\n   * ```ts\n   * const length = 256; // Length of the key in bits (e.g., 128, 192, 256)\n   * const privateKey = await AesGcm.generateKey({ length });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   * @param params.length - The length of the key in bits. Common lengths are 128, 192, and 256 bits.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public static async generateKey({ length }: {\n    length: typeof AES_KEY_LENGTHS[number];\n  }): Promise<Jwk> {\n    // Validate the key length.\n    if (!AES_KEY_LENGTHS.includes(length as any)) {\n      throw new RangeError(`The key length is invalid: Must be ${AES_KEY_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle();\n\n    // Generate a random private key.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#usage_notes for\n    // an explanation for why Web Crypto generateKey() is used instead of getRandomValues().\n    const webCryptoKey = await webCrypto.generateKey( { name: 'AES-GCM', length }, true, ['encrypt']);\n\n    // Export the private key in JWK format.\n    const { ext, key_ops, ...privateKey } = await webCrypto.exportKey('jwk', webCryptoKey);\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a symmetric key in JWK format and extracts its raw byte representation.\n   * It focuses on the 'k' parameter of the JWK, which represents the symmetric key component\n   * in base64url encoding. The method decodes this value into a byte array, providing\n   * the symmetric key in its raw binary form.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A symmetric key in JWK format\n   * const privateKeyBytes = await AesGcm.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKey - The symmetric key in JWK format.\n   *\n   * @returns A Promise that resolves to the symmetric key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid oct private key.\n    if (!isOctPrivateJwk(privateKey)) {\n      throw new Error(`AesGcm: The provided key is not a valid oct private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array();\n\n    return privateKeyBytes;\n  }\n}", "import type { Jwk } from '../jose/jwk.js';\nimport type { Cipher } from '../types/cipher.js';\nimport type { KeyGenerator } from '../types/key-generator.js';\nimport type { DecryptParams, EncryptParams, GenerateKeyParams } from '../types/params-direct.js';\n\nimport { CryptoAlgorithm } from './crypto-algorithm.js';\nimport { AesGcm, AES_GCM_TAG_LENGTHS } from '../primitives/aes-gcm.js';\n\n/**\n * The `AesGcmGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the AES-GCM algorithm.\n */\nexport interface AesGcmGenerateKeyParams extends GenerateKeyParams {\n  /** Specifies the algorithm variant for key generation in AES-GCM mode.\n   * The value determines the length of the key to be generated and must be one of the following:\n   * - `\"A128GCM\"`: Generates a 128-bit key.\n   * - `\"A192GCM\"`: Generates a 192-bit key.\n   * - `\"A256GCM\"`: Generates a 256-bit key.\n   */\n  algorithm: 'A128GCM' | 'A192GCM' | 'A256GCM';\n}\n\n/**\n * The `AesGcmParams` interface defines the algorithm-specific parameters that should be passed\n * into the `encrypt()` and `decrypt()` methods when using the AES-GCM algorithm.\n */\nexport interface AesGcmParams {\n  /**\n   * The `additionalData` property is used for authentication alongside encrypted data but isn't\n   * encrypted itself. It must match in both encryption and decryption; a mismatch will cause\n   * decryption to fail. This feature allows for the authentication of data without encrypting it.\n   *\n   * The `additionalData` property is optional and omitting it does not compromise encryption\n   * security.\n   */\n  additionalData?: Uint8Array;\n\n  /**\n   * The initialization vector (IV) must be unique for every encryption operation carried out with a\n   * given key. The IV need not be secret, but it must be unpredictable: that is, the IV must not be\n   * reused with the same key. The IV must be 12 bytes (96 bits) in length in accordance with the\n   * AES-GCM specification recommendedation to promote interoperability and efficiency.\n   *\n   * Note: It is OK to transmit the IV in the clear with the encrypted message.\n   */\n  iv: Uint8Array;\n\n  /**\n   * This property determines the size in bits of the authentication tag generated in the encryption\n   * operation and used for authentication in the corresponding decryption. In accordance with the\n   * AES-GCM specification, the tag length must be 96, 104, 112, 120 or 128.\n   *\n   * The `tagLength` property is optional and defaults to 128 bits if omitted.\n   */\n  tagLength?: typeof AES_GCM_TAG_LENGTHS[number];\n}\n\n/**\n * The `AesGcmAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the AES algorithm in Galois/Counter Mode (GCM). This class implements both\n * {@link Cipher | `Cipher`} and { @link KeyGenerator | `KeyGenerator`} interfaces, providing\n * key generation, encryption, and decryption features.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class AesGcmAlgorithm extends CryptoAlgorithm\n  implements Cipher<AesGcmParams, AesGcmParams>,\n             KeyGenerator<AesGcmGenerateKeyParams, Jwk> {\n\n  /**\n   * Decrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM decryption on the given encrypted data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the decrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag used when encrypting the data. If not specified, the default tag length of 128 bits is\n   * used.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const iv = new Uint8Array([...]); // Initialization vector used during encryption\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing the AES key\n   * const decryptedData = await aesGcm.decrypt({\n   *   data: encryptedData,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public async decrypt(params:\n    DecryptParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    const plaintext = AesGcm.decrypt(params);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM encryption on the given data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the encrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag generated in the encryption operation and used for authentication in the corresponding\n   * decryption. If not specified, the default tag length of 128 bits is used.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const data = new TextEncoder().encode('Messsage');\n   * const iv = new Uint8Array([...]); // Initialization vector\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing an AES key\n   * const encryptedData = await aesGcm.encrypt({\n   *   data,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public async encrypt(params:\n    EncryptParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    const ciphertext = AesGcm.encrypt(params);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for AES in Galois/Counter Mode (GCM) in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method generates a symmetric AES key for use in GCM mode, based on the specified\n   * `algorithm` parameter which determines the key length. It uses cryptographically secure random\n   * number generation to ensure the uniqueness and security of the key. The key is returned in JWK\n   * format.\n   *\n   * The generated key includes the following components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const privateKey = await aesGcm.generateKey({ algorithm: 'A256GCM' });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    AesGcmGenerateKeyParams\n  ): Promise<Jwk> {\n    // Map algorithm name to key length.\n    const length = { A128GCM: 128, A192GCM: 192, A256GCM: 256 }[algorithm] as 128 | 192 | 256;\n\n    // Generate a random private key.\n    const privateKey = await AesGcm.generateKey({ length });\n\n    // Set the `alg` property based on the specified algorithm.\n    privateKey.alg = algorithm;\n\n    return privateKey;\n  }\n}", "export {};\n//# sourceMappingURL=jwe.js.map", "export {};\n//# sourceMappingURL=jws.js.map", "export {};\n//# sourceMappingURL=jwt.js.map", "import { Convert } from '@web5/common';\nimport { x25519 } from '@noble/curves/ed25519';\n\nimport type { Jwk } from '../jose/jwk.js';\nimport type { ComputePublicKeyParams, GetPublicKeyParams } from '../types/params-direct.js';\n\nimport { computeJwkThumbprint, isOkpPrivateJwk, isOkpPublicJwk } from '../jose/jwk.js';\n\n/**\n * The `X25519` class provides a comprehensive suite of utilities for working with the X25519\n * elliptic curve, widely used for key agreement protocols and cryptographic applications. It\n * provides methods for key generation, conversion, and Elliptic Curve Diffie-Hellman (ECDH)\n * key agreement,  all aligned with standard cryptographic practices.\n *\n * The class supports conversions between raw byte formats and JSON Web Key (JWK) formats,\n * making it versatile for various cryptographic tasks. It adheres to RFC6090 for ECDH, ensuring\n * secure and effective handling of keys and cryptographic operations.\n *\n * Key Features:\n * - Key Generation: Generate X25519 private keys in JWK format.\n * - Key Conversion: Transform keys between raw byte arrays and JWK formats.\n * - Public Key Derivation: Derive public keys from private keys.\n * - ECDH Shared Secret Computation: Securely derive shared secrets using private and public keys.\n *\n * The methods in this class are asynchronous, returning Promises to accommodate various\n * JavaScript environments.\n *\n * @example\n * ```ts\n * // Key Generation\n * const privateKey = await X25519.generateKey();\n *\n * // Public Key Derivation\n * const publicKey = await X25519.computePublicKey({ key: privateKey });\n * console.log(publicKey === await X25519.getPublicKey({ key: privateKey })); // Output: true\n *\n * // ECDH Shared Secret Computation\n * const sharedSecret = await X25519.sharedSecret({\n *   privateKeyA: privateKey,\n *   publicKeyB: anotherPublicKey\n * });\n *\n * // Key Conversion\n * const publicKeyBytes = await X25519.publicKeyToBytes({ publicKey });\n * const privateKeyBytes = await X25519.privateKeyToBytes({ privateKey });\n * ```\n */\nexport class X25519 {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a private key as a byte array (Uint8Array) for the X25519 elliptic curve\n   * and transforms it into a JWK object. The process involves first deriving the public key from\n   * the private key, then encoding both the private and public keys into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual private key bytes\n   * const privateKey = await X25519.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKeyBytes - The raw private key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the private key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Derive the public key from the private key.\n    const publicKeyBytes  = x25519.getPublicKey(privateKeyBytes);\n\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      d   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a raw public key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method accepts a public key as a byte array (Uint8Array) for the X25519 elliptic curve\n   * and transforms it into a JWK object. The conversion process involves encoding the public\n   * key bytes into base64url format.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `x`: The public key, base64url-encoded.\n   *\n   * This method is useful for converting raw public keys into a standardized\n   * JSON format, facilitating their use in cryptographic operations and making\n   * them easy to share and store.\n   *\n   * @example\n   * ```ts\n   * const publicKeyBytes = new Uint8Array([...]); // Replace with actual public key bytes\n   * const publicKey = await X25519.bytesToPublicKey({ publicKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKeyBytes - The raw public key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async bytesToPublicKey({ publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url(),\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Derives the public key in JWK format from a given X25519 private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format.  The derivation process involves converting the private key to a\n   * raw byte array and then computing the corresponding public key on the Curve25519 curve.\n   * The public key is then encoded into base64url format to construct a JWK representation.\n   *\n   * The process ensures that the derived public key correctly corresponds to the given private key,\n   * adhering to the Curve25519 elliptic curve in Twisted Edwards form standards. This method is\n   * useful in cryptographic operations where a public key is needed for operations like signature\n   * verification, but only the private key is available.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an X25519 private key\n   * const publicKey = await X25519.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public static async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    // Convert the provided private key to a byte array.\n    const privateKeyBytes  = await X25519.privateKeyToBytes({ privateKey: key });\n\n    // Derive the public key from the private key.\n    const publicKeyBytes = x25519.getPublicKey(privateKeyBytes);\n\n    // Construct the public key in JWK format.\n    const publicKey: Jwk = {\n      kty : 'OKP',\n      crv : 'X25519',\n      x   : Convert.uint8Array(publicKeyBytes).toBase64Url()\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    publicKey.kid = await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Generates an X25519 private key in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new private key suitable for use with the X25519 elliptic curve.\n   * The key generation process involves using cryptographically secure random number generation\n   * to ensure the uniqueness and security of the key. The resulting private key adheres to the\n   * JWK format making it compatible with common cryptographic standards and easy to use in various\n   * cryptographic processes.\n   *\n   * The generated private key in JWK format includes the following components:\n   * - `kty`: Key Type, set to 'OKP' for Octet Key Pair.\n   * - `crv`: Curve Name, set to 'X25519'.\n   * - `d`: The private key component, base64url-encoded.\n   * - `x`: The derived public key, base64url-encoded.\n   *\n   * The key is returned in a format suitable for direct use in key agreement operations.\n   *\n   * @example\n   * ```ts\n   * const privateKey = await X25519.generateKey();\n   * ```\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public static async generateKey(): Promise<Jwk> {\n    // Generate a random private key.\n    const privateKeyBytes = x25519.utils.randomPrivateKey();\n\n    // Convert private key from bytes to JWK format.\n    const privateKey = await X25519.bytesToPrivateKey({ privateKeyBytes });\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an X25519 private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key. The method sets the 'kid' (key ID) property using the JWK thumbprint if it is not\n   * already defined. This approach is used under the assumption that a private key in JWK format\n   * always contains the corresponding public key properties.\n   *\n   * Note: This method offers a significant performance advantage, being about 500 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A Jwk object representing an X25519 private key\n   * const publicKey = await X25519.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public static async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n  // Verify the provided JWK represents an octet key pair (OKP) X25519 private key.\n    if (!(isOkpPrivateJwk(key) && key.crv === 'X25519')) {\n      throw new Error(`X25519: The provided key is not an X25519 private JWK.`);\n    }\n\n    // Remove the private key property ('d') and make a shallow copy of the provided key.\n    let { d, ...publicKey } = key;\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    publicKey.kid ??= await computeJwkThumbprint({ jwk: publicKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a private key in JWK format and extracts its raw byte representation.\n   *\n   * This method accepts a public key in JWK format and converts it into its raw binary\n   * form. The conversion process involves decoding the 'd' parameter of the JWK\n   * from base64url format into a byte array.\n   *\n   * This conversion is essential for operations that require the private key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // An X25519 private key in JWK format\n   * const privateKeyBytes = await X25519.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the private key conversion.\n   * @param params.privateKey - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the private key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP private key.\n    if (!isOkpPrivateJwk(privateKey)) {\n      throw new Error(`X25519: The provided key is not a valid OKP private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.d).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Converts a public key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method accepts a public key in JWK format and converts it into its raw binary form.\n   * The conversion process involves decoding the 'x' parameter of the JWK (which represent the\n   * x coordinate of the elliptic curve point) from base64url format into a byte array.\n   *\n   * This conversion is essential for operations that require the public key in its raw\n   * binary form, such as certain low-level cryptographic operations or when interfacing\n   * with systems and libraries that expect keys in a byte array format.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // An X25519 public key in JWK format\n   * const publicKeyBytes = await X25519.publicKeyToBytes({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the public key conversion.\n   * @param params.publicKey - The public key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key as a Uint8Array.\n   */\n  public static async publicKeyToBytes({ publicKey }: {\n    publicKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid OKP public key.\n    if (!isOkpPublicJwk(publicKey)) {\n      throw new Error(`X25519: The provided key is not a valid OKP public key.`);\n    }\n\n    // Decode the provided public key to bytes.\n    const publicKeyBytes = Convert.base64Url(publicKey.x).toUint8Array();\n\n    return publicKeyBytes;\n  }\n\n  /**\n   * Computes an RFC6090-compliant Elliptic Curve Diffie-Hellman (ECDH) shared secret\n   * using secp256k1 private and public keys in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method facilitates the ECDH key agreement protocol, which is a method of securely\n   * deriving a shared secret between two parties based on their private and public keys.\n   * It takes the private key of one party (privateKeyA) and the public key of another\n   * party (publicKeyB) to compute a shared secret. The shared secret is derived from the\n   * x-coordinate of the elliptic curve point resulting from the multiplication of the\n   * public key with the private key.\n   *\n   * Note: When performing Elliptic Curve Diffie-Hellman (ECDH) key agreement,\n   * the resulting shared secret is a point on the elliptic curve, which\n   * consists of an x-coordinate and a y-coordinate. With a 256-bit curve like\n   * secp256k1, each of these coordinates is 32 bytes (256 bits) long. However,\n   * in the ECDH process, it's standard practice to use only the x-coordinate\n   * of the shared secret point as the resulting shared key. This is because\n   * the y-coordinate does not add to the entropy of the key, and both parties\n   * can independently compute the x-coordinate.  Consquently, this implementation\n   * omits the y-coordinate for simplicity and standard compliance.\n   *\n   * @example\n   * ```ts\n   * const privateKeyA = { ... }; // A Jwk object for party A\n   * const publicKeyB = { ... }; // A PublicKeyJwk object for party B\n   * const sharedSecret = await Secp256k1.sharedSecret({\n   *   privateKeyA,\n   *   publicKeyB\n   * });\n   * ```\n   *\n   * @param params - The parameters for the shared secret computation.\n   * @param params.privateKeyA - The private key in JWK format of one party.\n   * @param params.publicKeyB - The public key in JWK format of the other party.\n   *\n   * @returns A Promise that resolves to the computed shared secret as a Uint8Array.\n   */\n  public static async sharedSecret({ privateKeyA, publicKeyB }: {\n    privateKeyA: Jwk;\n    publicKeyB: Jwk;\n  }): Promise<Uint8Array> {\n    // Ensure that keys from the same key pair are not specified.\n    if ('x' in privateKeyA && 'x' in publicKeyB && privateKeyA.x === publicKeyB.x) {\n      throw new Error(`X25519: ECDH shared secret cannot be computed from a single key pair's public and private keys.`);\n    }\n\n    // Convert the provided private and public keys to bytes.\n    const privateKeyABytes = await X25519.privateKeyToBytes({ privateKey: privateKeyA });\n    const publicKeyBBytes = await X25519.publicKeyToBytes({ publicKey: publicKeyB });\n\n    // Compute the shared secret between the public and private keys.\n    const sharedSecret = x25519.getSharedSecret(privateKeyABytes, publicKeyBBytes);\n\n    return sharedSecret;\n  }\n}", "import type { Jwk } from '@web5/crypto';\nimport type { RequireOnly } from '@web5/common';\n\nimport { Convert, Multicodec } from '@web5/common';\nimport { computeJwkThumbprint } from '@web5/crypto';\n\nimport type { KeyWithMulticodec } from './types/multibase.js';\n\nimport { DidError, DidErrorCode } from './did-error.js';\nimport {\n  DidService,\n  DidDocument,\n  DidVerificationMethod,\n  DidVerificationRelationship,\n} from './types/did-core.js';\n\n/**\n * Represents a Decentralized Web Node (DWN) service in a DID Document.\n *\n * A DWN DID service is a specialized type of DID service with the `type` set to\n * `DecentralizedWebNode`. It includes specific properties `enc` and `sig` that are used to identify\n * the public keys that can be used to interact with the DID Subject. The values of these properties\n * are strings or arrays of strings containing one or more verification method `id` values present in\n * the same DID document. If the `enc` and/or `sig` properties are an array of strings, an entity\n * interacting with the DID subject is expected to use the verification methods in the order they\n * are listed.\n *\n * @example\n * ```ts\n * const service: DwnDidService = {\n *   id: 'did:example:123#dwn',\n *   type: 'DecentralizedWebNode',\n *   serviceEndpoint: 'https://dwn.tbddev.org/dwn0',\n *   enc: 'did:example:123#key-1',\n *   sig: 'did:example:123#key-2'\n * }\n * ```\n *\n * @see {@link https://identity.foundation/decentralized-web-node/spec/ | DIF Decentralized Web Node (DWN) Specification}\n */\nexport interface DwnDidService extends DidService {\n  /**\n   * One or more verification method `id` values that can be used to encrypt information\n   * intended for the DID subject.\n   */\n  enc?: string | string[];\n\n  /**\n   * One or more verification method `id` values that will be used by the DID subject to sign data\n   * or by another entity to verify signatures created by the DID subject.\n   */\n  sig: string | string[];\n}\n\n/**\n * Extracts the fragment part of a Decentralized Identifier (DID) verification method identifier.\n *\n * This function takes any input and aims to return only the fragment of a DID identifier,\n * which comes after the '#' symbol in a DID string. It's designed specifically for handling\n * DID verification method identifiers. The function returns undefined for non-string inputs, inputs\n * that do not contain a '#', or complex data structures like objects or arrays, ensuring that only\n * the fragment part of a DID string is extracted when present.\n *\n * @example\n * ```ts\n * console.log(extractDidFragment(\"did:example:123#key-1\")); // Output: \"key-1\"\n * console.log(extractDidFragment(\"did:example:123\")); // Output: undefined\n * console.log(extractDidFragment({ id: \"did:example:123#0\", type: \"JsonWebKey\" })); // Output: undefined\n * console.log(extractDidFragment(undefined)); // Output: undefined\n * ```\n *\n * @param input - The input to be processed. Can be of any type, but the function is designed\n *                to work with strings that represent DID verification method identifiers.\n * @returns The fragment part of the DID identifier if the input is a string containing a '#'.\n *          Returns an empty string for all other inputs, including non-string types, strings\n *          without a '#', and complex data structures.\n */\nexport function extractDidFragment(input: unknown): string | undefined {\n  if (typeof input !== 'string') return undefined;\n  if (input.length === 0) return undefined;\n  return input.split('#').pop();\n}\n\n/**\n * Retrieves services from a given DID document, optionally filtered by `id` or `type`.\n *\n * If no `id` or `type` filters are provided, all defined services are returned.\n *\n * The given DID Document must adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}.\n *\n * @example\n * ```ts\n * const didDocument = { ... }; // W3C DID document\n * const services = getServices({ didDocument, type: 'DecentralizedWebNode' });\n * ```\n *\n * @param params - An object containing input parameters for retrieving services.\n * @param params.didDocument - The DID document from which services are retrieved.\n * @param params.id - Optional. A string representing the specific service ID to match. If provided, only the service with this ID will be returned.\n * @param params.type - Optional. A string representing the specific service type to match. If provided, only the service(s) of this type will be returned.\n * @returns An array of services. If no matching service is found, an empty array is returned.\n */\nexport function getServices({ didDocument, id, type }: {\n  didDocument: DidDocument;\n  id?: string;\n  type?: string;\n}): DidService[] {\n  return didDocument?.service?.filter(service => {\n    if (id && service.id !== id) return false;\n    if (type && service.type !== type) return false;\n    return true;\n  }) ?? [];\n}\n\n/**\n * Retrieves a verification method object from a DID document if there is a match for the given\n * public key.\n *\n * This function searches the verification methods in a given DID document for a match with the\n * provided public key (either in JWK or multibase format). If a matching verification method is\n * found it is returned. If no match is found `null` is returned.\n *\n *\n * @example\n * ```ts\n * const didDocument = {\n *   // ... contents of a DID document ...\n * };\n * const publicKeyJwk = { kty: 'OKP', crv: 'Ed25519', x: '...' };\n *\n * const verificationMethod = await getVerificationMethodByKey({\n *   didDocument,\n *   publicKeyJwk\n * });\n * ```\n *\n * @param params - An object containing input parameters for retrieving the verification method ID.\n * @param params.didDocument - The DID document to search for the verification method.\n * @param params.publicKeyJwk - The public key in JSON Web Key (JWK) format to match against the verification methods in the DID document.\n * @param params.publicKeyMultibase - The public key as a multibase encoded string to match against the verification methods in the DID document.\n * @returns A promise that resolves with the matching verification method, or `null` if no match is found.\n * @throws Throws an `Error` if the `didDocument` parameter is missing or if the `didDocument` does not contain any verification methods.\n */\nexport async function getVerificationMethodByKey({ didDocument, publicKeyJwk, publicKeyMultibase }: {\n  didDocument: DidDocument;\n  publicKeyJwk?: Jwk;\n  publicKeyMultibase?: string;\n}): Promise<DidVerificationMethod | null> {\n  // Collect all verification methods from the DID document.\n  const verificationMethods = getVerificationMethods({ didDocument });\n\n  for (let method of verificationMethods) {\n    if (publicKeyJwk && method.publicKeyJwk) {\n      const publicKeyThumbprint = await computeJwkThumbprint({ jwk: publicKeyJwk });\n      if (publicKeyThumbprint === await computeJwkThumbprint({ jwk: method.publicKeyJwk })) {\n        return method;\n      }\n    } else if (publicKeyMultibase && method.publicKeyMultibase) {\n      if (publicKeyMultibase === method.publicKeyMultibase) {\n        return method;\n      }\n    }\n  }\n\n  return null;\n}\n\n/**\n * Retrieves all verification methods from a given DID document, including embedded methods.\n *\n * This function consolidates all verification methods into a single array for easy access and\n * processing. It checks both the primary `verificationMethod` array and the individual verification\n * relationship properties `authentication`, `assertionMethod`, `keyAgreement`,\n * `capabilityInvocation`, and `capabilityDelegation` for embedded methods.\n *\n * The given DID Document must adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}.\n *\n * @example\n * ```ts\n * const didDocument = { ... }; // W3C DID document\n * const verificationMethods = getVerificationMethods({ didDocument });\n * ```\n *\n * @param params - An object containing input parameters for retrieving verification methods.\n * @param params.didDocument - The DID document from which verification methods are retrieved.\n * @returns An array of `DidVerificationMethod`. If no verification methods are found, an empty array is returned.\n * @throws Throws an `TypeError` if the `didDocument` parameter is missing.\n */\nexport function getVerificationMethods({ didDocument }: {\n  didDocument: DidDocument;\n}): DidVerificationMethod[] {\n  if (!didDocument) throw new TypeError(`Required parameter missing: 'didDocument'`);\n\n  const verificationMethods: DidVerificationMethod[] = [];\n\n  // Check the 'verificationMethod' array.\n  verificationMethods.push(...didDocument.verificationMethod?.filter(isDidVerificationMethod) ?? []);\n\n  // Check verification relationship properties for embedded verification methods.\n  Object.keys(DidVerificationRelationship).forEach((relationship) => {\n    verificationMethods.push(\n      ...(didDocument[relationship as keyof DidDocument] as (string | DidVerificationMethod)[])\n        ?.filter(isDidVerificationMethod) ?? []\n    );\n  });\n\n  return verificationMethods;\n}\n\n/**\n * Retrieves all DID verification method types from a given DID document.\n *\n * The given DID Document must adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core Specification}.\n *\n * @example\n * ```ts\n * const didDocument = {\n *   verificationMethod: [\n *     {\n *       'id'              : 'did:example:123#key-0',\n *       'type'            : 'Ed25519VerificationKey2018',\n *       'controller'      : 'did:example:123',\n *       'publicKeyBase58' : '3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J'\n *     },\n *     {\n *       'id'              : 'did:example:123#key-1',\n *       'type'            : 'X25519KeyAgreementKey2019',\n *       'controller'      : 'did:example:123',\n *       'publicKeyBase58' : 'FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x'\n *     },\n *     {\n *       'id'           : 'did:example:123#key-3',\n *       'type'         : 'JsonWebKey2020',\n *       'controller'   : 'did:example:123',\n *       'publicKeyJwk' : {\n *         'kty' : 'EC',\n *         'crv' : 'P-256',\n *         'x'   : 'Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M',\n *         'y'   : 'pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk'\n *       }\n *     }\n *   ]\n * },\n * const vmTypes = getVerificationMethodTypes({ didDocument });\n * console.log(vmTypes);\n * // Output: ['Ed25519VerificationKey2018', 'X25519KeyAgreementKey2019', 'JsonWebKey2020']\n * ```\n *\n * @param params - An object containing input parameters for retrieving types.\n * @param params.didDocument - The DID document from which types are retrieved.\n * @returns An array of types. If no types were found, an empty array is returned.\n */\nexport function getVerificationMethodTypes({ didDocument }: {\n  didDocument: DidDocument;\n}): string[] {\n  // Collect all verification methods from the DID document.\n  const verificationMethods = getVerificationMethods({ didDocument });\n\n  // Map to extract 'type' from each verification method.\n  const types = verificationMethods.map(method => method.type);\n\n  return [...new Set(types)]; // Return only unique types.\n}\n\n/**\n * Retrieves a list of DID verification relationships by a specific method ID from a DID document.\n *\n * This function examines the specified DID document to identify any verification relationships\n * (e.g., `authentication`, `assertionMethod`) that reference a verification method by its method ID\n * or contain an embedded verification method matching the method ID. The method ID is typically a\n * fragment of a DID (e.g., `did:example:123#key-1`) that uniquely identifies a verification method\n * within the DID document.\n *\n * The search considers both direct references to verification methods by their IDs and verification\n * methods embedded within the verification relationship arrays. It returns an array of\n * `DidVerificationRelationship` enums corresponding to the verification relationships that contain\n * the specified method ID.\n *\n * @param params - An object containing input parameters for retrieving verification relationships.\n * @param params.didDocument - The DID document to search for verification relationships.\n * @param params.methodId - The method ID to search for within the verification relationships.\n * @returns An array of `DidVerificationRelationship` enums representing the types of verification\n *          relationships that reference the specified method ID.\n *\n * @example\n * ```ts\n * const didDocument: DidDocument = {\n *   // ...contents of a DID document...\n * };\n *\n * const relationships = getVerificationRelationshipsById({\n *   didDocument,\n *   methodId: 'key-1'\n * });\n * console.log(relationships);\n * // Output might include ['authentication', 'assertionMethod'] if those relationships\n * // reference or contain the specified method ID.\n * ```\n */\nexport function getVerificationRelationshipsById({ didDocument, methodId }: {\n  didDocument: DidDocument;\n  methodId: string;\n}): DidVerificationRelationship[] {\n  const relationships: DidVerificationRelationship[] = [];\n\n  Object.keys(DidVerificationRelationship).forEach((relationship) => {\n    if (Array.isArray(didDocument[relationship as keyof DidDocument])) {\n      const relationshipMethods = didDocument[relationship as keyof DidDocument] as (string | DidVerificationMethod)[];\n\n      const methodIdFragment = extractDidFragment(methodId);\n\n      // Check if the verification relationship property contains a matching method ID either\n      // directly referenced or as an embedded verification method.\n      const containsMethodId = relationshipMethods.some(method => {\n        const isByReferenceMatch = extractDidFragment(method) === methodIdFragment;\n        const isEmbeddedMethodMatch = isDidVerificationMethod(method) && extractDidFragment(method.id) === methodIdFragment;\n        return isByReferenceMatch || isEmbeddedMethodMatch;\n      });\n\n      if (containsMethodId) {\n        relationships.push(relationship as DidVerificationRelationship);\n      }\n    }\n  });\n\n  return relationships;\n}\n\n/**\n * Checks if a given object is a {@link DidService}.\n *\n * A {@link DidService} in the context of DID resources must include the properties `id`, `type`,\n * and `serviceEndpoint`. The `serviceEndpoint` can be a `DidServiceEndpoint` or an array of\n * `DidServiceEndpoint` objects.\n *\n * @example\n * ```ts\n * const service = {\n *   id: \"did:example:123#service-1\",\n *   type: \"OidcService\",\n *   serviceEndpoint: \"https://example.com/oidc\"\n * };\n *\n * if (isDidService(service)) {\n *   console.log('The object is a DidService');\n * } else {\n *   console.log('The object is not a DidService');\n * }\n * ```\n *\n * @param obj - The object to be checked.\n * @returns `true` if `obj` is a `DidService`; otherwise, `false`.\n */\nexport function isDidService(obj: unknown): obj is DidService {\n  // Validate that the given value is an object.\n  if (!obj || typeof obj !== 'object' || obj === null) return false;\n\n  // Validate that the object has the necessary properties of DidService.\n  return 'id' in obj && 'type' in obj && 'serviceEndpoint' in obj;\n}\n\n/**\n * Checks if a given object is a {@link DwnDidService}.\n *\n * A {@link DwnDidService} is defined as {@link DidService} object with a `type` of\n * \"DecentralizedWebNode\" and `enc` and `sig` properties, where both properties are either strings\n * or arrays of strings.\n *\n * @example\n * ```ts\n * const didDocument: DidDocument = {\n *   id: 'did:example:123',\n *   verificationMethod: [\n *     {\n *       id: 'did:example:123#key-1',\n *       type: 'JsonWebKey2020',\n *       controller: 'did:example:123',\n *       publicKeyJwk: { ... }\n *     },\n *     {\n *       id: 'did:example:123#key-2',\n *       type: 'JsonWebKey2020',\n *       controller: 'did:example:123',\n *       publicKeyJwk: { ... }\n *     }\n *   ],\n *   service: [\n *     {\n *       id: 'did:example:123#dwn',\n *       type: 'DecentralizedWebNode',\n *       serviceEndpoint: 'https://dwn.tbddev.org/dwn0',\n *       enc: 'did:example:123#key-1',\n *       sig: 'did:example:123#key-2'\n *     }\n *   ]\n * };\n *\n * if (isDwnService(didDocument.service[0])) {\n *   console.log('The object is a DwnDidService');\n * } else {\n *   console.log('The object is not a DwnDidService');\n * }\n * ```\n *\n * @see {@link https://identity.foundation/decentralized-web-node/spec/ | Decentralized Web Node (DWN) Specification}\n *\n * @param obj - The object to be checked.\n * @returns `true` if `obj` is a DwnDidService; otherwise, `false`.\n */\nexport function isDwnDidService(obj: unknown): obj is DwnDidService {\n  // Validate that the given value is a {@link DidService}.\n  if (!isDidService(obj)) return false;\n\n  // Validate that the `type` property is `DecentralizedWebNode`.\n  if (obj.type !== 'DecentralizedWebNode') return false;\n\n  // Validate that the given object has the `enc` and `sig` properties.\n  if (!('enc' in obj && 'sig' in obj)) return false;\n\n  // Validate that the `enc` and `sig` properties are either strings or arrays of strings.\n  const isStringOrStringArray = (prop: any): boolean =>\n    typeof prop === 'string' || Array.isArray(prop) && prop.every(item => typeof item === 'string');\n  return (isStringOrStringArray(obj.enc)) && (isStringOrStringArray(obj.sig));\n}\n\n/**\n * Checks if a given object is a DID Verification Method.\n *\n * A {@link DidVerificationMethod} in the context of DID resources must include the properties `id`,\n * `type`, and `controller`.\n *\n * @example\n * ```ts\n * const resource = {\n *  id           : \"did:example:123#0\",\n *  type         : \"JsonWebKey2020\",\n *  controller   : \"did:example:123\",\n *  publicKeyJwk : { ... }\n * };\n *\n * if (isDidVerificationMethod(resource)) {\n *   console.log('The resource is a DidVerificationMethod');\n * } else {\n *   console.log('The resource is not a DidVerificationMethod');\n * }\n * ```\n *\n * @param obj - The object to be checked.\n * @returns `true` if `obj` is a `DidVerificationMethod`; otherwise, `false`.\n */\nexport function isDidVerificationMethod(obj: unknown): obj is DidVerificationMethod {\n  // Validate that the given value is an object.\n  if (!obj || typeof obj !== 'object' || obj === null) return false;\n\n  // Validate that the object has the necessary properties of a DidVerificationMethod.\n  if (!('id' in obj && 'type' in obj && 'controller' in obj)) return false;\n\n  if (typeof obj.id !== 'string') return false;\n  if (typeof obj.type !== 'string') return false;\n  if (typeof obj.controller !== 'string') return false;\n\n  return true;\n}\n\n/**\n * Converts a cryptographic key to a multibase identifier.\n *\n * @remarks\n * This method provides a way to represent a cryptographic key as a multibase identifier.\n * It takes a `Uint8Array` representing the key, and either the multicodec code or multicodec name\n * as input. The method first adds the multicodec prefix to the key, then encodes it into Base58\n * format. Finally, it converts the Base58 encoded key into a multibase identifier.\n *\n * @example\n * ```ts\n * const key = new Uint8Array([...]); // Cryptographic key as Uint8Array\n * const multibaseId = keyBytesToMultibaseId({ key, multicodecName: 'ed25519-pub' });\n * ```\n *\n * @param params - The parameters for the conversion.\n * @returns The multibase identifier as a string.\n */\nexport function keyBytesToMultibaseId({ keyBytes, multicodecCode, multicodecName }:\n  RequireOnly<KeyWithMulticodec, 'keyBytes'>\n): string {\n  const prefixedKey = Multicodec.addPrefix({\n    code : multicodecCode,\n    data : keyBytes,\n    name : multicodecName\n  });\n  const prefixedKeyB58 = Convert.uint8Array(prefixedKey).toBase58Btc();\n  const multibaseKeyId = Convert.base58Btc(prefixedKeyB58).toMultibase();\n\n  return multibaseKeyId;\n}\n\n/**\n * Converts a multibase identifier to a cryptographic key.\n *\n * @remarks\n * This function decodes a multibase identifier back into a cryptographic key. It first decodes the\n * identifier from multibase format into Base58 format, and then converts it into a `Uint8Array`.\n * Afterward, it removes the multicodec prefix, extracting the raw key data along with the\n * multicodec code and name.\n *\n * @example\n * ```ts\n * const multibaseKeyId = '...'; // Multibase identifier of the key\n * const { key, multicodecCode, multicodecName } = multibaseIdToKey({ multibaseKeyId });\n * ```\n *\n * @param params - The parameters for the conversion.\n * @param params.multibaseKeyId - The multibase identifier string of the key.\n * @returns An object containing the key as a `Uint8Array` and its multicodec code and name.\n * @throws `DidError` if the multibase identifier is invalid.\n */\nexport function multibaseIdToKeyBytes({ multibaseKeyId }: {\n  multibaseKeyId: string\n}): Required<KeyWithMulticodec> {\n  try {\n    const prefixedKeyB58 = Convert.multibase(multibaseKeyId).toBase58Btc();\n    const prefixedKey = Convert.base58Btc(prefixedKeyB58).toUint8Array();\n    const { code, data, name } = Multicodec.removePrefix({ prefixedData: prefixedKey });\n\n    return { keyBytes: data, multicodecCode: code, multicodecName: name };\n  } catch (error: any) {\n    throw new DidError(DidErrorCode.InvalidDid, `Invalid multibase identifier: ${multibaseKeyId}`);\n  }\n}", "import type {\n  Jwk,\n  Signer,\n  CryptoApi,\n  KeyIdentifier,\n  EnclosedSignParams,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  EnclosedVerifyParams,\n} from '@web5/crypto';\n\nimport { LocalKeyManager, CryptoUtils } from '@web5/crypto';\n\nimport type { DidDocument } from './types/did-core.js';\nimport type { DidMetadata, PortableDid } from './types/portable-did.js';\n\nimport { DidError, DidErrorCode } from './did-error.js';\nimport { extractDidFragment, getVerificationMethods } from './utils.js';\n\n/**\n * A `BearerDidSigner` extends the {@link Signer} interface to include specific properties for\n * signing with a Decentralized Identifier (DID). It encapsulates the algorithm and key identifier,\n * which are often needed when signing JWTs, JWSs, JWEs, and other data structures.\n *\n * Typically, the algorithm and key identifier are used to populate the `alg` and `kid` fields of a\n * JWT or JWS header.\n */\nexport interface BearerDidSigner extends Signer {\n  /**\n   * The cryptographic algorithm identifier used for signing operations.\n   *\n   * Typically, this value is used to populate the `alg` field of a JWT or JWS header. The\n   * registered algorithm names are defined in the\n   * {@link https://www.iana.org/assignments/jose/jose.xhtml#web-signature-encryption-algorithms | IANA JSON Web Signature and Encryption Algorithms registry}.\n   *\n   * @example\n   * \"ES256\" // ECDSA using P-256 and SHA-256\n   */\n  algorithm: string;\n\n  /**\n   * The unique identifier of the key within the DID document that is used for signing and\n   * verification operations.\n   *\n   * This identifier must be a DID URI with a fragment (e.g., did:method:123#key-0) that references\n   * a specific verification method in the DID document. It allows users of a `BearerDidSigner` to\n   * determine the DID and key that will be used for signing and verification operations.\n   *\n   * @example\n   * \"did:dht:123#key-1\" // A fragment identifier referring to a key in the DID document\n   */\n  keyId: string;\n}\n\n/**\n * Represents a Decentralized Identifier (DID) along with its DID document, key manager, metadata,\n * and convenience functions.\n */\nexport class BearerDid {\n  /** {@inheritDoc Did#uri} */\n  uri: string;\n\n  /**\n   * The DID document associated with this DID.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocument | DID Core Specification, \u00A7 DID Document}\n   */\n  document: DidDocument;\n\n  /** {@inheritDoc DidMetadata} */\n  metadata: DidMetadata;\n\n  /**\n   * Key Management System (KMS) used to manage the DIDs keys and sign data.\n   *\n   * Each DID method requires at least one key be present in the provided `keyManager`.\n   */\n  keyManager: CryptoApi;\n\n  constructor({ uri, document, metadata, keyManager }: {\n    uri: string,\n    document: DidDocument,\n    metadata: DidMetadata,\n    keyManager: CryptoApi\n  }) {\n    this.uri = uri;\n    this.document = document;\n    this.metadata = metadata;\n    this.keyManager = keyManager;\n  }\n\n  /**\n   * Converts a `BearerDid` object to a portable format containing the URI and verification methods\n   * associated with the DID.\n   *\n   * This method is useful when you need to represent the key material and metadata associated with\n   * a DID in format that can be used independently of the specific DID method implementation. It\n   * extracts both public and private keys from the DID's key manager and organizes them into a\n   * `PortableDid` structure.\n   *\n   * @remarks\n   * If the DID's key manager does not allow private keys to be exported, the `PortableDid` returned\n   * will not contain a `privateKeys` property. This enables the importing and exporting DIDs that\n   * use the same underlying KMS even if the KMS does not support exporting private keys. Examples\n   * include hardware security modules (HSMs) and cloud-based KMS services like AWS KMS.\n   *\n   * If the DID's key manager does support exporting private keys, the resulting `PortableDid` will\n   * include a `privateKeys` property which contains the same number of entries as there are\n   * verification methods as the DID document, each with its associated private key and the\n   * purpose(s) for which the key can be used (e.g., `authentication`, `assertionMethod`, etc.).\n   *\n   * @example\n   * ```ts\n   * // Assuming `did` is an instance of BearerDid\n   * const portableDid = await did.export();\n   * // portableDid now contains the DID URI, document, metadata, and optionally, private keys.\n   * ```\n   *\n   * @returns A `PortableDid` containing the URI, DID document, metadata, and optionally private\n   *          keys associated with the `BearerDid`.\n   * @throws An error if the DID document does not contain any verification methods or the keys for\n   *         any verification method are missing in the key manager.\n   */\n  public async export(): Promise<PortableDid> {\n    // Verify the DID document contains at least one verification method.\n    if (!(Array.isArray(this.document.verificationMethod) && this.document.verificationMethod.length > 0)) {\n      throw new Error(`DID document for '${this.uri}' is missing verification methods`);\n    }\n\n    // Create a new `PortableDid` copy object to store the exported data.\n    let portableDid: PortableDid = JSON.parse(JSON.stringify({\n      uri      : this.uri,\n      document : this.document,\n      metadata : this.metadata\n    }));\n\n    // If the BearerDid's key manager supports exporting private keys, add them to the portable DID.\n    if ('exportKey' in this.keyManager && typeof this.keyManager.exportKey === 'function') {\n      const privateKeys: Jwk[] = [];\n      for (let vm of this.document.verificationMethod) {\n        if (!vm.publicKeyJwk) {\n          throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`);\n        }\n\n        // Compute the key URI of the verification method's public key.\n        const keyUri = await this.keyManager.getKeyUri({ key: vm.publicKeyJwk });\n\n        // Retrieve the private key from the key manager.\n        const privateKey = await this.keyManager.exportKey({ keyUri }) as Jwk;\n\n        // Add the verification method to the key set.\n        privateKeys.push({ ...privateKey });\n      }\n      portableDid.privateKeys = privateKeys;\n    }\n\n    return portableDid;\n  }\n\n  /**\n   * Return a {@link Signer} that can be used to sign messages, credentials, or arbitrary data.\n   *\n   * If given, the `methodId` parameter is used to select a key from the verification methods\n   * present in the DID Document.\n   *\n   * If `methodID` is not given, the first verification method intended for signing claims is used.\n   *\n   * @param params - The parameters for the `getSigner` operation.\n   * @param params.methodId - ID of the verification method key that will be used for sign and\n   *                          verify operations. Optional.\n   * @returns An instantiated {@link Signer} that can be used to sign and verify data.\n   */\n  public async getSigner(params?: { methodId: string }): Promise<BearerDidSigner> {\n    // Attempt to find a verification method that matches the given method ID, or if not given,\n    // find the first verification method intended for signing claims.\n    const verificationMethod = this.document.verificationMethod?.find(\n      vm => extractDidFragment(vm.id) === (extractDidFragment(params?.methodId) ?? extractDidFragment(this.document.assertionMethod?.[0]))\n    );\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    // Compute the expected key URI of the signing key.\n    const keyUri = await this.keyManager.getKeyUri({ key: verificationMethod.publicKeyJwk });\n\n    // Get the public key to be used for verify operations, which also verifies that the key is\n    // present in the key manager's store.\n    const publicKey = await this.keyManager.getPublicKey({ keyUri });\n\n    // Bind the DID's key manager to the signer.\n    const keyManager = this.keyManager;\n\n    // Determine the signing algorithm.\n    const algorithm = CryptoUtils.getJoseSignatureAlgorithmFromPublicKey(publicKey);\n\n    return {\n      algorithm : algorithm,\n      keyId     : verificationMethod.id,\n\n      async sign({ data }: EnclosedSignParams): Promise<Uint8Array> {\n        const signature = await keyManager.sign({ data, keyUri: keyUri! }); // `keyUri` is guaranteed to be defined at this point.\n        return signature;\n      },\n\n      async verify({ data, signature }: EnclosedVerifyParams): Promise<boolean> {\n        const isValid = await keyManager.verify({ data, key: publicKey!, signature }); // `publicKey` is guaranteed to be defined at this point.\n        return isValid;\n      }\n    };\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await BearerDid.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the\n   *          provided PortableDid.\n   * @throws An error if the PortableDid document does not contain any verification methods or the\n   *         keys for any verification method are missing in the key manager.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n\n    // Get all verification methods from the given DID document, including embedded methods.\n    const verificationMethods = getVerificationMethods({ didDocument: portableDid.document });\n\n    // Validate that the DID document contains at least one verification method.\n    if (verificationMethods.length === 0) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `At least one verification method is required but 0 were given`);\n    }\n\n    // If given, import the private key material into the key manager.\n    for (let key of portableDid.privateKeys ?? []) {\n\n      // confirm th key does not already exist before importing it to avoid failures from the key manager\n      const keyUri = await keyManager.getKeyUri({ key });\n      const keyExists = await keyManager.getPublicKey({ keyUri }).then(() => true).catch(() => false);\n      if (!keyExists) {\n        await keyManager.importKey({ key });\n      }\n    }\n\n    // Validate that the key material for every verification method in the DID document is present\n    // in the key manager.\n    for (let vm of verificationMethods) {\n      if (!vm.publicKeyJwk) {\n        throw new Error(`Verification method '${vm.id}' does not contain a public key in JWK format`);\n      }\n\n      // Compute the key URI of the verification method's public key.\n      const keyUri = await keyManager.getKeyUri({ key: vm.publicKeyJwk });\n\n      // Verify that the key is present in the key manager. If not, an error is thrown.\n      await keyManager.getPublicKey({ keyUri });\n    }\n\n    // Use the given PortableDid to construct the BearerDid object.\n    const did = new BearerDid({\n      uri      : portableDid.uri,\n      document : portableDid.document,\n      metadata : portableDid.metadata,\n      keyManager\n    });\n\n    return did;\n  }\n}", "import type {\n  CryptoApi,\n  LocalKeyManager,\n  InferKeyGeneratorAlgorithm,\n} from '@web5/crypto';\n\nimport type { BearerDid } from '../bearer-did.js';\nimport type { DidMetadata } from '../types/portable-did.js';\nimport type {\n  DidDocument,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidVerificationMethod,\n} from '../types/did-core.js';\n\nimport { DidVerificationRelationship } from '../types/did-core.js';\n\n/**\n * Represents options during the creation of a Decentralized Identifier (DID).\n *\n * Implementations of this interface may contain properties and methods that provide specific\n * options or metadata during the DID creation processes following specific DID method\n * specifications.\n */\nexport interface DidCreateOptions<TKms> {\n  /**\n   * Optional. An array of verification methods to be included in the DID document.\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Options for additional verification methods added to the DID Document during the creation of a\n * new Decentralized Identifier (DID).\n */\nexport interface DidCreateVerificationMethod<TKms> extends Pick<Partial<DidVerificationMethod>, 'controller' | 'id' | 'type'> {\n  /**\n   * The name of the cryptographic algorithm to be used for key generation.\n   *\n   * Examples might include `Ed25519` and `ES256K` but will vary depending on the DID method\n   * specification and the key management system in use.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidCreateVerificationMethod = {\n   *   algorithm: 'Ed25519'\n   * };\n   * ```\n   */\n  algorithm: TKms extends CryptoApi\n    ? InferKeyGeneratorAlgorithm<TKms>\n    : InferKeyGeneratorAlgorithm<LocalKeyManager>;\n\n  /**\n   * Optionally specify the purposes for which a verification method is intended to be used in a DID\n   * document.\n   *\n   * The `purposes` property defines the specific\n   * {@link DidVerificationRelationship | verification relationships} between the DID subject and\n   * the verification method. This enables the verification method to be utilized for distinct\n   * actions such as authentication, assertion, key agreement, capability delegation, and others. It\n   * is important for verifiers to recognize that a verification method must be associated with the\n   * relevant purpose in the DID document to be valid for that specific use case.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidCreateVerificationMethod = {\n   *   algorithm: 'Ed25519',\n   *   controller: 'did:example:1234',\n   *   purposes: ['authentication', 'assertionMethod']\n   * };\n   * ```\n   */\n  purposes?: (DidVerificationRelationship | keyof typeof DidVerificationRelationship)[];\n}\n\n/**\n * Defines the API for a specific DID method. It includes functionalities for creating and resolving\n * DIDs.\n *\n * @typeparam T - The type of the DID instance associated with this method.\n * @typeparam O - The type of the options used for creating the DID.\n */\nexport interface DidMethodApi<\n    TKms extends CryptoApi | undefined = CryptoApi,\n    TDid extends BearerDid = BearerDid,\n    TOptions extends DidCreateOptions<TKms> = DidCreateOptions<TKms>\n  > extends DidMethodResolver {\n  /**\n   * The name of the DID method.\n   *\n   * For example, in the DID `did:example:123456`, \"example\" would be the method name.\n   */\n  methodName: string;\n\n  new (): DidMethod;\n\n  /**\n   * Creates a new DID.\n   *\n   * This function should generate a new DID in accordance with the DID method specification being\n   * implemented, using the provided `keyManager`, and optionally, any provided `options`.\n   *\n   * @param params - The parameters used to create the DID.\n   * @param params.keyManager - Optional. The cryptographic API used for key management.\n   * @param params.options - Optional. The options used for creating the DID.\n   * @returns A promise that resolves to the newly created DID instance.\n   */\n  create(params: {\n    keyManager?: TKms;\n    options?: TOptions;\n  }): Promise<TDid>;\n\n  /**\n   * Given a DID Document, return the verification method that will be used for signing messages and\n   * credentials.\n   *\n   * If given, the `methodId` parameter is used to select the verification method. If not given, a\n   * DID method specific approach is taken to selecting the verification method to return.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns A promise that resolves to the erification method to use for signing.\n   */\n  getSigningMethod(params: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod>;\n}\n\n/**\n * Defines the interface for resolving a DID using a specific DID method.\n *\n * A DID resolver takes a DID URI as input and returns a {@link DidResolutionResult} object.\n *\n * @property {string} methodName - The name of the DID method.\n * @method resolve - Asynchronous method to resolve a DID URI. Takes the DID URI and optional resolution options.\n */\nexport interface DidMethodResolver {\n  /**\n   * The name of the DID method.\n   *\n   * For example, in the DID `did:example:123456`, \"example\" would be the method name.\n   */\n  methodName: string;\n\n  new (): DidMethod;\n\n  /**\n   * Resolves a DID URI.\n   *\n   * This function should resolve the DID URI in accordance with the DID method specification being\n   * implemented, using the provided `options`.\n   *\n   * @param didUri - The DID URI to be resolved.\n   * @param options - Optional. The options used for resolving the DID.\n   * @returns A {@link DidResolutionResult} object containing the DID document and metadata or an error.\n   */\n  resolve(didUri: string, options?: DidResolutionOptions): Promise<DidResolutionResult>;\n}\n\n/**\n * Represents the result of a Decentralized Identifier (DID) registration operation.\n *\n * This type encapsulates the complete outcome of registering a DID, including the registration\n * metadata, the DID document (if registration is successful), and metadata about the DID document.\n */\nexport interface DidRegistrationResult {\n  /**\n   * The DID document resulting from the registration process, if successful.\n   *\n   * If the registration operation was successful, this MUST contain a DID document\n   * corresponding to the DID. If the registration is unsuccessful, this value MUST be empty.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocument | DID Core Specification, \u00A7 DID Document}\n   */\n  didDocument: DidDocument | null;\n\n  /**\n   * Metadata about the DID Document.\n   *\n   * This structure contains information about the DID Document like creation and update timestamps,\n   * deactivation status, versioning information, and other details relevant to the DID Document.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#dfn-diddocumentmetadata | DID Core Specification, \u00A7 DID Document Metadata}\n   */\n  didDocumentMetadata: DidMetadata;\n\n  /**\n   * A metadata structure consisting of values relating to the results of the DID registration\n   * process.\n   *\n   * This structure is REQUIRED, and in the case of an error in the registration process,\n   * this MUST NOT be empty. If the registration is not successful, this structure MUST contain an\n   * `error` property describing the error.\n   */\n  didRegistrationMetadata: DidRegistrationMetadata;\n}\n\n/**\n * Represents metadata related to the result of a DID registration operation.\n *\n * This type includes fields that provide information about the outcome of a DID registration\n * process (e.g., create, update, deactivate), including any errors that occurred.\n *\n * This metadata typically changes between invocations of the `create`, `update`, and `deactivate`\n * functions, as it represents data about the registration process itself.\n */\nexport type DidRegistrationMetadata = {\n  /**\n   * An error code indicating issues encountered during the DID registration process.\n   *\n   * While the DID Core specification does not define a specific set of error codes for the result\n   * returned by the `create`, `update`, or `deactivate` functions, it is recommended to use the\n   * error codes defined in the DID Specification Registries for\n   * {@link https://www.w3.org/TR/did-spec-registries/#error | DID Resolution Metadata }.\n   *\n   * Recommended error codes include:\n   *   - `internalError`: An unexpected error occurred during DID registration process.\n   *   - `invalidDid`: The provided DID is invalid.\n   *   - `invalidDidDocument`: The provided DID document does not conform to valid syntax.\n   *   - `invalidDidDocumentLength`: The byte length of the provided DID document does not match the expected value.\n   *   - `invalidSignature`: Verification of a signature failed.\n   *   - `methodNotSupported`: The DID method specified is not supported.\n   *   - Custom error codes can also be provided as strings.\n   */\n  error?: string;\n\n  // Additional output metadata generated during DID registration.\n  [key: string]: any;\n};\n\n/**\n * Base abstraction for all Decentralized Identifier (DID) method implementations.\n *\n * This base class serves as a foundational structure upon which specific DID methods\n * can be implemented. Subclasses should furnish particular method and data models adherent\n * to various DID methods, taking care to adhere to the\n * {@link https://www.w3.org/TR/did-core/ | W3C DID Core specification} and the\n * respective DID method specifications.\n */\nexport class DidMethod {\n  /**\n   * MUST be implemented by all DID method implementations that extend {@link DidMethod}.\n   *\n   * Given the W3C DID Document of a DID, return the verification method that will be used for\n   * signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, each DID method implementation will select a default\n   * verification method from the DID Document.\n   *\n   * @param _params - The parameters for the `getSigningMethod` operation.\n   * @param _params.didDocument - DID Document to get the verification method from.\n   * @param _params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod(_params: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod | undefined> {\n    throw new Error(`Not implemented: Classes extending DidMethod must implement getSigningMethod()`);\n  }\n\n  /**\n   * MUST be implemented by all DID method implementations that extend {@link DidMethod}.\n   *\n   * Resolves a DID URI to a DID Document.\n   *\n   * @param _didUri - The DID to be resolved.\n   * @param _options - Optional parameters for resolving the DID.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(_didUri: string, _options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    throw new Error(`Not implemented: Classes extending DidMethod must implement resolve()`);\n  }\n}", "import type { Packet, StringAnswer, TxtAnswer, TxtData } from '@dnsquery/dns-packet';\nimport type {\n  Jwk,\n  Signer,\n  CryptoApi,\n  KeyIdentifier,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  AsymmetricKeyConverter,\n} from '@web5/crypto';\n\nimport bencode from 'bencode';\nimport { Convert } from '@web5/common';\nimport { computeJwkThumbprint, Ed25519, LocalKeyManager, Secp256k1, Secp256r1, X25519 } from '@web5/crypto';\nimport { AUTHORITATIVE_ANSWER, decode as dnsPacketDecode, encode as dnsPacketEncode } from '@dnsquery/dns-packet';\n\nimport type { DidMetadata, PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod, DidRegistrationResult } from './did-method.js';\nimport type {\n  DidService,\n  DidDocument,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidVerificationMethod,\n} from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { extractDidFragment } from '../utils.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { DidVerificationRelationship } from '../types/did-core.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Represents a BEP44 message, which is used for storing and retrieving data in the Mainline DHT\n * network.\n *\n * A BEP44 message is used primarily in the context of the DID DHT method for publishing and\n * resolving DID documents in the DHT network. This type encapsulates the data structure required\n * for such operations in accordance with BEP44.\n *\n * @see {@link https://www.bittorrent.org/beps/bep_0044.html | BEP44}\n */\nexport interface Bep44Message {\n  /**\n   * The public key bytes of the Identity Key, which serves as the identifier in the DHT network for\n   * the corresponding BEP44 message.\n   */\n  k: Uint8Array;\n\n  /**\n   * The sequence number of the message, used to ensure the latest version of the data is retrieved\n   * and updated. It's a monotonically increasing number.\n   */\n  seq: number;\n\n  /**\n   * The signature of the message, ensuring the authenticity and integrity of the data. It's\n   * computed over the bencoded sequence number and value.\n   */\n  sig: Uint8Array;\n\n  /**\n   * The actual data being stored or retrieved from the DHT network, typically encoded in a format\n   * suitable for DNS packet representation of a DID Document.\n   */\n  v: Uint8Array;\n}\n\n/**\n * Options for creating a Decentralized Identifier (DID) using the DID DHT method.\n */\nexport interface DidDhtCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optionally specify that the DID Subject is also identified by one or more other DIDs or URIs.\n   *\n   * A DID subject can have multiple identifiers for different purposes, or at different times.\n   * The assertion that two or more DIDs (or other types of URI) refer to the same DID subject can\n   * be made using the `alsoKnownAs` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#also-known-as | DID Core Specification, \u00A7 Also Known As}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   alsoKnownAs: 'did:example:123'\n   * };\n   * ```\n   */\n  alsoKnownAs?: string[];\n\n  /**\n   * Optionally specify which DID (or DIDs) is authorized to make changes to the DID document.\n   *\n   * A DID controller is an entity that is authorized to make changes to a DID document. Typically,\n   * only the DID Subject (i.e., the value of `id` property in the DID document) is authoritative.\n   * However, another DID (or DIDs) can be specified as the DID controller, and when doing so, any\n   * verification methods contained in the DID document for the other DID should be accepted as\n   * authoritative. In other words, proofs created by the controller DID should be considered\n   * equivalent to proofs created by the DID Subject.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#did-controller | DID Core Specification, \u00A7 DID Controller}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   controller: 'did:example:123'\n   * };\n   * ```\n   */\n  controllers?: string | string[];\n\n  /**\n   * Optional. The URI of a server involved in executing DID method operations. In the context of\n   * DID creation, the endpoint is expected to be a DID DHT Gateway or Pkarr relay. If not\n   * specified, a default gateway node is used.\n   */\n  gatewayUri?: string;\n\n  /**\n   * Optional. Determines whether the created DID should be published to the DHT network.\n   *\n   * If set to `true` or omitted, the DID is publicly discoverable. If `false`, the DID is not\n   * published and cannot be resolved by others. By default, newly created DIDs are published.\n   *\n   * @see {@link https://did-dht.com | DID DHT Method Specification}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   publish: false\n   * };\n   * ```\n   */\n  publish?: boolean;\n\n  /**\n   * Optional. An array of service endpoints associated with the DID.\n   *\n   * Services are used in DID documents to express ways of communicating with the DID subject or\n   * associated entities. A service can be any type of service the DID subject wants to advertise,\n   * including decentralized identity management services for further discovery, authentication,\n   * authorization, or interaction.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, \u00A7 Services}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   services: [\n   *     {\n   *       id: 'did:dht:i9xkp8ddcbcg8jwq54ox699wuzxyifsqx4jru45zodqu453ksz6y#dwn',\n   *       type: 'DecentralizedWebNode',\n   *       serviceEndpoint: ['https://example.com/dwn1', 'https://example/dwn2']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  services?: DidService[];\n\n  /**\n   * Optionally specify one or more registered DID DHT types to make the DID discovereable.\n   *\n   * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish\n   * to be discoverable and resolveable by type can include one or more types when publishing their\n   * DID document to a DID DHT Gateway.\n   *\n   * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}.\n   */\n  types?: (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[];\n\n  /**\n   * Optional. An array of verification methods to be included in the DID document.\n   *\n   * By default, a newly created DID DHT document will contain a single Ed25519 verification method,\n   * also known as the {@link https://did-dht.com/#term:identity-key | Identity Key}. Additional\n   * verification methods can be added to the DID document using the `verificationMethods` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n   *\n   * @example\n   * ```ts\n   * const did = await DidDht.create({\n   *  options: {\n   *   verificationMethods: [\n   *     {\n   *       algorithm: 'Ed25519',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     },\n   *     {\n   *       algorithm: 'Ed25519',\n   *       id: 'dwn-sig',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Proof to used to construct the `_prv._did.` DNS record as described in https://did-dht.com/#rotation to link a DID to a previous DID.\n */\nexport type PreviousDidProof = {\n  /** The previous DID. */\n  previousDid: string;\n\n  /** The signature signed using the private Identity Key of the previous DID in Base64URL format. */\n  signature: string;\n};\n\n/**\n * The default DID DHT Gateway or Pkarr Relay server to use when publishing and resolving DID\n * documents.\n */\nconst DEFAULT_GATEWAY_URI = 'https://diddht.tbddev.org';\n\n/**\n * The version of the DID DHT specification that is implemented by this library.\n *\n * When a DID DHT document is published to the DHT network, the version of the specification that\n * was used to create the document is included in the DNS TXT record for the root record. This\n * allows clients to determine whether the DID DHT document is compatible with the client's\n * implementation of the DID DHT specification. The version number is not present in the\n * corresponding DID document.\n *\n * @see {@link https://did-dht.com | DID DHT Method Specification}\n */\nconst DID_DHT_SPECIFICATION_VERSION = 0;\n\n/**\n * The default TTL for DNS records published to the DHT network.\n *\n * The recommended TTL value is 7200 seconds (2 hours) since it matches the default TTL for\n * Mainline DHT records.\n */\nconst DNS_RECORD_TTL = 7200;\n\n/**\n * Character used to separate distinct elements or entries in the DNS packet representation\n * of a DID Document.\n *\n * For example, verification methods, verification relationships, and services are separated by\n * semicolons (`;`) in the root record:\n * ```\n * vm=k1;auth=k1;asm=k2;inv=k3;del=k3;srv=s1\n * ```\n */\nconst PROPERTY_SEPARATOR = ';';\n\n/**\n * Character used to separate distinct values within a single element or entry in the DNS packet\n * representation of a DID Document.\n *\n * For example, multiple key references for the `authentication` verification relationships are\n * separated by commas (`,`):\n * ```\n * auth=0,1,2\n * ```\n */\nconst VALUE_SEPARATOR = ',';\n\n/**\n * Represents an optional extension to a DID Document\u2019s DNS packet representation exposed as a\n * type index.\n *\n * Type indexing is an OPTIONAL feature that enables DIDs to become discoverable. DIDs that wish to\n * be discoverable and resolveable by type can include one or more types when publishing their DID\n * document to a DID DHT Gateway.\n *\n * The registered DID types are published in the {@link https://did-dht.com/registry/index.html#indexed-types | DID DHT Registry}.\n */\nexport enum DidDhtRegisteredDidType {\n  /**\n   * Type 0 is reserved for DIDs that do not wish to associate themselves with a specific type but\n   * wish to make themselves discoverable.\n   */\n  Discoverable = 0,\n\n  /**\n   * Organization\n   * @see {@link https://schema.org/Organization | schema definition}\n   */\n  Organization = 1,\n\n  /**\n   * Government Organization\n   * @see {@link https://schema.org/GovernmentOrganization | schema definition}\n   */\n  Government = 2,\n\n  /**\n   * Corporation\n   * @see {@link https://schema.org/Corporation | schema definition}\n   */\n  Corporation = 3,\n\n  /**\n   * Corporation\n   * @see {@link https://schema.org/Corporation | schema definition}\n   */\n  LocalBusiness = 4,\n\n  /**\n   * Software Package\n   * @see {@link https://schema.org/SoftwareSourceCode | schema definition}\n   */\n  SoftwarePackage = 5,\n\n  /**\n   * Web App\n   * @see {@link https://schema.org/WebApplication | schema definition}\n   */\n  WebApp = 6,\n\n  /**\n   * Financial Institution\n   * @see {@link https://schema.org/FinancialService | schema definition}\n   */\n  FinancialInstitution = 7\n}\n\n/**\n * Enumerates the types of keys that can be used in a DID DHT document.\n *\n * The DID DHT method supports various cryptographic key types. These key types are essential for\n * the creation and management of DIDs and their associated cryptographic operations like signing\n * and encryption. The registered key types are published in the DID DHT Registry and each is\n * assigned a unique numerical value for use by client and gateway implementations.\n *\n * The registered key types are published in the {@link https://did-dht.com/registry/index.html#key-type-index | DID DHT Registry}.\n */\nexport enum DidDhtRegisteredKeyType {\n  /**\n   * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature\n   * Algorithm) and Curve25519.\n   */\n  Ed25519 = 0,\n\n  /**\n   * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized\n   * systems.\n   */\n  secp256k1 = 1,\n\n  /**\n   * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations\n   * and is widely supported in various cryptographic libraries and standards.\n   */\n  secp256r1 = 2,\n\n  /**\n   * X25519: A public key used for Diffie-Hellman key exchange using Curve25519.\n   */\n  X25519 = 3,\n}\n\n/**\n * Maps {@link https://www.w3.org/TR/did-core/#verification-relationships | DID Core Verification Relationship}\n * values to the corresponding record name in the DNS packet representation of a DHT DID document.\n */\nexport enum DidDhtVerificationRelationship {\n  /**\n   * Specifies how the DID subject is expected to be authenticated.\n   */\n  authentication = 'auth',\n\n  /**\n   * Specifies how the DID subject is expected to express claims, such as for issuing Verifiable\n   * Credentials.\n   */\n  assertionMethod = 'asm',\n\n  /**\n   * Specifies a mechanism used by the DID subject to delegate a cryptographic capability to another\n   * party\n   */\n  capabilityDelegation = 'del',\n\n  /**\n   * Specifies a verification method used by the DID subject to invoke a cryptographic capability.\n   */\n  capabilityInvocation = 'inv',\n\n  /**\n   * Specifies how an entity can generate encryption material to communicate confidentially with the\n   * DID subject.\n   */\n  keyAgreement = 'agm'\n}\n\n/**\n * Private helper that maps algorithm identifiers to their corresponding DID DHT\n * {@link DidDhtRegisteredKeyType | registered key type}.\n */\nconst AlgorithmToKeyTypeMap = {\n  Ed25519   : DidDhtRegisteredKeyType.Ed25519,\n  ES256K    : DidDhtRegisteredKeyType.secp256k1,\n  ES256     : DidDhtRegisteredKeyType.secp256r1,\n  'P-256'   : DidDhtRegisteredKeyType.secp256r1,\n  secp256k1 : DidDhtRegisteredKeyType.secp256k1,\n  secp256r1 : DidDhtRegisteredKeyType.secp256r1,\n  X25519    : DidDhtRegisteredKeyType.X25519,\n} as const;\n\n/**\n * Private helper that maps did dht registered key types to their corresponding default algorithm identifiers.\n */\nconst KeyTypeToDefaultAlgorithmMap = {\n  [DidDhtRegisteredKeyType.Ed25519]   : 'EdDSA',\n  [DidDhtRegisteredKeyType.secp256k1] : 'ES256K',\n  [DidDhtRegisteredKeyType.secp256r1] : 'ES256',\n  [DidDhtRegisteredKeyType.X25519]    : 'ECDH-ES+A256KW',\n};\n\n/**\n * The `DidDht` class provides an implementation of the `did:dht` DID method.\n *\n * Features:\n * - DID Creation: Create new `did:dht` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing verification method keys or\n *                       or a key in a Key Management System (KMS). If supported by the KMS, a DID's\n *                       key can be exported to a portable DID format.\n * - DID Resolution: Resolve a `did:dht` to its corresponding DID Document stored in the DHT network.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @remarks\n * The `did:dht` method leverages the distributed nature of the Mainline DHT network for\n * decentralized identity management. This method allows DIDs to be resolved without relying on\n * centralized registries or ledgers, enhancing privacy and control for users. The DID Document is\n * stored and retrieved from the DHT network, and the method includes optional mechanisms for\n * discovering DIDs by type.\n *\n * The DID URI in the `did:dht` method includes a method-specific identifier called the Identity Key\n * which corresponds to the DID's entry in the DHT network. The Identity Key required to make\n * changes to the DID Document since Mainline DHT nodes validate the signature of each message\n * before storing the value in the DHT.\n *\n * @see {@link https://did-dht.com | DID DHT Method Specification}\n *\n * @example\n * ```ts\n * // DID Creation\n * const did = await DidDht.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidDht.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidDht.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Import / Export\n *\n * // Export a BearerDid object to the PortableDid format.\n * const portableDid = await did.export();\n *\n * // Reconstruct a BearerDid object from a PortableDid\n * const did = await DidDht.import(portableDid);\n * ```\n */\nexport class DidDht extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID DHT specification.\n   */\n  public static methodName = 'dht';\n\n  /**\n   * Creates a new DID using the `did:dht` method formed from a newly generated key.\n   *\n   * @remarks\n   * The DID URI is formed by z-base-32 encoding the Identity Key public key and prefixing with\n   * `did:dht:`.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated which serves as the\n   *   Identity Key.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidDht.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidDht.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate\n   *                            keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidDhtCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that the algorithm for any given verification method is supported by the\n    // DID DHT specification.\n    if (options.verificationMethods?.some(vm => !(vm.algorithm in AlgorithmToKeyTypeMap))) {\n      throw new Error('One or more verification method algorithms are not supported');\n    }\n\n    // Check 2: Validate that the ID for any given verification method is unique.\n    const methodIds = options.verificationMethods?.filter(vm => 'id' in vm).map(vm => vm.id);\n    if (methodIds && methodIds.length !== new Set(methodIds).size) {\n      throw new Error('One or more verification method IDs are not unique');\n    }\n\n    // Check 3: Validate that the required properties for any given services are present.\n    if (options.services?.some(s => !s.id || !s.type || !s.serviceEndpoint)) {\n      throw new Error('One or more services are missing required properties');\n    }\n\n    // Generate random key material for the Identity Key.\n    const identityKeyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n    const identityKey = await keyManager.getPublicKey({ keyUri: identityKeyUri });\n\n    // Compute the DID URI from the Identity Key.\n    const didUri = await DidDhtUtils.identityKeyToIdentifier({ identityKey });\n\n    // Begin constructing the DID Document.\n    const document: DidDocument = {\n      id: didUri,\n      ...options.alsoKnownAs && { alsoKnownAs: options.alsoKnownAs },\n      ...options.controllers && { controller: options.controllers }\n    };\n\n    // If the given verification methods do not contain an Identity Key, add one.\n    const verificationMethodsToAdd = [...options.verificationMethods ?? []];\n    if (!verificationMethodsToAdd?.some(vm => vm.id?.split('#').pop() === '0')) {\n      // Add the Identity Key to the beginning of the key set.\n      verificationMethodsToAdd.unshift({\n        algorithm : 'Ed25519' as any,\n        id        : '0',\n        purposes  : ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation']\n      });\n    }\n\n    // Generate random key material for the Identity Key and any additional verification methods.\n    // Add verification methods to the DID document.\n    for (const verificationMethod of verificationMethodsToAdd) {\n      // Generate a random key for the verification method, or if its the Identity Key's\n      // verification method (`id` is 0) use the key previously generated.\n      const keyUri = (verificationMethod.id && verificationMethod.id.split('#').pop() === '0')\n        ? identityKeyUri\n        : await keyManager.generateKey({ algorithm: verificationMethod.algorithm });\n\n      const publicKey = await keyManager.getPublicKey({ keyUri });\n\n      // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID.\n      let methodId = verificationMethod.id ?? publicKey.kid ?? await computeJwkThumbprint({ jwk: publicKey });\n      methodId = `${didUri}#${extractDidFragment(methodId)}`; // Remove fragment prefix, if any.\n\n      // Initialize the `verificationMethod` array if it does not already exist.\n      document.verificationMethod ??= [];\n\n      // Add the verification method to the DID document.\n      document.verificationMethod.push({\n        id           : methodId,\n        type         : 'JsonWebKey',\n        controller   : verificationMethod.controller ?? didUri,\n        publicKeyJwk : publicKey,\n      });\n\n      // Add the verification method to the specified purpose properties of the DID document.\n      for (const purpose of verificationMethod.purposes ?? []) {\n        // Initialize the purpose property if it does not already exist.\n        if (!document[purpose]) document[purpose] = [];\n        // Add the verification method to the purpose property.\n        document[purpose]!.push(methodId);\n      }\n    }\n\n    // Add services, if any, to the DID document.\n    options.services?.forEach(service => {\n      document.service ??= [];\n      service.id = `${didUri}#${service.id.split('#').pop()}`; // Remove fragment prefix, if any.\n      document.service.push(service);\n    });\n\n    // Create the BearerDid object, including the registered DID types (if any), and specify that\n    // the DID has not yet been published.\n    const did = new BearerDid({\n      uri      : didUri,\n      document,\n      metadata : {\n        published: false,\n        ...options.types && { types: options.types }\n      },\n      keyManager\n    });\n\n    // By default, publish the DID document to a DHT Gateway unless explicitly disabled.\n    if (options.publish ?? true) {\n      const registrationResult = await DidDht.publish({ did, gatewayUri: options.gatewayUri });\n      did.metadata = registrationResult.didDocumentMetadata;\n    }\n\n    return did;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID DHT method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidDht.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the\n   *          provided PortableDid.\n   * @throws An error if the PortableDid document does not contain any verification methods, lacks\n   *         an Identity Key, or the keys for any verification method are missing in the key\n   *         manager.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidDht.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    // Validate that the given verification methods contain an Identity Key.\n    if (!did.document.verificationMethod?.some(vm => vm.id?.split('#').pop() === '0')) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `DID document must contain an Identity Key`);\n    }\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:dht` DID, return the verification method that will be used\n   * for signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, the Identity Key's verification method with an ID fragment\n   * of '#0' is used.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument, methodId = '#0' }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Attempt to find a verification method that matches the given method ID, or if not given,\n    // find the first verification method intended for signing claims.\n    const verificationMethod = didDocument.verificationMethod?.find(\n      vm => extractDidFragment(vm.id) === (extractDidFragment(methodId) ?? extractDidFragment(didDocument.assertionMethod?.[0]))\n    );\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Publishes a DID to the DHT, making it publicly discoverable and resolvable.\n   *\n   * This method handles the publication of a DID Document associated with a `did:dht` DID to the\n   * Mainline DHT network. The publication process involves storing the DID Document in Mainline DHT\n   * via a Pkarr relay server.\n   *\n   * @remarks\n   * - This method is typically invoked automatically during the creation of a new DID unless the\n   *   `publish` option is set to `false`.\n   * - For existing, unpublished DIDs, it can be used to publish the DID Document to Mainline DHT.\n   * - The method relies on the specified Pkarr relay server to interface with the DHT network.\n   *\n   * @example\n   * ```ts\n   * // Generate a new DID and keys but explicitly disable publishing.\n   * const did = await DidDht.create({ options: { publish: false } });\n   * // Publish the DID to the DHT.\n   * const registrationResult = await DidDht.publish({ did });\n   * // `registrationResult.didDocumentMetadata.published` is true if the DID was successfully published.\n   * ```\n   *\n   * @param params - The parameters for the `publish` operation.\n   * @param params.did - The `BearerDid` object representing the DID to be published.\n   * @param params.gatewayUri - Optional. The URI of a server involved in executing DID method\n   *                            operations. In the context of publishing, the endpoint is expected\n   *                            to be a DID DHT Gateway or Pkarr Relay. If not specified, a default\n   *                            gateway node is used.\n   * @returns A promise that resolves to a {@link DidRegistrationResult} object that contains\n   *          the result of registering the DID with a DID DHT Gateway or Pkarr relay.\n   */\n  public static async publish({ did, gatewayUri = DEFAULT_GATEWAY_URI }: {\n    did: BearerDid;\n    gatewayUri?: string;\n  }): Promise<DidRegistrationResult> {\n    const registrationResult = await DidDhtDocument.put({ did, gatewayUri });\n\n    return registrationResult;\n  }\n\n  /**\n   * Resolves a `did:dht` identifier to its corresponding DID document.\n   *\n   * This method performs the resolution of a `did:dht` DID, retrieving its DID Document from the\n   * Mainline DHT network. The process involves querying the DHT network via a Pkarr relay server to\n   * retrieve the DID Document that corresponds to the given DID identifier.\n   *\n   * @remarks\n   * - If a `gatewayUri` option is not specified, a default Pkarr relay is used to access the DHT\n   *   network.\n   * - It decodes the DID identifier and retrieves the associated DID Document and metadata.\n   * - In case of resolution failure, appropriate error information is returned.\n   *\n   * @example\n   * ```ts\n   * const resolutionResult = await DidDht.resolve('did:dht:example');\n   * ```\n   *\n   * @param didUri - The DID to be resolved.\n   * @param options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of\n   *          the resolution.\n   */\n  public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise<DidResolutionResult> {\n    // To execute the read method operation, use the given gateway URI or a default.\n    const gatewayUri = options?.gatewayUri ?? DEFAULT_GATEWAY_URI;\n\n    try {\n      // Attempt to decode the z-base-32-encoded identifier.\n      await DidDhtUtils.identifierToIdentityKey({ didUri });\n\n      // Attempt to retrieve the DID document and metadata from the DHT network.\n      const { didDocument, didDocumentMetadata } = await DidDhtDocument.get({ didUri, gatewayUri });\n\n      // If the DID document was retrieved successfully, return it.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didDocument,\n        didDocumentMetadata\n      };\n\n    } catch (error: any) {\n      // Rethrow any unexpected errors that are not a `DidError`.\n      if (!(error instanceof DidError)) throw new Error(error);\n\n      // Return a DID Resolution Result with the appropriate error code.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error: error.code,\n          ...error.message && { errorMessage: error.message }\n        }\n      };\n    }\n  }\n}\n\n/**\n * The `DidDhtDocument` class provides functionality for interacting with the DID document stored in\n * Mainline DHT in support of DID DHT method create, resolve, update, and deactivate operations.\n *\n * This class includes methods for retrieving and publishing DID documents to and from the DHT,\n * using DNS packet encoding and DID DHT Gateway or Pkarr Relay servers.\n */\nexport class DidDhtDocument {\n  /**\n   * Retrieves a DID document and its metadata from the DHT network.\n   *\n   * @param params - The parameters for the get operation.\n   * @param params.didUri - The DID URI containing the Identity Key.\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object containing the DID\n   *          document and its metadata.\n   */\n  public static async get({ didUri, gatewayUri }: {\n    didUri: string;\n    gatewayUri: string;\n  }): Promise<DidResolutionResult> {\n    // Decode the z-base-32 DID identifier to public key as a byte array.\n    const publicKeyBytes = DidDhtUtils.identifierToIdentityKeyBytes({ didUri });\n\n    // Retrieve the signed BEP44 message from a DID DHT Gateway or Pkarr relay.\n    const bep44Message = await DidDhtDocument.pkarrGet({ gatewayUri, publicKeyBytes });\n\n    // Verify the signature of the BEP44 message and parse the value to a DNS packet.\n    const dnsPacket = await DidDhtUtils.parseBep44GetMessage({ bep44Message });\n\n    // Convert the DNS packet to a DID document and metadata.\n    const resolutionResult = await DidDhtDocument.fromDnsPacket({ didUri, dnsPacket });\n\n    // Set the version ID of the DID document metadata to the sequence number of the BEP44 message.\n    resolutionResult.didDocumentMetadata.versionId = bep44Message.seq.toString();\n\n    return resolutionResult;\n  }\n\n  /**\n   * Publishes a DID document to the DHT network.\n   *\n   * @param params - The parameters to use when publishing the DID document to the DHT network.\n   * @param params.did - The DID object whose DID document will be published.\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @returns A promise that resolves to a {@link DidRegistrationResult} object that contains\n   *          the result of registering the DID with a DID DHT Gateway or Pkarr relay.\n   */\n  public static async put({ did, gatewayUri }: {\n    did: BearerDid;\n    gatewayUri: string;\n  }): Promise<DidRegistrationResult> {\n    // Convert the DID document and DID metadata (such as DID types) to a DNS packet.\n    const dnsPacket = await DidDhtDocument.toDnsPacket({\n      didDocument              : did.document,\n      didMetadata              : did.metadata,\n      authoritativeGatewayUris : [gatewayUri]\n    });\n\n    // Create a signed BEP44 put message from the DNS packet.\n    const bep44Message = await DidDhtUtils.createBep44PutMessage({\n      dnsPacket,\n      publicKeyBytes : DidDhtUtils.identifierToIdentityKeyBytes({ didUri: did.uri }),\n      signer         : await did.getSigner({ methodId: '0' })\n    });\n\n    // Publish the DNS packet to the DHT network.\n    const putResult = await DidDhtDocument.pkarrPut({ gatewayUri, bep44Message });\n\n    // Return the result of processing the PUT operation, including the updated DID metadata with\n    // the version ID and the publishing result.\n    return {\n      didDocument         : did.document,\n      didDocumentMetadata : {\n        ...did.metadata,\n        published : putResult,\n        versionId : bep44Message.seq.toString()\n      },\n      didRegistrationMetadata: {}\n    };\n  }\n\n  /**\n   * Retrieves a signed BEP44 message from a DID DHT Gateway or Pkarr Relay server.\n   *\n   * @see {@link https://github.com/Nuhvi/pkarr/blob/main/design/relays.md | Pkarr Relay design}\n   *\n   * @param params\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @param params.publicKeyBytes - The public key bytes of the Identity Key, z-base-32 encoded.\n   * @returns A promise resolving to a BEP44 message containing the signed DNS packet.\n  */\n  private static async pkarrGet({ gatewayUri, publicKeyBytes }: {\n    publicKeyBytes: Uint8Array;\n    gatewayUri: string;\n  }): Promise<Bep44Message> {\n    // The identifier (key in the DHT) is the z-base-32 encoding of the Identity Key.\n    const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z();\n\n    // Concatenate the gateway URI with the identifier to form the full URL.\n    const url = new URL(identifier, gatewayUri).href;\n\n    // Transmit the Get request to the DID DHT Gateway or Pkarr Relay and get the response.\n    let response: Response;\n    try {\n      response = await fetch(url, { method: 'GET' });\n\n      if (!response.ok) {\n        throw new DidError(DidErrorCode.NotFound, `Pkarr record not found for: ${identifier}`);\n      }\n\n    } catch (error: any) {\n      if (error instanceof DidError) throw error;\n      throw new DidError(DidErrorCode.InternalError, `Failed to fetch Pkarr record: ${error.message}`);\n    }\n\n    // Read the Fetch Response stream into a byte array.\n    const messageBytes = await response.arrayBuffer();\n\n    if(!messageBytes) {\n      throw new DidError(DidErrorCode.NotFound, `Pkarr record not found for: ${identifier}`);\n    }\n\n    if (messageBytes.byteLength < 72) {\n      throw new DidError(DidErrorCode.InvalidDidDocumentLength, `Pkarr response must be at least 72 bytes but got: ${messageBytes.byteLength}`);\n    }\n\n    if (messageBytes.byteLength > 1072) {\n      throw new DidError(DidErrorCode.InvalidDidDocumentLength, `Pkarr response exceeds 1000 byte limit: ${messageBytes.byteLength}`);\n    }\n\n    // Decode the BEP44 message from the byte array.\n    const bep44Message: Bep44Message = {\n      k   : publicKeyBytes,\n      seq : Number(new DataView(messageBytes).getBigUint64(64)),\n      sig : new Uint8Array(messageBytes, 0, 64),\n      v   : new Uint8Array(messageBytes, 72)\n    };\n\n    return bep44Message;\n  }\n\n  /**\n   * Publishes a signed BEP44 message to a DID DHT Gateway or Pkarr Relay server.\n   *\n   * @see {@link https://github.com/Nuhvi/pkarr/blob/main/design/relays.md | Pkarr Relay design}\n   *\n   * @param params - The parameters to use when publishing a signed BEP44 message to a Pkarr relay server.\n   * @param params.gatewayUri - The DID DHT Gateway or Pkarr Relay URI.\n   * @param params.bep44Message - The BEP44 message to be published, containing the signed DNS packet.\n   * @returns A promise resolving to `true` if the message was successfully published, otherwise `false`.\n   */\n  private static async pkarrPut({ gatewayUri, bep44Message }: {\n    bep44Message: Bep44Message;\n    gatewayUri: string;\n  }): Promise<boolean> {\n    // The identifier (key in the DHT) is the z-base-32 encoding of the Identity Key.\n    const identifier = Convert.uint8Array(bep44Message.k).toBase32Z();\n\n    // Concatenate the gateway URI with the identifier to form the full URL.\n    const url = new URL(identifier, gatewayUri).href;\n\n    // Construct the body of the request according to the Pkarr relay specification.\n    const body = new Uint8Array(bep44Message.v.length + 72);\n    body.set(bep44Message.sig, 0);\n    new DataView(body.buffer).setBigUint64(bep44Message.sig.length, BigInt(bep44Message.seq));\n    body.set(bep44Message.v, bep44Message.sig.length + 8);\n\n    // Transmit the Put request to the Pkarr relay and get the response.\n    let response: Response;\n    try {\n      response = await fetch(url, {\n        method  : 'PUT',\n        headers : { 'Content-Type': 'application/octet-stream' },\n        body\n      });\n\n    } catch (error: any) {\n      throw new DidError(DidErrorCode.InternalError, `Failed to put Pkarr record for identifier ${identifier}: ${error.message}`);\n    }\n\n    // Return `true` if the DHT request was successful, otherwise return `false`.\n    return response.ok;\n  }\n\n  /**\n   * Converts a DNS packet to a DID document according to the DID DHT specification.\n   *\n   * @see {@link https://did-dht.com/#dids-as-dns-records | DID DHT Specification, \u00A7 DIDs as DNS Records}\n   *\n   * @param params - The parameters to use when converting a DNS packet to a DID document.\n   * @param params.didUri - The DID URI of the DID document.\n   * @param params.dnsPacket - The DNS packet to convert to a DID document.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object containing the DID\n   *          document and its metadata.\n   */\n  public static async fromDnsPacket({ didUri, dnsPacket }: {\n    didUri: string;\n    dnsPacket: Packet;\n  }): Promise<DidResolutionResult> {\n    // Begin constructing the DID Document.\n    const didDocument: DidDocument = { id: didUri };\n\n    // Since the DID document is being retrieved from the DHT, it is considered published.\n    const didDocumentMetadata: DidMetadata = {\n      published: true\n    };\n\n    const idLookup = new Map<string, string>();\n\n    for (const answer of dnsPacket?.answers ?? []) {\n      // DID DHT properties are ONLY present in DNS TXT records.\n      if (answer.type !== 'TXT') continue;\n\n      // Get the DID DHT record identifier (e.g., k0, aka, did, etc.) from the DNS resource name.\n      const dnsRecordId = answer.name.split('.')[0].substring(1);\n\n      switch (true) {\n        // Process an also known as record.\n        case dnsRecordId.startsWith('aka'): {\n          // Decode the DNS TXT record data value to a string.\n          const data = DidDhtUtils.parseTxtDataToString(answer.data);\n\n          // Add the 'alsoKnownAs' property to the DID document.\n          didDocument.alsoKnownAs = data.split(VALUE_SEPARATOR);\n\n          break;\n        }\n\n        // Process a controller record.\n        case dnsRecordId.startsWith('cnt'): {\n          // Decode the DNS TXT record data value to a string.\n          const data = DidDhtUtils.parseTxtDataToString(answer.data);\n\n          // Add the 'controller' property to the DID document.\n          didDocument.controller = data.includes(VALUE_SEPARATOR) ? data.split(VALUE_SEPARATOR) : data;\n\n          break;\n        }\n\n        // Process verification methods.\n        case dnsRecordId.startsWith('k'): {\n          // Get the key type (t), Base64URL-encoded public key (k), algorithm (a), and\n          // optionally, controller (c) or Verification Method ID (id) from the decoded TXT record data.\n          const { id, t, k, c, a: parsedAlg } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // Convert the public key from Base64URL format to a byte array.\n          const publicKeyBytes = Convert.base64Url(k).toUint8Array();\n\n          // Use the key type integer to look up the cryptographic curve name.\n          const namedCurve = DidDhtRegisteredKeyType[Number(t)];\n\n          // Convert the public key from a byte array to JWK format.\n          let publicKey = await DidDhtUtils.keyConverter(namedCurve).bytesToPublicKey({ publicKeyBytes });\n\n          publicKey.alg = parsedAlg || KeyTypeToDefaultAlgorithmMap[Number(t) as DidDhtRegisteredKeyType];\n\n          // TOOD: when this is complete https://github.com/TBD54566975/web5-js/issues/638 then we can add this back and\n          // update the test vectors kid back to '0'\n          // if(dnsRecordId === 'k0') {\n          //   publicKey.kid = '0';\n          // }\n\n          // Determine the Verification Method ID: '0' for the identity key,\n          // the id from the TXT Data Object, or the JWK thumbprint if an explicity Verification Method ID not defined.\n          const vmId = dnsRecordId === 'k0' ? '0' : id !== undefined ? id : await computeJwkThumbprint({ jwk: publicKey });\n\n          // Initialize the `verificationMethod` array if it does not already exist.\n          didDocument.verificationMethod ??= [];\n\n          // Prepend the DID URI to the ID fragment to form the full verification method ID.\n          const methodId = `${didUri}#${vmId}`;\n\n          // Add the verification method to the DID document.\n          didDocument.verificationMethod.push({\n            id           : methodId,\n            type         : 'JsonWebKey',\n            controller   : c ?? didUri,\n            publicKeyJwk : publicKey,\n          });\n\n          // Add a mapping from the DNS record ID (e.g., 'k0', 'k1', etc.) to the verification\n          // method ID (e.g., 'did:dht:...#0', etc.).\n          idLookup.set(dnsRecordId, methodId);\n\n          break;\n        }\n\n        // Process services.\n        case dnsRecordId.startsWith('s'): {\n          // Get the service ID fragment (id), type (t), service endpoint (se), and optionally,\n          // other properties from the decoded TXT record data.\n          const { id, t, se, ...customProperties } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // if multi-values: 'a,b,c' -> ['a', 'b', 'c'], if single-value: 'a' -> ['a']\n          // NOTE: The service endpoint technically can either be a string or an array of strings,\n          // we enforce an array for single-value to simplify verification of vector 3 in the spec: https://did-dht.com/#vector-3\n          const serviceEndpoint = se.includes(VALUE_SEPARATOR) ? se.split(VALUE_SEPARATOR) : [se];\n\n          // Convert custom property values to either a string or an array of strings.\n          const serviceProperties = Object.fromEntries(Object.entries(customProperties).map(\n            ([k, v]) => [k, v.includes(VALUE_SEPARATOR) ? v.split(VALUE_SEPARATOR) : v]\n          ));\n\n          // Initialize the `service` array if it does not already exist.\n          didDocument.service ??= [];\n\n          didDocument.service.push({\n            ...serviceProperties,\n            id   : `${didUri}#${id}`,\n            type : t,\n            serviceEndpoint\n          });\n\n          break;\n        }\n\n        // Process DID DHT types.\n        case dnsRecordId.startsWith('typ'): {\n          // Decode the DNS TXT record data value to an object.\n          const { id: types } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // Add the DID DHT Registered DID Types represented as numbers to DID metadata.\n          didDocumentMetadata.types = types.split(VALUE_SEPARATOR).map(typeInteger => Number(typeInteger));\n\n          break;\n        }\n\n        // Process root record.\n        case dnsRecordId.startsWith('did'): {\n          // Helper function that maps verification relationship values to verification method IDs.\n          const recordIdsToMethodIds = (data: string): string[] => data\n            .split(VALUE_SEPARATOR)\n            .map(dnsRecordId => idLookup.get(dnsRecordId))\n            .filter((id): id is string => typeof id === 'string');\n\n          // Decode the DNS TXT record data and destructure verification relationship properties.\n          const { auth, asm, del, inv, agm } = DidDhtUtils.parseTxtDataToObject(answer.data);\n\n          // Add the verification relationships, if any, to the DID document.\n          if (auth) didDocument.authentication = recordIdsToMethodIds(auth);\n          if (asm) didDocument.assertionMethod = recordIdsToMethodIds(asm);\n          if (del) didDocument.capabilityDelegation = recordIdsToMethodIds(del);\n          if (inv) didDocument.capabilityInvocation = recordIdsToMethodIds(inv);\n          if (agm) didDocument.keyAgreement = recordIdsToMethodIds(agm);\n\n          break;\n        }\n      }\n    }\n\n    return { didDocument, didDocumentMetadata, didResolutionMetadata: {} };\n  }\n\n  /**\n   * Converts a DID document to a DNS packet according to the DID DHT specification.\n   *\n   * @see {@link https://did-dht.com/#dids-as-dns-records | DID DHT Specification, \u00A7 DIDs as DNS Records}\n   *\n   * @param params - The parameters to use when converting a DID document to a DNS packet.\n   * @param params.didDocument - The DID document to convert to a DNS packet.\n   * @param params.didMetadata - The DID metadata to include in the DNS packet.\n   * @param params.authoritativeGatewayUris - The URIs of the Authoritative Gateways to generate NS records from.\n   * @param params.previousDidProof - The signature proof that this DID is linked to the given previous DID.\n   * @returns A promise that resolves to a DNS packet.\n   */\n  public static async toDnsPacket({ didDocument, didMetadata, authoritativeGatewayUris, previousDidProof }: {\n    didDocument: DidDocument;\n    didMetadata: DidMetadata;\n    authoritativeGatewayUris?: string[];\n    previousDidProof?: PreviousDidProof;\n  }): Promise<Packet> {\n    const txtRecords: TxtAnswer[] = [];\n    const nsRecords: StringAnswer[] = [];\n    const idLookup = new Map<string, string>();\n    const serviceIds: string[] = [];\n    const verificationMethodIds: string[] = [];\n\n    // Add `_prv._did.` TXT record if previous DID proof is provided and valid.\n    if (previousDidProof !== undefined) {\n      const { signature, previousDid } = previousDidProof;\n\n      await DidDhtUtils.validatePreviousDidProof({\n        newDid: didDocument.id,\n        previousDidProof\n      });\n\n      txtRecords.push({\n        type : 'TXT',\n        name : '_prv._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : `id=${previousDid};s=${signature}`\n      });\n    }\n\n    // Add DNS TXT records if the DID document contains an `alsoKnownAs` property.\n    if (didDocument.alsoKnownAs) {\n      txtRecords.push({\n        type : 'TXT',\n        name : '_aka._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : didDocument.alsoKnownAs.join(VALUE_SEPARATOR)\n      });\n    }\n\n    // Add DNS TXT records if the DID document contains a `controller` property.\n    if (didDocument.controller) {\n      const controller = Array.isArray(didDocument.controller)\n        ? didDocument.controller.join(VALUE_SEPARATOR)\n        : didDocument.controller;\n      txtRecords.push({\n        type : 'TXT',\n        name : '_cnt._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : controller\n      });\n    }\n\n    // Add DNS TXT records for each verification method.\n    for (const [index, verificationMethod] of didDocument.verificationMethod?.entries() ?? []) {\n      const dnsRecordId = `k${index}`;\n      verificationMethodIds.push(dnsRecordId);\n      let methodId = verificationMethod.id.split('#').pop()!; // Remove fragment prefix, if any.\n      idLookup.set(methodId, dnsRecordId);\n\n      const publicKey = verificationMethod.publicKeyJwk;\n\n      if (!(publicKey?.crv && publicKey.crv in AlgorithmToKeyTypeMap)) {\n        throw new DidError(DidErrorCode.InvalidPublicKeyType, `Verification method '${verificationMethod.id}' contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`);\n      }\n\n      // Use the public key's `crv` property to get the DID DHT key type.\n      const keyType = DidDhtRegisteredKeyType[publicKey.crv as keyof typeof DidDhtRegisteredKeyType];\n\n      // Convert the public key from JWK format to a byte array.\n      const publicKeyBytes = await DidDhtUtils.keyConverter(publicKey.crv).publicKeyToBytes({ publicKey });\n\n      // Convert the public key from a byte array to Base64URL format.\n      const publicKeyBase64Url = Convert.uint8Array(publicKeyBytes).toBase64Url();\n\n      // Define the data for the DNS TXT record.\n      const txtData = [`t=${keyType}`, `k=${publicKeyBase64Url}`];\n      // if the methodId is not the identity key or a thumbprint, explicity define the id within the DNS TXT record.\n      // otherwise the id can be inferred from the thumbprint.\n      if (methodId !== '0' && await computeJwkThumbprint({ jwk: publicKey }) !== methodId)  {\n        txtData.unshift(`id=${methodId}`);\n      }\n      // Only set the algorithm property (`a`) if it differs from the default algorithm for the key type.\n      if(publicKey.alg !== KeyTypeToDefaultAlgorithmMap[keyType]) {\n        txtData.push(`a=${publicKey.alg}`);\n      }\n\n      // Add the controller property, if set to a value other than the Identity Key (DID Subject).\n      if (verificationMethod.controller !== didDocument.id) txtData.push(`c=${verificationMethod.controller}`);\n\n      // Add a TXT record for the verification method.\n      txtRecords.push({\n        type : 'TXT',\n        name : `_${dnsRecordId}._did.`,\n        ttl  : DNS_RECORD_TTL,\n        data : txtData.join(PROPERTY_SEPARATOR)\n      });\n    }\n\n    // Add DNS TXT records for each service.\n    didDocument.service?.forEach((service, index) => {\n      const dnsRecordId = `s${index}`;\n      serviceIds.push(dnsRecordId);\n      let { id, type: t, serviceEndpoint: se, ...customProperties } = service;\n      id = extractDidFragment(id)!;\n      se = Array.isArray(se) ? se.join(',') : se;\n\n      // Define the data for the DNS TXT record.\n      const txtData = Object.entries({ id, t, se, ...customProperties }).map(\n        ([key, value]) => `${key}=${value}`\n      );\n\n      const txtDataString = txtData.join(PROPERTY_SEPARATOR);\n      const data = DidDhtUtils.chunkDataIfNeeded(txtDataString);\n\n      // Add a TXT record for the verification method.\n      txtRecords.push({\n        type : 'TXT',\n        name : `_${dnsRecordId}._did.`,\n        ttl  : DNS_RECORD_TTL,\n        data\n      });\n    });\n\n    // Initialize the root DNS TXT record with the DID DHT specification version.\n    const rootRecord: string[] = [`v=${DID_DHT_SPECIFICATION_VERSION}`];\n\n    // Add verification methods to the root record.\n    if (verificationMethodIds.length) {\n      rootRecord.push(`vm=${verificationMethodIds.join(VALUE_SEPARATOR)}`);\n    }\n\n    // Add verification relationships to the root record.\n    Object.keys(DidVerificationRelationship).forEach(relationship => {\n      // Collect the verification method IDs for the given relationship.\n      const dnsRecordIds = (didDocument[relationship as keyof DidDocument] as any[])\n        ?.map(id => idLookup.get(id.split('#').pop()));\n\n      // If the relationship includes verification methods, add them to the root record.\n      if (dnsRecordIds) {\n        const recordName = DidDhtVerificationRelationship[relationship as keyof typeof DidDhtVerificationRelationship];\n        rootRecord.push(`${recordName}=${dnsRecordIds.join(VALUE_SEPARATOR)}`);\n      }\n    });\n\n    // Add services to the root record.\n    if (serviceIds.length) {\n      rootRecord.push(`svc=${serviceIds.join(VALUE_SEPARATOR)}`);\n    }\n\n    // If defined, add a DNS TXT record for each registered DID type.\n    if (didMetadata.types?.length) {\n      // DID types can be specified as either a string or a number, so we need to normalize the\n      // values to integers.\n      const types = didMetadata.types as (DidDhtRegisteredDidType | keyof typeof DidDhtRegisteredDidType)[];\n      const typeIntegers = types.map(type => typeof type === 'string' ? DidDhtRegisteredDidType[type] : type);\n\n      txtRecords.push({\n        type : 'TXT',\n        name : '_typ._did.',\n        ttl  : DNS_RECORD_TTL,\n        data : `id=${typeIntegers.join(VALUE_SEPARATOR)}`\n      });\n    }\n\n    // Add a DNS TXT record for the root record.\n    txtRecords.push({\n      type : 'TXT',\n      name : '_did.' + DidDhtDocument.getUniqueDidSuffix(didDocument.id) + '.', // name of a Root Record MUST end in `<ID>.`\n      ttl  : DNS_RECORD_TTL,\n      data : rootRecord.join(PROPERTY_SEPARATOR)\n    });\n\n    // Add an NS record for each authoritative gateway URI.\n    for (const gatewayUri of authoritativeGatewayUris || []) {\n      nsRecords.push({\n        type : 'NS',\n        name : '_did.' + DidDhtDocument.getUniqueDidSuffix(didDocument.id) + '.', // name of an NS record a authoritative gateway MUST end in `<ID>.`\n        ttl  : DNS_RECORD_TTL,\n        data : gatewayUri + '.'\n      });\n    }\n\n    // Create a DNS response packet with the authoritative answer flag set.\n    const dnsPacket: Packet = {\n      id      : 0,\n      type    : 'response',\n      flags   : AUTHORITATIVE_ANSWER,\n      answers : [...txtRecords, ...nsRecords]\n    };\n\n    return dnsPacket;\n  }\n\n  /**\n   * Gets the unique portion of the DID identifier after the last `:` character.\n   * e.g. `did:dht:example` -> `example`\n   *\n   * @param did - The DID to extract the unique suffix from.\n   */\n  private static getUniqueDidSuffix(did: string ): string {\n    return did.split(':')[2];\n  }\n}\n\n/**\n * The `DidDhtUtils` class provides utility functions to support operations in the DID DHT method.\n * This includes functions for creating and parsing BEP44 messages, handling identity keys, and\n * converting between different formats and representations.\n */\nexport class DidDhtUtils {\n  /**\n   * Creates a BEP44 put message, which is used to publish a DID document to the DHT network.\n   *\n   * @param params - The parameters to use when creating the BEP44 put message\n   * @param params.dnsPacket - The DNS packet to encode in the BEP44 message.\n   * @param params.publicKeyBytes - The public key bytes of the Identity Key.\n   * @param params.signer - Signer that can sign and verify data using the Identity Key.\n   * @returns A promise that resolves to a BEP44 put message.\n   */\n  public static async createBep44PutMessage({ dnsPacket, publicKeyBytes, signer }: {\n      dnsPacket: Packet;\n      publicKeyBytes: Uint8Array;\n      signer: Signer;\n    }): Promise<Bep44Message> {\n    // BEP44 requires that the sequence number be a monotoically increasing integer, so we use the\n    // current time in seconds since Unix epoch as a simple solution. Higher precision is not\n    // recommended since DID DHT documents are not expected to change frequently and there are\n    // small differences in system clocks that can cause issues if multiple clients are publishing\n    // updates to the same DID document.\n    const sequenceNumber = Math.ceil(Date.now() / 1000);\n\n    // Encode the DNS packet into a byte array containing a UDP payload.\n    const encodedDnsPacket = dnsPacketEncode(dnsPacket);\n\n    // Encode the sequence and DNS byte array to bencode format.\n    const bencodedData = bencode.encode({ seq: sequenceNumber, v: encodedDnsPacket }).subarray(1, -1);\n\n    if (bencodedData.length > 1000) {\n      throw new DidError(DidErrorCode.InvalidDidDocumentLength, `DNS packet exceeds the 1000 byte maximum size: ${bencodedData.length} bytes`);\n    }\n\n    // Sign the BEP44 message.\n    const signature = await signer.sign({ data: bencodedData });\n\n    return { k: publicKeyBytes, seq: sequenceNumber, sig: signature, v: encodedDnsPacket };\n  }\n\n  /**\n   * Converts a DID URI to a JSON Web Key (JWK) representing the Identity Key.\n   *\n   * @param params - The parameters to use for the conversion.\n   * @param params.didUri - The DID URI containing the Identity Key.\n   * @returns A promise that resolves to a JWK representing the Identity Key.\n   */\n  public static async identifierToIdentityKey({ didUri }: {\n    didUri: string\n  }): Promise<Jwk> {\n    // Decode the method-specific identifier from z-base-32 to a byte array.\n    let identityKeyBytes = DidDhtUtils.identifierToIdentityKeyBytes({ didUri });\n\n    // Convert the byte array to a JWK.\n    const identityKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: identityKeyBytes });\n\n    return identityKey;\n  }\n\n  /**\n   * Converts a DID URI to the byte array representation of the Identity Key.\n   *\n   * @param params - The parameters to use for the conversion.\n   * @param params.didUri - The DID URI containing the Identity Key.\n   * @returns A byte array representation of the Identity Key.\n   */\n  public static identifierToIdentityKeyBytes({ didUri }: {\n    didUri: string\n  }): Uint8Array {\n    // Parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // Verify that the DID URI is valid.\n    if (!parsedDid) {\n      throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`);\n    }\n\n    // Verify the DID method is supported.\n    if (parsedDid.method !== DidDht.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Decode the method-specific identifier from z-base-32 to a byte array.\n    let identityKeyBytes: Uint8Array | undefined;\n    try {\n      identityKeyBytes = Convert.base32Z(parsedDid.id).toUint8Array();\n    } catch {\n      throw new DidError(DidErrorCode.InvalidPublicKey, `Failed to decode method-specific identifier`);\n    }\n\n    if (identityKeyBytes.length !== 32) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Invalid public key length: ${identityKeyBytes.length}`);\n    }\n\n    return identityKeyBytes;\n  }\n\n  /**\n   * Encodes a DID DHT Identity Key into a DID identifier.\n   *\n   * This method first z-base-32 encodes the Identity Key. The resulting string is prefixed with\n   * `did:dht:` to form the DID identifier.\n   *\n   * @param params - The parameters to use for the conversion.\n   * @param params.identityKey The Identity Key from which the DID identifier is computed.\n   * @returns A promise that resolves to a string containing the DID identifier.\n   */\n  public static async identityKeyToIdentifier({ identityKey }: {\n    identityKey: Jwk\n  }): Promise<string> {\n    // Convert the key from JWK format to a byte array.\n    const publicKeyBytes = await Ed25519.publicKeyToBytes({ publicKey: identityKey });\n\n    // Encode the byte array as a z-base-32 string.\n    const identifier = Convert.uint8Array(publicKeyBytes).toBase32Z();\n\n    return `did:${DidDht.methodName}:${identifier}`;\n  }\n\n  /**\n   * Returns the appropriate key converter for the specified cryptographic curve.\n   *\n   * @param curve - The cryptographic curve to use for the key conversion.\n   * @returns An `AsymmetricKeyConverter` for the specified curve.\n   */\n  public static keyConverter(curve: string): AsymmetricKeyConverter {\n    const converters: Record<string, AsymmetricKeyConverter> = {\n      'Ed25519' : Ed25519,\n      'P-256'   : {\n        // Wrap the key converter which produces uncompressed public key bytes to produce compressed key bytes as required by the DID DHT spec.\n        // See https://did-dht.com/#representing-keys for more info.\n        publicKeyToBytes: async ({ publicKey }: { publicKey: Jwk }): Promise<Uint8Array> => {\n          const publicKeyBytes = await Secp256r1.publicKeyToBytes({ publicKey });\n          const compressedPublicKey = await Secp256r1.compressPublicKey({ publicKeyBytes });\n          return compressedPublicKey;\n        },\n        bytesToPublicKey  : Secp256r1.bytesToPublicKey,\n        privateKeyToBytes : Secp256r1.privateKeyToBytes,\n        bytesToPrivateKey : Secp256r1.bytesToPrivateKey,\n      },\n      'secp256k1': {\n        // Wrap the key converter which produces uncompressed public key bytes to produce compressed key bytes as required by the DID DHT spec.\n        // See https://did-dht.com/#representing-keys for more info.\n        publicKeyToBytes: async ({ publicKey }: { publicKey: Jwk }): Promise<Uint8Array> => {\n          const publicKeyBytes = await Secp256k1.publicKeyToBytes({ publicKey });\n          const compressedPublicKey = await Secp256k1.compressPublicKey({ publicKeyBytes });\n          return compressedPublicKey;\n        },\n        bytesToPublicKey  : Secp256k1.bytesToPublicKey,\n        privateKeyToBytes : Secp256k1.privateKeyToBytes,\n        bytesToPrivateKey : Secp256k1.bytesToPrivateKey,\n      },\n      X25519: X25519,\n    };\n\n    const converter = converters[curve];\n\n    if (!converter) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);\n\n    return converter;\n  }\n\n  /**\n   * Parses and verifies a BEP44 Get message, converting it to a DNS packet.\n   *\n   * @param params - The parameters to use when verifying and parsing the BEP44 Get response message.\n   * @param params.bep44Message - The BEP44 message to verify and parse.\n   * @returns A promise that resolves to a DNS packet.\n   */\n  public static async parseBep44GetMessage({ bep44Message }: {\n    bep44Message: Bep44Message;\n  }): Promise<Packet> {\n    // Convert the public key byte array to JWK format.\n    const publicKey = await Ed25519.bytesToPublicKey({ publicKeyBytes: bep44Message.k });\n\n    // Encode the sequence and DNS byte array to bencode format.\n    const bencodedData = bencode.encode({ seq: bep44Message.seq, v: bep44Message.v }).subarray(1, -1);\n\n    // Verify the signature of the BEP44 message.\n    const isValid = await Ed25519.verify({\n      key       : publicKey,\n      signature : bep44Message.sig,\n      data      : bencodedData\n    });\n\n    if (!isValid) {\n      throw new DidError(DidErrorCode.InvalidSignature, `Invalid signature for DHT BEP44 message`);\n    }\n\n    return dnsPacketDecode(bep44Message.v);\n  }\n\n  /**\n   * Decodes and parses the data value of a DNS TXT record into a key-value object.\n   *\n   * @param txtData - The data value of a DNS TXT record.\n   * @returns An object containing the key/value pairs of the TXT record data.\n   */\n  public static parseTxtDataToObject(txtData: TxtData): Record<string, string> {\n    return this.parseTxtDataToString(txtData).split(PROPERTY_SEPARATOR).reduce((acc, pair) => {\n      const [key, value] = pair.split('=');\n      acc[key] = value;\n      return acc;\n    }, {} as Record<string, string>);\n  }\n\n  /**\n   * Decodes and parses the data value of a DNS TXT record into a string.\n   *\n   * @param txtData - The data value of a DNS TXT record.\n   * @returns A string representation of the TXT record data.\n   */\n  public static parseTxtDataToString(txtData: TxtData): string {\n    if (typeof txtData === 'string') {\n      return txtData;\n    } else if (txtData instanceof Uint8Array) {\n      return Convert.uint8Array(txtData).toString();\n    } else if (Array.isArray(txtData)) {\n      return txtData.map(item => this.parseTxtDataToString(item)).join('');\n    } else {\n      throw new DidError(DidErrorCode.InternalError, 'Pkarr returned DNS TXT record with invalid data type');\n    }\n  }\n\n  /**\n   * Validates the proof of previous DID given.\n   *\n   * @param params - The parameters to validate the previous DID proof.\n   * @param params.newDid - The new DID that the previous DID is linking to.\n   * @param params.previousDidProof - The proof of the previous DID, containing the previous DID and signature signed by the previous DID.\n   */\n  public static async validatePreviousDidProof({ newDid, previousDidProof }: {\n    newDid: string,\n    previousDidProof: PreviousDidProof,\n  }): Promise<void> {\n    const key = await DidDhtUtils.identifierToIdentityKey({ didUri: previousDidProof.previousDid });\n    const data = DidDhtUtils.identifierToIdentityKeyBytes({ didUri: newDid });\n    const signature = Convert.base64Url(previousDidProof.signature).toUint8Array();\n    const isValid = await Ed25519.verify({ key, data, signature  });\n\n    if (!isValid) {\n      throw new DidError(DidErrorCode.InvalidPreviousDidProof, 'The previous DID proof is invalid.');\n    }\n  }\n\n  /**\n   * Splits a string into chunks of length 255 if the string exceeds length 255.\n   * @param data - The string to split into chunks.\n   * @returns The original string if its length is less than or equal to 255, otherwise an array of chunked strings.\n   */\n  public static chunkDataIfNeeded(data: string): string | string[] {\n    if (data.length <= 255) {\n      return data;\n    }\n\n    // Split the data into chunks of 255 characters.\n    const chunks: string[] = [];\n    for (let i = 0; i < data.length; i += 255) {\n      chunks.push(data.slice(i, i + 255)); // end index is ignored if it exceeds the length of the string\n    }\n\n    return chunks;\n  }\n}", "import type { CryptoApi, Jwk, KeyIdentifier, KeyImporterExporter, KmsExportKeyParams, KmsImportKeyParams } from '@web5/crypto';\nimport type {\n  JwkEs256k,\n  IonDocumentModel,\n  IonPublicKeyModel,\n  IonPublicKeyPurpose,\n} from '@decentralized-identity/ion-sdk';\n\nimport { IonDid, IonRequest } from '@decentralized-identity/ion-sdk';\nimport { LocalKeyManager, computeJwkThumbprint } from '@web5/crypto';\n\nimport type { PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod, DidRegistrationResult } from '../methods/did-method.js';\nimport type {\n  DidService,\n  DidDocument,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidVerificationMethod,\n  DidVerificationRelationship,\n} from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { DidMethod } from '../methods/did-method.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { getVerificationRelationshipsById } from '../utils.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Options for creating a Decentralized Identifier (DID) using the DID ION method.\n */\nexport interface DidIonCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optional. The URI of a server involved in executing DID method operations. In the context of\n   * DID creation, the endpoint is expected to be a Sidetree node. If not specified, a default\n   * gateway node is used.\n   */\n  gatewayUri?: string;\n\n  /**\n   * Optional. Determines whether the created DID should be published to a Sidetree node.\n   *\n   * If set to `true` or omitted, the DID is publicly discoverable. If `false`, the DID is not\n   * published and cannot be resolved by others. By default, newly created DIDs are published.\n   *\n   * @see {@link https://identity.foundation/sidetree/spec/#create | Sidetree Protocol Specification, \u00A7 Create}\n   *\n   * @example\n   * ```ts\n   * const did = await DidIon.create({\n   *  options: {\n   *   publish: false\n   * };\n   * ```\n   */\n  publish?: boolean;\n\n  /**\n   * Optional. An array of service endpoints associated with the DID.\n   *\n   * Services are used in DID documents to express ways of communicating with the DID subject or\n   * associated entities. A service can be any type of service the DID subject wants to advertise,\n   * including decentralized identity management services for further discovery, authentication,\n   * authorization, or interaction.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#services | DID Core Specification, \u00A7 Services}\n   *\n   * @example\n   * ```ts\n   * const did = await DidIon.create({\n   *  options: {\n   *   services: [\n   *     {\n   *       id: 'dwn',\n   *       type: 'DecentralizedWebNode',\n   *       serviceEndpoint: ['https://example.com/dwn1', 'https://example/dwn2']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  services?: DidService[];\n\n  /**\n   * Optional. An array of verification methods to be included in the DID document.\n   *\n   * By default, a newly created DID ION document will contain a single Ed25519 verification method.\n   * Additional verification methods can be added to the DID document using the\n   * `verificationMethods` property.\n   *\n   * @see {@link https://www.w3.org/TR/did-core/#verification-methods | DID Core Specification, \u00A7 Verification Methods}\n   *\n   * @example\n   * ```ts\n   * const did = await DidIon.create({\n   *  options: {\n   *   verificationMethods: [\n   *     {\n   *       algorithm: 'Ed25519',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     },\n   *     {\n   *       algorithm: 'Ed25519',\n   *       id: 'dwn-sig',\n   *       purposes: ['authentication', 'assertionMethod']\n   *     }\n   *   ]\n   * };\n   * ```\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Represents the request model for managing DID documents within the ION network, according to the\n * Sidetree protocol specification.\n */\nexport interface DidIonCreateRequest {\n  /** The type of operation to perform, which is always 'create' for a Create Operation. */\n  type: 'create';\n\n  /** Contains properties related to the initial state of the DID document. */\n  suffixData: {\n    /** A hash of the `delta` object, representing the initial changes to the DID document. */\n    deltaHash: string;\n    /** A commitment value used for future recovery operations, hashed for security. */\n    recoveryCommitment: string;\n  };\n\n  /** Details the changes to be applied to the DID document in this operation. */\n  delta: {\n    /** A commitment value used for the next update operation, hashed for security. */\n    updateCommitment: string;\n    /** An array of patch objects specifying the modifications to apply to the DID document. */\n    patches: {\n      /** The type of modification to perform (e.g., adding or removing public keys or service\n       * endpoints). */\n      action: string;\n      /** The document state or partial state to apply with this patch. */\n      document: IonDocumentModel;\n    }[];\n  }\n}\n\n/**\n * Represents a {@link DidVerificationMethod | DID verification method} in the context of DID ION\n * create, update, deactivate, and resolve operations.\n *\n * Unlike the DID Core standard {@link DidVerificationMethod} interface, this type is specific to\n * the ION method operations and only includes the `id`, `publicKeyJwk`, and `purposes` properties:\n * - The `id` property is optional and specifies the identifier fragment of the verification method.\n * - The `publicKeyJwk` property is required and represents the public key in JWK format.\n * - The `purposes` property is required and specifies the purposes for which the verification\n *  method can be used.\n *\n * @example\n * ```ts\n * const verificationMethod: DidIonVerificationMethod = {\n *   id           : 'sig',\n *   publicKeyJwk : {\n *     kty : 'OKP',\n *     crv : 'Ed25519',\n *     x   : 'o40shZrsco-CfEqk6mFsXfcP94ly3Az3gm84PzAUsXo',\n *     kid : 'BDp0xim82GswlxnPV8TPtBdUw80wkGIF8gjFbw1x5iQ',\n *   },\n *   purposes: ['authentication', 'assertionMethod']\n * };\n * ```\n */\nexport interface DidIonVerificationMethod {\n  /**\n   * Optionally specify the identifier fragment of the verification method.\n   *\n   * If not specified, the method's ID will be generated from the key's ID or thumbprint.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidIonVerificationMethod = {\n   *   id: 'sig',\n   *   ...\n   * };\n   * ```\n   */\n  id?: string;\n\n  /**\n   * A public key in JWK format.\n   *\n   * A JSON Web Key (JWK) that conforms to {@link https://datatracker.ietf.org/doc/html/rfc7517 | RFC 7517}.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidIonVerificationMethod = {\n   *   publicKeyJwk: {\n   *     kty : \"OKP\",\n   *     crv : \"X25519\",\n   *     x   : \"7XdJtNmJ9pV_O_3mxWdn6YjiHJ-HhNkdYQARzVU_mwY\",\n   *     kid : \"xtsuKULPh6VN9fuJMRwj66cDfQyLaxuXHkMlmAe_v6I\"\n   *   },\n   *   ...\n   * };\n   * ```\n   */\n  publicKeyJwk: Jwk;\n\n  /**\n   * Specify the purposes for which a verification method is intended to be used in a DID document.\n   *\n   * The `purposes` property defines the specific\n   * {@link DidVerificationRelationship | verification relationships} between the DID subject and\n   * the verification method. This enables the verification method to be utilized for distinct\n   * actions such as authentication, assertion, key agreement, capability delegation, and others. It\n   * is important for verifiers to recognize that a verification method must be associated with the\n   * relevant purpose in the DID document to be valid for that specific use case.\n   *\n   * @example\n   * ```ts\n   * const verificationMethod: DidIonVerificationMethod = {\n   *   purposes: ['authentication', 'assertionMethod'],\n   *   ...\n   * };\n   * ```\n   */\n  purposes: (DidVerificationRelationship | keyof typeof DidVerificationRelationship)[];\n}\n\n/**\n * `IonPortableDid` interface extends the {@link PortableDid} interface.\n *\n * It represents a Decentralized Identifier (DID) that is portable and can be used across different\n * domains, including the ION specific recovery and update keys.\n */\nexport interface IonPortableDid extends PortableDid {\n  /** The JSON Web Key (JWK) used for recovery purposes. */\n  recoveryKey: Jwk;\n\n  /** The JSON Web Key (JWK) used for updating the DID. */\n  updateKey: Jwk;\n}\n\n/**\n * Enumerates the types of keys that can be used in a DID ION document.\n *\n * The DID ION method supports various cryptographic key types. These key types are essential for\n * the creation and management of DIDs and their associated cryptographic operations like signing\n * and encryption.\n */\nexport enum DidIonRegisteredKeyType {\n  /**\n   * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature\n   * Algorithm) and Curve25519.\n   */\n  Ed25519 = 'Ed25519',\n\n  /**\n   * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized\n   * systems.\n   */\n  secp256k1 = 'secp256k1',\n\n  /**\n   * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations\n   * and is widely supported in various cryptographic libraries and standards.\n   */\n  secp256r1 = 'secp256r1',\n\n  /**\n   * X25519: A Diffie-Hellman key exchange algorithm using Curve25519.\n   */\n  X25519 = 'X25519'\n}\n\n/**\n * Private helper that maps algorithm identifiers to their corresponding DID ION\n * {@link DidIonRegisteredKeyType | registered key type}.\n */\nconst AlgorithmToKeyTypeMap = {\n  Ed25519   : DidIonRegisteredKeyType.Ed25519,\n  ES256K    : DidIonRegisteredKeyType.secp256k1,\n  ES256     : DidIonRegisteredKeyType.secp256r1,\n  'P-256'   : DidIonRegisteredKeyType.secp256r1,\n  secp256k1 : DidIonRegisteredKeyType.secp256k1,\n  secp256r1 : DidIonRegisteredKeyType.secp256r1\n} as const;\n\n/**\n * The default node to use as a gateway to the Sidetree newtork when anchoring, updating, and\n * resolving DID documents.\n */\nconst DEFAULT_GATEWAY_URI = 'https://ion.tbd.engineering';\n\n/**\n * The `DidIon` class provides an implementation of the `did:ion` DID method.\n *\n * Features:\n * - DID Creation: Create new `did:ion` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing key in a Key Management System\n *                       (KMS). If supported by the KMS, a DID's key can be exported to a portable\n *                       DID format.\n * - DID Resolution: Resolve a `did:ion` to its corresponding DID Document stored in the Sidetree\n *                   network.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @see {@link https://identity.foundation/sidetree/spec/ | Sidetree Protocol Specification}\n * @see {@link https://github.com/decentralized-identity/ion/blob/master/docs/design.md | ION Design Document}\n *\n * @example\n * ```ts\n * // DID Creation\n * const did = await DidIon.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidIon.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidIon.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Key Management\n *\n * // Instantiate a DID object for a published DID with existing keys in a KMS\n * const did = await DidIon.fromKeyManager({\n *  didUri: 'did:ion:EiAzB7K-xDIKc1csXo5HX2eNBoemK9feNhL3cKwfukYOug',\n *  keyManager\n * });\n *\n * // Convert a DID object to a portable format\n * const portableDid = await DidIon.toKeys({ did });\n * ```\n */\n\nexport class DidIon extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID ION specification.\n   */\n  public static methodName = 'ion';\n\n  /**\n   * Creates a new DID using the `did:ion` method formed from a newly generated key.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidIon.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidIon.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate\n   *                            keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidIonCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that the algorithm for any given verification method is supported by the\n    // DID ION specification.\n    if (options.verificationMethods?.some(vm => !(vm.algorithm in AlgorithmToKeyTypeMap))) {\n      throw new Error('One or more verification method algorithms are not supported');\n    }\n\n    // Check 2: Validate that the ID for any given verification method is unique.\n    const methodIds = options.verificationMethods?.filter(vm => 'id' in vm).map(vm => vm.id);\n    if (methodIds && methodIds.length !== new Set(methodIds).size) {\n      throw new Error('One or more verification method IDs are not unique');\n    }\n\n    // Check 3: Validate that the required properties for any given services are present.\n    if (options.services?.some(s => !s.id || !s.type || !s.serviceEndpoint)) {\n      throw new Error('One or more services are missing required properties');\n    }\n\n    // If no verification methods were specified, generate a default Ed25519 verification method.\n    const defaultVerificationMethod: DidCreateVerificationMethod<TKms> = {\n      algorithm : 'Ed25519' as any,\n      purposes  : ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation']\n    };\n\n    const verificationMethodsToAdd: DidIonVerificationMethod[] = [];\n\n    // Generate random key material for additional verification methods, if any.\n    for (const vm of options.verificationMethods ?? [defaultVerificationMethod]) {\n      // Generate a random key for the verification method.\n      const keyUri = await keyManager.generateKey({ algorithm: vm.algorithm });\n      const publicKey = await keyManager.getPublicKey({ keyUri });\n\n      // Add the verification method to the DID document.\n      verificationMethodsToAdd.push({\n        id           : vm.id,\n        publicKeyJwk : publicKey,\n        purposes     : vm.purposes ?? ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation']\n      });\n    }\n\n    // Generate a random key for the ION Recovery Key. Sidetree requires secp256k1 recovery keys.\n    const recoveryKeyUri = await keyManager.generateKey({ algorithm: DidIonRegisteredKeyType.secp256k1 });\n    const recoveryKey = await keyManager.getPublicKey({ keyUri: recoveryKeyUri });\n\n    // Generate a random key for the ION Update Key. Sidetree requires secp256k1 update keys.\n    const updateKeyUri = await keyManager.generateKey({ algorithm: DidIonRegisteredKeyType.secp256k1 });\n    const updateKey = await keyManager.getPublicKey({ keyUri: updateKeyUri });\n\n    // Compute the Long Form DID URI from the keys and services, if any.\n    const longFormDidUri = await DidIonUtils.computeLongFormDidUri({\n      recoveryKey,\n      updateKey,\n      services            : options.services ?? [],\n      verificationMethods : verificationMethodsToAdd\n    });\n\n    // Expand the DID URI string to a DID document.\n    const { didDocument, didResolutionMetadata } = await DidIon.resolve(longFormDidUri, { gatewayUri: options.gatewayUri });\n    if (didDocument === null) {\n      throw new Error(`Unable to resolve DID during creation: ${didResolutionMetadata?.error}`);\n    }\n\n    // Create the BearerDid object, including the \"Short Form\" of the DID URI, the ION update and\n    // recovery keys, and specifying that the DID has not yet been published.\n    const did = new BearerDid({\n      uri      : longFormDidUri,\n      document : didDocument,\n      metadata : {\n        published   : false,\n        canonicalId : longFormDidUri.split(':', 3).join(':'),\n        recoveryKey,\n        updateKey\n      },\n      keyManager\n    });\n\n    // By default, publish the DID document to a Sidetree node unless explicitly disabled.\n    if (options.publish ?? true) {\n      const registrationResult = await DidIon.publish({ did, gatewayUri: options.gatewayUri });\n      did.metadata = registrationResult.didDocumentMetadata;\n    }\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:ion` DID, return the verification method that will be used\n   * for signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, the first verification method in the authentication property\n   * in the DID Document is used.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument, methodId }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Get the verification method with either the specified ID or the first assertion method.\n    const verificationMethod = didDocument.verificationMethod?.find(\n      vm => vm.id === (methodId ?? didDocument.assertionMethod?.[0])\n    );\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID ION method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidIon.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the\n   *          provided PortableDid.\n   * @throws An error if the DID document does not contain any verification methods or the keys for\n   *         any verification method are missing in the key manager.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidIon.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    return did;\n  }\n\n  /**\n   * Publishes a DID to a Sidetree node, making it publicly discoverable and resolvable.\n   *\n   * This method handles the publication of a DID Document associated with a `did:ion` DID to a\n   * Sidetree node.\n   *\n   * @remarks\n   * - This method is typically invoked automatically during the creation of a new DID unless the\n   *   `publish` option is set to `false`.\n   * - For existing, unpublished DIDs, it can be used to publish the DID Document to a Sidetree node.\n   * - The method relies on the specified Sidetree node to interface with the network.\n   *\n   * @param params - The parameters for the `publish` operation.\n   * @param params.did - The `BearerDid` object representing the DID to be published.\n   * @param params.gatewayUri - Optional. The URI of a server involved in executing DID\n   *                                    method operations. In the context of publishing, the\n   *                                    endpoint is expected to be a Sidetree node. If not\n   *                                    specified, a default node is used.\n   * @returns A Promise resolving to a boolean indicating whether the publication was successful.\n   *\n   * @example\n   * ```ts\n   * // Generate a new DID and keys but explicitly disable publishing.\n   * const did = await DidIon.create({ options: { publish: false } });\n   * // Publish the DID to the Sidetree network.\n   * const isPublished = await DidIon.publish({ did });\n   * // `isPublished` is true if the DID was successfully published.\n   * ```\n   */\n  public static async publish({ did, gatewayUri = DEFAULT_GATEWAY_URI }: {\n    did: BearerDid;\n    gatewayUri?: string;\n  }): Promise<DidRegistrationResult> {\n    // Construct an ION verification method made up of the id, public key, and purposes from each\n    // verification method in the DID document.\n    const verificationMethods: DidIonVerificationMethod[] = did.document.verificationMethod?.map(\n      vm => ({\n        id           : vm.id,\n        publicKeyJwk : vm.publicKeyJwk!,\n        purposes     : getVerificationRelationshipsById({ didDocument: did.document, methodId: vm.id })\n      })\n    ) ?? [];\n\n    // Create the ION document.\n    const ionDocument = await DidIonUtils.createIonDocument({\n      services: did.document.service ?? [],\n      verificationMethods\n    });\n\n    // Construct the ION Create Operation request.\n    const createOperation = await DidIonUtils.constructCreateRequest({\n      ionDocument,\n      recoveryKey : did.metadata.recoveryKey,\n      updateKey   : did.metadata.updateKey\n    });\n\n    try {\n      // Construct the URL of the SideTree node's operations endpoint.\n      const operationsUrl = DidIonUtils.appendPathToUrl({\n        baseUrl : gatewayUri,\n        path    : `/operations`\n      });\n\n      // Submit the Create Operation to the operations endpoint.\n      const response = await fetch(operationsUrl, {\n        method  : 'POST',\n        mode    : 'cors',\n        headers : { 'Content-Type': 'application/json' },\n        body    : JSON.stringify(createOperation)\n      });\n\n      // Return the result of processing the Create operation, including the updated DID metadata\n      // with the publishing result.\n      return {\n        didDocument         : did.document,\n        didDocumentMetadata : {\n          ...did.metadata,\n          published: response.ok,\n        },\n        didRegistrationMetadata: {}\n      };\n\n    } catch (error: any) {\n      return {\n        didDocument         : null,\n        didDocumentMetadata : {\n          published: false,\n        },\n        didRegistrationMetadata: {\n          error        : DidErrorCode.InternalError,\n          errorMessage : `Failed to publish DID document for: ${did.uri}`\n        }\n      };\n    }\n  }\n\n  /**\n   * Resolves a `did:ion` identifier to its corresponding DID document.\n   *\n   * This method performs the resolution of a `did:ion` DID, retrieving its DID Document from the\n   * Sidetree-based DID overlay network. The process involves querying a Sidetree node to retrieve\n   * the DID Document that corresponds to the given DID identifier.\n   *\n   * @remarks\n   * - If a `gatewayUri` option is not specified, a default node is used to access the Sidetree\n   *   network.\n   * - It decodes the DID identifier and retrieves the associated DID Document and metadata.\n   * - In case of resolution failure, appropriate error information is returned.\n   *\n   * @example\n   * ```ts\n   * const resolutionResult = await DidIon.resolve('did:ion:example');\n   * ```\n   *\n   * @param didUri - The DID to be resolved.\n   * @param options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, options: DidResolutionOptions = {}): Promise<DidResolutionResult> {\n    // Attempt to parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // If parsing failed, the DID is invalid.\n    if (!parsedDid) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'invalidDid' }\n      };\n    }\n\n    // If the DID method is not \"ion\", return an error.\n    if (parsedDid.method !== DidIon.methodName) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'methodNotSupported' }\n      };\n    }\n\n    // To execute the read method operation, use the given gateway URI or a default Sidetree node.\n    const gatewayUri = options?.gatewayUri ?? DEFAULT_GATEWAY_URI;\n\n    try {\n      // Construct the URL to be used in the resolution request.\n      const resolutionUrl = DidIonUtils.appendPathToUrl({\n        baseUrl : gatewayUri,\n        path    : `/identifiers/${didUri}`\n      });\n\n      // Attempt to retrieve the DID document and metadata from the Sidetree node.\n      const response = await fetch(resolutionUrl);\n\n      // If the DID document was not found, return an error.\n      if (!response.ok) {\n        throw new DidError(DidErrorCode.NotFound, `Unable to find DID document for: ${didUri}`);\n      }\n\n      // If the DID document was retrieved successfully, return it.\n      const { didDocument, didDocumentMetadata } = await response.json() as DidResolutionResult;\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        ...didDocument && { didDocument },\n        didDocumentMetadata: {\n          published: didDocumentMetadata?.method?.published,\n          ...didDocumentMetadata\n        }\n      };\n\n    } catch (error: any) {\n      // Rethrow any unexpected errors that are not a `DidError`.\n      if (!(error instanceof DidError)) throw new Error(error);\n\n      // Return a DID Resolution Result with the appropriate error code.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error: error.code,\n          ...error.message && { errorMessage: error.message }\n        }\n      };\n    }\n  }\n}\n\n/**\n * The `DidIonUtils` class provides utility functions to support operations in the DID ION method.\n */\nexport class DidIonUtils {\n  /**\n   * Appends a specified path to a base URL, ensuring proper formatting of the resulting URL.\n   *\n   * This method is useful for constructing URLs for accessing various endpoints, such as Sidetree\n   * nodes in the ION network. It handles the nuances of URL path concatenation, including the\n   * addition or removal of leading/trailing slashes, to create a well-formed URL.\n   *\n   * @param params - The parameters for URL construction.\n   * @param params.baseUrl - The base URL to which the path will be appended.\n   * @param params.path - The path to append to the base URL.\n   * @returns The fully constructed URL string with the path appended to the base URL.\n   */\n  public static appendPathToUrl({ baseUrl, path }: {\n    baseUrl: string;\n    path: string;\n  }): string {\n    const url = new URL(baseUrl);\n    url.pathname = url.pathname.endsWith('/') ? url.pathname : url.pathname + '/';\n    url.pathname += path.startsWith('/') ? path.substring(1) : path;\n\n    return url.toString();\n  }\n\n  /**\n   * Computes the Long Form DID URI given an ION DID's recovery key, update key, services, and\n   * verification methods.\n   *\n   * @param params - The parameters for computing the Long Form DID URI.\n   * @param params.recoveryKey - The ION Recovery Key.\n   * @param params.updateKey - The ION Update Key.\n   * @param params.services - An array of services associated with the DID.\n   * @param params.verificationMethods - An array of verification methods associated with the DID.\n   * @returns A Promise resolving to the Long Form DID URI.\n   */\n  public static async computeLongFormDidUri({ recoveryKey, updateKey, services, verificationMethods }: {\n    recoveryKey: Jwk;\n    updateKey: Jwk;\n    services: DidService[];\n    verificationMethods: DidIonVerificationMethod[];\n  }): Promise<string> {\n    // Create the ION document.\n    const ionDocument = await DidIonUtils.createIonDocument({ services, verificationMethods });\n\n    // Normalize JWK to onnly include specific members and in lexicographic order.\n    const normalizedRecoveryKey = DidIonUtils.normalizeJwk(recoveryKey);\n    const normalizedUpdateKey = DidIonUtils.normalizeJwk(updateKey);\n\n    // Compute the Long Form DID URI.\n    const longFormDidUri = await IonDid.createLongFormDid({\n      document    : ionDocument,\n      recoveryKey : normalizedRecoveryKey as JwkEs256k,\n      updateKey   : normalizedUpdateKey as JwkEs256k\n    });\n\n    return longFormDidUri;\n  }\n\n  /**\n   * Constructs a Sidetree Create Operation request for a DID document within the ION network.\n   *\n   * This method prepares the necessary payload for submitting a Create Operation to a Sidetree\n   * node, encapsulating the details of the DID document, recovery key, and update key.\n   *\n   * @param params - Parameters required to construct the Create Operation request.\n   * @param params.ionDocument - The DID document model containing public keys and service endpoints.\n   * @param params.recoveryKey - The recovery public key in JWK format.\n   * @param params.updateKey - The update public key in JWK format.\n   * @returns A promise resolving to the ION Create Operation request model, ready for submission to a Sidetree node.\n   */\n  public static async constructCreateRequest({ ionDocument, recoveryKey, updateKey }: {\n    ionDocument: IonDocumentModel,\n    recoveryKey: Jwk,\n    updateKey: Jwk\n  }): Promise<DidIonCreateRequest> {\n    // Create an ION DID create request operation.\n    const createRequest = await IonRequest.createCreateRequest({\n      document    : ionDocument,\n      recoveryKey : DidIonUtils.normalizeJwk(recoveryKey) as JwkEs256k,\n      updateKey   : DidIonUtils.normalizeJwk(updateKey) as JwkEs256k\n    }) as DidIonCreateRequest;\n\n    return createRequest;\n  }\n\n  /**\n   * Assembles an ION document model from provided services and verification methods\n   *\n   * This model serves as the foundation for a DID document in the ION network, facilitating the\n   * creation and management of decentralized identities. It translates service endpoints and\n   * public keys into a format compatible with the Sidetree protocol, ensuring the resulting DID\n   * document adheres to the required specifications for ION DIDs. This method is essential for\n   * constructing the payload needed to register or update DIDs within the ION network.\n   *\n   * @param params - The parameters containing the services and verification methods to include in the ION document.\n   * @param params.services - A list of service endpoints to be included in the DID document, specifying ways to interact with the DID subject.\n   * @param params.verificationMethods - A list of verification methods to be included, detailing the cryptographic keys and their intended uses within the DID document.\n   * @returns A Promise resolving to an `IonDocumentModel`, ready for use in Sidetree operations like DID creation and updates.\n   */\n  public static async createIonDocument({ services, verificationMethods }: {\n    services: DidService[];\n    verificationMethods: DidIonVerificationMethod[]\n  }): Promise<IonDocumentModel> {\n    /**\n     * STEP 1: Convert verification methods to ION SDK format.\n     */\n    const ionPublicKeys: IonPublicKeyModel[] = [];\n\n    for (const vm of verificationMethods) {\n      // Use the given ID, the key's ID, or the key's thumbprint as the verification method ID.\n      let methodId = vm.id ?? vm.publicKeyJwk.kid ?? await computeJwkThumbprint({ jwk: vm.publicKeyJwk });\n      methodId = `${methodId.split('#').pop()}`; // Remove fragment prefix, if any.\n\n      // Convert public key JWK to ION format.\n      const publicKey: IonPublicKeyModel = {\n        id           : methodId,\n        publicKeyJwk : DidIonUtils.normalizeJwk(vm.publicKeyJwk),\n        purposes     : vm.purposes as IonPublicKeyPurpose[],\n        type         : 'JsonWebKey2020'\n      };\n\n      ionPublicKeys.push(publicKey);\n    }\n\n    /**\n     * STEP 2: Convert service entries, if any, to ION SDK format.\n     */\n    const ionServices = services.map(service => ({\n      ...service,\n      id: `${service.id.split('#').pop()}` // Remove fragment prefix, if any.\n    }));\n\n    /**\n     * STEP 3: Format as ION document.\n     */\n    const ionDocumentModel: IonDocumentModel = {\n      publicKeys : ionPublicKeys,\n      services   : ionServices\n    };\n\n    return ionDocumentModel;\n  }\n\n  /**\n   * Normalize the given JWK to include only specific members and in lexicographic order.\n   *\n   * @param jwk - The JWK to normalize.\n   * @returns The normalized JWK.\n   */\n  private static normalizeJwk(jwk: Jwk): Jwk {\n    const keyType = jwk.kty;\n    let normalizedJwk: Jwk;\n\n    if (keyType === 'EC') {\n      normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n    } else if (keyType === 'oct') {\n      normalizedJwk = { k: jwk.k, kty: jwk.kty };\n    } else if (keyType === 'OKP') {\n      normalizedJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x };\n    } else if (keyType === 'RSA') {\n      normalizedJwk = { e: jwk.e, kty: jwk.kty, n: jwk.n };\n    } else {\n      throw new Error(`Unsupported key type: ${keyType}`);\n    }\n\n    return normalizedJwk;\n  }\n}", "import type {\n  Jwk,\n  CryptoApi,\n  KeyIdentifier,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  InferKeyGeneratorAlgorithm,\n} from '@web5/crypto';\n\nimport { Convert } from '@web5/common';\nimport { LocalKeyManager } from '@web5/crypto';\n\nimport type { PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod } from './did-method.js';\nimport type { DidDocument, DidResolutionOptions, DidResolutionResult, DidVerificationMethod } from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Defines the set of options available when creating a new Decentralized Identifier (DID) with the\n * 'did:jwk' method.\n *\n * Either the `algorithm` or `verificationMethods` option can be specified, but not both.\n * - A new key will be generated using the algorithm identifier specified in either the `algorithm`\n *   property or the `verificationMethods` object's `algorithm` property.\n * - If `verificationMethods` is given, it must contain exactly one entry since DID JWK only\n *   supports a single verification method.\n * - If neither is given, the default is to generate a new Ed25519 key.\n *\n * @example\n * ```ts\n * // DID Creation\n *\n * // By default, when no options are given, a new Ed25519 key will be generated.\n * const did = await DidJwk.create();\n *\n * // The algorithm to use for key generation can be specified as a top-level option.\n * const did = await DidJwk.create({\n *   options: { algorithm = 'ES256K' }\n * });\n *\n * // Or, alternatively as a property of the verification method.\n * const did = await DidJwk.create({\n *   options: {\n *     verificationMethods: [{ algorithm = 'ES256K' }]\n *   }\n * });\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidJwk.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidJwk.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Import / Export\n *\n * // Export a BearerDid object to the PortableDid format.\n * const portableDid = await did.export();\n *\n * // Reconstruct a BearerDid object from a PortableDid\n * const did = await DidJwk.import(portableDid);\n * ```\n */\nexport interface DidJwkCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optionally specify the algorithm to be used for key generation.\n   */\n  algorithm?: TKms extends CryptoApi\n    ? InferKeyGeneratorAlgorithm<TKms>\n    : InferKeyGeneratorAlgorithm<LocalKeyManager>;\n\n  /**\n   * Alternatively, specify the algorithm to be used for key generation of the single verification\n   * method in the DID Document.\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * The `DidJwk` class provides an implementation of the `did:jwk` DID method.\n *\n * Features:\n * - DID Creation: Create new `did:jwk` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing verification method key set or\n *                       or a key in a Key Management System (KMS). If supported by the KMS, a DID's\n *                       key can be exported to a portable DID format.\n * - DID Resolution: Resolve a `did:jwk` to its corresponding DID Document.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @remarks\n * The `did:jwk` DID method uses a single JSON Web Key (JWK) to generate a DID and does not rely\n * on any external system such as a blockchain or centralized database. This characteristic makes\n * it suitable for use cases where a assertions about a DID Subject can be self-verifiable by\n * third parties.\n *\n * The DID URI is formed by Base64URL-encoding the JWK and prefixing with `did:jwk:`. The DID\n * Document of a `did:jwk` DID contains a single verification method, which is the JWK used\n * to generate the DID. The verification method is identified by the key ID `#0`.\n *\n * @see {@link https://github.com/quartzjer/did-jwk/blob/main/spec.md | DID JWK Specification}\n *\n * @example\n * ```ts\n * // DID Creation\n * const did = await DidJwk.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidJwk.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidJwk.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Key Management\n *\n * // Instantiate a DID object from an existing key in a KMS\n * const did = await DidJwk.fromKeyManager({\n *  didUri: 'did:jwk:eyJrIjoiT0tQIiwidCI6IkV1c2UyNTYifQ',\n *  keyManager\n * });\n *\n * // Instantiate a DID object from an existing verification method key\n * const did = await DidJwk.fromKeys({\n *   verificationMethods: [{\n *     publicKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4'\n *     },\n *     privateKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4',\n *       d: 'bdcGE4KzEaekOwoa-ee3gAm1a991WvNj_Eq3WKyqTnE'\n *     }\n *   }]\n * });\n *\n * // Convert a DID object to a portable format\n * const portableDid = await DidJwk.toKeys({ did });\n *\n * // Reconstruct a DID object from a portable format\n * const did = await DidJwk.fromKeys(portableDid);\n * ```\n */\nexport class DidJwk extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID JWK specification.\n   */\n  public static methodName = 'jwk';\n\n  /**\n   * Creates a new DID using the `did:jwk` method formed from a newly generated key.\n   *\n   * @remarks\n   * The DID URI is formed by Base64URL-encoding the JWK and prefixing with `did:jwk:`.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated.\n   * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given,\n   *   an error will be thrown.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidJwk.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidJwk.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate\n   *                            keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidJwkCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that `algorithm` or `verificationMethods` options are not both given.\n    if (options.algorithm && options.verificationMethods) {\n      throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`);\n    }\n\n    // Check 2: If `verificationMethods` is given, it must contain exactly one entry since DID JWK\n    // only supports a single verification method.\n    if (options.verificationMethods && options.verificationMethods.length !== 1) {\n      throw new Error(`The 'verificationMethods' option must contain exactly one entry`);\n    }\n\n    // Default to Ed25519 key generation if an algorithm is not given.\n    const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519';\n\n    // Generate a new key using the specified `algorithm`.\n    const keyUri = await keyManager.generateKey({ algorithm });\n    const publicKey = await keyManager.getPublicKey({ keyUri });\n\n    // Compute the DID identifier from the public key by serializing the JWK to a UTF-8 string and\n    // encoding in Base64URL format.\n    const identifier = Convert.object(publicKey).toBase64Url();\n\n    // Attach the prefix `did:jwk` to form the complete DID URI.\n    const didUri = `did:${DidJwk.methodName}:${identifier}`;\n\n    // Expand the DID URI string to a DID document.\n    const didResolutionResult = await DidJwk.resolve(didUri);\n    const document = didResolutionResult.didDocument as DidDocument;\n\n    // Create the BearerDid object from the generated key material.\n    const did = new BearerDid({\n      uri      : didUri,\n      document,\n      metadata : {},\n      keyManager\n    });\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:jwk` DID, return the verification method that will be used\n   * for signing messages and credentials. If given, the `methodId` parameter is used to select the\n   * verification method. If not given, the first verification method in the DID Document is used.\n   *\n   * Note that for DID JWK, only one verification method can exist so specifying `methodId` could be\n   * considered redundant or unnecessary. The option is provided for consistency with other DID\n   * method implementations.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Attempt to find the verification method in the DID Document.\n    const [ verificationMethod ] = didDocument.verificationMethod ?? [];\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID JWK method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @remarks\n   * The `verificationMethod` array of the DID document must contain exactly one key since the\n   * `did:jwk` method only supports a single verification method.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidJwk.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the provided keys.\n   * @throws An error if the DID document does not contain exactly one verification method.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidJwk.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    // Use the given PortableDid to construct the BearerDid object.\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    // Validate that the given DID document contains exactly one verification method.\n    // Note: The non-undefined assertion is necessary because the type system cannot infer that\n    // the `verificationMethod` property is defined -- which is checked by `BearerDid.import()`.\n    if (did.document.verificationMethod!.length !== 1) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `DID document must contain exactly one verification method`);\n    }\n\n    return did;\n  }\n\n  /**\n   * Resolves a `did:jwk` identifier to a DID Document.\n   *\n   * @param didUri - The DID to be resolved.\n   * @param _options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    // Attempt to parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // Attempt to decode the Base64URL-encoded JWK.\n    let publicKey: Jwk | undefined;\n    try {\n      publicKey = Convert.base64Url(parsedDid!.id).toObject() as Jwk;\n    } catch { /* Consume the error so that a DID resolution error can be returned later. */ }\n\n    // If parsing or decoding failed, the DID is invalid.\n    if (!parsedDid || !publicKey) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'invalidDid' }\n      };\n    }\n\n    // If the DID method is not \"jwk\", return an error.\n    if (parsedDid.method !== DidJwk.methodName) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'methodNotSupported' }\n      };\n    }\n\n    const didDocument: DidDocument = {\n      '@context': [\n        'https://www.w3.org/ns/did/v1'\n      ],\n      id: parsedDid.uri\n    };\n\n    const keyUri = `${didDocument.id}#0`;\n\n    // Set the Verification Method property.\n    didDocument.verificationMethod = [{\n      id           : keyUri,\n      type         : 'JsonWebKey',\n      controller   : didDocument.id,\n      publicKeyJwk : publicKey\n    }];\n\n    // Set the Verification Relationship properties.\n    didDocument.authentication = [keyUri];\n    didDocument.assertionMethod = [keyUri];\n    didDocument.capabilityInvocation = [keyUri];\n    didDocument.capabilityDelegation = [keyUri];\n    didDocument.keyAgreement = [keyUri];\n\n    // If the JWK contains a `use` property with the value \"sig\" then the `keyAgreement` property\n    // is not included in the DID Document. If the `use` value is \"enc\" then only the `keyAgreement`\n    // property is included in the DID Document.\n    switch (publicKey.use) {\n      case 'sig': {\n        delete didDocument.keyAgreement;\n        break;\n      }\n\n      case 'enc': {\n        delete didDocument.authentication;\n        delete didDocument.assertionMethod;\n        delete didDocument.capabilityInvocation;\n        delete didDocument.capabilityDelegation;\n        break;\n      }\n    }\n\n    return {\n      ...EMPTY_DID_RESOLUTION_RESULT,\n      didDocument,\n    };\n  }\n}", "import type { MulticodecCode, MulticodecDefinition, RequireOnly } from '@web5/common';\nimport type {\n  Jwk,\n  CryptoApi,\n  KeyCompressor,\n  KeyIdentifier,\n  KmsExportKeyParams,\n  KmsImportKeyParams,\n  KeyImporterExporter,\n  AsymmetricKeyConverter,\n  InferKeyGeneratorAlgorithm,\n} from '@web5/crypto';\n\nimport { Multicodec, universalTypeOf } from '@web5/common';\nimport {\n  X25519,\n  Ed25519,\n  Secp256k1,\n  Secp256r1,\n  LocalKeyManager,\n} from '@web5/crypto';\n\nimport type { PortableDid } from '../types/portable-did.js';\nimport type { DidCreateOptions, DidCreateVerificationMethod } from './did-method.js';\nimport type {\n  DidDocument,\n  DidResolutionOptions,\n  DidResolutionResult,\n  DidVerificationMethod,\n} from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { BearerDid } from '../bearer-did.js';\nimport { DidError, DidErrorCode } from '../did-error.js';\nimport { KeyWithMulticodec } from '../types/multibase.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\nimport { getVerificationMethodTypes, keyBytesToMultibaseId, multibaseIdToKeyBytes } from '../utils.js';\n\n/**\n * Defines the set of options available when creating a new Decentralized Identifier (DID) with the\n * 'did:key' method.\n *\n * Either the `algorithm` or `verificationMethods` option can be specified, but not both.\n * - A new key will be generated using the algorithm identifier specified in either the `algorithm`\n *   property or the `verificationMethods` object's `algorithm` property.\n * - If `verificationMethods` is given, it must contain exactly one entry since DID Key only\n *   supports a single verification method.\n * - If neither is given, the default is to generate a new Ed25519 key.\n *\n * @example\n * ```ts\n  * // By default, when no options are given, a new Ed25519 key will be generated.\n * const did = await DidKey.create();\n *\n * // The algorithm to use for key generation can be specified as a top-level option.\n * const did = await DidKey.create({\n *   options: { algorithm = 'secp256k1' }\n * });\n *\n * // Or, alternatively as a property of the verification method.\n * const did = await DidKey.create({\n *   options: {\n *     verificationMethods: [{ algorithm = 'secp256k1' }]\n *   }\n * });\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidKey.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidKey.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Import / Export\n *\n * // Export a BearerDid object to the PortableDid format.\n * const portableDid = await did.export();\n *\n * // Reconstruct a BearerDid object from a PortableDid\n * const did = await DidKey.import(portableDid);\n * ```\n */\nexport interface DidKeyCreateOptions<TKms> extends DidCreateOptions<TKms> {\n  /**\n   * Optionally specify the algorithm to be used for key generation.\n   */\n  algorithm?: TKms extends CryptoApi\n    ? InferKeyGeneratorAlgorithm<TKms>\n    : InferKeyGeneratorAlgorithm<LocalKeyManager>;\n\n  /**\n   * Optionally specify an array of JSON-LD context links for the @context property of the DID\n   * document.\n   *\n   * The @context property provides a JSON-LD processor with the information necessary to interpret\n   * the DID document JSON. The default context URL is 'https://www.w3.org/ns/did/v1'.\n   */\n  defaultContext?: string;\n\n  /**\n   * Optionally enable encryption key derivation during DID creation.\n   *\n   * By default, this option is set to `false`, which means encryption key derivation is not\n   * performed unless explicitly enabled.\n   *\n   * When set to `true`, an `X25519` key will be derived from the `Ed25519` public key used to\n   * create the DID. This feature enables the same DID to be used for encrypted communication, in\n   * addition to signature verification.\n   *\n   * Notes:\n   * - This option is ONLY applicable when the `algorithm` of the DID's public key is `Ed25519`.\n   * - Enabling this introduces specific cryptographic considerations that should be understood\n   *   before using the same key pair for digital signatures and encrypted communication. See the following for more information:\n   */\n  enableEncryptionKeyDerivation?: boolean;\n\n  /**\n   * Optionally enable experimental public key types during DID creation.\n   * By default, this option is set to `false`, which means experimental public key types are not\n   * supported.\n   *\n   * Note: This implementation of the DID Key method does not support any experimental public key\n   * types.\n   */\n  enableExperimentalPublicKeyTypes?: boolean;\n\n  /**\n   * Optionally specify the format of the public key to be used for DID creation.\n   */\n  publicKeyFormat?: keyof typeof DidKeyVerificationMethodType;\n\n  /**\n   * Alternatively, specify the algorithm to be used for key generation of the single verification\n   * method in the DID Document.\n   */\n  verificationMethods?: DidCreateVerificationMethod<TKms>[];\n}\n\n/**\n * Enumerates the types of keys that can be used in a DID Key document.\n *\n * The DID Key method supports various cryptographic key types. These key types are essential for\n * the creation and management of DIDs and their associated cryptographic operations like signing\n * and encryption.\n */\nexport enum DidKeyRegisteredKeyType {\n  /**\n   * Ed25519: A public-key signature system using the EdDSA (Edwards-curve Digital Signature\n   * Algorithm) and Curve25519.\n   */\n  Ed25519 = 'Ed25519',\n\n  /**\n   * secp256k1: A cryptographic curve used for digital signatures in a range of decentralized\n   * systems.\n   */\n  secp256k1 = 'secp256k1',\n\n  /**\n   * secp256r1: Also known as P-256 or prime256v1, this curve is used for cryptographic operations\n   * and is widely supported in various cryptographic libraries and standards.\n   */\n  secp256r1 = 'secp256r1',\n\n  /**\n   * X25519: A Diffie-Hellman key exchange algorithm using Curve25519.\n   */\n  X25519 = 'X25519'\n}\n\n/**\n * Enumerates the verification method types supported by the DID Key method.\n *\n * This enum defines the URIs associated with common verification methods used in DID Documents.\n * These URIs represent cryptographic suites or key types standardized for use across decentralized\n * identifiers (DIDs).\n */\nexport const DidKeyVerificationMethodType = {\n  /** Represents an Ed25519 public key used for digital signatures. */\n  Ed25519VerificationKey2020: 'https://w3id.org/security/suites/ed25519-2020/v1',\n\n  /** Represents a JSON Web Key (JWK) used for digital signatures and key agreement protocols. */\n  JsonWebKey2020: 'https://w3id.org/security/suites/jws-2020/v1',\n\n  /** Represents an X25519 public key used for key agreement protocols. */\n  X25519KeyAgreementKey2020: 'https://w3id.org/security/suites/x25519-2020/v1',\n} as const;\n\n/**\n * Private helper that maps algorithm identifiers to their corresponding DID Key\n * {@link DidKeyRegisteredKeyType | registered key type}.\n */\nconst AlgorithmToKeyTypeMap = {\n  Ed25519   : DidKeyRegisteredKeyType.Ed25519,\n  ES256K    : DidKeyRegisteredKeyType.secp256k1,\n  ES256     : DidKeyRegisteredKeyType.secp256r1,\n  'P-256'   : DidKeyRegisteredKeyType.secp256r1,\n  secp256k1 : DidKeyRegisteredKeyType.secp256k1,\n  secp256r1 : DidKeyRegisteredKeyType.secp256r1,\n  X25519    : DidKeyRegisteredKeyType.X25519\n} as const;\n\n/**\n * The `DidKey` class provides an implementation of the 'did:key' DID method.\n *\n * Features:\n * - DID Creation: Create new `did:key` DIDs.\n * - DID Key Management: Instantiate a DID object from an existing verification method key set or\n *                       or a key in a Key Management System (KMS). If supported by the KMS, a DID's\n *                       key can be exported to a portable DID format.\n * - DID Resolution: Resolve a `did:key` to its corresponding DID Document.\n * - Signature Operations: Sign and verify messages using keys associated with a DID.\n *\n * @remarks\n * The `did:key` DID method uses a single public key to generate a DID and does not rely\n * on any external system such as a blockchain or centralized database. This characteristic makes\n * it suitable for use cases where a assertions about a DID Subject can be self-verifiable by\n * third parties.\n *\n * The method-specific identifier is formed by\n * {@link https://datatracker.ietf.org/doc/html/draft-multiformats-multibase#name-base-58-bitcoin-encoding | Multibase base58-btc}\n * encoding the concatenation of the\n * {@link https://github.com/multiformats/multicodec/blob/master/README.md | Multicodec} identifier\n * for the public key type and the raw public key bytes. To form the DID URI, the method-specific\n * identifier is prefixed with the string 'did:key:'.\n *\n * This method can optionally derive an encryption key from the public key used to create the DID\n * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be\n * used for encrypted communication, in addition to signature verification. To enable this\n * feature when calling {@link DidKey.create | `DidKey.create()`}, first specify an `algorithm` of\n * `Ed25519` or provide a `keySet` referencing an `Ed25519` key and then set the\n * `enableEncryptionKeyDerivation` option to `true`.\n *\n * Note:\n * - The authors of the DID Key specification have indicated that use of this method for long-lived\n *   use cases is only recommended when accompanied with high confidence that private keys are\n *   securely protected by software or hardware isolation.\n *\n * @see {@link https://w3c-ccg.github.io/did-method-key/ | DID Key Specification}\n *\n* @example\n * ```ts\n * // DID Creation\n * const did = await DidKey.create();\n *\n * // DID Creation with a KMS\n * const keyManager = new LocalKeyManager();\n * const did = await DidKey.create({ keyManager });\n *\n * // DID Resolution\n * const resolutionResult = await DidKey.resolve({ did: did.uri });\n *\n * // Signature Operations\n * const signer = await did.getSigner();\n * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });\n * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });\n *\n * // Key Management\n *\n * // Instantiate a DID object from an existing key in a KMS\n * const did = await DidKey.fromKeyManager({\n *  didUri: 'did:key:z6MkpUzNmYVTGpqhStxK8yRKXWCRNm1bGYz8geAg2zmjYHKX',\n *  keyManager\n * });\n *\n * // Instantiate a DID object from an existing verification method key\n * const did = await DidKey.fromKeys({\n *   verificationMethods: [{\n *     publicKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4'\n *     },\n *     privateKeyJwk: {\n *       kty: 'OKP',\n *       crv: 'Ed25519',\n *       x: 'cHs7YMLQ3gCWjkacMURBsnEJBcEsvlsE5DfnsfTNDP4',\n *       d: 'bdcGE4KzEaekOwoa-ee3gAm1a991WvNj_Eq3WKyqTnE'\n *     }\n *   }]\n * });\n *\n * // Convert a DID object to a portable format\n * const portableDid = await DidKey.toKeys({ did });\n *\n * // Reconstruct a DID object from a portable format\n * const did = await DidKey.fromKeys(portableDid);\n * ```\n */\nexport class DidKey extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID Key specification.\n   */\n  public static methodName = 'key';\n\n  /**\n   * Creates a new DID using the `did:key` method formed from a newly generated key.\n   *\n   * @remarks\n   * The DID URI is formed by\n   * {@link https://datatracker.ietf.org/doc/html/draft-multiformats-multibase#name-base-58-bitcoin-encoding | Multibase base58-btc}\n   * encoding the\n   * {@link https://github.com/multiformats/multicodec/blob/master/README.md | Multicodec}-encoded\n   * public key and prefixing with `did:key:`.\n   *\n   * This method can optionally derive an encryption key from the public key used to create the DID\n   * if and only if the public key algorithm is `Ed25519`. This feature enables the same DID to be\n   * used for encrypted communication, in addition to signature verification. To enable this\n   * feature, specify an `algorithm` of `Ed25519` as either a top-level option or in a\n   * `verificationMethod` and set the `enableEncryptionKeyDerivation` option to `true`.\n   *\n   * Notes:\n   * - If no `options` are given, by default a new Ed25519 key will be generated.\n   * - The `algorithm` and `verificationMethods` options are mutually exclusive. If both are given,\n   *   an error will be thrown.\n   *\n   * @example\n   * ```ts\n   * // DID Creation\n   * const did = await DidKey.create();\n   *\n   * // DID Creation with a KMS\n   * const keyManager = new LocalKeyManager();\n   * const did = await DidKey.create({ keyManager });\n   * ```\n   *\n   * @param params - The parameters for the create operation.\n   * @param params.keyManager - Key Management System (KMS) used to generate keys and sign data.\n   * @param params.options - Optional parameters that can be specified when creating a new DID.\n   * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.\n   */\n  public static async create<TKms extends CryptoApi | undefined = undefined>({\n    keyManager = new LocalKeyManager(),\n    options = {}\n  }: {\n    keyManager?: TKms;\n    options?: DidKeyCreateOptions<TKms>;\n  } = {}): Promise<BearerDid> {\n    // Before processing the create operation, validate DID-method-specific requirements to prevent\n    // keys from being generated unnecessarily.\n\n    // Check 1: Validate that `algorithm` or `verificationMethods` options are not both given.\n    if (options.algorithm && options.verificationMethods) {\n      throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`);\n    }\n\n    // Check 2: If `verificationMethods` is given, it must contain exactly one entry since DID Key\n    // only supports a single verification method.\n    if (options.verificationMethods && options.verificationMethods.length !== 1) {\n      throw new Error(`The 'verificationMethods' option must contain exactly one entry`);\n    }\n\n    // Default to Ed25519 key generation if an algorithm is not given.\n    const algorithm = options.algorithm ?? options.verificationMethods?.[0]?.algorithm ?? 'Ed25519';\n\n    // Generate a new key using the specified `algorithm`.\n    const keyUri = await keyManager.generateKey({ algorithm });\n    const publicKey = await keyManager.getPublicKey({ keyUri });\n\n    // Compute the DID identifier from the public key by converting the JWK to a multibase-encoded\n    // multicodec value.\n    const identifier = await DidKeyUtils.publicKeyToMultibaseId({ publicKey });\n\n    // Attach the prefix `did:key` to form the complete DID URI.\n    const didUri = `did:${DidKey.methodName}:${identifier}`;\n\n    // Expand the DID URI string to a DID document.\n    const didResolutionResult = await DidKey.resolve(didUri, options);\n    const document = didResolutionResult.didDocument as DidDocument;\n\n    // Create the BearerDid object from the generated key material.\n    const did = new BearerDid({\n      uri      : didUri,\n      document,\n      metadata : {},\n      keyManager\n    });\n\n    return did;\n  }\n\n  /**\n   * Given the W3C DID Document of a `did:key` DID, return the verification method that will be used\n   * for signing messages and credentials. With DID Key, the first verification method in the\n   * authentication property in the DID Document is used.\n   *\n   * Note that for DID Key, only one verification method intended for signing can exist so\n   * specifying `methodId` could be considered redundant or unnecessary. The option is provided for\n   * consistency with other DID method implementations.\n   *\n   * @param params - The parameters for the `getSigningMethod` operation.\n   * @param params.didDocument - DID Document to get the verification method from.\n   * @param params.methodId - ID of the verification method to use for signing.\n   * @returns Verification method to use for signing.\n   */\n  public static async getSigningMethod({ didDocument }: {\n    didDocument: DidDocument;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didDocument.id);\n    if (parsedDid && parsedDid.method !== this.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n\n    // Attempt to ge the first verification method intended for signing claims.\n    const [ methodId ] = didDocument.assertionMethod || [];\n    const verificationMethod = didDocument.verificationMethod?.find(vm => vm.id === methodId);\n\n    if (!(verificationMethod && verificationMethod.publicKeyJwk)) {\n      throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');\n    }\n\n    return verificationMethod;\n  }\n\n  /**\n   * Instantiates a {@link BearerDid} object for the DID Key method from a given {@link PortableDid}.\n   *\n   * This method allows for the creation of a `BearerDid` object using a previously created DID's\n   * key material, DID document, and metadata.\n   *\n   * @remarks\n   * The `verificationMethod` array of the DID document must contain exactly one key since the\n   * `did:key` method only supports a single verification method.\n   *\n   * @example\n   * ```ts\n   * // Export an existing BearerDid to PortableDid format.\n   * const portableDid = await did.export();\n   * // Reconstruct a BearerDid object from the PortableDid.\n   * const did = await DidKey.import({ portableDid });\n   * ```\n   *\n   * @param params - The parameters for the import operation.\n   * @param params.portableDid - The PortableDid object to import.\n   * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to\n   *                            generate keys and sign data. If not given, a new\n   *                            {@link LocalKeyManager} instance will be created and\n   *                            used.\n   * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the provided keys.\n   * @throws An error if the DID document does not contain exactly one verification method.\n   */\n  public static async import({ portableDid, keyManager = new LocalKeyManager() }: {\n    keyManager?: CryptoApi & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;\n    portableDid: PortableDid;\n  }): Promise<BearerDid> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(portableDid.uri);\n    if (parsedDid?.method !== DidKey.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);\n    }\n\n    // Use the given PortableDid to construct the BearerDid object.\n    const did = await BearerDid.import({ portableDid, keyManager });\n\n    // Validate that the given DID document contains exactly one verification method.\n    // Note: The non-undefined assertion is necessary because the type system cannot infer that\n    // the `verificationMethod` property is defined -- which is checked by `BearerDid.import()`.\n    if (did.document.verificationMethod!.length !== 1) {\n      throw new DidError(DidErrorCode.InvalidDidDocument, `DID document must contain exactly one verification method`);\n    }\n\n    return did;\n  }\n\n  /**\n   * Resolves a `did:key` identifier to a DID Document.\n   *\n   * @param didUri - The DID to be resolved.\n   * @param options - Optional parameters for resolving the DID.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    try {\n      // Attempt to expand the DID URI string to a DID document.\n      const didDocument = await DidKey.createDocument({ didUri, options });\n\n      // If the DID document was created successfully, return it.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didDocument,\n      };\n\n    } catch (error: any) {\n      // Rethrow any unexpected errors that are not a `DidError`.\n      if (!(error instanceof DidError)) throw new Error(error);\n\n      // Return a DID Resolution Result with the appropriate error code.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error: error.code,\n          ...error.message && { errorMessage: error.message }\n        }\n      };\n    }\n  }\n\n  /**\n   * Expands a did:key identifier to a DID Document.\n   *\n   * Reference: https://w3c-ccg.github.io/did-method-key/#document-creation-algorithm\n   *\n   * @param options\n   * @returns - A DID dodcument.\n   */\n  private static async createDocument({ didUri, options = {}}: {\n    didUri: string;\n    options?: Exclude<DidKeyCreateOptions<CryptoApi>, 'algorithm' | 'verificationMethods'> | DidResolutionOptions;\n  }): Promise<DidDocument> {\n    const {\n      defaultContext = 'https://www.w3.org/ns/did/v1',\n      enableEncryptionKeyDerivation = false,\n      enableExperimentalPublicKeyTypes = false,\n      publicKeyFormat = 'JsonWebKey2020'\n    } = options;\n\n    /**\n     * 1. Initialize document to an empty object.\n     */\n    const didDocument: DidDocument = { id: '' };\n\n    /**\n     * 2. Using a colon (:) as the delimiter, split the identifier into its\n     * components: a scheme, a method, a version, and a multibaseValue.\n     * If there are only three components set the version to the string\n     * value 1 and use the last value as the multibaseValue.\n     */\n    const parsedDid = Did.parse(didUri);\n    if (!parsedDid) {\n      throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`);\n    }\n    const multibaseValue = parsedDid.id;\n\n    /**\n     * 3. Check the validity of the input identifier.\n     * The scheme MUST be the value did. The method MUST be the value key.\n     * The version MUST be convertible to a positive integer value. The\n     * multibaseValue MUST be a string and begin with the letter z. If any\n     * of these requirements fail, an invalidDid error MUST be raised.\n     */\n    if (parsedDid.method !== DidKey.methodName) {\n      throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);\n    }\n    if (!DidKey.validateIdentifier(parsedDid)) {\n      throw new DidError(DidErrorCode.InvalidDid, `Invalid DID URI: ${didUri}`);\n    }\n\n    /**\n     * 4. Initialize the signatureVerificationMethod to the result of passing\n     * identifier, multibaseValue, and options to a\n     *  {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | Signature Method Creation Algorithm}.\n     */\n    const signatureVerificationMethod = await DidKey.createSignatureMethod({\n      didUri,\n      multibaseValue,\n      options: { enableExperimentalPublicKeyTypes, publicKeyFormat }\n    });\n\n    /**\n     * 5. Set document.id to identifier. If document.id is not a valid DID,\n     * an invalidDid error MUST be raised.\n     *\n     * Note: Identifier was already confirmed to be valid in Step 3, so\n     *       skipping the redundant validation.\n     */\n    didDocument.id = parsedDid.uri;\n\n    /**\n     * 6. Initialize the verificationMethod property in document to an array\n     * where the first value is the signatureVerificationMethod.\n     */\n    didDocument.verificationMethod = [signatureVerificationMethod];\n\n    /**\n     * 7. Initialize the authentication, assertionMethod, capabilityInvocation,\n     * and the capabilityDelegation properties in document to an array where\n     * the first item is the value of the id property in\n     * signatureVerificationMethod.\n     */\n    didDocument.authentication = [signatureVerificationMethod.id];\n    didDocument.assertionMethod = [signatureVerificationMethod.id];\n    didDocument.capabilityInvocation = [signatureVerificationMethod.id];\n    didDocument.capabilityDelegation = [signatureVerificationMethod.id];\n\n    /**\n     * 8. If options.enableEncryptionKeyDerivation is set to true:\n     * Add the encryptionVerificationMethod value to the verificationMethod\n     * array. Initialize the keyAgreement property in document to an array\n     * where the first item is the value of the id property in\n     * encryptionVerificationMethod.\n     */\n    if (enableEncryptionKeyDerivation === true) {\n      /**\n       * Although not covered by the did:key method specification, a sensible\n       * default will be taken to use the 'X25519KeyAgreementKey2020'\n       * verification method type if the given publicKeyFormat is\n       * 'Ed25519VerificationKey2020' and 'JsonWebKey2020' otherwise.\n       */\n      const encryptionPublicKeyFormat =\n        (publicKeyFormat === 'Ed25519VerificationKey2020')\n          ? 'X25519KeyAgreementKey2020'\n          : 'JsonWebKey2020';\n\n      /**\n       * 8.1 Initialize the encryptionVerificationMethod to the result of\n       * passing identifier, multibaseValue, and options to an\n     * {@link https://w3c-ccg.github.io/did-method-key/#encryption-method-creation-algorithm | Encryption Method Creation Algorithm}.\n       */\n      const encryptionVerificationMethod = await this.createEncryptionMethod({\n        didUri,\n        multibaseValue,\n        options: { enableExperimentalPublicKeyTypes, publicKeyFormat: encryptionPublicKeyFormat }\n      });\n\n      /**\n       * 8.2 Add the encryptionVerificationMethod value to the\n       * verificationMethod array.\n       */\n      didDocument.verificationMethod.push(encryptionVerificationMethod);\n\n      /**\n       * 8.3. Initialize the keyAgreement property in document to an array\n       * where the first item is the value of the id property in\n       * encryptionVerificationMethod.\n       */\n      didDocument.keyAgreement = [encryptionVerificationMethod.id];\n    }\n\n    /**\n     * 9. Initialize the @context property in document to the result of passing document and options to the Context\n     * Creation algorithm.\n     */\n    // Set contextArray to an array that is initialized to options.defaultContext.\n    const contextArray = [ defaultContext ];\n\n    // For every object in every verification relationship listed in document,\n    // add a string value to the contextArray based on the object type value,\n    // if it doesn't already exist, according to the following table:\n    // {@link https://w3c-ccg.github.io/did-method-key/#context-creation-algorithm | Context Type URL}\n    const verificationMethodTypes = getVerificationMethodTypes({ didDocument });\n    verificationMethodTypes.forEach((typeName: string) => {\n      const typeUrl = DidKeyVerificationMethodType[typeName as keyof typeof DidKeyVerificationMethodType];\n      contextArray.push(typeUrl);\n    });\n    didDocument['@context'] = contextArray;\n\n    /**\n     * 10. Return document.\n     */\n    return didDocument;\n  }\n\n  /**\n   * Decoding a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying that encrypted information will be\n   * received by the intended recipient.\n   */\n  private static async createEncryptionMethod({ didUri, multibaseValue, options }: {\n    didUri: string;\n    multibaseValue: string;\n    options: Required<Pick<DidKeyCreateOptions<CryptoApi>, 'enableExperimentalPublicKeyTypes' | 'publicKeyFormat'>>;\n  }): Promise<DidVerificationMethod> {\n    const { enableExperimentalPublicKeyTypes, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: DidVerificationMethod = { id: '', type: '', controller: '' };\n\n    /**\n     * 2. Set multicodecValue and raw publicKeyBytes to the result of passing multibaseValue and\n     * options to a Derive Encryption Key algorithm.\n     */\n    const {\n      keyBytes: publicKeyBytes,\n      multicodecCode: multicodecValue,\n    } = await DidKey.deriveEncryptionKey({ multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of raw publicKeyBytes based on the multicodecValue table\n     * provided below:\n     *\n     * Multicodec hexadecimal value: 0xec\n     *\n     * If the byte length of raw publicKeyBytes does not match the expected public key length for\n     * the associated multicodecValue, an invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = publicKeyBytes.byteLength;\n    const expectedLength = DidKeyUtils.MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Expected ${actualLength} bytes. Actual: ${expectedLength}`);\n    }\n\n    /**\n     * 4. Create the multibaseValue by concatenating the letter 'z' and the\n     * base58-btc encoding of the concatenation of the multicodecValue and\n     * the raw publicKeyBytes.\n     */\n    const kemMultibaseValue = keyBytesToMultibaseId({\n      keyBytes       : publicKeyBytes,\n      multicodecCode : multicodecValue\n    });\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier,\n     * a hash character (#), and the multibaseValue. If verificationMethod.id\n     * is not a valid DID URL, an invalidDidUrl error MUST be raised.\n     */\n    verificationMethod.id = `${didUri}#${kemMultibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an\n     * unsupportedPublicKeyType error MUST be raised.\n     */\n    if (!(publicKeyFormat in DidKeyVerificationMethodType)) {\n      throw new DidError(DidErrorCode.UnsupportedPublicKeyType, `Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and publicKeyFormat is not\n     * Multikey, JsonWebKey2020, or X25519KeyAgreementKey2020, an invalidPublicKeyType error MUST be\n     * raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'X25519KeyAgreementKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     */\n    verificationMethod.controller = didUri;\n\n    /**\n     * 11. If publicKeyFormat is Multikey or X25519KeyAgreementKey2020, set the verificationMethod.publicKeyMultibase\n     * value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'X25519KeyAgreementKey2020') {\n      verificationMethod.publicKeyMultibase = kemMultibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the verificationMethod.publicKeyJwk value to\n     * the result of passing multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue });\n      verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes });\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod;\n  }\n\n  /**\n   * Decodes a multibase-encoded multicodec value into a verification method\n   * that is suitable for verifying digital signatures.\n   * @param options - Signature method creation algorithm inputs.\n   * @returns - A verification method.\n   */\n  private static async createSignatureMethod({ didUri, multibaseValue, options }: {\n    didUri: string;\n    multibaseValue: string;\n    options: Required<Pick<DidKeyCreateOptions<CryptoApi>, 'enableExperimentalPublicKeyTypes' | 'publicKeyFormat'>>\n  }): Promise<DidVerificationMethod> {\n    const { enableExperimentalPublicKeyTypes, publicKeyFormat } = options;\n\n    /**\n     * 1. Initialize verificationMethod to an empty object.\n     */\n    const verificationMethod: DidVerificationMethod = { id: '', type: '', controller: '' };\n\n    /**\n     * 2. Set multicodecValue and publicKeyBytes to the result of passing\n     * multibaseValue and options to a Decode Public Key algorithm.\n     */\n    const {\n      keyBytes: publicKeyBytes,\n      multicodecCode: multicodecValue,\n      multicodecName\n    } = multibaseIdToKeyBytes({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 3. Ensure the proper key length of publicKeyBytes based on the multicodecValue\n     * {@link https://w3c-ccg.github.io/did-method-key/#signature-method-creation-algorithm | table provided}.\n     * If the byte length of rawPublicKeyBytes does not match the expected public key length for the\n     * associated multicodecValue, an invalidPublicKeyLength error MUST be raised.\n     */\n    const actualLength = publicKeyBytes.byteLength;\n    const expectedLength = DidKeyUtils.MULTICODEC_PUBLIC_KEY_LENGTH[multicodecValue];\n    if (actualLength !== expectedLength) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyLength, `Expected ${actualLength} bytes. Actual: ${expectedLength}`);\n    }\n\n    /**\n     * 4. Ensure the publicKeyBytes are a proper encoding of the public key type as specified by\n     * the multicodecValue. If an invalid public key value is detected, an invalidPublicKey error\n     * MUST be raised.\n     */\n    let isValid = false;\n    switch (multicodecName) {\n      case 'secp256k1-pub':\n        isValid = await Secp256k1.validatePublicKey({ publicKeyBytes });\n        break;\n      case 'ed25519-pub':\n        isValid = await Ed25519.validatePublicKey({ publicKeyBytes });\n        break;\n      case 'x25519-pub':\n        // TODO: Validate key once/if X25519.validatePublicKey() is implemented.\n        // isValid = X25519.validatePublicKey({ key: rawPublicKeyBytes})\n        isValid = true;\n        break;\n    }\n    if (!isValid) {\n      throw new DidError(DidErrorCode.InvalidPublicKey, 'Invalid public key detected.');\n    }\n\n    /**\n     * 5. Set the verificationMethod.id value by concatenating identifier, a hash character (#), and\n     * the multibaseValue. If verificationMethod.id is not a valid DID URL, an invalidDidUrl error\n     * MUST be raised.\n     */\n    verificationMethod.id = `${didUri}#${multibaseValue}`;\n    try {\n      new URL(verificationMethod.id);\n    } catch (error: any) {\n      throw new DidError(DidErrorCode.InvalidDidUrl, 'Verification Method ID is not a valid DID URL.');\n    }\n\n    /**\n     * 6. Set the publicKeyFormat value to the options.publicKeyFormat value.\n     * 7. If publicKeyFormat is not known to the implementation, an unsupportedPublicKeyType error\n     * MUST be raised.\n     */\n    if (!(publicKeyFormat in DidKeyVerificationMethodType)) {\n      throw new DidError(DidErrorCode.UnsupportedPublicKeyType, `Unsupported format: ${publicKeyFormat}`);\n    }\n\n    /**\n     * 8. If options.enableExperimentalPublicKeyTypes is set to false and publicKeyFormat is not\n     * Multikey, JsonWebKey2020, or Ed25519VerificationKey2020, an invalidPublicKeyType error MUST\n     * be raised.\n     */\n    const StandardPublicKeyTypes = ['Multikey', 'JsonWebKey2020', 'Ed25519VerificationKey2020'];\n    if (enableExperimentalPublicKeyTypes === false\n      && !(StandardPublicKeyTypes.includes(publicKeyFormat))) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyType, `Specified '${publicKeyFormat}' without setting enableExperimentalPublicKeyTypes to true.`);\n    }\n\n    /**\n     * 9. Set verificationMethod.type to the publicKeyFormat value.\n     */\n    verificationMethod.type = publicKeyFormat;\n\n    /**\n     * 10. Set verificationMethod.controller to the identifier value.\n     */\n    verificationMethod.controller = didUri;\n\n    /**\n     * 11. If publicKeyFormat is Multikey or Ed25519VerificationKey2020,\n     * set the verificationMethod.publicKeyMultibase value to multibaseValue.\n     *\n     * Note: This implementation does not currently support the Multikey\n     *       format.\n     */\n    if (publicKeyFormat === 'Ed25519VerificationKey2020') {\n      verificationMethod.publicKeyMultibase = multibaseValue;\n    }\n\n    /**\n     * 12. If publicKeyFormat is JsonWebKey2020, set the verificationMethod.publicKeyJwk value to\n     * the result of passing multicodecValue and rawPublicKeyBytes to a JWK encoding algorithm.\n     */\n    if (publicKeyFormat === 'JsonWebKey2020') {\n      const { crv } = await DidKeyUtils.multicodecToJwk({ code: multicodecValue });\n      verificationMethod.publicKeyJwk = await DidKeyUtils.keyConverter(crv!).bytesToPublicKey({ publicKeyBytes});\n    }\n\n    /**\n     * 13. Return verificationMethod.\n     */\n    return verificationMethod;\n  }\n\n\n  /**\n   * Transform a multibase-encoded multicodec value to public encryption key\n   * components that are suitable for encrypting messages to a receiver. A\n   * mathematical proof elaborating on the safety of performing this operation\n   * is available in:\n   * {@link https://eprint.iacr.org/2021/509.pdf | On using the same key pair for Ed25519 and an X25519 based KEM}\n   */\n  private static async deriveEncryptionKey({ multibaseValue }: {\n    multibaseValue: string\n  }): Promise<RequireOnly<KeyWithMulticodec, 'keyBytes' | 'multicodecCode'>> {\n    /**\n     * 1. Set publicEncryptionKey to an empty object.\n     */\n    let publicEncryptionKey: RequireOnly<KeyWithMulticodec, 'keyBytes' | 'multicodecCode'> = {\n      keyBytes       : new Uint8Array(),\n      multicodecCode : 0\n    };\n\n    /**\n     * 2. Decode multibaseValue using the base58-btc multibase alphabet and\n     * set multicodecValue to the multicodec header for the decoded value.\n     * Implementers are cautioned to ensure that the multicodecValue is set\n     * to the result after performing varint decoding.\n     *\n     * 3. Set the rawPublicKeyBytes to the bytes remaining after the multicodec\n     * header.\n     */\n    const {\n      keyBytes: publicKeyBytes,\n      multicodecCode: multicodecValue\n    } = multibaseIdToKeyBytes({ multibaseKeyId: multibaseValue });\n\n    /**\n     * 4. If the multicodecValue is 0xed (Ed25519 public key), derive a public X25519 encryption key\n     * by using the raw publicKeyBytes and the algorithm defined in\n     * {@link https://datatracker.ietf.org/doc/html/draft-ietf-core-oscore-groupcomm | Group OSCORE - Secure Group Communication for CoAP}\n     * for Curve25519 in Section 2.4.2: ECDH with Montgomery Coordinates and set\n     * generatedPublicEncryptionKeyBytes to the result.\n     */\n    if (multicodecValue === 0xed) {\n      const ed25519PublicKey = await DidKeyUtils.keyConverter('Ed25519').bytesToPublicKey({\n        publicKeyBytes\n      });\n      const generatedPublicEncryptionKey = await Ed25519.convertPublicKeyToX25519({\n        publicKey: ed25519PublicKey\n      });\n      const generatedPublicEncryptionKeyBytes = await DidKeyUtils.keyConverter('Ed25519').publicKeyToBytes({\n        publicKey: generatedPublicEncryptionKey\n      });\n\n      /**\n       * 5. Set multicodecValue to 0xec.\n       * 6. Set raw public keyBytes to generatedPublicEncryptionKeyBytes.\n       */\n      publicEncryptionKey = {\n        keyBytes       : generatedPublicEncryptionKeyBytes,\n        multicodecCode : 0xec\n      };\n    }\n\n    /**\n     * 7. Return publicEncryptionKey.\n     */\n    return publicEncryptionKey;\n  }\n\n  /**\n   * Validates the structure and components of a DID URI against the `did:key` method specification.\n   *\n   * @param parsedDid - An object representing the parsed components of a DID URI, including the\n   *                    scheme, method, and method-specific identifier.\n   * @returns `true` if the DID URI meets the `did:key` method's structural requirements, `false` otherwise.\n   *\n   */\n  private static validateIdentifier(parsedDid: Did): boolean {\n    const { method, id: multibaseValue } = parsedDid;\n    const [ scheme ] = parsedDid.uri.split(':', 1);\n\n    /**\n     * Note: The W3C DID specification makes no mention of a version value being part of the DID\n     *       syntax.  Additionally, there does not appear to be any real-world usage of the version\n     *       number. Consequently, this implementation will ignore the version related guidance in\n     *       the did:key specification.\n     */\n    const version = '1';\n\n    return (\n      scheme === 'did' &&\n      method === 'key' &&\n      Number(version) > 0 &&\n      universalTypeOf(multibaseValue) === 'String' &&\n      multibaseValue.startsWith('z')\n    );\n  }\n}\n\n/**\n * The `DidKeyUtils` class provides utility functions to support operations in the DID Key method.\n */\nexport class DidKeyUtils {\n  /**\n   * A mapping from JSON Web Key (JWK) property descriptors to multicodec names.\n   *\n   * This mapping is used to convert keys in JWK (JSON Web Key) format to multicodec format.\n   *\n   * @remarks\n   * The keys of this object are strings that describe the JOSE key type and usage,\n   * such as 'Ed25519:public', 'Ed25519:private', etc. The values are the corresponding multicodec\n   * names used to represent these key types.\n   *\n   * @example\n   * ```ts\n   * const multicodecName = JWK_TO_MULTICODEC['Ed25519:public'];\n   * // Returns 'ed25519-pub', the multicodec name for an Ed25519 public key\n   * ```\n   */\n  private static JWK_TO_MULTICODEC: { [key: string]: string } = {\n    'Ed25519:public'    : 'ed25519-pub',\n    'Ed25519:private'   : 'ed25519-priv',\n    'secp256k1:public'  : 'secp256k1-pub',\n    'secp256k1:private' : 'secp256k1-priv',\n    'X25519:public'     : 'x25519-pub',\n    'X25519:private'    : 'x25519-priv',\n  };\n\n  /**\n   * Defines the expected byte lengths for public keys associated with different cryptographic\n   * algorithms, indexed by their multicodec code values.\n   */\n  public static MULTICODEC_PUBLIC_KEY_LENGTH: Record<number, number> = {\n    // secp256k1-pub - Secp256k1 public key (compressed) - 33 bytes\n    0xe7: 33,\n\n    // x25519-pub - Curve25519 public key - 32 bytes\n    0xec: 32,\n\n    // ed25519-pub - Ed25519 public key - 32 bytes\n    0xed: 32\n  };\n\n  /**\n   * A mapping from multicodec names to their corresponding JOSE (JSON Object Signing and Encryption)\n   * representations. This mapping facilitates the conversion of multicodec key formats to\n   * JWK (JSON Web Key) formats.\n   *\n   * @remarks\n   * The keys of this object are multicodec names, such as 'ed25519-pub', 'ed25519-priv', etc.\n   * The values are objects representing the corresponding JWK properties for that key type.\n   *\n   * @example\n   * ```ts\n   * const joseKey = MULTICODEC_TO_JWK['ed25519-pub'];\n   * // Returns a partial JWK for an Ed25519 public key\n   * ```\n   */\n  private static MULTICODEC_TO_JWK: { [key: string]: Jwk } = {\n    'ed25519-pub'    : { crv: 'Ed25519',   kty: 'OKP', x: '' },\n    'ed25519-priv'   : { crv: 'Ed25519',   kty: 'OKP', x: '',        d: '' },\n    'secp256k1-pub'  : { crv: 'secp256k1', kty: 'EC',  x: '', y: ''},\n    'secp256k1-priv' : { crv: 'secp256k1', kty: 'EC',  x: '', y: '', d: '' },\n    'x25519-pub'     : { crv: 'X25519',    kty: 'OKP', x: '' },\n    'x25519-priv'    : { crv: 'X25519',    kty: 'OKP', x: '',        d: '' },\n  };\n\n  /**\n   * Converts a JWK (JSON Web Key) to a Multicodec code and name.\n   *\n   * @example\n   * ```ts\n   * const jwk: Jwk = { crv: 'Ed25519', kty: 'OKP', x: '...' };\n   * const { code, name } = await DidKeyUtils.jwkToMulticodec({ jwk });\n   * ```\n   *\n   * @param params - The parameters for the conversion.\n   * @param params.jwk - The JSON Web Key to be converted.\n   * @returns A promise that resolves to a Multicodec definition.\n   */\n  public static async jwkToMulticodec({ jwk }: {\n    jwk: Jwk\n  }): Promise<MulticodecDefinition<MulticodecCode>> {\n    const params: string[] = [];\n\n    if (jwk.crv) {\n      params.push(jwk.crv);\n      if (jwk.d) {\n        params.push('private');\n      } else {\n        params.push('public');\n      }\n    }\n\n    const lookupKey = params.join(':');\n    const name = DidKeyUtils.JWK_TO_MULTICODEC[lookupKey];\n\n    if (name === undefined) {\n      throw new Error(`Unsupported JWK to Multicodec conversion: '${lookupKey}'`);\n    }\n\n    const code = Multicodec.getCodeFromName({ name });\n\n    return { code, name };\n  }\n\n  /**\n   * Returns the appropriate public key compressor for the specified cryptographic curve.\n   *\n   * @param curve - The cryptographic curve to use for the key conversion.\n   * @returns A public key compressor for the specified curve.\n   */\n  public static keyCompressor(\n    curve: string\n  ): KeyCompressor['compressPublicKey'] {\n  // ): ({ publicKeyBytes }: { publicKeyBytes: Uint8Array }) => Promise<Uint8Array> {\n    const compressors = {\n      'P-256'     : Secp256r1.compressPublicKey,\n      'secp256k1' : Secp256k1.compressPublicKey\n    } as Record<string, KeyCompressor['compressPublicKey']>;\n\n    const compressor = compressors[curve];\n\n    if (!compressor) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);\n\n    return compressor;\n  }\n\n  /**\n   * Returns the appropriate key converter for the specified cryptographic curve.\n   *\n   * @param curve - The cryptographic curve to use for the key conversion.\n   * @returns An `AsymmetricKeyConverter` for the specified curve.\n   */\n  public static keyConverter(curve: string): AsymmetricKeyConverter {\n    const converters: Record<string, AsymmetricKeyConverter> = {\n      'Ed25519'   : Ed25519,\n      'P-256'     : Secp256r1,\n      'secp256k1' : Secp256k1,\n      'X25519'    : X25519\n    };\n\n    const converter = converters[curve];\n\n    if (!converter) throw new DidError(DidErrorCode.InvalidPublicKeyType, `Unsupported curve: ${curve}`);\n\n    return converter;\n  }\n\n  /**\n   * Converts a Multicodec code or name to parial JWK (JSON Web Key).\n   *\n   * @example\n   * ```ts\n   * const partialJwk = await DidKeyUtils.multicodecToJwk({ name: 'ed25519-pub' });\n   * ```\n   *\n   * @param params - The parameters for the conversion.\n   * @param params.code - Optional Multicodec code to convert.\n   * @param params.name - Optional Multicodec name to convert.\n   * @returns A promise that resolves to a JOSE format key.\n   */\n  public static async multicodecToJwk({ code, name }: {\n    code?: MulticodecCode,\n    name?: string\n  }): Promise<Jwk> {\n    // Either code or name must be specified, but not both.\n    if (!(name ? !code : code)) {\n      throw new Error(`Either 'name' or 'code' must be defined, but not both.`);\n    }\n\n    // If name is undefined, lookup by code.\n    name = (name === undefined ) ? Multicodec.getNameFromCode({ code: code! }) : name;\n\n    const lookupKey = name;\n    const jose = DidKeyUtils.MULTICODEC_TO_JWK[lookupKey];\n\n    if (jose === undefined) {\n      throw new Error(`Unsupported Multicodec to JWK conversion`);\n    }\n\n    return { ...jose };\n  }\n\n  /**\n   * Converts a public key in JWK (JSON Web Key) format to a multibase identifier.\n   *\n   * @remarks\n   * Note: All secp public keys are converted to compressed point encoding\n   *       before the multibase identifier is computed.\n   *\n   * Per {@link https://github.com/multiformats/multicodec/blob/master/table.csv | Multicodec table}:\n   *    Public keys for Elliptic Curve cryptography algorithms (e.g., secp256k1,\n   *    secp256k1r1, secp384r1, etc.) are always represented with compressed point\n   *    encoding (e.g., secp256k1-pub, p256-pub, p384-pub, etc.).\n   *\n   * Per {@link https://datatracker.ietf.org/doc/html/rfc8812#name-jose-and-cose-secp256k1-cur | RFC 8812}:\n   *    \"As a compressed point encoding representation is not defined for JWK\n   *    elliptic curve points, the uncompressed point encoding defined there\n   *    MUST be used. The x and y values represented MUST both be exactly\n   *    256 bits, with any leading zeros preserved.\"\n   *\n   * @example\n   * ```ts\n   * const publicKey = { crv: 'Ed25519', kty: 'OKP', x: '...' };\n   * const multibaseId = await DidKeyUtils.publicKeyToMultibaseId({ publicKey });\n   * ```\n   *\n   * @param params - The parameters for the conversion.\n   * @param params.publicKey - The public key in JWK format.\n   * @returns A promise that resolves to the multibase identifier.\n   */\n  public static async publicKeyToMultibaseId({ publicKey }: {\n    publicKey: Jwk\n  }): Promise<string> {\n    if (!(publicKey?.crv && publicKey.crv in AlgorithmToKeyTypeMap)) {\n      throw new DidError(DidErrorCode.InvalidPublicKeyType, `Public key contains an unsupported key type: ${publicKey?.crv ?? 'undefined'}`);\n    }\n\n    // Convert the public key from JWK format to a byte array.\n    let publicKeyBytes = await DidKeyUtils.keyConverter(publicKey.crv).publicKeyToBytes({ publicKey });\n\n    // Compress the public key if it is an elliptic curve key.\n    if (/^(secp256k1|P-256|P-384|P-521)$/.test(publicKey.crv)) {\n      publicKeyBytes = await DidKeyUtils.keyCompressor(publicKey.crv)({ publicKeyBytes });\n    }\n\n    // Convert the JSON Web Key (JWK) parameters to a Multicodec name.\n    const { name: multicodecName } = await DidKeyUtils.jwkToMulticodec({ jwk: publicKey });\n\n    // Compute the multibase identifier based on the provided key.\n    const multibaseId = keyBytesToMultibaseId({\n      keyBytes: publicKeyBytes,\n      multicodecName\n    });\n\n    return multibaseId;\n  }\n}", "import type { DidDocument, DidResolutionOptions, DidResolutionResult } from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidMethod } from './did-method.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * The `DidWeb` class provides an implementation of the `did:web` DID method.\n *\n * Features:\n * - DID Resolution: Resolve a `did:web` to its corresponding DID Document.\n *\n * @remarks\n * The `did:web` method uses a web domain's existing reputation and aims to integrate decentralized\n * identities with the existing web infrastructure to drive adoption. It leverages familiar web\n * security models and domain ownership to provide accessible, interoperable digital identity\n * management.\n *\n * @see {@link https://w3c-ccg.github.io/did-method-web/ | DID Web Specification}\n *\n * @example\n * ```ts\n * // DID Resolution\n * const resolutionResult = await DidWeb.resolve({ did: did.uri });\n * ```\n */\nexport class DidWeb extends DidMethod {\n\n  /**\n   * Name of the DID method, as defined in the DID Web specification.\n   */\n  public static methodName = 'web';\n\n  /**\n   * Resolves a `did:web` identifier to a DID Document.\n   *\n   * @param didUri - The DID to be resolved.\n   * @param _options - Optional parameters for resolving the DID. Unused by this DID method.\n   * @returns A Promise resolving to a {@link DidResolutionResult} object representing the result of the resolution.\n   */\n  public static async resolve(didUri: string, _options?: DidResolutionOptions): Promise<DidResolutionResult> {\n    // Attempt to parse the DID URI.\n    const parsedDid = Did.parse(didUri);\n\n    // If parsing failed, the DID is invalid.\n    if (!parsedDid) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'invalidDid' }\n      };\n    }\n\n    // If the DID method is not \"web\", return an error.\n    if (parsedDid.method !== DidWeb.methodName) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'methodNotSupported' }\n      };\n    }\n\n    // Replace \":\" with \"/\" in the identifier and prepend \"https://\" to obtain the fully qualified\n    // domain name and optional path.\n    let baseUrl = `https://${parsedDid.id.replace(/:/g, '/')}`;\n\n    // If the domain contains a percent encoded port value, decode the colon.\n    baseUrl = decodeURIComponent(baseUrl);\n\n    // Append the expected location of the DID document depending on whether a path was specified.\n    const didDocumentUrl = parsedDid.id.includes(':') ?\n      `${baseUrl}/did.json` :\n      `${baseUrl}/.well-known/did.json`;\n\n    try {\n      // Perform an HTTP GET request to obtain the DID document.\n      const response = await fetch(didDocumentUrl);\n\n      // If the response status code is not 200, return an error.\n      if (!response.ok) throw new Error('HTTP error status code returned');\n\n      // Parse the DID document.\n      const didDocument = await response.json() as DidDocument;\n\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didDocument,\n      };\n\n    } catch (error: any) {\n      // If the DID document could not be retrieved, return an error.\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: { error: 'notFound' }\n      };\n    }\n  }\n}", "import type { AbstractLevel } from 'abstract-level';\n\nimport ms from 'ms';\nimport { Level } from 'level';\n\nimport type { DidResolutionResult } from '../types/did-core.js';\nimport type { DidResolverCache } from '../types/did-resolution.js';\n\n/**\n * Configuration parameters for creating a LevelDB-based cache for DID resolution results.\n *\n * Allows customization of the underlying database instance, storage location, and cache\n * time-to-live (TTL) settings.\n */\nexport type DidResolverCacheLevelParams = {\n  /**\n   * Optional. An instance of `AbstractLevel` to use as the database. If not provided, a new\n   * LevelDB instance will be created at the specified `location`.\n   */\n  db?: AbstractLevel<string | Buffer | Uint8Array, string, string>;\n\n  /**\n   * Optional. The file system path or IndexedDB name where the LevelDB store will be created.\n   * Defaults to 'DATA/DID_RESOLVERCACHE' if not specified.\n   */\n  location?: string;\n\n  /**\n   * Optional. The time-to-live for cache entries, expressed as a string (e.g., '1h', '15m').\n   * Determines how long a cache entry should remain valid before being considered expired. Defaults\n   * to '15m' if not specified.\n   */\n  ttl?: string;\n}\n\n/**\n * Encapsulates a DID resolution result along with its expiration information for caching purposes.\n *\n * This type is used internally by the `DidResolverCacheLevel` to store DID resolution results\n * with an associated time-to-live (TTL) value. The TTL is represented in milliseconds and\n * determines when the cached entry is considered expired and eligible for removal.\n */\ntype CachedDidResolutionResult = {\n  /**\n   * The expiration time of the cache entry in milliseconds since the Unix epoch.\n   *\n   * This value is used to calculate whether the cached entry is still valid or has expired.\n   */\n  ttlMillis: number;\n\n  /**\n   * The DID resolution result being cached.\n   *\n   * This object contains the resolved DID document and associated metadata.\n   */\n  value: DidResolutionResult;\n}\n\n/**\n * A Level-based cache implementation for storing and retrieving DID resolution results.\n *\n * This cache uses LevelDB for storage, allowing data persistence across process restarts or\n * browser refreshes. It's suitable for both Node.js and browser environments.\n *\n * @remarks\n * The LevelDB cache keeps data in memory for fast access and also writes to the filesystem in\n * Node.js or indexedDB in browsers. Time-to-live (TTL) for cache entries is configurable.\n *\n * @example\n * ```\n * const cache = new DidResolverCacheLevel({ ttl: '15m' });\n * ```\n */\nexport class DidResolverCacheLevel implements DidResolverCache {\n  /** The underlying LevelDB store used for caching. */\n  protected cache;\n\n  /** The time-to-live for cache entries in milliseconds. */\n  protected ttl: number;\n\n  constructor({\n    db,\n    location = 'DATA/DID_RESOLVERCACHE',\n    ttl = '15m'\n  }: DidResolverCacheLevelParams = {}) {\n    this.cache = db ?? new Level<string, string>(location);\n    this.ttl = ms(ttl);\n  }\n\n  /**\n   * Retrieves a DID resolution result from the cache.\n   *\n   * If the cached item has exceeded its TTL, it's scheduled for deletion and undefined is returned.\n   *\n   * @param did - The DID string used as the key for retrieving the cached result.\n   * @returns The cached DID resolution result or undefined if not found or expired.\n   */\n  async get(did: string): Promise<DidResolutionResult | void> {\n    try {\n      const str = await this.cache.get(did);\n      const cachedDidResolutionResult: CachedDidResolutionResult = JSON.parse(str);\n\n      if (Date.now() >= cachedDidResolutionResult.ttlMillis) {\n        // defer deletion to be called in the next tick of the js event loop\n        this.cache.nextTick(() => this.cache.del(did));\n\n        return;\n      } else {\n        return cachedDidResolutionResult.value;\n      }\n\n    } catch(error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) {\n        return;\n      }\n\n      throw error;\n    }\n  }\n\n  /**\n   * Stores a DID resolution result in the cache with a TTL.\n   *\n   * @param did - The DID string used as the key for storing the result.\n   * @param value - The DID resolution result to be cached.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  set(did: string, value: DidResolutionResult): Promise<void> {\n    const cachedDidResolutionResult: CachedDidResolutionResult = { ttlMillis: Date.now() + this.ttl, value };\n    const str = JSON.stringify(cachedDidResolutionResult);\n\n    return this.cache.put(did, str);\n  }\n\n  /**\n   * Deletes a DID resolution result from the cache.\n   *\n   * @param did - The DID string used as the key for deletion.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  delete(did: string): Promise<void> {\n    return this.cache.del(did);\n  }\n\n  /**\n   * Clears all entries from the cache.\n   *\n   * @returns A promise that resolves when the operation is complete.\n   */\n  clear(): Promise<void> {\n    return this.cache.clear();\n  }\n\n  /**\n   * Closes the underlying LevelDB store.\n   *\n   * @returns A promise that resolves when the store is closed.\n   */\n  close(): Promise<void> {\n    return this.cache.close();\n  }\n}", "import type { DidResolutionResult } from '../types/did-core.js';\nimport type { DidResolverCache } from '../types/did-resolution.js';\n\n/**\n * No-op cache that is used as the default cache for did-resolver.\n *\n * The motivation behind using a no-op cache as the default stems from the desire to maximize the\n * potential for this library to be used in as many JS runtimes as possible.\n */\nexport const DidResolverCacheNoop: DidResolverCache = {\n  get: function (_key: string): Promise<DidResolutionResult> {\n    return null as any;\n  },\n  set: function (_key: string, _value: DidResolutionResult): Promise<void> {\n    return null as any;\n  },\n  delete: function (_key: string): Promise<void> {\n    return null as any;\n  },\n  clear: function (): Promise<void> {\n    return null as any;\n  },\n  close: function (): Promise<void> {\n    return null as any;\n  }\n};", "import type { DidMethodResolver } from '../methods/did-method.js';\nimport type { DidResolver, DidResolverCache, DidUrlDereferencer } from '../types/did-resolution.js';\nimport type { DidDereferencingOptions, DidDereferencingResult, DidResolutionOptions, DidResolutionResult, DidResource } from '../types/did-core.js';\n\nimport { Did } from '../did.js';\nimport { DidErrorCode } from '../did-error.js';\nimport { DidResolverCacheNoop } from './resolver-cache-noop.js';\nimport { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';\n\n/**\n * Parameters for configuring the `UniversalResolver` class, which is responsible for resolving\n * decentralized identifiers (DIDs) to their corresponding DID documents.\n *\n * This type specifies the essential components required by the `UniversalResolver` to perform\n * DID resolution and dereferencing. It includes an array of `DidMethodResolver` instances,\n * each capable of resolving DIDs for a specific method, and optionally, a cache for storing\n * resolved DID documents to improve resolution efficiency.\n */\nexport type UniversalResolverParams = {\n  /**\n   * An array of `DidMethodResolver` instances.\n   *\n   * Each resolver in this array is designed to handle a specific DID method, enabling the\n   * `DidResolver` to support multiple DID methods simultaneously.\n   */\n  didResolvers: DidMethodResolver[];\n\n  /**\n   * An optional `DidResolverCache` instance used for caching resolved DID documents.\n   *\n   * Providing a cache implementation can significantly enhance resolution performance by avoiding\n   * redundant resolutions for previously resolved DIDs. If omitted, a no-operation cache is used,\n   * which effectively disables caching.\n   */\n  cache?: DidResolverCache;\n}\n\n/**\n * The `DidResolver` class provides mechanisms for resolving Decentralized Identifiers (DIDs) to\n * their corresponding DID documents.\n *\n * The class is designed to handle various DID methods by utilizing an array of `DidMethodResolver`\n * instances, each responsible for a specific DID method.\n *\n * Providing a cache implementation can significantly enhance resolution performance by avoiding\n * redundant resolutions for previously resolved DIDs. If omitted, a no-operation cache is used,\n * which effectively disables caching.\n *\n * Usage:\n * - Construct the `DidResolver` with an array of `DidMethodResolver` instances and an optional cache.\n * - Use `resolve` to resolve a DID to its DID Resolution Result.\n * - Use `dereference` to extract specific resources from a DID URL, like service endpoints or verification methods.\n *\n * @example\n * ```ts\n * const resolver = new DidResolver({\n *   didResolvers: [<array of DidMethodResolver instances>],\n *   cache: new DidResolverCacheNoop()\n * });\n *\n * const resolutionResult = await resolver.resolve('did:example:123456');\n * const dereferenceResult = await resolver.dereference({ didUri: 'did:example:123456#key-1' });\n * ```\n */\nexport class UniversalResolver implements DidResolver, DidUrlDereferencer {\n  /**\n   * A cache for storing resolved DID documents.\n   */\n  protected cache: DidResolverCache;\n\n  /**\n   * A map to store method resolvers against method names.\n   */\n  private didResolvers: Map<string, DidMethodResolver> = new Map();\n\n  /**\n   * Constructs a new `DidResolver`.\n   *\n   * @param params - The parameters for constructing the `DidResolver`.\n   */\n  constructor({ cache, didResolvers }: UniversalResolverParams) {\n    this.cache = cache || DidResolverCacheNoop;\n\n    for (const resolver of didResolvers) {\n      this.didResolvers.set(resolver.methodName, resolver);\n    }\n  }\n\n  /**\n   * Resolves a DID to a DID Resolution Result.\n   *\n   * If the DID Resolution Result is present in the cache, it returns the cached result. Otherwise,\n   * it uses the appropriate method resolver to resolve the DID, stores the resolution result in the\n   * cache, and returns the resolultion result.\n   *\n   * @param didUri - The DID or DID URL to resolve.\n   * @returns A promise that resolves to the DID Resolution Result.\n   */\n  public async resolve(didUri: string, options?: DidResolutionOptions): Promise<DidResolutionResult> {\n\n    const parsedDid = Did.parse(didUri);\n    if (!parsedDid) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error        : DidErrorCode.InvalidDid,\n          errorMessage : `Invalid DID URI: ${didUri}`\n        }\n      };\n    }\n\n    const resolver = this.didResolvers.get(parsedDid.method);\n    if (!resolver) {\n      return {\n        ...EMPTY_DID_RESOLUTION_RESULT,\n        didResolutionMetadata: {\n          error        : DidErrorCode.MethodNotSupported,\n          errorMessage : `Method not supported: ${parsedDid.method}`\n        }\n      };\n    }\n\n    const cachedResolutionResult = await this.cache.get(parsedDid.uri);\n\n    if (cachedResolutionResult) {\n      return cachedResolutionResult;\n    } else {\n      const resolutionResult = await resolver.resolve(parsedDid.uri, options);\n      if (!resolutionResult.didResolutionMetadata.error) {\n        // Cache the resolution result if it was successful.\n        await this.cache.set(parsedDid.uri, resolutionResult);\n      }\n\n      return resolutionResult;\n    }\n  }\n\n  /**\n   * Dereferences a DID (Decentralized Identifier) URL to a corresponding DID resource.\n   *\n   * This method interprets the DID URL's components, which include the DID method, method-specific\n   * identifier, path, query, and fragment, and retrieves the related resource as per the DID Core\n   * specifications.\n   *\n   * The dereferencing process involves resolving the DID contained in the DID URL to a DID document,\n   * and then extracting the specific part of the document identified by the fragment in the DID URL.\n   * If no fragment is specified, the entire DID document is returned.\n   *\n   * This method supports resolution of different components within a DID document such as service\n   * endpoints and verification methods, based on their IDs. It accommodates both full and\n   * DID URLs as specified in the DID Core specification.\n   *\n   * More information on DID URL dereferencing can be found in the\n   * {@link https://www.w3.org/TR/did-core/#did-url-dereferencing | DID Core specification}.\n   *\n   * TODO: This is a partial implementation and does not fully implement DID URL dereferencing. (https://github.com/TBD54566975/web5-js/issues/387)\n   *\n   * @param didUrl - The DID URL string to dereference.\n   * @param [_options] - Input options to the dereference function. Optional.\n   * @returns a {@link DidDereferencingResult}\n   */\n  async dereference(\n    didUrl: string,\n    _options?: DidDereferencingOptions\n  ): Promise<DidDereferencingResult> {\n\n    // Validate the given `didUrl` confirms to the DID URL syntax.\n    const parsedDidUrl = Did.parse(didUrl);\n\n    if (!parsedDidUrl) {\n      return {\n        dereferencingMetadata : { error: DidErrorCode.InvalidDidUrl },\n        contentStream         : null,\n        contentMetadata       : {}\n      };\n    }\n\n    // Obtain the DID document for the input DID by executing DID resolution.\n    const { didDocument, didResolutionMetadata, didDocumentMetadata } = await this.resolve(parsedDidUrl.uri);\n\n    if (!didDocument) {\n      return {\n        dereferencingMetadata : { error: didResolutionMetadata.error },\n        contentStream         : null,\n        contentMetadata       : {}\n      };\n    }\n\n    // Return the entire DID Document if no query or fragment is present on the DID URL.\n    if (!parsedDidUrl.fragment || parsedDidUrl.query) {\n      return {\n        dereferencingMetadata : { contentType: 'application/did+json' },\n        contentStream         : didDocument,\n        contentMetadata       : didDocumentMetadata\n      };\n    }\n\n    const { service = [], verificationMethod = [] } = didDocument;\n\n    // Create a set of possible id matches. The DID spec allows for an id to be the entire\n    // did#fragment or just #fragment.\n    // @see {@link }https://www.w3.org/TR/did-core/#relative-did-urls | Section 3.2.2, Relative DID URLs}.\n    // Using a Set for fast string comparison since some DID methods have long identifiers.\n    const idSet = new Set([didUrl, parsedDidUrl.fragment, `#${parsedDidUrl.fragment}`]);\n\n    let didResource: DidResource | undefined;\n\n    // Find the first matching verification method in the DID document.\n    for (let vm of verificationMethod) {\n      if (idSet.has(vm.id)) {\n        didResource = vm;\n        break;\n      }\n    }\n\n    // Find the first matching service in the DID document.\n    for (let svc of service) {\n      if (idSet.has(svc.id)) {\n        didResource = svc;\n        break;\n      }\n    }\n\n    if (didResource) {\n      return {\n        dereferencingMetadata : { contentType: 'application/did+json' },\n        contentStream         : didResource,\n        contentMetadata       : didResolutionMetadata\n      };\n    } else {\n      return {\n        dereferencingMetadata : { error: DidErrorCode.NotFound },\n        contentStream         : null,\n        contentMetadata       : {},\n      };\n    }\n  }\n}", "import { DidResolutionResult, DidResolverCache, DidResolverCacheLevel, DidResolverCacheLevelParams } from '@web5/dids';\nimport { Web5PlatformAgent } from './types/agent.js';\nimport { logger } from '@web5/common';\n\n\n/**\n * AgentDidResolverCache keeps a stale copy of the Agent's managed Identity DIDs and only evicts and refreshes upon a successful resolution.\n * This allows for quick and offline access to the internal DIDs used by the agent.\n */\nexport class AgentDidResolverCache extends DidResolverCacheLevel implements DidResolverCache {\n\n  /**\n   * Holds the instance of a `Web5PlatformAgent` that represents the current execution context for\n   * the `AgentDidApi`. This agent is used to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize operations within the broader Web5\n   * Agent framework.\n   */\n  private _agent?: Web5PlatformAgent;\n\n  /** A map of DIDs that are currently in-flight. This helps avoid going into an infinite loop */\n  private _resolving: Map<string, boolean> = new Map();\n\n  constructor({ agent, db, location, ttl }: DidResolverCacheLevelParams & { agent?: Web5PlatformAgent }) {\n    super ({ db, location, ttl });\n    this._agent = agent;\n  }\n\n  get agent() {\n    if (!this._agent) {\n      throw new Error('Agent not initialized');\n    }\n    return this._agent;\n  }\n\n  set agent(agent: Web5PlatformAgent) {\n    this._agent = agent;\n  }\n\n  /**\n   * Get the DID resolution result from the cache for the given DID.\n   *\n   * If the DID is managed by the agent, or is the agent's own DID, it will not evict it from the cache until a new resolution is successful.\n   * This is done to achieve quick and offline access to the agent's own managed DIDs.\n   */\n  async get(did: string): Promise<DidResolutionResult | void> {\n    try {\n      const str = await this.cache.get(did);\n      const cachedResult = JSON.parse(str);\n      if (!this._resolving.has(did) && Date.now() >= cachedResult.ttlMillis) {\n        this._resolving.set(did, true);\n\n        // if a DID is stored in the DID Store, then we don't want to evict it from the cache until we have a successful resolution\n        // upon a successful resolution, we will update both the storage and the cache with the newly resolved Document.\n        const storedDid = await this.agent.did.get({ didUri: did, tenant: this.agent.agentDid.uri });\n        if ('undefined' !==  typeof storedDid) {\n          try {\n            const result = await this.agent.did.resolve(did);\n\n            // if the resolution was successful, update the stored DID with the new Document\n            if (!result.didResolutionMetadata.error && result.didDocument) {\n\n              const portableDid = {\n                ...storedDid,\n                document : result.didDocument,\n                metadata : result.didDocumentMetadata,\n              };\n\n              try {\n                // this will throw an error if the DID is not managed by the agent, or there is no difference between the stored and resolved DID\n                // We don't publish the DID in this case, as it was received by the resolver.\n                await this.agent.did.update({ portableDid, tenant: this.agent.agentDid.uri, publish: false });\n              } catch(error: any) {\n                // if the error is not due to no changes detected, log the error\n                if (error.message && !error.message.includes('No changes detected, update aborted')) {\n                  logger.error(`Error updating DID: ${error.message}`);\n                }\n              }\n            }\n          } finally {\n            this._resolving.delete(did);\n          }\n        } else {\n          this._resolving.delete(did);\n          this.cache.nextTick(() => this.cache.del(did));\n        }\n      }\n      return cachedResult.value;\n    } catch(error: any) {\n      if (error.notFound) {\n        return;\n      }\n      throw error;\n    }\n  }\n}", "import { BearerDid } from '@web5/dids';\nimport { IdentityMetadata, PortableIdentity } from './types/identity.js';\n\n/**\n * Represents a Web5 Identity with its DID and metadata.\n */\nexport class BearerIdentity {\n  /** {@inheritDoc BearerDid} */\n  public did: BearerDid;\n\n  /** {@inheritDoc DidMetadata} */\n  public metadata: IdentityMetadata;\n\n  constructor({ did, metadata }: {\n    did: BearerDid;\n    metadata: IdentityMetadata;\n  }) {\n    this.did = did;\n    this.metadata = metadata;\n  }\n\n  /**\n   * Converts a `BearerIdentity` object to a portable format containing the DID and metadata\n   * associated with the Identity.\n   *\n   * @example\n   * ```ts\n   * // Assuming `identity` is an instance of BearerIdentity.\n   * const portableIdentity = await identity.export();\n   * // portableIdentity now contains the and metadata.\n   * ```\n   *\n   * @returns A `PortableIdentity` containing the DID and metadata associated with the\n   *          `BearerIdentity`.\n   */\n  public async export(): Promise<PortableIdentity> {\n    return {\n      portableDid : await this.did.export(),\n      metadata    : { ...this.metadata },\n    };\n  }\n}", "// ! TODO : Make sure I remove `@noble/ciphers` from the Agent package.json once this is moved to the `@web5/crypto` package.\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\n\nimport { Convert } from '@web5/common';\nimport { DeriveKeyBytesParams } from '../types/params-direct.js';\n\n/**\n * The object that should be passed into `Hkdf.deriveKey()`, when using the HKDF algorithm.\n */\nexport type HkdfParams = {\n  /**\n   * A string representing the digest algorithm to use. This may be one of:\n   * - 'SHA-256'\n   * - 'SHA-384'\n   * - 'SHA-512'\n   */\n  hash: 'SHA-256' | 'SHA-384' | 'SHA-512';\n\n  /**\n   * The salt value to use in the derivation process.\n   *\n   * Ideally, the salt is a random or pseudo-random value with the same length as the output of the\n   * digest function. Unlike the input key material passed into deriveKey(), salt does not need to\n   * be kept secret.\n   *\n   * Note: The {@link https://datatracker.ietf.org/doc/html/rfc5869 | HKDF specification} states\n   *       that adding salt \"adds significantly to the strength of HKDF\".\n   */\n  salt: string | Uint8Array;\n\n  /**\n   * Optional application-specific information to use in the HKDF.\n   *\n   * If given, this value is used to bind the derived key to application-specific contextual\n   * information. This makes it possible to derive different keys for different contexts while using\n   * the same input key material.\n   *\n   * If not provided, the `info` value is set to an empty array.\n   *\n   * Note: It is important that the `info` value be independent and unrelated to the input key\n   * material.\n   */\n  info?: string | Uint8Array,\n};\n\n/**\n * The `Hkdf` class provides an interface for HMAC-based Extract-and-Expand Key Derivation Function (HKDF)\n * as defined in RFC 5869.\n *\n * Note: The `baseKeyBytes` that will be the input key material for HKDF should be a high-entropy secret\n * value, such as a cryptographic key. It should be kept confidential and not be derived from a\n * low-entropy value, such as a password.\n *\n * @example\n * ```ts\n * const info = new Uint8Array([...]);\n * const derivedKeyBytes = await Hkdf.deriveKeyBytes({\n *   baseKeyBytes: new Uint8Array([...]), // Input keying material\n *   hash: 'SHA-256', // The hash function to use ('SHA-256', 'SHA-384', 'SHA-512')\n *   salt: new Uint8Array([...]), // The salt value\n *   info: new Uint8Array([...]), // Optional application-specific information\n *   length: 256 // The length of the derived key in bits\n * });\n * ```\n */\nexport class Hkdf {\n  /**\n   * Derives a key using the HMAC-based Extract-and-Expand Key Derivation Function (HKDF).\n   *\n   * This method generates a derived key using a hash function from input keying material given as\n   * `baseKeyBytes`. The length of the derived key can be specified. Optionally, it can also use a salt\n   * and info for the derivation process.\n   *\n   * HKDF is useful in various cryptographic applications and protocols, especially when\n   * there's a need to derive multiple keys from a single source of key material.\n   *\n   * Note: The `baseKeyBytes` that will be the input key material for HKDF should be a high-entropy\n   * secret value, such as a cryptographic key. It should be kept confidential and not be derived\n   * from a low-entropy value, such as a password.\n   *\n   * @example\n   * ```ts\n   * const info = new Uint8Array([...]);\n   * const derivedKeyBytes = await Hkdf.deriveKeyBytes({\n   *   baseKeyBytes: new Uint8Array([...]), // Input keying material\n   *   hash: 'SHA-256', // The hash function to use ('SHA-256', 'SHA-384', 'SHA-512')\n   *   salt: new Uint8Array([...]), // The salt value\n   *   info: new Uint8Array([...]), // Optional application-specific information\n   *   length: 256 // The length of the derived key in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for key derivation.\n   * @returns A Promise that resolves to the derived key as a byte array.\n   */\n  public static async deriveKeyBytes({ baseKeyBytes, length, hash, salt, info = new Uint8Array() }:\n    DeriveKeyBytesParams & HkdfParams\n  ): Promise<Uint8Array> {\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle() as SubtleCrypto;\n\n    // Import the baseKeyBytes into the Web Crypto API to use for the key derivation operation.\n    const webCryptoKey = await webCrypto.importKey('raw', baseKeyBytes, { name: 'HKDF' }, false, ['deriveBits']);\n\n    // Convert the salt and info to Uint8Array if they are provided as strings.\n    salt = typeof salt === 'string' ? Convert.string(salt).toUint8Array() : salt;\n    info = typeof info === 'string' ? Convert.string(info).toUint8Array() : info;\n\n    // Derive the bytes using the Web Crypto API.\n    const derivedKeyBuffer = await crypto.subtle.deriveBits(\n      { name: 'HKDF', hash, salt, info },\n      webCryptoKey,\n      length\n    );\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const derivedKeyBytes = new Uint8Array(derivedKeyBuffer);\n\n    return derivedKeyBytes;\n  }\n}", "import { CryptoAlgorithm } from '@web5/crypto';\n\nimport type { DeriveKeyBytesParams } from '../types/params-direct.js';\n\nimport { Hkdf, HkdfParams } from '../primitives/hkdf.js';\nimport { KeyBytesDeriver } from '../types/key-deriver.js';\n\n/**\n * The `HkdfDeriveKeyBytesParams` interface defines the algorithm-specific parameters that should be\n * passed into the `deriveKeyBytes()` method when using the HKDF algorithm.\n */\nexport interface HkdfDeriveKeyBytesParams extends DeriveKeyBytesParams {\n  /** Specifies the algorithm variant for HKDF key derivation.\n   * The value determines the hash function that will be used and must be one of the following:\n   * - `\"HKDF-256\"`: HKDF with SHA-256.\n   * - `\"HKDF-384\"`: HKDF with SHA-384.\n   * - `\"HKDF-512\"`: HKDF with SHA-512.\n   */\n  algorithm: 'HKDF-256' | 'HKDF-384' | 'HKDF-512';\n}\n\nexport class HkdfAlgorithm extends CryptoAlgorithm\n  implements KeyBytesDeriver<HkdfDeriveKeyBytesParams, Uint8Array> {\n\n  public async deriveKeyBytes({ algorithm, ...params }:\n    HkdfDeriveKeyBytesParams & Omit<HkdfParams, 'hash'>\n  ): Promise<Uint8Array> {\n    // Map algorithm name to hash function.\n    const hash = {\n      'HKDF-256' : 'SHA-256' as const,\n      'HKDF-384' : 'SHA-384' as const,\n      'HKDF-512' : 'SHA-512' as const\n    }[algorithm];\n\n    // Derive a cryptographic byte array using HKDF.\n    const derivedKeyBytes = await Hkdf.deriveKeyBytes({ ...params, hash });\n\n    return derivedKeyBytes;\n  }\n}", "/**\n * A custom error class for Crypto-related errors.\n */\nexport class CryptoError extends Error {\n  /**\n   * Constructs an instance of CryptoError, a custom error class for handling Crypto-related errors.\n   *\n   * @param code - A {@link CryptoErrorCode} representing the specific type of error encountered.\n   * @param message - A human-readable description of the error.\n   */\n  constructor(public code: CryptoErrorCode, message: string) {\n    super(message);\n    this.name = 'CryptoError';\n\n    // Ensures that instanceof works properly, the correct prototype chain when using inheritance,\n    // and that V8 stack traces (like Chrome, Edge, and Node.js) are more readable and relevant.\n    Object.setPrototypeOf(this, new.target.prototype);\n\n    // Captures the stack trace in V8 engines (like Chrome, Edge, and Node.js).\n    // In non-V8 environments, the stack trace will still be captured.\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, CryptoError);\n    }\n  }\n}\n\n/**\n * An enumeration of possible Crypto error codes.\n */\nexport enum CryptoErrorCode {\n  /** The supplied algorithm identifier is not supported by the implementation. */\n  AlgorithmNotSupported = 'algorithmNotSupported',\n\n  /** The encoding operation (either encoding or decoding) failed. */\n  EncodingError = 'encodingError',\n\n  /** The JWE supplied does not conform to valid syntax. */\n  InvalidJwe = 'invalidJwe',\n\n  /** The JWK supplied does not conform to valid syntax. */\n  InvalidJwk = 'invalidJwk',\n\n  /** The requested operation is not supported by the implementation. */\n  OperationNotSupported = 'operationNotSupported',\n}", "import type {\n  Jwk,\n  Signer,\n  SignParams,\n  KeyConverter,\n  VerifyParams,\n  GenerateKeyParams,\n  GetPublicKeyParams,\n  AsymmetricKeyConverter,\n  AsymmetricKeyGenerator,\n  ComputePublicKeyParams,\n} from '@web5/crypto';\n\nimport { CryptoAlgorithm, isEcPrivateJwk, isEcPublicJwk, Secp256k1, Secp256r1 } from '@web5/crypto';\nimport { CryptoError, CryptoErrorCode } from '../crypto-error.js';\nimport { BytesToPrivateKeyParams, BytesToPublicKeyParams, PrivateKeyToBytesParams, PublicKeyToBytesParams } from '../types/params-direct.js';\n\n/**\n * The `EcdsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the ECDSA algorithm.\n */\nexport interface EcdsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"ES256\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   * - `\"ES256K\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256k1\"`: ECDSA using the secp256k1 curve and SHA-256.\n   * - `\"secp256r1\"`: ECDSA using the secp256r1 (P-256) curve and SHA-256.\n   */\n  algorithm: 'ES256' | 'ES256K' | 'secp256k1' | 'secp256r1';\n}\n\n/**\n * The `EcdsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Elliptic Curve Digital Signature Algorithm (ECDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EcdsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EcdsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             KeyConverter, AsymmetricKeyConverter,\n             Signer<SignParams, VerifyParams> {\n\n  public async bytesToPrivateKey({ algorithm, privateKeyBytes }:\n    BytesToPrivateKeyParams & { algorithm: 'ES256' | 'ES256K' | 'secp256k1' | 'secp256r1' }\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'ES256K':\n      case 'secp256k1': {\n        const privateKey = await Secp256k1.bytesToPrivateKey({ privateKeyBytes });\n        privateKey.alg = 'EdDSA';\n        return privateKey;\n      }\n\n      case 'ES256':\n      case 'secp256r1': {\n        const privateKey = await Secp256r1.bytesToPrivateKey({ privateKeyBytes });\n        privateKey.alg = 'EdDSA';\n        return privateKey;\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Algorithm not supported: ${algorithm}`);\n      }\n    }\n  }\n\n  public async bytesToPublicKey({ algorithm, publicKeyBytes }:\n    BytesToPublicKeyParams & { algorithm: 'ES256' | 'ES256K' | 'secp256k1' | 'secp256r1' }\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'ES256K':\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.bytesToPublicKey({ publicKeyBytes });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      case 'ES256':\n      case 'secp256r1': {\n        const publicKey = await Secp256r1.bytesToPublicKey({ publicKeyBytes });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Algorithm not supported: ${algorithm}`);\n      }\n    }\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.computePublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.computePublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = await ecdsa.generateKey({ algorithm: 'ES256K' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    EcdsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'ES256K':\n      case 'secp256k1': {\n        const privateKey = await Secp256k1.generateKey();\n        privateKey.alg = 'ES256K';\n        return privateKey;\n      }\n\n      case 'ES256':\n      case 'secp256r1': {\n        const privateKey = await Secp256r1.generateKey();\n        privateKey.alg = 'ES256';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an ECDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 200 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await ecdsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        const publicKey = await Secp256k1.getPublicKey({ key });\n        publicKey.alg = 'ES256K';\n        return publicKey;\n      }\n\n      case 'P-256': {\n        const publicKey = await Secp256r1.getPublicKey({ key });\n        publicKey.alg = 'ES256';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  public async privateKeyToBytes({ privateKey }:\n    PrivateKeyToBytesParams\n  ): Promise<Uint8Array> {\n    switch (privateKey.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.privateKeyToBytes({ privateKey });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.privateKeyToBytes({ privateKey });\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Curve not supported: ${privateKey.crv}`);\n      }\n    }\n  }\n\n  public async publicKeyToBytes({ publicKey }:\n    PublicKeyToBytesParams\n  ): Promise<Uint8Array> {\n    switch (publicKey.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.publicKeyToBytes({ publicKey });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.publicKeyToBytes({ publicKey });\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Curve not supported: ${publicKey.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an ECDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await ecdsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isEcPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) private key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.sign({ key, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.sign({ key, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an ECDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const ecdsa = new EcdsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await ecdsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isEcPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an elliptic curve (EC) public key.');\n\n    switch (key.crv) {\n\n      case 'secp256k1': {\n        return await Secp256k1.verify({ key, signature, data });\n      }\n\n      case 'P-256': {\n        return await Secp256r1.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n}", "import type {\n  Jwk,\n  Signer,\n  SignParams,\n  KeyConverter,\n  VerifyParams,\n  GenerateKeyParams,\n  GetPublicKeyParams,\n  AsymmetricKeyConverter,\n  AsymmetricKeyGenerator,\n  ComputePublicKeyParams,\n} from '@web5/crypto';\n\nimport { CryptoAlgorithm, Ed25519, isOkpPrivateJwk, isOkpPublicJwk } from '@web5/crypto';\nimport { CryptoError, CryptoErrorCode } from '../crypto-error.js';\nimport { BytesToPrivateKeyParams, BytesToPublicKeyParams, PrivateKeyToBytesParams, PublicKeyToBytesParams } from '../types/params-direct.js';\n\n/**\n * The `EdDsaGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the EdDSA algorithm.\n */\nexport interface EdDsaGenerateKeyParams extends GenerateKeyParams {\n  /**\n   * A string defining the type of key to generate. The value must be one of the following:\n   * - `\"Ed25519\"`: EdDSA using the Ed25519 curve.\n   */\n  algorithm: 'Ed25519';\n}\n\n/**\n * The `EdDsaAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the Edwards-curve Digital Signature Algorithm (EdDSA). This class implements both\n * {@link Signer | `Signer`} and { @link AsymmetricKeyGenerator | `AsymmetricKeyGenerator`}\n * interfaces, providing private key generation, public key derivation, and creation/verification\n * of signatures.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class EdDsaAlgorithm extends CryptoAlgorithm\n  implements AsymmetricKeyGenerator<EdDsaGenerateKeyParams, Jwk, GetPublicKeyParams>,\n             KeyConverter, AsymmetricKeyConverter,\n             Signer<SignParams, VerifyParams> {\n\n  public async bytesToPrivateKey({ algorithm, privateKeyBytes }:\n    BytesToPrivateKeyParams & { algorithm: 'Ed25519' }\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'Ed25519': {\n        const privateKey = await Ed25519.bytesToPrivateKey({ privateKeyBytes });\n        privateKey.alg = 'EdDSA';\n        return privateKey;\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Algorithm not supported: ${algorithm}`);\n      }\n    }\n  }\n\n  public async bytesToPublicKey({ algorithm, publicKeyBytes }:\n    BytesToPublicKeyParams & { algorithm: 'Ed25519' }\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.bytesToPublicKey({ publicKeyBytes });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Algorithm not supported: ${algorithm}`);\n      }\n    }\n  }\n\n  /**\n   * Derives the public key in JWK format from a given private key.\n   *\n   * @remarks\n   * This method takes a private key in JWK format and derives its corresponding public key,\n   * also in JWK format. The process ensures that the derived public key correctly corresponds to\n   * the given private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.computePublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for the public key derivation.\n   * @param params.key - The private key in JWK format from which to derive the public key.\n   *\n   * @returns A Promise that resolves to the derived public key in JWK format.\n   */\n  public async computePublicKey({ key }:\n    ComputePublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.computePublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Curve not supported: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates a new private key with the specified algorithm in JSON Web Key (JWK) format.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = await eddsa.generateKey({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation.\n   *\n   * @returns A Promise that resolves to the generated private key in JWK format.\n   */\n  async generateKey({ algorithm }:\n    EdDsaGenerateKeyParams\n  ): Promise<Jwk> {\n    switch (algorithm) {\n\n      case 'Ed25519': {\n        const privateKey = await Ed25519.generateKey();\n        privateKey.alg = 'EdDSA';\n        return privateKey;\n      }\n    }\n  }\n\n  /**\n   * Retrieves the public key properties from a given private key in JWK format.\n   *\n   * @remarks\n   * This method extracts the public key portion from an EdDSA private key in JWK format. It does\n   * so by removing the private key property 'd' and making a shallow copy, effectively yielding the\n   * public key.\n   *\n   * Note: This method offers a significant performance advantage, being about 100 times faster\n   * than `computePublicKey()`. However, it does not mathematically validate the private key, nor\n   * does it derive the public key from the private key. It simply extracts existing public key\n   * properties from the private key object. This makes it suitable for scenarios where speed is\n   * critical and the private key's integrity is already assured.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const publicKey = await eddsa.getPublicKey({ key: privateKey });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key properties.\n   * @param params.key - The private key in JWK format.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        const publicKey = await Ed25519.getPublicKey({ key });\n        publicKey.alg = 'EdDSA';\n        return publicKey;\n      }\n\n      default: {\n        throw new Error(`Unsupported curve: ${key.crv}`);\n      }\n    }\n  }\n\n  public async privateKeyToBytes({ privateKey }:\n    PrivateKeyToBytesParams\n  ): Promise<Uint8Array> {\n    switch (privateKey.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.privateKeyToBytes({ privateKey });\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Curve not supported: ${privateKey.crv}`);\n      }\n    }\n  }\n\n  public async publicKeyToBytes({ publicKey }:\n    PublicKeyToBytesParams\n  ): Promise<Uint8Array> {\n    switch (publicKey.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.publicKeyToBytes({ publicKey });\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Curve not supported: ${publicKey.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Generates an EdDSA signature of given data using a private key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the given `algorithm` to sign the\n   * provided data.\n   *\n   * The signature can later be verified by parties with access to the corresponding\n   * public key, ensuring that the data has not been tampered with and was indeed signed by the\n   * holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const data = new TextEncoder().encode('Message');\n   * const privateKey = { ... }; // A Jwk object representing a private key\n   * const signature = await eddsa.sign({\n   *   key: privateKey,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.key - The private key to use for signing, represented in JWK format.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    if (!isOkpPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) private key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.sign({ key, data });\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Curve not supported: ${key.crv}`);\n      }\n    }\n  }\n\n  /**\n   * Verifies an EdDSA signature associated with the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `crv` property of the provided key\n   * to check the validity of a digital signature against the original data. It confirms whether the\n   * signature was created by the holder of the corresponding private key and that the data has not\n   * been tampered with.\n   *s\n   * @example\n   * ```ts\n   * const eddsa = new EdDsaAlgorithm();\n   * const publicKey = { ... }; // Public key in JWK format corresponding to the private key that signed the data\n   * const signature = new Uint8Array([...]); // Signature to verify\n   * const data = new TextEncoder().encode('Message');\n   * const isValid = await eddsa.verify({\n   *   key: publicKey,\n   *   signature,\n   *   data\n   * });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    if (!isOkpPublicJwk(key)) throw new TypeError('Invalid key provided. Must be an octet key pair (OKP) public key.');\n\n    switch (key.crv) {\n\n      case 'Ed25519': {\n        return await Ed25519.verify({ key, signature, data });\n      }\n\n      default: {\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Curve not supported: ${key.crv}`);\n      }\n    }\n  }\n}", "// ! TODO : Make sure I remove `@noble/ciphers` from the Agent package.json once this is moved to the `@web5/crypto` package.\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\n\nimport type { Jwk } from '@web5/crypto';\n\nimport { Convert } from '@web5/common';\nimport { computeJwkThumbprint, isOctPrivateJwk } from '@web5/crypto';\n\nimport type { UnwrapKeyParams, WrapKeyParams } from '../types/params-direct.js';\nimport { CryptoError, CryptoErrorCode } from '../crypto-error.js';\n\n/**\n * Constant defining the AES key length values in bits.\n *\n * @remarks\n * NIST publication FIPS 197 states:\n * > The AES algorithm is capable of using cryptographic keys of 128, 192, and 256 bits to encrypt\n * > and decrypt data in blocks of 128 bits.\n *\n * This implementation does not support key lengths that are different from the three values\n * defined by this constant.\n *\n * @see {@link https://doi.org/10.6028/NIST.FIPS.197-upd1 | NIST FIPS 197}\n */\nconst AES_KEY_LENGTHS = [128, 192, 256] as const;\n\nexport class AesKw {\n  /**\n   * Converts a raw private key in bytes to its corresponding JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method takes a symmetric key represented as a byte array (Uint8Array) and\n   * converts it into a JWK object for use with AES (Advanced Encryption Standard)\n   * for key wrapping. The conversion process involves encoding the key into\n   * base64url format and setting the appropriate JWK parameters.\n   *\n   * The resulting JWK object includes the following properties:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence (representing a symmetric key).\n   * - `k`: The symmetric key, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const privateKeyBytes = new Uint8Array([...]); // Replace with actual symmetric key bytes\n   * const privateKey = await AesKw.bytesToPrivateKey({ privateKeyBytes });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKeyBytes - The raw symmetric key as a Uint8Array.\n   *\n   * @returns A Promise that resolves to the symmetric key in JWK format.\n   */\n  public static async bytesToPrivateKey({ privateKeyBytes }: {\n    privateKeyBytes: Uint8Array;\n  }): Promise<Jwk> {\n    // Construct the private key in JWK format.\n    const privateKey: Jwk = {\n      k   : Convert.uint8Array(privateKeyBytes).toBase64Url(),\n      kty : 'oct'\n    };\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    // Add algorithm identifier based on key length.\n    const lengthInBits = privateKeyBytes.length * 8;\n    privateKey.alg = { 128: 'A128KW', 192: 'A192KW', 256: 'A256KW' }[lengthInBits];\n\n    return privateKey;\n  }\n\n  /**\n   * Generates a symmetric key for AES for key wrapping in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method creates a new symmetric key of a specified length suitable for use with\n   * AES key wrapping. It uses cryptographically secure random number generation to\n   * ensure the uniqueness and security of the key. The generated key adheres to the JWK\n   * format, making it compatible with common cryptographic standards and easy to use in\n   * various cryptographic processes.\n   *\n   * The generated key includes the following components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   * - `alg`: Algorithm, set to 'A128KW', 'A192KW', or 'A256KW' for AES Key Wrap with the\n   *   specified key length.\n   *\n   * @example\n   * ```ts\n   * const length = 256; // Length of the key in bits (e.g., 128, 192, 256)\n   * const privateKey = await AesKw.generateKey({ length });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   * @param params.length - The length of the key in bits. Common lengths are 128, 192, and 256 bits.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public static async generateKey({ length }: {\n    length: typeof AES_KEY_LENGTHS[number];\n  }): Promise<Jwk> {\n    // Validate the key length.\n    if (!AES_KEY_LENGTHS.includes(length as any)) {\n      throw new RangeError(`The key length is invalid: Must be ${AES_KEY_LENGTHS.join(', ')} bits`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle() as SubtleCrypto;\n\n    // Generate a random private key.\n    // See https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#usage_notes for\n    // an explanation for why Web Crypto generateKey() is used instead of getRandomValues().\n    const webCryptoKey = await webCrypto.generateKey( { name: 'AES-KW', length }, true, ['wrapKey', 'unwrapKey']);\n\n    // Export the private key in JWK format.\n    const { ext, key_ops, ...privateKey } = await webCrypto.exportKey('jwk', webCryptoKey) as Jwk;\n\n    // Compute the JWK thumbprint and set as the key ID.\n    privateKey.kid = await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  /**\n   * Converts a private key from JSON Web Key (JWK) format to a raw byte array (Uint8Array).\n   *\n   * @remarks\n   * This method takes a symmetric key in JWK format and extracts its raw byte representation.\n   * It decodes the 'k' parameter of the JWK value, which represents the symmetric key in base64url\n   * encoding, into a byte array.\n   *\n   * @example\n   * ```ts\n   * const privateKey = { ... }; // A symmetric key in JWK format\n   * const privateKeyBytes = await AesKw.privateKeyToBytes({ privateKey });\n   * ```\n   *\n   * @param params - The parameters for the symmetric key conversion.\n   * @param params.privateKey - The symmetric key in JWK format.\n   *\n   * @returns A Promise that resolves to the symmetric key as a Uint8Array.\n   */\n  public static async privateKeyToBytes({ privateKey }: {\n    privateKey: Jwk;\n  }): Promise<Uint8Array> {\n    // Verify the provided JWK represents a valid oct private key.\n    if (!isOctPrivateJwk(privateKey)) {\n      throw new Error(`AesKw: The provided key is not a valid oct private key.`);\n    }\n\n    // Decode the provided private key to bytes.\n    const privateKeyBytes = Convert.base64Url(privateKey.k).toUint8Array();\n\n    return privateKeyBytes;\n  }\n\n  public static async unwrapKey({ wrappedKeyBytes, wrappedKeyAlgorithm, decryptionKey }:\n    UnwrapKeyParams\n  ): Promise<Jwk> {\n    if (!('alg' in decryptionKey && decryptionKey.alg)) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwk, `The decryption key is missing the 'alg' property.`);\n    }\n\n    if (!['A128KW', 'A192KW', 'A256KW'].includes(decryptionKey.alg)) {\n      throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `The 'decryptionKey' algorithm is not supported: ${decryptionKey.alg}`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle() as SubtleCrypto;\n\n    // Import the decryption key for use with the Web Crypto API.\n    const decryptionCryptoKey = await webCrypto.importKey(\n      'jwk',                       // key format\n      decryptionKey as JsonWebKey, // key data\n      { name: 'AES-KW' },          // algorithm identifier\n      true,                        // key is extractable\n      ['unwrapKey']                // key usages\n    );\n\n    // Map the private key's JOSE algorithm name to the Web Crypto API algorithm identifier.\n    const webCryptoAlgorithm = {\n      A128KW  : 'AES-KW', A192KW  : 'AES-KW', A256KW  : 'AES-KW',\n      A128GCM : 'AES-GCM', A192GCM : 'AES-GCM', A256GCM : 'AES-GCM',\n    }[wrappedKeyAlgorithm];\n\n    if (!webCryptoAlgorithm) {\n      throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `The 'wrappedKeyAlgorithm' is not supported: ${wrappedKeyAlgorithm}`);\n    }\n\n    // Unwrap the key using the Web Crypto API.\n    const unwrappedCryptoKey = await webCrypto.unwrapKey(\n      'raw',                        // output format\n      wrappedKeyBytes.buffer,       // key to unwrap\n      decryptionCryptoKey,          // unwrapping key\n      'AES-KW',                     // algorithm identifier\n      { name: webCryptoAlgorithm }, // unwrapped key algorithm identifier\n      true,                         // key is extractable\n      ['unwrapKey']                 // key usages\n    );\n\n    // Export the unwrapped key in JWK format.\n    const { ext, key_ops, ...unwrappedJsonWebKey } = await webCrypto.exportKey('jwk', unwrappedCryptoKey);\n    const unwrappedKey = unwrappedJsonWebKey as Jwk;\n\n    // Compute the JWK thumbprint and set as the key ID.\n    unwrappedKey.kid = await computeJwkThumbprint({ jwk: unwrappedKey });\n\n    return unwrappedKey;\n  }\n\n  public static async wrapKey({ unwrappedKey, encryptionKey }:\n    WrapKeyParams\n  ): Promise<Uint8Array> {\n    if (!('alg' in encryptionKey && encryptionKey.alg)) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwk, `The encryption key is missing the 'alg' property.`);\n    }\n\n    if (!['A128KW', 'A192KW', 'A256KW'].includes(encryptionKey.alg)) {\n      throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `The 'encryptionKey' algorithm is not supported: ${encryptionKey.alg}`);\n    }\n\n    if (!('alg' in unwrappedKey && unwrappedKey.alg)) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwk, `The private key to wrap is missing the 'alg' property.`);\n    }\n\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle() as SubtleCrypto;\n\n    // Import the encryption key for use with the Web Crypto API.\n    const encryptionCryptoKey = await webCrypto.importKey(\n      'jwk',                       // key format\n      encryptionKey as JsonWebKey, // key data\n      { name: 'AES-KW' },          // algorithm identifier\n      true,                        // key is extractable\n      ['wrapKey']                  // key usages\n    );\n\n    // Map the private key's JOSE algorithm name to the Web Crypto API algorithm identifier.\n    const webCryptoAlgorithm = {\n      A128KW  : 'AES-KW', A192KW  : 'AES-KW', A256KW  : 'AES-KW',\n      A128GCM : 'AES-GCM', A192GCM : 'AES-GCM', A256GCM : 'AES-GCM',\n    }[unwrappedKey.alg];\n\n    if (!webCryptoAlgorithm) {\n      throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `The 'unwrappedKey' algorithm is not supported: ${unwrappedKey.alg}`);\n    }\n\n    // Import the private key to wrap for use with the Web Crypto API.\n    const unwrappedCryptoKey = await webCrypto.importKey(\n      'jwk',                        // key format\n      unwrappedKey as JsonWebKey,   // key data\n      { name: webCryptoAlgorithm }, // algorithm identifier\n      true,                         // key is extractable\n      ['unwrapKey']                 // key usages\n    );\n\n    // Wrap the key using the Web Crypto API.\n    const wrappedKeyBuffer = await webCrypto.wrapKey(\n      'raw',                     // output format\n      unwrappedCryptoKey,        // key to wrap\n      encryptionCryptoKey,       // wrapping key\n      'AES-KW'                   // algorithm identifier\n    );\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const wrappedKeyBytes = new Uint8Array(wrappedKeyBuffer);\n\n    return wrappedKeyBytes;\n  }\n}", "import type { GenerateKeyParams, Jwk, KeyConverter, KeyGenerator, KeyWrapper } from '@web5/crypto';\n\nimport { CryptoAlgorithm } from '@web5/crypto';\n\nimport type { BytesToPrivateKeyParams, PrivateKeyToBytesParams, UnwrapKeyParams, WrapKeyParams } from '../types/params-direct.js';\n\nimport { AesKw } from '../primitives/aes-kw.js';\nimport { RequireOnly } from '@web5/common';\n\n/**\n * The `AesKwGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the AES-KW algorithm.\n */\nexport interface AesKwGenerateKeyParams extends GenerateKeyParams {\n  /** Specifies the algorithm variant for key generation in AES-KW mode.\n   * The value determines the length of the key to be generated and must be one of the following:\n   * - `\"A128KW\"`: AES Key Wrap using a 128-bit key.\n   * - `\"A192KW\"`: AES Key Wrap using a 192-bit key.\n   * - `\"A256KW\"`: AES Key Wrap using a 256-bit key.\n   */\n  algorithm: 'A128KW' | 'A192KW' | 'A256KW';\n}\n\n/**\n * The `AesKwAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the AES algorithm for key wrapping. This class implements both\n * {@link KeyGenerator | `KeyGenerator`} and {@link KeyWrapper | `KeyWrapper`} interfaces, providing\n * key generation, key wrapping, and key unwrapping features.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class AesKwAlgorithm extends CryptoAlgorithm\n  implements KeyConverter,\n             KeyGenerator<AesKwGenerateKeyParams, Jwk>,\n             KeyWrapper<WrapKeyParams, UnwrapKeyParams> {\n\n  public async bytesToPrivateKey({ privateKeyBytes }:\n    RequireOnly<BytesToPrivateKeyParams, 'privateKeyBytes'>\n  ): Promise<Jwk> {\n    // Convert the byte array to a JWK.\n    const privateKey = await AesKw.bytesToPrivateKey({ privateKeyBytes });\n\n    // Set the `alg` property based on the key length.\n    privateKey.alg = { 16: 'A128KW', 24: 'A192KW', 32: 'A256KW' }[privateKeyBytes.length];\n\n    return privateKey;\n  }\n\n  /**\n   * Generates a symmetric key for AES for key wrapping in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method generates a symmetric AES key for use in key wrapping mode, based on the specified\n   * `algorithm` parameter which determines the key length. It uses cryptographically secure random\n   * number generation to ensure the uniqueness and security of the key. The key is returned in JWK\n   * format.\n   *\n   * The generated key includes the following components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   * - `alg`: Algorithm, set to 'A128KW', 'A192KW', or 'A256KW' for AES Key Wrap with the\n   *   specified key length.\n   *\n   * @example\n   * ```ts\n   * const aesKw = new AesKwAlgorithm();\n   * const privateKey = await aesKw.generateKey({ algorithm: 'A256KW' });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    AesKwGenerateKeyParams\n  ): Promise<Jwk> {\n    // Map algorithm name to key length.\n    const length = { A128KW: 128, A192KW: 192, A256KW: 256 }[algorithm] as 128 | 192 | 256;\n\n    // Generate a random private key.\n    const privateKey = await AesKw.generateKey({ length });\n\n    // Set the `alg` property based on the specified algorithm.\n    privateKey.alg = algorithm;\n\n    return privateKey;\n  }\n\n  public async privateKeyToBytes({ privateKey }:\n    PrivateKeyToBytesParams\n  ): Promise<Uint8Array> {\n    // Convert the JWK to a byte array.\n    const privateKeyBytes = await AesKw.privateKeyToBytes({ privateKey });\n\n    return privateKeyBytes;\n  }\n\n  /**\n   * Decrypts a wrapped key using the AES Key Wrap algorithm.\n   *\n   * @remarks\n   * This method unwraps a previously wrapped cryptographic key using the AES Key Wrap algorithm.\n   * The wrapped key, provided as a byte array, is unwrapped using the decryption key specified in\n   * the parameters.\n   *\n   * This operation is useful for securely receiving keys transmitted over untrusted mediums. The\n   * method returns the unwrapped key as a JSON Web Key (JWK).\n   *\n   * @example\n   * ```ts\n   * const aesKw = new AesKwAlgorithm();\n   * const wrappedKeyBytes = new Uint8Array([...]); // Byte array of a wrapped AES-256 GCM key\n   * const decryptionKey = { ... }; // A Jwk object representing the AES unwrapping key\n   * const unwrappedKey = await aesKw.unwrapKey({\n   *   wrappedKeyBytes,\n   *   wrappedKeyAlgorithm: 'A256GCM',\n   *   decryptionKey\n   * });\n   * ```\n   *\n   * @param params - The parameters for the key unwrapping operation.\n   *\n   * @returns A Promise that resolves to the unwrapped key in JWK format.\n   */\n  public async unwrapKey(params:\n    UnwrapKeyParams\n  ): Promise<Jwk> {\n    const unwrappedKey = await AesKw.unwrapKey(params);\n\n    return unwrappedKey;\n  }\n\n  /**\n   * Encrypts a given key using the AES Key Wrap algorithm.\n   *\n   * @remarks\n   * This method wraps a given cryptographic key using the AES Key Wrap algorithm. The private key\n   * to be wrapped is provided in the form of a JSON Web Key (JWK).\n   *\n   * This operation is useful for securely transmitting keys over untrusted mediums. The method\n   * returns the wrapped key as a byte array.\n   *\n   * @example\n   * ```ts\n   * const aesKw = new AesKwAlgorithm();\n   * const unwrappedKey = { ... }; // A Jwk object representing the key to be wrapped\n   * const encryptionKey = { ... }; // A Jwk object representing the AES wrapping key\n   * const wrappedKeyBytes = await aesKw.wrapKey({ unwrappedKey, encryptionKey });\n   * ```\n   *\n   * @param params - The parameters for the key wrapping operation.\n   *\n   * @returns A Promise that resolves to the wrapped key as a Uint8Array.\n   */\n  public async wrapKey(params:\n    WrapKeyParams\n  ): Promise<Uint8Array> {\n    const wrappedKeyBytes = AesKw.wrapKey(params);\n\n    return wrappedKeyBytes;\n  }\n}", "// ! TODO : Make sure I remove `@noble/ciphers` from the Agent package.json once this is moved to the `@web5/crypto` package.\nimport { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';\n\nimport type { DeriveKeyBytesParams } from '../types/params-direct.js';\n\n/**\n * The object that should be passed into `Pbkdf2.deriveKeyBytes()`, when using the PBKDF2 algorithm.\n */\nexport interface Pbkdf2Params {\n  /**\n   * A string representing the digest algorithm to use. This may be one of:\n   * - 'SHA-256'\n   * - 'SHA-384'\n   * - 'SHA-512'\n   */\n  hash: 'SHA-256' | 'SHA-384' | 'SHA-512';\n\n  /**\n   * The salt value to use in the derivation process, as a Uint8Array. This should be a random or\n   * pseudo-random value of at least 16 bytes. Unlike the `password`, `salt` does not need to be\n   * kept secret.\n   */\n  salt: Uint8Array;\n\n  /**\n   * A `Number` representing the number of iterations the hash function will be executed in\n   * `deriveKey()`. This impacts the computational cost of the `deriveKey()` operation, making it\n   * more resistant to dictionary attacks. The higher the number, the more secure, but also slower,\n   * the operation. Choose a value that balances security needs and performance for your\n   * application.\n   */\n  iterations: number;\n}\n\n/**\n * The `Pbkdf2` class provides a secure way to derive cryptographic keys from a password\n * using the PBKDF2 (Password-Based Key Derivation Function 2) algorithm.\n *\n * The PBKDF2 algorithm is widely used for generating keys from passwords, as it applies\n * a pseudorandom function to the input password along with a salt value and iterates the\n * process multiple times to increase the key's resistance to brute-force attacks.\n *\n * Notes:\n * - The `baseKeyBytes` that will be the input key material for PBKDF2 is expected to be a low-entropy\n *   value, such as a password or passphrase. It should be kept confidential.\n * - In 2023, {@link https://web.archive.org/web/20230123232056/https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#pbkdf2 | OWASP recommended}\n *   a minimum of 600,000 iterations for PBKDF2-HMAC-SHA256 and 210,000 for PBKDF2-HMAC-SHA512.\n *\n * @example\n * ```ts\n * // Key Derivation\n * const derivedKeyBytes = await Pbkdf2.deriveKeyBytes({\n *   baseKeyBytes: new TextEncoder().encode('password'), // The password as a Uint8Array\n *   hash: 'SHA-256', // The hash function to use ('SHA-256', 'SHA-384', 'SHA-512')\n *   salt: new Uint8Array([...]), // The salt value\n *   iterations: 600_000, // The number of iterations\n *   length: 256 // The length of the derived key in bits\n * });\n * ```\n *\n * @remarks\n * This class relies on the availability of the Web Crypto API.\n */\nexport class Pbkdf2 {\n  /**\n   * Derives a cryptographic key from a password using the PBKDF2 algorithm.\n   *\n   * @remarks\n   * This method applies the PBKDF2 algorithm to the provided password along with\n   * a salt value and iterates the process a specified number of times. It uses\n   * a cryptographic hash function to enhance security and produce a key of the\n   * desired length. The method is capable of utilizing either the Web Crypto API\n   * or the Node.js Crypto module, depending on the environment's support.\n   *\n   * @example\n   * ```ts\n   * const derivedKeyBytes = await Pbkdf2.deriveKeyBytes({\n   *   baseKeyBytes: new TextEncoder().encode('password'), // The password as a Uint8Array\n   *   hash: 'SHA-256', // The hash function to use ('SHA-256', 'SHA-384', 'SHA-512')\n   *   salt: new Uint8Array([...]), // The salt value\n   *   iterations: 600_000, // The number of iterations\n   *   length: 256 // The length of the derived key in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for key derivation.\n   * @returns A Promise that resolves to the derived key as a byte array.\n   */\n  public static async deriveKeyBytes({ baseKeyBytes, hash, salt, iterations, length }:\n    DeriveKeyBytesParams & Pbkdf2Params\n  ): Promise<Uint8Array> {\n    // Get the Web Crypto API interface.\n    const webCrypto = getWebcryptoSubtle() as SubtleCrypto;\n\n    // Import the password as a raw key for use with the Web Crypto API.\n    const webCryptoKey = await webCrypto.importKey(\n      'raw',              // key format is raw bytes\n      baseKeyBytes,       // key data to import\n      { name: 'PBKDF2' }, // algorithm identifier\n      false,              // key is not extractable\n      ['deriveBits']      // key usages\n    );\n\n    // Derive the bytes using the Web Crypto API.\n    const derivedKeyBuffer = await webCrypto.deriveBits(\n      { name: 'PBKDF2', hash, salt, iterations },\n      webCryptoKey,\n      length\n    );\n\n    // Convert from ArrayBuffer to Uint8Array.\n    const derivedKeyBytes = new Uint8Array(derivedKeyBuffer);\n\n    return derivedKeyBytes;\n  }\n}", "import { CryptoAlgorithm } from '@web5/crypto';\n\nimport type { Pbkdf2Params } from '../primitives/pbkdf2.js';\nimport type { KeyBytesDeriver } from '../types/key-deriver.js';\nimport type { DeriveKeyBytesParams } from '../types/params-direct.js';\n\nimport { Pbkdf2 } from '../primitives/pbkdf2.js';\n\n/**\n * The `Pbkdf2DeriveKeyBytesParams` interface defines the algorithm-specific parameters that\n * should be passed into the `deriveKeyBytes()` method when using the PBKDF2 algorithm.\n */\nexport interface Pbkdf2DeriveKeyBytesParams extends DeriveKeyBytesParams {\n  /** Specifies the algorithm variant for PBKDF2 key derivation.\n   * The value determines the hash function that will be used and must be one of the following:\n   * - `\"PBKDF2-HS256+A128KW\"`: PBKDF2 with HMAC SHA-256 and A128KW key wrapping.\n   * - `\"PBKDF2-HS384+A192KW\"`: PBKDF2 with HMAC SHA-384 and A192KW key wrapping.\n   * - `\"PBKDF2-HS512+A256KW\"`: PBKDF2 with HMAC SHA-512 and A256KW key wrapping.\n   */\n  algorithm: 'PBES2-HS256+A128KW' | 'PBES2-HS384+A192KW' | 'PBES2-HS512+A256KW';\n}\n\nexport class Pbkdf2Algorithm extends CryptoAlgorithm\n  implements KeyBytesDeriver<Pbkdf2DeriveKeyBytesParams, Uint8Array> {\n\n  public async deriveKeyBytes({ algorithm, ...params }:\n    Pbkdf2DeriveKeyBytesParams & Omit<Pbkdf2Params, 'hash'>\n  ): Promise<Uint8Array> {\n    // Extract the hash function component of the `algorithm` parameter.\n    const [, hashFunction] = algorithm.split(/[-+]/);\n\n    // Map from JOSE algorithm name to \"SHA\" hash function identifier.\n    const hash = {\n      'HS256' : 'SHA-256' as const,\n      'HS384' : 'SHA-384' as const,\n      'HS512' : 'SHA-512' as const\n    }[hashFunction]!;\n\n    // Derive a cryptographic byte array using PBKDF2.\n    const derivedKeyBytes = await Pbkdf2.deriveKeyBytes({ ...params, hash });\n\n    return derivedKeyBytes;\n  }\n}", "import type {\n  Jwk,\n  Cipher,\n  KeyConverter,\n  KeyGenerator,\n  DecryptParams,\n  EncryptParams,\n  GenerateKeyParams,\n} from '@web5/crypto';\n\nimport { AesGcm, AES_GCM_TAG_LENGTHS, CryptoAlgorithm } from '@web5/crypto';\n\nimport type { BytesToPrivateKeyParams, PrivateKeyToBytesParams } from '../types/params-direct.js';\n\n/**\n * The `AesGcmGenerateKeyParams` interface defines the algorithm-specific parameters that should be\n * passed into the `generateKey()` method when using the AES-GCM algorithm.\n */\nexport interface AesGcmGenerateKeyParams extends GenerateKeyParams {\n  /** Specifies the algorithm variant for key generation in AES-GCM mode.\n   * The value determines the length of the key to be generated and must be one of the following:\n   * - `\"A128GCM\"`: Generates a 128-bit key.\n   * - `\"A192GCM\"`: Generates a 192-bit key.\n   * - `\"A256GCM\"`: Generates a 256-bit key.\n   */\n  algorithm: 'A128GCM' | 'A192GCM' | 'A256GCM';\n}\n\n/**\n * The `AesGcmParams` interface defines the algorithm-specific parameters that should be passed\n * into the `encrypt()` and `decrypt()` methods when using the AES-GCM algorithm.\n */\nexport interface AesGcmParams {\n  /**\n   * The `additionalData` property is used for authentication alongside encrypted data but isn't\n   * encrypted itself. It must match in both encryption and decryption; a mismatch will cause\n   * decryption to fail. This feature allows for the authentication of data without encrypting it.\n   *\n   * The `additionalData` property is optional and omitting it does not compromise encryption\n   * security.\n   */\n  additionalData?: Uint8Array;\n\n  /**\n   * The initialization vector (IV) must be unique for every encryption operation carried out with a\n   * given key. The IV need not be secret, but it must be unpredictable: that is, the IV must not be\n   * reused with the same key. The IV must be 12 bytes (96 bits) in length in accordance with the\n   * AES-GCM specification recommendedation to promote interoperability and efficiency.\n   *\n   * Note: It is OK to transmit the IV in the clear with the encrypted message.\n   */\n  iv: Uint8Array;\n\n  /**\n   * This property determines the size in bits of the authentication tag generated in the encryption\n   * operation and used for authentication in the corresponding decryption. In accordance with the\n   * AES-GCM specification, the tag length must be 96, 104, 112, 120 or 128.\n   *\n   * The `tagLength` property is optional and defaults to 128 bits if omitted.\n   */\n  tagLength?: typeof AES_GCM_TAG_LENGTHS[number];\n}\n\n/**\n * The `AesGcmAlgorithm` class provides a concrete implementation for cryptographic operations using\n * the AES algorithm in Galois/Counter Mode (GCM). This class implements both\n * {@link Cipher | `Cipher`} and { @link KeyGenerator | `KeyGenerator`} interfaces, providing\n * key generation, encryption, and decryption features.\n *\n * This class is typically accessed through implementations that extend the\n * {@link CryptoApi | `CryptoApi`} interface.\n */\nexport class AesGcmAlgorithm extends CryptoAlgorithm\n  implements Cipher<AesGcmParams, AesGcmParams>,\n             KeyConverter,\n             KeyGenerator<AesGcmGenerateKeyParams, Jwk> {\n\n  public async bytesToPrivateKey({ privateKeyBytes }: BytesToPrivateKeyParams): Promise<Jwk> {\n    // Convert the byte array to a JWK.\n    const privateKey = await AesGcm.bytesToPrivateKey({ privateKeyBytes });\n\n    // Set the `alg` property based on the key length.\n    privateKey.alg = { 16: 'A128GCM', 24: 'A192GCM', 32: 'A256GCM' }[privateKeyBytes.length];\n\n    return privateKey;\n  }\n\n  /**\n   * Decrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM decryption on the given encrypted data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the decrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag used when encrypting the data. If not specified, the default tag length of 128 bits is\n   * used.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const encryptedData = new Uint8Array([...]); // Encrypted data\n   * const iv = new Uint8Array([...]); // Initialization vector used during encryption\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing the AES key\n   * const decryptedData = await aesGcm.decrypt({\n   *   data: encryptedData,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the decryption operation.\n   *\n   * @returns A Promise that resolves to the decrypted data as a Uint8Array.\n   */\n  public async decrypt(params:\n    DecryptParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    const plaintext = AesGcm.decrypt(params);\n\n    return plaintext;\n  }\n\n  /**\n   * Encrypts the provided data using AES-GCM.\n   *\n   * @remarks\n   * This method performs AES-GCM encryption on the given data using the specified key.\n   * It requires an initialization vector (IV), the encrypted data along with the decryption key,\n   * and optionally, additional authenticated data (AAD). The method returns the encrypted data as a\n   * Uint8Array. The optional `tagLength` parameter specifies the size in bits of the authentication\n   * tag generated in the encryption operation and used for authentication in the corresponding\n   * decryption. If not specified, the default tag length of 128 bits is used.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const data = new TextEncoder().encode('Messsage');\n   * const iv = new Uint8Array([...]); // Initialization vector\n   * const additionalData = new Uint8Array([...]); // Optional additional authenticated data\n   * const key = { ... }; // A Jwk object representing an AES key\n   * const encryptedData = await aesGcm.encrypt({\n   *   data,\n   *   iv,\n   *   additionalData,\n   *   key,\n   *   tagLength: 128 // Optional tag length in bits\n   * });\n   * ```\n   *\n   * @param params - The parameters for the encryption operation.\n   *\n   * @returns A Promise that resolves to the encrypted data as a Uint8Array.\n   */\n  public async encrypt(params:\n    EncryptParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    const ciphertext = AesGcm.encrypt(params);\n\n    return ciphertext;\n  }\n\n  /**\n   * Generates a symmetric key for AES in Galois/Counter Mode (GCM) in JSON Web Key (JWK) format.\n   *\n   * @remarks\n   * This method generates a symmetric AES key for use in GCM mode, based on the specified\n   * `algorithm` parameter which determines the key length. It uses cryptographically secure random\n   * number generation to ensure the uniqueness and security of the key. The key is returned in JWK\n   * format.\n   *\n   * The generated key includes the following components:\n   * - `kty`: Key Type, set to 'oct' for Octet Sequence.\n   * - `k`: The symmetric key component, base64url-encoded.\n   * - `kid`: Key ID, generated based on the JWK thumbprint.\n   *\n   * @example\n   * ```ts\n   * const aesGcm = new AesGcmAlgorithm();\n   * const privateKey = await aesGcm.generateKey({ algorithm: 'A256GCM' });\n   * ```\n   *\n   * @param params - The parameters for the key generation.\n   *\n   * @returns A Promise that resolves to the generated symmetric key in JWK format.\n   */\n  public async generateKey({ algorithm }:\n    AesGcmGenerateKeyParams\n  ): Promise<Jwk> {\n    // Map algorithm name to key length.\n    const length = { A128GCM: 128, A192GCM: 192, A256GCM: 256 }[algorithm] as 128 | 192 | 256;\n\n    // Generate a random private key.\n    const privateKey = await AesGcm.generateKey({ length });\n\n    // Set the `alg` property based on the specified algorithm.\n    privateKey.alg = algorithm;\n\n    return privateKey;\n  }\n\n  public async privateKeyToBytes({ privateKey }: PrivateKeyToBytesParams): Promise<Uint8Array> {\n    // Convert the JWK to a byte array.\n    const privateKeyBytes = await AesGcm.privateKeyToBytes({ privateKey });\n\n    return privateKeyBytes;\n  }\n}", "import type {\n  Jwk,\n  Cipher,\n  Hasher,\n  Signer,\n  KeyWrapper,\n  SignParams,\n  AesGcmParams,\n  DigestParams,\n  VerifyParams,\n  GenerateKeyParams,\n  GetPublicKeyParams,\n  KmsGetKeyUriParams,\n  AsymmetricKeyGenerator,\n} from '@web5/crypto';\n\nimport { CryptoAlgorithm, Sha2Algorithm, computeJwkThumbprint } from '@web5/crypto';\n\nimport type { CryptoApi } from './prototyping/crypto/types/crypto-api.js';\nimport type { HkdfParams } from './prototyping/crypto/primitives/hkdf.js';\nimport type { Pbkdf2Params } from './prototyping/crypto/primitives/pbkdf2.js';\nimport type { KeyBytesDeriver } from './prototyping/crypto/types/key-deriver.js';\nimport type { AsymmetricKeyConverter, KeyConverter } from './prototyping/crypto/types/key-converter.js';\nimport type { BytesToPrivateKeyParams, BytesToPublicKeyParams, CipherParams, DeriveKeyBytesParams, DeriveKeyParams, PrivateKeyToBytesParams, PublicKeyToBytesParams, UnwrapKeyParams, WrapKeyParams } from './prototyping/crypto/types/params-direct.js';\n\nimport { HkdfAlgorithm } from './prototyping/crypto/algorithms/hkdf.js';\nimport { EcdsaAlgorithm } from './prototyping/crypto/algorithms/ecdsa.js';\nimport { EdDsaAlgorithm } from './prototyping/crypto/algorithms/eddsa.js';\nimport { AesKwAlgorithm } from './prototyping/crypto/algorithms/aes-kw.js';\nimport { Pbkdf2Algorithm } from './prototyping/crypto/algorithms/pbkdf2.js';\nimport { AesGcmAlgorithm } from './prototyping/crypto/algorithms/aes-gcm.js';\nimport { CryptoError, CryptoErrorCode } from './prototyping/crypto/crypto-error.js';\n\nexport interface CryptoApiBytesToPrivateKeyParams extends BytesToPrivateKeyParams {\n  algorithm: KeyConversionAlgorithm;\n}\n\nexport interface CryptoApiBytesToPublicKeyParams extends BytesToPublicKeyParams {\n  algorithm: AsymmetricKeyConversionAlgorithm;\n}\n\n/**\n * The `CryptoApiCipherParams` interface defines the algorithm-specific parameters that should\n * be passed into the {@link AgentCryptoApi.encrypt | `AgentCryptoApi.encrypt()`} or\n * {@link AgentCryptoApi.decrypt | `AgentCryptoApi.decrypt()`} method.\n */\nexport interface CryptoApiCipherParams extends CipherParams, AesGcmParams {}\n\n/**\n * The `CryptoApiDigestParams` interface defines the algorithm-specific parameters that should\n * be passed into the {@link AgentCryptoApi.digest | `AgentCryptoApi.digest()`} method.\n */\nexport interface CryptoApiDigestParams extends DigestParams {\n  /**\n   * A string defining the name of hash function to use. The value must be one of the following:\n   * - `\"SHA-256\"`: Generates a 256-bit digest.\n   */\n  algorithm: DigestAlgorithm;\n}\n\nexport interface CryptoApiDeriveKeyOptions {\n  'HKDF-256': Omit<HkdfParams, 'hash'> & { derivedKeyAlgorithm: CipherAlgorithm | KeyWrappingAlgorithm};\n  'HKDF-384': Omit<HkdfParams, 'hash'> & { derivedKeyAlgorithm: CipherAlgorithm | KeyWrappingAlgorithm};\n  'HKDF-512': Omit<HkdfParams, 'hash'> & { derivedKeyAlgorithm: CipherAlgorithm | KeyWrappingAlgorithm};\n  'PBES2-HS256+A128KW': Omit<Pbkdf2Params, 'hash'> & { derivedKeyAlgorithm?: never };\n  'PBES2-HS384+A192KW': Omit<Pbkdf2Params, 'hash'> & { derivedKeyAlgorithm?: never };\n  'PBES2-HS512+A256KW': Omit<Pbkdf2Params, 'hash'> & { derivedKeyAlgorithm?: never };\n}\n\nexport interface CryptoApiDeriveKeyBytesOptions {\n  'HKDF-256': Omit<HkdfParams, 'hash'>;\n  'HKDF-384': Omit<HkdfParams, 'hash'>;\n  'HKDF-512': Omit<HkdfParams, 'hash'>;\n  'PBES2-HS256+A128KW': Omit<Pbkdf2Params, 'hash'>;\n  'PBES2-HS384+A192KW': Omit<Pbkdf2Params, 'hash'>;\n  'PBES2-HS512+A256KW': Omit<Pbkdf2Params, 'hash'>;\n}\n\n/**\n * The `CryptoApiDeriveKeyParams` interface defines the algorithm-specific parameters that\n * should be passed into the {@link AgentCryptoApi.deriveKey | `AgentCryptoApi.deriveKey()`} method.\n */\nexport type CryptoApiDeriveKeyParams<T extends DeriveKeyAlgorithm> = DeriveKeyParams & {\n  /**\n   * A string defining the name of key derivation function to use. The value must be one of the\n   * following:\n   * - `\"HKDF-256\"`: HKDF with SHA-256.\n   * - `\"HKDF-384\"`: HKDF with SHA-384.\n   * - `\"HKDF-512\"`: HKDF with SHA-512.\n   * - `\"PBKDF2-HS256+A128KW\"`: PBKDF2 with HMAC SHA-256 and A128KW key wrapping.\n   * - `\"PBKDF2-HS384+A192KW\"`: PBKDF2 with HMAC SHA-384 and A192KW key wrapping.\n   * - `\"PBKDF2-HS512+A256KW\"`: PBKDF2 with HMAC SHA-512 and A256KW key wrapping.\n   */\n  algorithm: T;\n} & CryptoApiDeriveKeyOptions[T];\n\n/**\n * The `CryptoApiDeriveKeyBytesParams` interface defines the algorithm-specific parameters that\n * should be passed into the {@link AgentCryptoApi.deriveKeyBytes | `AgentCryptoApi.deriveKeyBytes()`} method.\n */\nexport type CryptoApiDeriveKeyBytesParams<T extends DeriveKeyByteAlgorithm> = DeriveKeyBytesParams & {\n  /**\n   * A string defining the name of key derivation function to use. The value must be one of the\n   * following:\n   * - `\"HKDF-256\"`: HKDF with SHA-256.\n   * - `\"HKDF-384\"`: HKDF with SHA-384.\n   * - `\"HKDF-512\"`: HKDF with SHA-512.\n   * - `\"PBKDF2-HS256+A128KW\"`: PBKDF2 with HMAC SHA-256 and A128KW key wrapping.\n   * - `\"PBKDF2-HS384+A192KW\"`: PBKDF2 with HMAC SHA-384 and A192KW key wrapping.\n   * - `\"PBKDF2-HS512+A256KW\"`: PBKDF2 with HMAC SHA-512 and A256KW key wrapping.\n   */\n  algorithm: T;\n} & CryptoApiDeriveKeyBytesOptions[T];\n\nexport interface CryptoApiGenerateKeyParams extends GenerateKeyParams {\n  algorithm: KeyGenerationAlgorithm;\n}\n\n/**\n * `supportedAlgorithms` is an object mapping algorithm names to their respective implementations\n * Each entry in this map specifies the algorithm name and its associated properties, including the\n * implementation class and any relevant names or identifiers for the algorithm. This structure\n * allows for easy retrieval and instantiation of algorithm implementations based on the algorithm\n * name or key specification. It facilitates the support of multiple algorithms within the\n * `LocalKeyManager` class.\n */\nconst supportedAlgorithms = {\n  'AES-GCM': {\n    implementation : AesGcmAlgorithm,\n    names          : ['A128GCM', 'A192GCM', 'A256GCM'],\n    operations     : ['bytesToPrivateKey', 'decrypt', 'encrypt', 'generateKey'],\n  },\n  'AES-KW': {\n    implementation : AesKwAlgorithm,\n    names          : ['A128KW', 'A192KW', 'A256KW'],\n    operations     : ['bytesToPrivateKey', 'generateKey', 'privateKeyToBytes', 'wrapKey', 'unwrapKey'],\n  },\n  'Ed25519': {\n    implementation : EdDsaAlgorithm,\n    names          : ['Ed25519'],\n    operations     : ['bytesToPrivateKey', 'bytesToPublicKey', 'generateKey', 'sign', 'verify'],\n  },\n  'HKDF': {\n    implementation : HkdfAlgorithm,\n    names          : ['HKDF-256', 'HKDF-384', 'HKDF-512'],\n    operations     : ['deriveKey', 'deriveKeyBytes'],\n  },\n  'PBKDF2': {\n    implementation : Pbkdf2Algorithm,\n    names          : ['PBES2-HS256+A128KW', 'PBES2-HS384+A192KW', 'PBES2-HS512+A256KW'],\n    operations     : ['deriveKey', 'deriveKeyBytes'],\n  },\n  'secp256k1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256K', 'secp256k1'],\n    operations     : ['bytesToPrivateKey', 'bytesToPublicKey', 'generateKey', 'sign', 'verify'],\n  },\n  'secp256r1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256', 'secp256r1'],\n    operations     : ['bytesToPrivateKey', 'bytesToPublicKey', 'generateKey', 'sign', 'verify'],\n  },\n  'SHA-256': {\n    implementation : Sha2Algorithm,\n    names          : ['SHA-256'],\n    operations     : ['digest'],\n  }\n} as const;\n\n/* Helper types for `supportedAlgorithms`. */\ntype SupportedAlgorithm = keyof typeof supportedAlgorithms;\ntype SupportedAlgorithms = typeof supportedAlgorithms;\n\n/* Helper type for `supportedAlgorithms` implementations. */\ntype AlgorithmConstructor = typeof supportedAlgorithms[SupportedAlgorithm]['implementation'];\n\ntype CipherAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'encrypt' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype CipherAlgorithm = typeof supportedAlgorithms[CipherAlgorithms]['names'][number];\n\ntype DeriveKeyAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'deriveKey' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype DeriveKeyAlgorithm = typeof supportedAlgorithms[DeriveKeyAlgorithms]['names'][number];\n\ntype DeriveKeyBytesAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'deriveKeyBytes' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype DeriveKeyByteAlgorithm = typeof supportedAlgorithms[DeriveKeyBytesAlgorithms]['names'][number];\n\ntype DigestAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'digest' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype DigestAlgorithm = typeof supportedAlgorithms[DigestAlgorithms]['names'][number];\n\ntype KeyConversionAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'bytesToPrivateKey' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype KeyConversionAlgorithm = typeof supportedAlgorithms[KeyConversionAlgorithms]['names'][number];\n\ntype AsymmetricKeyConversionAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'bytesToPublicKey' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype AsymmetricKeyConversionAlgorithm = typeof supportedAlgorithms[AsymmetricKeyConversionAlgorithms]['names'][number];\n\ntype KeyWrappingAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'wrapKey' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype KeyWrappingAlgorithm = typeof supportedAlgorithms[KeyWrappingAlgorithms]['names'][number];\n\ntype KeyGenerationAlgorithms = {\n  [K in keyof SupportedAlgorithms]: 'generateKey' extends SupportedAlgorithms[K]['operations'][number] ? K : never\n}[keyof SupportedAlgorithms];\n\ntype KeyGenerationAlgorithm = typeof supportedAlgorithms[KeyGenerationAlgorithms]['names'][number];\n\nexport class AgentCryptoApi implements CryptoApi<\n  CryptoApiGenerateKeyParams, Jwk, GetPublicKeyParams,\n  CryptoApiDigestParams,\n  SignParams, VerifyParams,\n  CryptoApiCipherParams, CryptoApiCipherParams,\n  CryptoApiBytesToPublicKeyParams, PublicKeyToBytesParams,\n  CryptoApiBytesToPrivateKeyParams, PrivateKeyToBytesParams,\n  CryptoApiDeriveKeyParams<DeriveKeyAlgorithm>, Jwk,\n  CryptoApiDeriveKeyBytesParams<DeriveKeyAlgorithm>, Uint8Array,\n  WrapKeyParams, UnwrapKeyParams\n> {\n\n  /**\n   * A private map that stores instances of cryptographic algorithm implementations. Each key in\n   * this map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class\n   * that implements a specific cryptographic algorithm. This map is used to cache and reuse\n   * instances for performance optimization, ensuring that each algorithm is instantiated only once.\n   */\n  private _algorithmInstances: Map<AlgorithmConstructor, InstanceType<typeof CryptoAlgorithm>> = new Map();\n\n  public async bytesToPrivateKey({ algorithm: algorithmIdentifier, privateKeyBytes }:\n    CryptoApiBytesToPrivateKeyParams\n  ): Promise<Jwk> {\n    // Determine the algorithm name based on the given algorithm identifier.\n    const algorithm = this.getAlgorithmName({ algorithm: algorithmIdentifier });\n\n    // Get the key converter based on the algorithm name.\n    const keyConverter = this.getAlgorithm({ algorithm }) as KeyConverter<CryptoApiBytesToPrivateKeyParams, PrivateKeyToBytesParams>;\n\n    // Convert the byte array to a JWK.\n    const privateKey = await keyConverter.bytesToPrivateKey({ algorithm: algorithmIdentifier, privateKeyBytes });\n\n    return privateKey;\n  }\n\n  public async bytesToPublicKey({ algorithm: algorithmIdentifier, publicKeyBytes }:\n    CryptoApiBytesToPublicKeyParams\n  ): Promise<Jwk> {\n    // Determine the algorithm name based on the given algorithm identifier.\n    const algorithm = this.getAlgorithmName({ algorithm: algorithmIdentifier });\n\n    // Get the key converter based on the algorithm name.\n    const keyConverter = this.getAlgorithm({ algorithm }) as AsymmetricKeyConverter<CryptoApiBytesToPublicKeyParams, PublicKeyToBytesParams>;\n\n    // Convert the byte array to a JWK.\n    const publicKey = await keyConverter.bytesToPublicKey({ algorithm: algorithmIdentifier, publicKeyBytes });\n\n    return publicKey;\n  }\n\n  public async decrypt(params: CryptoApiCipherParams): Promise<Uint8Array> {\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: params.key });\n\n    // Get the cipher algorithm based on the algorithm name.\n    const cipher = this.getAlgorithm({ algorithm }) as Cipher<CipherParams, CipherParams>;\n\n    // Decrypt the data.\n    return await cipher.decrypt(params);\n  }\n\n  public async deriveKey<T extends DeriveKeyAlgorithm>(\n    params: CryptoApiDeriveKeyParams<T>\n  ): Promise<Jwk> {\n    // Determine the algorithm name based on the given algorithm identifier.\n    const algorithm = this.getAlgorithmName({ algorithm: params.algorithm });\n\n    // Get the key derivation function based on the algorithm name.\n    const kdf = this.getAlgorithm({ algorithm }) as KeyBytesDeriver<DeriveKeyBytesParams, Uint8Array>;\n\n    let derivedKeyAlgorithm: CipherAlgorithm | KeyWrappingAlgorithm;\n\n    switch (params.algorithm) {\n      case 'HKDF-256':\n      case 'HKDF-384':\n      case 'HKDF-512': {\n        derivedKeyAlgorithm = params.derivedKeyAlgorithm as CipherAlgorithm | KeyWrappingAlgorithm;\n        break;\n      }\n\n      case 'PBES2-HS256+A128KW':\n      case 'PBES2-HS384+A192KW':\n      case 'PBES2-HS512+A256KW': {\n        derivedKeyAlgorithm = params.algorithm.split(/[-+]/)[2] as 'A128KW' | 'A192KW' | 'A256KW';\n        break;\n      }\n\n      default:\n        throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `The specified \"algorithm\" is not supported: ${params.algorithm}`);\n    }\n\n    // Determine the bit length of the derived key based on the given algorithm.\n    const length = +(derivedKeyAlgorithm.match(/\\d+/)?.[0] ?? -1);\n\n    if (length === -1) {\n      throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `The derived key algorithm\" is not supported: ${derivedKeyAlgorithm}`);\n    }\n\n    // Derive the byte array.\n    const privateKeyBytes = await kdf.deriveKeyBytes({ ...params, length });\n\n    return await this.bytesToPrivateKey({ algorithm: derivedKeyAlgorithm, privateKeyBytes });\n  }\n\n  public async deriveKeyBytes<T extends DeriveKeyAlgorithm>(\n    params: CryptoApiDeriveKeyBytesParams<T>\n  ): Promise<Uint8Array> {\n    // Determine the algorithm name based on the given algorithm identifier.\n    const algorithm = this.getAlgorithmName({ algorithm: params.algorithm });\n\n    // Get the key derivation function based on the algorithm name.\n    const kdf = this.getAlgorithm({ algorithm }) as KeyBytesDeriver<DeriveKeyBytesParams, Uint8Array>;\n\n    // Derive the byte array.\n    const derivedKeyBytes = await kdf.deriveKeyBytes(params);\n\n    return derivedKeyBytes;\n  }\n\n  /**\n   * Generates a hash digest of the provided data.\n   *\n   * @remarks\n   * A digest is the output of the hash function. It's a fixed-size string of bytes that uniquely\n   * represents the data input into the hash function. The digest is often used for data integrity\n   * checks, as any alteration in the input data results in a significantly different digest.\n   *\n   * It takes the algorithm identifier of the hash function and data to digest as input and returns\n   * the digest of the data.\n   *\n   * @example\n   * ```ts\n   * const cryptoApi = new AgentCryptoApi();\n   * const data = new Uint8Array([...]);\n   * const digest = await cryptoApi.digest({ algorithm: 'SHA-256', data });\n   * ```\n   *\n   * @param params - The parameters for the digest operation.\n   * @param params.algorithm - The name of hash function to use.\n   * @param params.data - The data to digest.\n   *\n   * @returns A Promise which will be fulfilled with the hash digest.\n   */\n  public async digest({ algorithm, data }:\n    CryptoApiDigestParams\n  ): Promise<Uint8Array> {\n    // Get the hash function implementation based on the specified `algorithm` parameter.\n    const hasher = this.getAlgorithm({ algorithm }) as Hasher<CryptoApiDigestParams>;\n\n    // Compute the hash.\n    const hash = await hasher.digest({ algorithm, data });\n\n    return hash;\n  }\n\n  public async encrypt(params: CryptoApiCipherParams): Promise<Uint8Array> {\n    // If th\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: params.key });\n\n    // Get the cipher algorithm based on the algorithm name.\n    const cipher = this.getAlgorithm({ algorithm }) as Cipher<CipherParams, CipherParams>;\n\n    // Encrypt the data and return the ciphertext.\n    return await cipher.encrypt(params);\n  }\n\n  public async generateKey(params: CryptoApiGenerateKeyParams): Promise<Jwk> {\n    // Determine the algorithm name based on the given algorithm identifier.\n    const algorithm = this.getAlgorithmName({ algorithm: params.algorithm });\n\n    // Get the key generator implementation based on the algorithm.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator<CryptoApiGenerateKeyParams, Jwk, GetPublicKeyParams>;\n\n    // Generate the key.\n    const privateKey = await keyGenerator.generateKey({ algorithm: params.algorithm });\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    privateKey.kid ??= await computeJwkThumbprint({ jwk: privateKey });\n\n    return privateKey;\n  }\n\n  // ! TODO: Remove this once the `Dsa` interface is updated in @web5/crypto to remove KMS-specific methods.\n  public async getKeyUri(_params: KmsGetKeyUriParams): Promise<string> {\n    throw new Error('Method not implemented.');\n  }\n\n  public async getPublicKey({ key }:\n    GetPublicKeyParams\n  ): Promise<Jwk> {\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key });\n\n    // Get the key generator based on the algorithm name.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator<CryptoApiGenerateKeyParams, Jwk, GetPublicKeyParams>;\n\n    // Get the public key properties from the private JWK.\n    const publicKey = await keyGenerator.getPublicKey({ key });\n\n    return publicKey;\n  }\n\n  public async privateKeyToBytes({ privateKey }: { privateKey: Jwk; }): Promise<Uint8Array> {\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the key converter based on the algorithm name.\n    const keyConverter = this.getAlgorithm({ algorithm }) as KeyConverter<CryptoApiBytesToPrivateKeyParams, PrivateKeyToBytesParams>;\n\n    // Convert the JWK to a byte array.\n    const privateKeyBytes = await keyConverter.privateKeyToBytes({ privateKey });\n\n    return privateKeyBytes;\n  }\n\n  public async publicKeyToBytes({ publicKey }: { publicKey: Jwk; }): Promise<Uint8Array> {\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: publicKey });\n\n    // Get the key converter based on the algorithm name.\n    const keyConverter = this.getAlgorithm({ algorithm }) as AsymmetricKeyConverter<CryptoApiBytesToPublicKeyParams, PublicKeyToBytesParams>;\n\n    // Convert the JWK to a byte array.\n    const publicKeyBytes = await keyConverter.publicKeyToBytes({ publicKey });\n\n    return publicKeyBytes;\n  }\n\n  public async sign({ key, data }:\n    SignParams\n  ): Promise<Uint8Array> {\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Sign the data.\n    const signature = signer.sign({ data, key });\n\n    return signature;\n  }\n\n  public async unwrapKey(params: UnwrapKeyParams): Promise<Jwk> {\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: params.decryptionKey });\n\n    // Get the key wrapping algorithm based on the algorithm name.\n    const keyWrapper = this.getAlgorithm({ algorithm }) as KeyWrapper<WrapKeyParams, UnwrapKeyParams>;\n\n    // decrypt the key and return the ciphertext.\n    return await keyWrapper.unwrapKey(params);\n  }\n\n  public async verify({ key, signature, data }:\n    VerifyParams\n  ): Promise<boolean> {\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Verify the signature.\n    const isSignatureValid = signer.verify({ key, signature, data });\n\n    return isSignatureValid;\n  }\n\n  public async wrapKey(params: WrapKeyParams): Promise<Uint8Array> {\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: params.encryptionKey });\n\n    // Get the key wrapping algorithm based on the algorithm name.\n    const keyWrapper = this.getAlgorithm({ algorithm }) as KeyWrapper<WrapKeyParams, UnwrapKeyParams>;\n\n    // Encrypt the key and return the ciphertext.\n    return await keyWrapper.wrapKey(params);\n  }\n\n  /**\n   * Retrieves an algorithm implementation instance based on the provided algorithm name.\n   *\n   * @remarks\n   * This method checks if the requested algorithm is supported and returns a cached instance\n   * if available. If an instance does not exist, it creates and caches a new one. This approach\n   * optimizes performance by reusing algorithm instances across cryptographic operations.\n   *\n   * @example\n   * ```ts\n   * const signer = this.getAlgorithm({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for retrieving the algorithm implementation.\n   * @param params.algorithm - The name of the algorithm to retrieve.\n   *\n   * @returns An instance of the requested algorithm implementation.\n   *\n   * @throws Error if the requested algorithm is not supported.\n   */\n  private getAlgorithm({ algorithm }: {\n    algorithm: SupportedAlgorithm;\n  }): InstanceType<typeof CryptoAlgorithm> {\n    // Check if algorithm is supported.\n    const AlgorithmImplementation = supportedAlgorithms[algorithm]?.['implementation'];\n    if (!AlgorithmImplementation) {\n      throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Algorithm not supported: ${algorithm}`);\n    }\n\n    // Check if instance already exists for the `AlgorithmImplementation`.\n    if (!this._algorithmInstances.has(AlgorithmImplementation)) {\n      // If not, create a new instance and store it in the cache\n      this._algorithmInstances.set(AlgorithmImplementation, new AlgorithmImplementation());\n    }\n\n    // Return the cached instance\n    return this._algorithmInstances.get(AlgorithmImplementation)!;\n  }\n\n  /**\n   * Determines the algorithm name based on the key's properties.\n   *\n   * @remarks\n   * This method facilitates the identification of the correct algorithm for cryptographic\n   * operations based on the `alg` or `crv` properties of a {@link Jwk | JWK}.\n   *\n   * @example\n   * ```ts\n   * const key = { ... }; // Public key in JWK format\n   * const algorithm = this.getAlgorithmName({ key });\n   * ```\n   *\n   * @example\n   * ```ts\n   * const algorithm = this.getAlgorithmName({ algorithm: 'ES256' });\n   * ```\n   *\n   * @param params - The parameters for determining the algorithm name.\n   * @param params.key - A JWK containing the `alg` or `crv` properties.\n   *\n   * @returns The algorithm name associated with the key.\n   *\n   * @throws Error if the algorithm name cannot be determined from the provided input.\n   */\n  private getAlgorithmName({ key }: { key: Jwk }): SupportedAlgorithm;\n  private getAlgorithmName({ algorithm }: { algorithm: string }): SupportedAlgorithm;\n  private getAlgorithmName({ algorithm, key }: {\n    algorithm?: string;\n    key?: { alg?: string, crv?: string };\n  }): SupportedAlgorithm {\n    const algProperty = key?.alg ?? algorithm;\n    const crvProperty = key?.crv;\n\n    for (const algorithmIdentifier of Object.keys(supportedAlgorithms) as SupportedAlgorithm[]) {\n      const algorithmNames = supportedAlgorithms[algorithmIdentifier].names as readonly string[];\n      if (algProperty && algorithmNames.includes(algProperty)) {\n        return algorithmIdentifier;\n      } else if (crvProperty && algorithmNames.includes(crvProperty)) {\n        return algorithmIdentifier;\n      }\n    }\n\n    throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported,\n      `Algorithm not supported based on provided input: alg=${algProperty}, crv=${crvProperty}. ` +\n      'Please check the documentation for the list of supported algorithms.'\n    );\n  }\n}", "import type { ProtocolDefinition } from '@tbd54566975/dwn-sdk-js';\n\nexport const IdentityProtocolDefinition: ProtocolDefinition = {\n  protocol  : 'http://identity.foundation/protocols/web5/identity-store',\n  published : false,\n  types     : {\n    portableDid: {\n      schema      : 'https://identity.foundation/schemas/web5/portable-did',\n      dataFormats : [\n        'application/json'\n      ]\n    },\n    identityMetadata: {\n      schema      : 'https://identity.foundation/schemas/web5/identity-metadata',\n      dataFormats : [\n        'application/json'\n      ]\n    }\n  },\n  structure: {\n    portableDid      : {},\n    identityMetadata : {}\n  }\n};\n\nexport const JwkProtocolDefinition: ProtocolDefinition = {\n  protocol  : 'http://identity.foundation/protocols/web5/jwk-store',\n  published : false,\n  types     : {\n    privateJwk: {\n      schema      : 'https://identity.foundation/schemas/web5/private-jwk',\n      dataFormats : [\n        'application/json'\n      ]\n    },\n  },\n  structure: {\n    privateJwk: {}\n  }\n};", "import type { PortableDid } from '@web5/dids';\n\nexport function isPortableDid(obj: unknown): obj is PortableDid {\n  // Validate that the given value is an object that has the necessary properties of PortableDid.\n  return !(!obj || typeof obj !== 'object' || obj === null)\n    && 'uri' in obj\n    && 'document' in obj\n    && 'metadata' in obj\n    && (!('keyManager' in obj) || obj.keyManager === undefined);\n}", "import type { Jwk, KeyIdentifier, KmsExportKeyParams, KmsGetPublicKeyParams, KmsSignParams } from '@web5/crypto';\n\nimport { Ed25519, LocalKeyManager, computeJwkThumbprint } from '@web5/crypto';\n\nimport type { Web5PlatformAgent } from './types/agent.js';\n\n/**\n * Internal utility functions used by the Web5 platform agent that are not intended for public use\n * and are not exported in the public API.\n */\n\n/**\n * Separator used to join the tenant DID and the DID URI that is used to prefix all lookups in the\n * Agent data stores, including the DWN-backed store's index and the in-memory store's map.\n */\nexport const TENANT_SEPARATOR = '^';\n\nexport class DeterministicKeyGenerator extends LocalKeyManager {\n  private _predefinedKeys: Map<KeyIdentifier, Jwk>;\n  private _keyGenerator: IterableIterator<KeyIdentifier>;\n\n  constructor() {\n    super();\n    this._predefinedKeys = new Map();\n    this._keyGenerator = this._predefinedKeys.keys();\n  }\n\n  public async addPredefinedKeys({ privateKeys }: { privateKeys: Jwk[] }): Promise<void> {\n    const predefinedKeys: { [keyUri: KeyIdentifier]: Jwk } = {};\n\n    for (const key of privateKeys) {\n      // If the key ID is undefined, set it to the JWK thumbprint.\n      key.kid ??= await computeJwkThumbprint({ jwk: key });\n\n      // Compute the key URI for the key.\n      const keyUri = await this.getKeyUri({ key });\n\n      // Store the key.\n      predefinedKeys[keyUri] = key;\n    }\n\n    // Store the keys.\n    this._predefinedKeys = new Map(Object.entries(predefinedKeys));\n\n    // Reset the key generator to use the new keys.\n    this._keyGenerator = this._predefinedKeys.keys();\n  }\n\n  public async exportKey({ keyUri }:\n    KmsExportKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = this._predefinedKeys.get(keyUri);\n\n    // Throw an error if the key is not found.\n    if (!privateKey) {\n      throw new Error(`DeterministicKeyGenerator.exportKey: Key not found: ${keyUri}`);\n    }\n\n    return privateKey;\n  }\n\n  public async generateKey(_params: {\n    algorithm: 'Ed25519' | 'secp256k1' | 'secp256r1'\n  }): Promise<KeyIdentifier> {\n    // Get the next key from the array of predefined keys.\n    const { value: keyUri, done } = this._keyGenerator.next();\n\n    // Throw an error if the generator is empty and there are no more keys to return.\n    if (done) {\n      throw new Error('Ran out of predefined keys');\n    }\n\n    return keyUri;\n  }\n\n  public async getPublicKey({ keyUri }:\n      KmsGetPublicKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = this._predefinedKeys.get(keyUri);\n\n    // Throw an error if the key is not found.\n    if (!privateKey) {\n      throw new Error(`DeterministicKeyGenerator.getPublicKey: Key not found: ${keyUri}`);\n    }\n\n    // Get the public key properties from the private JWK.\n    const { d, ...publicKey } = privateKey;\n\n    return publicKey;\n  }\n\n  public async sign({ keyUri, data }:\n    KmsSignParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const privateKey = this._predefinedKeys.get(keyUri);\n\n    // Throw an error if the key is not found.\n    if (!privateKey) {\n      throw new Error(`DeterministicKeyGenerator.sign: Key not found: ${keyUri}`);\n    }\n\n    // Sign the data.\n    const signature = await Ed25519.sign({ data, key: privateKey });\n\n    return signature;\n  }\n}\n\n/**\n * Determines the tenant identifier (DID) for data store operations based on the provided\n * parameters.\n *\n * The function identifies the tenant using a priority order:\n * 1. directly provided tenant DID,\n * 2. the agent's DID,\n * 3. or a specified DID URI.\n *\n * This approach ensures operations are isolated by DID, supporting multi-tenancy.\n *\n * @param params - The parameters for determining the tenant.\n * @param params.agent - The Web5 platform agent instance.\n * @param [params.tenant] - An optional tenant DID. If provided, it takes precedence.\n * @param [params.didUri] - An optional DID URI to use if no tenant DID or agent DID is available.\n * @returns A promise that resolves to the tenant DID.\n * @throws Throws an error if it fails to determine the tenant from the provided inputs.\n */\nexport async function getDataStoreTenant({ agent, tenant, didUri }: {\n  agent: Web5PlatformAgent;\n  tenant?: string;\n  didUri?: string;\n}): Promise<string> {\n  // Check if a tenant identifier (DID) is explicitly provided and return it immediately if so.\n  // This is the highest priority to ensure explicit tenant isolation.\n  if (tenant) return tenant;\n\n  // If the agent's DID is available, return it as the tenant identifier.\n  // This allows using the agent's own identity as a fallback tenant.\n  if (agent.agentDid) return agent.agentDid.uri;\n\n  // Throw an error if neither tenant, agent.agentDid, nor didUri are provided,\n  // as it's not possible to determine the tenant identifier without any of these.\n  if (!didUri) {\n    throw new Error(`Failed to determine tenant DID: 'agent.agentDid', 'tenant', and 'didUri' are undefined`);\n  }\n\n  // Return the DID URI as the tenant identifier if both `tenant` and `agent.agentDid` are undefined\n  // but a `didUri` is provided. This assumes the agent has the necessary permissions and keys\n  // associated with the provided DID for data store operations.\n  //\n  // Note: This assumes the Agent's key manager has the private key for the given DID URI. No\n  // explicit check is made here for performance reasons, relying on downstream processes to\n  // validate access rights.\n  return didUri;\n}", "import type { Jwk } from '@web5/crypto';\n\nimport ms from 'ms';\nimport { Convert, NodeStream, TtlCache } from '@web5/common';\n\nimport type { Web5PlatformAgent } from './types/agent.js';\n\nimport { TENANT_SEPARATOR } from './utils-internal.js';\nimport { getDataStoreTenant } from './utils-internal.js';\nimport { DwnInterface, DwnMessageParams } from './types/dwn.js';\nimport { ProtocolDefinition, RecordsReadReplyEntry } from '@tbd54566975/dwn-sdk-js';\n\nexport type DataStoreTenantParams = {\n  agent: Web5PlatformAgent;\n  tenant?: string;\n}\n\nexport type DataStoreListParams = DataStoreTenantParams;\n\nexport type DataStoreGetParams = DataStoreTenantParams & {\n  id: string;\n  useCache?: boolean;\n}\n\nexport type DataStoreSetParams<TStoreObject> = DataStoreTenantParams & {\n  id: string;\n  data: TStoreObject;\n  preventDuplicates?: boolean;\n  updateExisting?: boolean;\n  useCache?: boolean;\n}\n\nexport type DataStoreDeleteParams = DataStoreTenantParams & {\n  id: string;\n}\n\nexport interface AgentDataStore<TStoreObject> {\n  delete(params: DataStoreDeleteParams): Promise<boolean>;\n\n  get(params: DataStoreGetParams): Promise<TStoreObject | undefined>;\n\n  list(params: DataStoreTenantParams): Promise<TStoreObject[]>;\n\n  set(params: DataStoreSetParams<TStoreObject>): Promise<void>;\n}\n\nexport class DwnDataStore<TStoreObject extends Record<string, any> = Jwk> implements AgentDataStore<TStoreObject> {\n  protected name = 'DwnDataStore';\n\n  /**\n     * Cache of Store Objects referenced by DWN record ID to Store Objects.\n     *\n     * Up to 100 entries are retained for 15 minutes.\n     */\n  protected _cache = new TtlCache<string, TStoreObject>({ ttl: ms('15 minutes'), max: 100 });\n\n  /**\n   * Index for mappings from Store Identifier to DWN record ID.\n   * Since these values don't change, we can use a long TTL.\n   *\n   * Up to 1,000 entries are retained for 21 days.\n   * NOTE: The maximum number for the ttl is 2^31 - 1 milliseconds (24.8 days), setting to 21 days to be safe.\n   */\n  protected _index = new TtlCache<string, string>({ ttl: ms('21 days'), max: 1000 });\n\n  /**\n   * Cache of tenant DIDs that have been initialized with the protocol.\n   * This is used to avoid redundant protocol initialization requests.\n   *\n   * Since these are default protocols and unlikely to change, we can use a long TTL.\n   */\n  protected _protocolInitializedCache: TtlCache<string, boolean> = new TtlCache({ ttl: ms('21 days'), max: 1000 });\n\n  /**\n   * The protocol assigned to this storage instance.\n   */\n  protected _recordProtocolDefinition!: ProtocolDefinition;\n\n  /**\n   * Properties to use when writing and querying records with the DWN store.\n   */\n  protected _recordProperties = {\n    dataFormat: 'application/json',\n  };\n\n  public async delete({ id, agent, tenant }: DataStoreDeleteParams): Promise<boolean> {\n    // Determine the tenant identifier (DID) for the delete operation.\n    const tenantDid = await getDataStoreTenant({ agent, tenant, didUri: id });\n\n    // Look up the DWN record ID of the object in the store with the given `id`.\n    let matchingRecordId = await this.lookupRecordId({ id, tenantDid, agent });\n\n    // Return false if the given ID was not found in the store.\n    if (!matchingRecordId) return false;\n\n    // If a record for the given ID was found, attempt to delete it.\n    const { reply: { status } } = await agent.dwn.processRequest({\n      author        : tenantDid,\n      target        : tenantDid,\n      messageType   : DwnInterface.RecordsDelete,\n      messageParams : { recordId: matchingRecordId }\n    });\n\n    // If the record was successfully deleted, update the index/cache and return true;\n    if (status.code === 202) {\n      this._index.delete(`${tenantDid}${TENANT_SEPARATOR}${id}`);\n      this._cache.delete(matchingRecordId);\n      return true;\n    }\n\n    // If the Delete operation failed, throw an error.\n    throw new Error(`${this.name}: Failed to delete '${id}' from store: (${status.code}) ${status.detail}`);\n  }\n\n  public async get({ id, agent, tenant, useCache = false }:\n    DataStoreGetParams\n  ): Promise<TStoreObject | undefined> {\n    // Determine the tenant identifier (DID) for the list operation.\n    const tenantDid = await getDataStoreTenant({ agent, tenant, didUri: id });\n\n    // Look up the DWN record ID of the object in the store with the given `id`.\n    let matchingRecordId = await this.lookupRecordId({ id, tenantDid, agent });\n\n    // Return undefined if no matches were found.\n    if (!matchingRecordId) return undefined;\n\n    // Retrieve and return the stored object.\n    return await this.getRecord({ recordId: matchingRecordId, tenantDid, agent, useCache });\n  }\n\n  public async list({ agent, tenant}: DataStoreListParams): Promise<TStoreObject[]> {\n    // Determine the tenant identifier (DID) for the list operation.\n    const tenantDid = await getDataStoreTenant({ tenant, agent });\n\n    // Query the DWN for all stored record objects.\n    const storedRecords = await this.getAllRecords({ agent, tenantDid });\n\n    return storedRecords;\n  }\n\n  public async set({ id, data, tenant, agent, preventDuplicates = true, updateExisting = false, useCache = false }:\n    DataStoreSetParams<TStoreObject>\n  ): Promise<void> {\n    // Determine the tenant identifier (DID) for the set operation.\n    const tenantDid = await getDataStoreTenant({ agent, tenant, didUri: id });\n\n    // initialize the storage protocol if not already done\n    await this.initialize({ tenant: tenantDid, agent });\n\n    const messageParams: DwnMessageParams[DwnInterface.RecordsWrite] = { ...this._recordProperties };\n\n    if (updateExisting) {\n      // Look up the DWN record ID of the object in the store with the given `id`.\n      const matchingRecordEntry = await this.getExistingRecordEntry({ id, tenantDid, agent });\n      if (!matchingRecordEntry) {\n        throw new Error(`${this.name}: Update failed due to missing entry for: ${id}`);\n      }\n\n      // set the recordId in the messageParams to update the existing record\n      // set the dateCreated to the existing dateCreated as this is an immutable property\n      messageParams.recordId = matchingRecordEntry.recordsWrite!.recordId;\n      messageParams.dateCreated = matchingRecordEntry.recordsWrite!.descriptor.dateCreated;\n    } else if (preventDuplicates) {\n      // Look up the DWN record ID of the object in the store with the given `id`.\n      const matchingRecordId = await this.lookupRecordId({ id, tenantDid, agent });\n      if (matchingRecordId) {\n        throw new Error(`${this.name}: Import failed due to duplicate entry for: ${id}`);\n      }\n    }\n\n\n    // Convert the store object to a byte array, which will be the data payload of the DWN record.\n    const dataBytes = Convert.object(data).toUint8Array();\n\n    // Store the record in the DWN.\n    const { message, reply: { status } } = await agent.dwn.processRequest({\n      author        : tenantDid,\n      target        : tenantDid,\n      messageType   : DwnInterface.RecordsWrite,\n      messageParams : { ...this._recordProperties, ...messageParams },\n      dataStream    : new Blob([dataBytes], { type: 'application/json' })\n    });\n\n    // If the write fails, throw an error.\n    if (!(message && status.code === 202)) {\n      throw new Error(`${this.name}: Failed to write data to store for ${id}: ${status.detail}`);\n    }\n\n    // Add the ID of the newly created record to the index.\n    this._index.set(`${tenantDid}${TENANT_SEPARATOR}${id}`, message.recordId);\n\n    // If caching is enabled, add the store object to the cache.\n    if (useCache) {\n      this._cache.set(message.recordId, data);\n    }\n  }\n\n  /**\n   * Initialize the relevant protocol for the given tenant.\n   * This confirms that the storage protocol is configured, otherwise it will be installed.\n   */\n  public async initialize({ tenant, agent }: DataStoreTenantParams) {\n    const tenantDid = await getDataStoreTenant({ agent, tenant });\n    if (this._protocolInitializedCache.has(tenantDid)) {\n      return;\n    }\n\n    const { reply: { status, entries }} = await agent.dwn.processRequest({\n      author        : tenantDid,\n      target        : tenantDid,\n      messageType   : DwnInterface.ProtocolsQuery,\n      messageParams : {\n        filter: {\n          protocol: this._recordProtocolDefinition.protocol\n        }\n      },\n    });\n\n    if (status.code !== 200) {\n      throw new Error(`Failed to query for protocols: ${status.code} - ${status.detail}`);\n    }\n\n    if (entries?.length === 0) {\n      // protocol is not installed, install it\n      await this.installProtocol(tenantDid, agent);\n    }\n\n    this._protocolInitializedCache.set(tenantDid, true);\n  }\n\n  protected async getAllRecords(_params: {\n    agent: Web5PlatformAgent;\n    tenantDid: string;\n  }): Promise<TStoreObject[]> {\n    throw new Error('Not implemented: Classes extending DwnDataStore must implement getAllRecords()');\n  }\n\n  private async getRecord({ recordId, tenantDid, agent, useCache }: {\n    recordId: string;\n    tenantDid: string;\n    agent: Web5PlatformAgent;\n    useCache: boolean;\n  }): Promise<TStoreObject | undefined> {\n    // If caching is enabled, check the cache for the record ID.\n    if (useCache) {\n      const record = this._cache.get(recordId);\n      // If the record ID was present in the cache, return the associated store object.\n      if (record) return record;\n      // Otherwise, continue to read from the store.\n    }\n\n    // Read the record from the store.\n    const { reply: readReply } = await agent.dwn.processRequest({\n      author        : tenantDid,\n      target        : tenantDid,\n      messageType   : DwnInterface.RecordsRead,\n      messageParams : { filter: { recordId } }\n    });\n\n    if (!readReply.entry?.data) {\n      throw new Error(`${this.name}: Failed to read data from DWN for: ${recordId}`);\n    }\n\n    // If the record was found, convert back to store object format.\n    const storeObject = await NodeStream.consumeToJson({ readable: readReply.entry.data }) as TStoreObject;\n\n    // If caching is enabled, add the store object to the cache.\n    if (useCache) {\n      this._cache.set(recordId, storeObject);\n    }\n\n    return storeObject;\n  }\n\n  /**\n   * Install the protocol for the given tenant using a `ProtocolsConfigure` message.\n   */\n  private async installProtocol(tenant: string, agent: Web5PlatformAgent) {\n    const { reply : { status } } = await agent.dwn.processRequest({\n      author        : tenant,\n      target        : tenant,\n      messageType   : DwnInterface.ProtocolsConfigure,\n      messageParams : {\n        definition: this._recordProtocolDefinition\n      },\n    });\n\n    if (status.code !== 202) {\n      throw new Error(`Failed to install protocol: ${status.code} - ${status.detail}`);\n    }\n  }\n\n  private async lookupRecordId({ id, tenantDid, agent }: {\n    id: string;\n    tenantDid: string;\n    agent: Web5PlatformAgent;\n  }): Promise<string | undefined> {\n    // Check the index for a matching ID and extend the index TTL.\n    let recordId = this._index.get(`${tenantDid}${TENANT_SEPARATOR}${id}`, { updateAgeOnGet: true });\n\n    // If no matching record ID was found in the index...\n    if (!recordId) {\n      // Query the DWN for all stored objects, which rebuilds the index.\n      await this.getAllRecords({ agent, tenantDid });\n\n      // Check the index again for a matching ID.\n      recordId = this._index.get(`${tenantDid}${TENANT_SEPARATOR}${id}`);\n    }\n\n    return recordId;\n  }\n\n  private async getExistingRecordEntry({ id, tenantDid, agent }: {\n    id: string;\n    tenantDid: string;\n    agent: Web5PlatformAgent;\n  }): Promise<RecordsReadReplyEntry | undefined> {\n    // Look up the DWN record ID of the object in the store with the given `id`.\n    const recordId = await this.lookupRecordId({ id, tenantDid, agent });\n    if (recordId) {\n      // Read the record from the store.\n      const { reply: readReply } = await agent.dwn.processRequest({\n        author        : tenantDid,\n        target        : tenantDid,\n        messageType   : DwnInterface.RecordsRead,\n        messageParams : { filter: { recordId } }\n      });\n\n      return readReply.entry;\n    }\n  }\n}\n\nexport class InMemoryDataStore<TStoreObject extends Record<string, any> = Jwk> implements AgentDataStore<TStoreObject> {\n  protected name = 'InMemoryDataStore';\n\n  /**\n   * A private field that contains the Map used as the in-memory data store.\n   */\n  private store: Map<string, TStoreObject> = new Map();\n\n  public async delete({ id, agent, tenant }: DataStoreDeleteParams): Promise<boolean> {\n    // Determine the tenant identifier (DID) for the delete operation.\n    const tenantDid = await getDataStoreTenant({ agent, tenant, didUri: id });\n\n    if (this.store.has(`${tenantDid}${TENANT_SEPARATOR}${id}`)) {\n      // Record with given identifier exists so proceed with delete.\n      this.store.delete(`${tenantDid}${TENANT_SEPARATOR}${id}`);\n      return true;\n    }\n\n    // Record with given identifier not present so delete operation not possible.\n    return false;\n  }\n\n  public async get({ id, agent, tenant }: DataStoreGetParams): Promise<TStoreObject | undefined> {\n    // Determine the tenant identifier (DID) for the get operation.\n    const tenantDid = await getDataStoreTenant({ agent, tenant, didUri: id });\n\n    return this.store.get(`${tenantDid}${TENANT_SEPARATOR}${id}`);\n  }\n\n  public async list({ agent, tenant}: DataStoreListParams): Promise<TStoreObject[]> {\n    // Determine the tenant identifier (DID) for the list operation.\n    const tenantDid = await getDataStoreTenant({ tenant, agent });\n\n    const result: TStoreObject[] = [];\n    for (const [key, storedRecord] of this.store.entries()) {\n      if (key.startsWith(`${tenantDid}${TENANT_SEPARATOR}`)) {\n        result.push(storedRecord);\n      }\n    }\n\n    return result;\n  }\n\n  public async set({ id, data, tenant, agent, preventDuplicates, updateExisting }: DataStoreSetParams<TStoreObject>): Promise<void> {\n    // Determine the tenant identifier (DID) for the set operation.\n    const tenantDid = await getDataStoreTenant({ agent, tenant, didUri: id });\n\n    // If enabled, check if a record with the given `id` is already present in the store.\n    if (updateExisting) {\n      // Look up the DWN record ID of the object in the store with the given `id`.\n      if (!this.store.has(`${tenantDid}${TENANT_SEPARATOR}${id}`)) {\n        throw new Error(`${this.name}: Update failed due to missing entry for: ${id}`);\n      }\n\n      // set the recordId in the messageParams to update the existing record\n    } else if (preventDuplicates) {\n      const duplicateFound = this.store.has(`${tenantDid}${TENANT_SEPARATOR}${id}`);\n      if (duplicateFound) {\n        throw new Error(`${this.name}: Import failed due to duplicate entry for: ${id}`);\n      }\n    }\n\n    // Make a deep copy so that the object stored does not share the same references as the input.\n    const clonedData = structuredClone(data);\n    this.store.set(`${tenantDid}${TENANT_SEPARATOR}${id}`, clonedData);\n  }\n}", "import type { PortableDid } from '@web5/dids';\n\nimport { Convert } from '@web5/common';\n\nimport type { Web5PlatformAgent } from './types/agent.js';\nimport type { AgentDataStore, DataStoreDeleteParams, DataStoreGetParams, DataStoreListParams, DataStoreSetParams } from './store-data.js';\n\nimport { DwnInterface } from './types/dwn.js';\nimport { IdentityProtocolDefinition } from './store-data-protocols.js';\nimport { isPortableDid } from './prototyping/dids/utils.js';\nimport { TENANT_SEPARATOR } from './utils-internal.js';\nimport { DwnDataStore, InMemoryDataStore } from './store-data.js';\n\nexport class DwnDidStore extends DwnDataStore<PortableDid> implements AgentDataStore<PortableDid> {\n  protected name = 'DwnDidStore';\n\n  protected _recordProtocolDefinition = IdentityProtocolDefinition;\n\n  /**\n   * Properties to use when writing and querying DID records with the DWN store.\n   */\n  protected _recordProperties = {\n    dataFormat   : 'application/json',\n    protocol     : this._recordProtocolDefinition.protocol,\n    protocolPath : 'portableDid',\n    schema       : this._recordProtocolDefinition.types.portableDid.schema,\n  };\n\n  public async delete(params: DataStoreDeleteParams): Promise<boolean> {\n    return await super.delete(params);\n  }\n\n  public async get(params: DataStoreGetParams): Promise<PortableDid | undefined> {\n    return await super.get(params);\n  }\n\n  public async list(params: DataStoreListParams): Promise<PortableDid[]> {\n    return await super.list(params);\n  }\n\n  public async set(params: DataStoreSetParams<PortableDid>): Promise<void> {\n    return await super.set(params);\n  }\n\n  protected async getAllRecords({ agent, tenantDid }: {\n    agent: Web5PlatformAgent;\n    tenantDid: string;\n  }): Promise<PortableDid[]> {\n    // Clear the index since it will be rebuilt from the query results.\n    this._index.clear();\n\n    // Query the DWN for all stored PortableDid objects.\n    const { reply: queryReply } = await agent.dwn.processRequest({\n      author        : tenantDid,\n      target        : tenantDid,\n      messageType   : DwnInterface.RecordsQuery,\n      messageParams : { filter: { ...this._recordProperties } }\n    });\n\n    // Loop through all of the stored DID records and accumulate the DID objects.\n    let storedDids: PortableDid[] = [];\n    for (const record of queryReply.entries ?? []) {\n      // All DID records are expected to be small enough such that the data is returned with the\n      // query results. If a record is returned without `encodedData` this is unexpected so throw\n      // an error.\n      if (!record.encodedData) {\n        throw new Error(`${this.name}: Expected 'encodedData' to be present in the DWN query result entry`);\n      }\n\n      const storedDid = Convert.base64Url(record.encodedData).toObject() as PortableDid;\n      if (isPortableDid(storedDid)) {\n        // Update the index with the matching record ID.\n        const indexKey = `${tenantDid}${TENANT_SEPARATOR}${storedDid.uri}`;\n        this._index.set(indexKey, record.recordId);\n\n        // Add the stored DID to the cache.\n        this._cache.set(record.recordId, storedDid);\n\n        storedDids.push(storedDid);\n      }\n    }\n\n    return storedDids;\n  }\n}\n\nexport class InMemoryDidStore extends InMemoryDataStore<PortableDid> implements AgentDataStore<PortableDid> {\n  protected name = 'InMemoryDidStore';\n\n  public async delete(params: DataStoreDeleteParams): Promise<boolean> {\n    return await super.delete(params);\n  }\n\n  public async get(params: DataStoreGetParams): Promise<PortableDid | undefined> {\n    return await super.get(params);\n  }\n\n  public async list(params: DataStoreListParams): Promise<PortableDid[]> {\n    return await super.list(params);\n  }\n\n  public async set(params: DataStoreSetParams<PortableDid>): Promise<void> {\n    return await super.set(params);\n  }\n}", "import type {\n  DidDocument,\n  DidMetadata,\n  PortableDid,\n  DidMethodApi,\n  DidDhtCreateOptions,\n  DidJwkCreateOptions,\n  DidResolutionResult,\n  DidResolutionOptions,\n  DidVerificationMethod,\n  DidResolverCache,\n} from '@web5/dids';\n\nimport { BearerDid, Did, DidDht, UniversalResolver } from '@web5/dids';\n\nimport type { AgentDataStore } from './store-data.js';\nimport type { AgentKeyManager } from './types/key-manager.js';\nimport type { ResponseStatus, Web5PlatformAgent } from './types/agent.js';\n\nimport { InMemoryDidStore } from './store-did.js';\nimport { AgentDidResolverCache } from './agent-did-resolver-cache.js';\nimport { canonicalize } from '@web5/crypto';\n\nexport enum DidInterface {\n  Create  = 'Create',\n  // Deactivate = 'Deactivate',\n  Resolve = 'Resolve',\n  // Update  = 'Update'\n}\n\nexport interface DidMessageParams {\n  [DidInterface.Create]: DidCreateParams;\n  // [DidInterface.Deactivate]: DidDeactivateParams;\n  [DidInterface.Resolve]: DidResolveParams;\n  // [DidInterface.Update]: DidUpdateParams;\n}\n\nexport interface DidMessageResult {\n  [DidInterface.Create]: DidCreateResult;\n  // [DidInterface.Deactivate]: DidDeactivateResult;\n  [DidInterface.Resolve]: DidResolveResult;\n  // [DidInterface.Update]: DidUpdateResult;\n}\n\nexport type DidCreateResult = {\n  uri: string;\n  document: DidDocument;\n  metadata: DidMetadata;\n}\n\nexport type DidResolveResult = DidResolutionResult\n\nexport type DidRequest<T extends DidInterface> = {\n  messageType: T;\n  messageParams: DidMessageParams[T];\n}\n\nexport type DidResolveParams = {\n  didUri: string;\n  options?: DidResolutionOptions;\n}\n\nexport type DidResponse<T extends DidInterface> = ResponseStatus & {\n  result?: DidMessageResult[T];\n};\n\nexport interface DidCreateParams<\n  TKeyManager = AgentKeyManager,\n  TMethod extends keyof DidMethodCreateOptions<TKeyManager> = keyof DidMethodCreateOptions<TKeyManager>\n> {\n  method: TMethod;\n  options?: DidMethodCreateOptions<TKeyManager>[TMethod];\n  store?: boolean;\n  tenant?: string;\n}\n\nexport interface DidMethodCreateOptions<TKeyManager> {\n  dht: DidDhtCreateOptions<TKeyManager>;\n  jwk: DidJwkCreateOptions<TKeyManager>;\n}\n\nexport interface DidApiParams {\n  didMethods: DidMethodApi[];\n\n  agent?: Web5PlatformAgent;\n\n  /**\n   * An optional `DidResolverCache` instance used for caching resolved DID documents.\n   *\n   * Providing a cache implementation can significantly enhance resolution performance by avoiding\n   * redundant resolutions for previously resolved DIDs. If omitted, the default is an instance of `AgentDidResolverCache`.\n   *\n   * `AgentDidResolverCache` keeps a stale copy of the Agent's managed Identity DIDs and only refreshes upon a successful resolution.\n   * This allows for quick and offline access to the internal DIDs used by the agent.\n   */\n  resolverCache?: DidResolverCache;\n\n  store?: AgentDataStore<PortableDid>;\n}\n\nexport function isDidRequest<T extends DidInterface>(\n  didRequest: DidRequest<DidInterface>, messageType: T\n): didRequest is DidRequest<T> {\n  return didRequest.messageType === messageType;\n}\n\n/**\n * This API is used to manage and interact with DIDs within the Web5 Agent framework.\n *\n * If a DWN Data Store is used, the DID information is stored under DID's own tenant by default.\n * If a tenant property is passed, that tenant will be used to store the DID information.\n */\nexport class AgentDidApi<TKeyManager extends AgentKeyManager = AgentKeyManager> extends UniversalResolver {\n  /**\n   * Holds the instance of a `Web5PlatformAgent` that represents the current execution context for\n   * the `AgentDidApi`. This agent is used to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize operations within the broader Web5\n   * Agent framework.\n   */\n  private _agent?: Web5PlatformAgent;\n\n  private _didMethods: Map<string, DidMethodApi> = new Map();\n\n  private _store: AgentDataStore<PortableDid>;\n\n  constructor({ agent, didMethods, resolverCache, store }: DidApiParams) {\n    if (!didMethods) {\n      throw new TypeError(`AgentDidApi: Required parameter missing: 'didMethods'`);\n    }\n\n    // Initialize the DID resolver with the given DID methods and resolver cache, or use a default\n    // AgentDidResolverCache if none is provided.\n    super({\n      didResolvers : didMethods,\n      cache        : resolverCache ?? new AgentDidResolverCache({ agent, location: 'DATA/AGENT/DID_CACHE' })\n    });\n\n    this._agent = agent;\n\n    // If `store` is not given, use an in-memory store by default.\n    this._store = store ?? new InMemoryDidStore();\n\n    for (const didMethod of didMethods) {\n      this._didMethods.set(didMethod.methodName, didMethod);\n    }\n  }\n\n  /**\n   * Retrieves the `Web5PlatformAgent` execution context.\n   *\n   * @returns The `Web5PlatformAgent` instance that represents the current execution context.\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5PlatformAgent {\n    if (this._agent === undefined) {\n      throw new Error('AgentDidApi: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5PlatformAgent) {\n    this._agent = agent;\n\n    // AgentDidResolverCache should set the agent if it is the type of cache being used\n    if ('agent' in this.cache) {\n      this.cache.agent = agent;\n    }\n  }\n\n  public async create({\n    method, tenant, options, store\n  }: DidCreateParams<TKeyManager>): Promise<BearerDid> {\n    // Get the DID method implementation, which also verifies the method is supported.\n    const didMethod = this.getMethod(method);\n\n    // Create the DID and store the generated keys in the Agent's key manager.\n    const bearerDid = await didMethod.create({ keyManager: this.agent.keyManager, options });\n\n    // pre-populate the resolution cache with the document and metadata\n    await this.cache.set(bearerDid.uri, { didDocument: bearerDid.document, didResolutionMetadata: { }, didDocumentMetadata: bearerDid.metadata });\n\n    // Persist the DID to the store, by default, unless the `store` option is set to false.\n    if (store ?? true) {\n      // Data stored in the Agent's DID store must be in PortableDid format.\n      const { uri, document, metadata } = bearerDid;\n      const portableDid: PortableDid = { uri, document, metadata };\n\n      // Unless an existing `tenant` is specified, a record that includes the DID's URI, document,\n      // and metadata will be stored under a new tenant controlled by the newly created DID.\n      await this._store.set({\n        id                : portableDid.uri,\n        data              : portableDid,\n        agent             : this.agent,\n        tenant            : tenant ?? portableDid.uri,\n        preventDuplicates : false,\n        useCache          : true\n      });\n    }\n\n    return bearerDid;\n  }\n\n  public async export({ didUri, tenant }: {\n    didUri: string;\n    tenant?: string;\n  }): Promise<PortableDid> {\n    // Attempt to retrieve the DID from the agent's DID store.\n    const bearerDid = await this.get({ didUri, tenant });\n\n    if (!bearerDid) {\n      throw new Error(`AgentDidApi: Failed to export due to DID not found: ${didUri}`);\n    }\n\n    // If the DID was found, return the DID in a portable format, and if supported by the Agent's\n    // key manager, the private key material.\n    const portableDid = await bearerDid.export();\n\n    return portableDid;\n  }\n\n  public async get({ didUri, tenant }: {\n    didUri: string,\n    tenant?: string\n  }): Promise<BearerDid | undefined> {\n    const portableDid = await this._store.get({ id: didUri, agent: this.agent, tenant, useCache: true });\n\n    if (!portableDid) return undefined;\n\n    const bearerDid = await BearerDid.import({ portableDid, keyManager: this.agent.keyManager });\n\n    return bearerDid;\n  }\n\n  public async getSigningMethod({ didUri, methodId }: {\n    didUri: string;\n    methodId?: string;\n  }): Promise<DidVerificationMethod> {\n    // Verify the DID method is supported.\n    const parsedDid = Did.parse(didUri);\n    if (!parsedDid) {\n      throw new Error(`Invalid DID URI: ${didUri}`);\n    }\n\n    // Get the DID method implementation, which also verifies the method is supported.\n    const didMethod = this.getMethod(parsedDid.method);\n\n    // Resolve the DID document.\n    const { didDocument, didResolutionMetadata } = await this.resolve(didUri);\n    if (!didDocument) {\n      throw new Error(`DID resolution failed for '${didUri}': ${JSON.stringify(didResolutionMetadata)}`);\n    }\n\n    // Retrieve the method-specific verification method to be used for signing operations.\n    const verificationMethod = await didMethod.getSigningMethod({ didDocument, methodId });\n\n    return verificationMethod;\n  }\n\n  public async update({ tenant, portableDid, publish = true }: {\n    tenant?: string;\n    portableDid: PortableDid;\n    publish?: boolean;\n  }): Promise<BearerDid> {\n\n    // Check if the DID exists in the store.\n    const existingDid = await this.get({ didUri: portableDid.uri, tenant: tenant ?? portableDid.uri });\n    if (!existingDid) {\n      throw new Error(`AgentDidApi: Could not update, DID not found: ${portableDid.uri}`);\n    }\n\n    // If the document has not changed, abort the update.\n    if (canonicalize(portableDid.document) === canonicalize(existingDid.document)) {\n      throw new Error('AgentDidApi: No changes detected, update aborted');\n    }\n\n    // If private keys are present in the PortableDid, import the key material into the Agent's key\n    // manager. Validate that the key material for every verification method in the DID document is\n    // present in the key manager. If no keys are present, this will fail.\n    // NOTE: We currently do not delete the previous keys from the document.\n    // TODO: Add support for deleting the keys no longer present in the document.\n    const bearerDid = await BearerDid.import({ keyManager: this.agent.keyManager, portableDid });\n\n    // Only the DID URI, document, and metadata are stored in the Agent's DID store.\n    const { uri, document, metadata } = bearerDid;\n    const portableDidWithoutKeys: PortableDid = { uri, document, metadata };\n\n    // pre-populate the resolution cache with the document and metadata\n    await this.cache.set(uri, { didDocument: document, didResolutionMetadata: { }, didDocumentMetadata: metadata });\n\n    await this._store.set({\n      id             : uri,\n      data           : portableDidWithoutKeys,\n      agent          : this.agent,\n      tenant         : tenant ?? uri,\n      updateExisting : true,\n      useCache       : true\n    });\n\n    if (publish) {\n      const parsedDid = Did.parse(uri);\n      // currently only supporting DHT as a publishable method.\n      // TODO: abstract this into the didMethod class so that other publishable methods can be supported.\n      if (parsedDid && parsedDid.method === 'dht') {\n        await DidDht.publish({ did: bearerDid });\n      }\n    }\n\n    return bearerDid;\n  }\n\n  public async import({ portableDid, tenant }: {\n    portableDid: PortableDid;\n    tenant?: string;\n  }): Promise<BearerDid> {\n    // If private keys are present in the PortableDid, import the key material into the Agent's key\n    // manager. Validate that the key material for every verification method in the DID document is\n    // present in the key manager.\n    const bearerDid = await BearerDid.import({ keyManager: this.agent.keyManager, portableDid });\n\n    // Only the DID URI, document, and metadata are stored in the Agent's DID store.\n    const { uri, document, metadata } = bearerDid;\n    const portableDidWithoutKeys: PortableDid = { uri, document, metadata };\n\n    // pre-populate the resolution cache with the document and metadata\n    await this.cache.set(uri, { didDocument: document, didResolutionMetadata: { }, didDocumentMetadata: metadata });\n\n    // Store the DID in the agent's DID store.\n    // Unless an existing `tenant` is specified, a record that includes the DID's URI, document,\n    // and metadata will be stored under a new tenant controlled by the imported DID.\n    await this._store.set({\n      id                : portableDidWithoutKeys.uri,\n      data              : portableDidWithoutKeys,\n      agent             : this.agent,\n      tenant            : tenant ?? portableDidWithoutKeys.uri,\n      preventDuplicates : true,\n      useCache          : true\n    });\n\n    return bearerDid;\n  }\n\n  public async delete({ didUri, tenant, deleteKey = true }: {\n    didUri: string;\n    tenant?: string;\n    deleteKey?: boolean;\n  }): Promise<void> {\n    const portableDid = await this._store.get({ id: didUri, agent: this.agent, tenant, useCache: false });\n    if(!portableDid) {\n      throw new Error('AgentDidApi: Could not delete, DID not found');\n    }\n\n    // delete from the cache\n    await this.cache.delete(didUri);\n\n    // Delete the data before deleting the associated keys.\n    await this._store.delete({ id: didUri, agent: this.agent, tenant });\n\n    if (deleteKey) {\n      // Delete the keys associated with the DID\n      // TODO: this could be made a static method on `BearerDid` class\n      await this.deleteKeys({ portableDid });\n    }\n  }\n\n  public async deleteKeys({ portableDid }: {\n    portableDid: PortableDid;\n  }): Promise<void> {\n    for (const verificationMethod of portableDid.document.verificationMethod || []) {\n      if (!verificationMethod.publicKeyJwk) {\n        continue;\n      }\n      // Compute the key URI of the verification method's public key.\n      const keyUri = await this.agent.keyManager.getKeyUri({ key: verificationMethod.publicKeyJwk });\n      await this.agent.keyManager.deleteKey({ keyUri });\n    }\n  }\n\n  public async processRequest<T extends DidInterface>(\n    request: DidRequest<T>\n  ): Promise<DidResponse<T>> {\n    // Process Create DID request.\n    if (isDidRequest(request, DidInterface.Create)) {\n      try {\n        const bearerDid = await this.create({ ...request.messageParams });\n        const response: DidResponse<typeof request.messageType> = {\n          result: {\n            uri      : bearerDid.uri,\n            document : bearerDid.document,\n            metadata : bearerDid.metadata,\n          },\n          ok     : true,\n          status : { code: 201, message: 'Created' }\n        };\n        return response;\n\n      } catch (error: any) {\n        return {\n          ok     : false,\n          status : { code: 500, message: error.message ?? 'Unknown error occurred' }\n        };\n      }\n    }\n\n    // Process Resolve DID request.\n    if (isDidRequest(request, DidInterface.Resolve)) {\n      const { didUri, options } = request.messageParams;\n      const resolutionResult = await this.resolve(didUri, options);\n      const response: DidResponse<typeof request.messageType> = {\n        result : resolutionResult,\n        ok     : true,\n        status : { code: 200, message: 'OK' }\n      };\n      return response;\n    }\n\n    throw new Error(`AgentDidApi: Unsupported request type: ${request.messageType}`);\n  }\n\n  private getMethod(methodName: string): DidMethodApi {\n    const didMethodApi = this._didMethods.get(methodName);\n\n    if (didMethodApi === undefined) {\n      throw new Error(`DID Method not supported: ${methodName}`);\n    }\n\n    return didMethodApi;\n  }\n}", "import type { DidUrlDereferencer } from '@web5/dids';\nimport { Jws, PaginationCursor, RecordsDeleteMessage, RecordsWriteMessage } from '@tbd54566975/dwn-sdk-js';\n\nimport { Readable } from '@web5/common';\nimport { utils as didUtils } from '@web5/dids';\nimport { ReadableWebToNodeStream } from 'readable-web-to-node-stream';\nimport { DateSort, DwnInterfaceName, DwnMethodName, Message, RecordsWrite } from '@tbd54566975/dwn-sdk-js';\n\nexport function blobToIsomorphicNodeReadable(blob: Blob): Readable {\n  return webReadableToIsomorphicNodeReadable(blob.stream() as ReadableStream<any>);\n}\n\nexport async function getDwnServiceEndpointUrls(didUri: string, dereferencer: DidUrlDereferencer): Promise<string[]> {\n  // Attempt to dereference the DID service with ID fragment #dwn.\n  const dereferencingResult = await dereferencer.dereference(`${didUri}#dwn`);\n\n  if (dereferencingResult.dereferencingMetadata.error) {\n    throw new Error(`Failed to dereference '${didUri}#dwn': ${dereferencingResult.dereferencingMetadata.error}`);\n  }\n\n  if (didUtils.isDwnDidService(dereferencingResult.contentStream)) {\n    const { serviceEndpoint } = dereferencingResult.contentStream;\n    const serviceEndpointUrls = typeof serviceEndpoint === 'string'\n    // If the service endpoint is a string, format it as a single-element array.\n      ? [serviceEndpoint]\n      : Array.isArray(serviceEndpoint) && serviceEndpoint.every(endpoint => typeof endpoint === 'string')\n      // If the service endpoint is an array of strings, use it as is.\n        ? serviceEndpoint as string[]\n        // If the service endpoint is neither a string nor an array of strings, return an empty array.\n        : [];\n\n    if (serviceEndpointUrls.length > 0) {\n      return serviceEndpointUrls;\n    }\n  }\n\n  // If the DID service with ID fragment #dwn was not found or is not valid, return an empty array.\n  return [];\n}\n\nexport function getRecordAuthor(record: RecordsWriteMessage | RecordsDeleteMessage): string | undefined {\n  return Message.getAuthor(record);\n}\n\n/**\n * Get the `protocolRole` string from the signature payload of the given RecordsWriteMessage or RecordsDeleteMessage.\n */\nexport function getRecordProtocolRole(message: RecordsWriteMessage | RecordsDeleteMessage): string | undefined {\n  const signaturePayload = Jws.decodePlainObjectPayload(message.authorization.signature);\n  return signaturePayload?.protocolRole;\n}\n\nexport function isRecordsWrite(obj: unknown): obj is RecordsWrite {\n  // Validate that the given value is an object.\n  if (!obj || typeof obj !== 'object' || obj === null) return false;\n\n  // Validate that the object has the necessary properties of RecordsWrite.\n  return (\n    'message' in obj && typeof obj.message === 'object' && obj.message !== null &&\n    'descriptor' in obj.message && typeof obj.message.descriptor === 'object' && obj.message.descriptor !== null &&\n    'interface' in obj.message.descriptor && obj.message.descriptor.interface === DwnInterfaceName.Records &&\n    'method' in obj.message.descriptor && obj.message.descriptor.method === DwnMethodName.Write\n  );\n}\n\n/**\n * Get the CID of the given RecordsWriteMessage.\n */\nexport function getRecordMessageCid(message: RecordsWriteMessage): Promise<string> {\n  return Message.getCid(message);\n}\n\n/**\n *  Get the pagination cursor for the given RecordsWriteMessage and DateSort.\n *\n * @param message The RecordsWriteMessage for which to get the pagination cursor.\n * @param dateSort The date sort that will be used in the query or subscription to which the cursor will be applied.\n */\nexport async function getPaginationCursor(message: RecordsWriteMessage, dateSort: DateSort): Promise<PaginationCursor> {\n  const value = dateSort === DateSort.CreatedAscending || dateSort === DateSort.CreatedDescending ?\n    message.descriptor.dateCreated : message.descriptor.datePublished;\n\n  if (value === undefined) {\n    throw new Error('The dateCreated or datePublished property is missing from the record descriptor.');\n  }\n\n  return {\n    messageCid: await getRecordMessageCid(message),\n    value\n  };\n}\n\nexport function webReadableToIsomorphicNodeReadable(webReadable: ReadableStream<any>) {\n  return new ReadableWebToNodeStream(webReadable);\n}\n\n/**\n * Polling function with interval, TTL accepting a custom fetch function\n * @template T - the return you expect from the fetcher\n * @param fetchFunction an http fetch function\n * @param [interval=3000] how frequently to poll\n * @param [ttl=300_000] how long until polling stops\n * @returns T - the result of fetch\n */\nexport function pollWithTtl(\n  fetchFunction: () => Promise<Response>,\n  interval = 3000,\n  ttl = 300_000,\n  abortSignal?: AbortSignal\n): Promise<Response | null> {\n  const endTime = Date.now() + ttl;\n  let timeoutId: NodeJS.Timeout | null = null;\n  let isPolling = true;\n  return new Promise((resolve, reject) => {\n    if (abortSignal) {\n      abortSignal.addEventListener('abort', () => {\n        isPolling = false;\n        if (timeoutId !== null) {\n          clearTimeout(timeoutId);\n        }\n        console.log('Polling aborted by user');\n        resolve(null);\n      });\n    }\n\n    async function poll() {\n      if (!isPolling) return;\n\n      const remainingTime = endTime - Date.now();\n\n      if (remainingTime <= 0) {\n        isPolling = false;\n        console.log('Polling stopped: TTL reached');\n        resolve(null);\n        return;\n      }\n\n      console.log(`Polling... (Remaining time: ${Math.ceil(remainingTime / 1000)}s)`);\n\n      try {\n        const response = await fetchFunction();\n\n        if (response.ok) {\n          isPolling = false;\n\n          if (timeoutId !== null) {\n            clearTimeout(timeoutId);\n          }\n\n          console.log('Polling stopped: Success condition met');\n          resolve(response);\n          return;\n        }\n      } catch (error) {\n        console.error('Error fetching data:', error);\n        reject(error);\n      }\n\n      if (isPolling) {\n        timeoutId = setTimeout(poll, interval);\n      }\n    }\n\n    poll();\n  });\n}\n\n/** Concatenates a base URL and a path ensuring that there is exactly one slash between them */\nexport function concatenateUrl(baseUrl: string, path: string): string {\n  // Remove trailing slash from baseUrl if it exists\n  if (baseUrl.endsWith('/')) {\n    baseUrl = baseUrl.slice(0, -1);\n  }\n\n  // Remove leading slash from path if it exists\n  if (path.startsWith('/')) {\n    path = path.slice(1);\n  }\n\n  return `${baseUrl}/${path}`;\n}", "import type { Readable } from '@web5/common';\n\nimport {\n  Cid,\n  DataStoreLevel,\n  Dwn,\n  DwnConfig,\n  DwnInterfaceName,\n  DwnMethodName,\n  EventEmitterStream,\n  EventLogLevel,\n  GenericMessage,\n  Message,\n  MessageStoreLevel,\n  ResumableTaskStoreLevel\n} from '@tbd54566975/dwn-sdk-js';\n\nimport { NodeStream } from '@web5/common';\nimport { CryptoUtils } from '@web5/crypto';\nimport { DidDht, DidJwk, DidResolverCacheLevel, UniversalResolver } from '@web5/dids';\n\nimport type { Web5PlatformAgent } from './types/agent.js';\nimport type {\n  DwnMessage,\n  DwnMessageInstance,\n  DwnMessageParams,\n  DwnMessageReply,\n  DwnMessagesPermissionScope,\n  DwnMessageWithData,\n  DwnPermissionScope,\n  DwnRecordsInterfaces,\n  DwnRecordsPermissionScope,\n  DwnResponse,\n  DwnSigner,\n  MessageHandler,\n  ProcessDwnRequest,\n  SendDwnRequest\n} from './types/dwn.js';\n\nimport { DwnInterface, dwnMessageConstructors } from './types/dwn.js';\nimport { blobToIsomorphicNodeReadable, getDwnServiceEndpointUrls, isRecordsWrite, webReadableToIsomorphicNodeReadable } from './utils.js';\n\nexport type DwnMessageWithBlob<T extends DwnInterface> = {\n  message: DwnMessage[T];\n  data?: Blob;\n}\n\nexport type DwnApiParams = {\n  agent?: Web5PlatformAgent;\n  dwn: Dwn;\n}\n\nexport interface DwnApiCreateDwnParams extends Partial<DwnConfig> {\n  dataPath?: string;\n}\n\nexport function isDwnRequest<T extends DwnInterface>(\n  dwnRequest: ProcessDwnRequest<DwnInterface>, messageType: T\n): dwnRequest is ProcessDwnRequest<T> {\n  return dwnRequest.messageType === messageType;\n}\n\nexport function isDwnMessage<T extends DwnInterface>(\n  messageType: T, message: GenericMessage\n): message is DwnMessage[T] {\n  const incomingMessageInterfaceName = message.descriptor.interface + message.descriptor.method;\n  return incomingMessageInterfaceName === messageType;\n}\n\nexport function isRecordsType(messageType: DwnInterface): messageType is DwnRecordsInterfaces {\n  return messageType === DwnInterface.RecordsDelete ||\n    messageType === DwnInterface.RecordsQuery ||\n    messageType === DwnInterface.RecordsRead ||\n    messageType === DwnInterface.RecordsSubscribe ||\n    messageType === DwnInterface.RecordsWrite;\n}\n\nexport function isRecordPermissionScope(scope: DwnPermissionScope): scope is DwnRecordsPermissionScope {\n  return scope.interface === DwnInterfaceName.Records;\n}\n\nexport function isMessagesPermissionScope(scope: DwnPermissionScope): scope is DwnMessagesPermissionScope {\n  return scope.interface === DwnInterfaceName.Messages;\n}\n\nexport class AgentDwnApi {\n  /**\n   * Holds the instance of a `Web5PlatformAgent` that represents the current execution context for\n   * the `AgentDwnApi`. This agent is used to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize operations within the broader Web5\n   * Agent framework.\n   */\n  private _agent?: Web5PlatformAgent;\n\n  /**\n   * The DWN instance to use for this API.\n   */\n  private _dwn: Dwn;\n\n  constructor({ agent, dwn }: DwnApiParams) {\n    // If an agent is provided, set it as the execution context for this API.\n    this._agent = agent;\n\n    // Set the DWN instance for this API.\n    this._dwn = dwn;\n  }\n\n  /**\n   * Retrieves the `Web5PlatformAgent` execution context.\n   *\n   * @returns The `Web5PlatformAgent` instance that represents the current execution context.\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5PlatformAgent {\n    if (this._agent === undefined) {\n      throw new Error('AgentDwnApi: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5PlatformAgent) {\n    this._agent = agent;\n  }\n\n  /**\n   * Public getter for the DWN instance used by this API.\n   *\n   * Notes:\n   * - This getter is public to allow advanced developers to access the DWN instance directly.\n   *   However, it is recommended to use the `processRequest` method to interact with the DWN\n   *   instance to ensure that the DWN message is constructed correctly.\n   * - The getter is named `node` to avoid confusion with the `dwn` property of the\n   *   `Web5PlatformAgent`. In other words, so that a developer can call `agent.dwn.node` to access\n   *   the DWN instance and not `agent.dwn.dwn`.\n   */\n  get node(): Dwn {\n    return this._dwn;\n  }\n\n  public static async createDwn({\n    dataPath, dataStore, didResolver, eventLog, eventStream, messageStore, tenantGate, resumableTaskStore\n  }: DwnApiCreateDwnParams): Promise<Dwn> {\n    dataStore ??= new DataStoreLevel({ blockstoreLocation: `${dataPath}/DWN_DATASTORE` });\n\n    didResolver ??= new UniversalResolver({\n      didResolvers : [DidDht, DidJwk],\n      cache        : new DidResolverCacheLevel({ location: `${dataPath}/DID_RESOLVERCACHE` }),\n    });\n\n    eventLog ??= new EventLogLevel({ location: `${dataPath}/DWN_EVENTLOG` });\n\n    messageStore ??= new MessageStoreLevel(({\n      blockstoreLocation : `${dataPath}/DWN_MESSAGESTORE`,\n      indexLocation      : `${dataPath}/DWN_MESSAGEINDEX`\n    }));\n\n    resumableTaskStore ??= new ResumableTaskStoreLevel({ location: `${dataPath}/DWN_RESUMABLETASKSTORE` });\n\n    eventStream ??= new EventEmitterStream();\n\n    return await Dwn.create({ dataStore, didResolver, eventLog, eventStream, messageStore, tenantGate, resumableTaskStore });\n  }\n\n  public async processRequest<T extends DwnInterface>(\n    request: ProcessDwnRequest<T>\n  ): Promise<DwnResponse<T>> {\n    // Constructs a DWN message. and if there is a data payload, transforms the data to a Node\n    // Readable stream.\n    const { message, dataStream } = await this.constructDwnMessage({ request });\n\n    // Extracts the optional subscription handler from the request to pass into `processMessage.\n    const { subscriptionHandler } = request;\n\n    // Conditionally processes the message with the DWN instance:\n    // - If `store` is not explicitly set to false, it sends the message to the DWN node for\n    //   processing, passing along the target DID, the message, and any associated data stream.\n    // - If `store` is set to false, it immediately returns a simulated 'accepted' status without\n    //   storing the message/data in the DWN node.\n    const reply: DwnMessageReply[T] = (request.store !== false)\n      ? await this._dwn.processMessage(request.target, message, { dataStream, subscriptionHandler })\n      : { status: { code: 202, detail: 'Accepted' } };\n\n    // Returns an object containing the reply from processing the message, the original message,\n    // and the content identifier (CID) of the message.\n    return {\n      reply,\n      message,\n      messageCid: await Message.getCid(message),\n    };\n  }\n\n  public async sendRequest<T extends DwnInterface>(\n    request: SendDwnRequest<T>\n  ): Promise<DwnResponse<T>> {\n    // First, confirm the target DID can be dereferenced and extract the DWN service endpoint URLs.\n    const dwnEndpointUrls = await getDwnServiceEndpointUrls(request.target, this.agent.did);\n    if (dwnEndpointUrls.length === 0) {\n      throw new Error(`AgentDwnApi: DID Service is missing or malformed: ${request.target}#dwn`);\n    }\n\n    let messageCid: string | undefined;\n    let message: DwnMessage[T];\n    let data: Blob | undefined;\n    let subscriptionHandler: MessageHandler[T] | undefined;\n\n    // If `messageCid` is given, retrieve message and data, if any.\n    if ('messageCid' in request) {\n      ({ message, data } = await this.getDwnMessage({\n        author      : request.author,\n        messageCid  : request.messageCid,\n        messageType : request.messageType\n      }));\n      messageCid = request.messageCid;\n\n    } else {\n      // Otherwise, construct a new message.\n      ({ message } = await this.constructDwnMessage({ request }));\n      if (request.dataStream && !(request.dataStream instanceof Blob)) {\n        throw new Error('AgentDwnApi: DataStream must be provided as a Blob');\n      }\n      data = request.dataStream;\n      subscriptionHandler = request.subscriptionHandler;\n    }\n\n    // Send the RPC request to the target DID's DWN service endpoint using the Agent's RPC client.\n    const reply = await this.sendDwnRpcRequest({\n      targetDid: request.target,\n      dwnEndpointUrls,\n      message,\n      data,\n      subscriptionHandler\n    });\n\n    // If the message CID was not given in the `request`, compute it.\n    messageCid ??= await Message.getCid(message);\n\n    // Returns an object containing the reply from processing the message, the original message,\n    // and the content identifier (CID) of the message.\n    return { reply, message, messageCid };\n  }\n\n  private async sendDwnRpcRequest<T extends DwnInterface>({\n    targetDid, dwnEndpointUrls, message, data, subscriptionHandler\n  }: {\n      targetDid: string;\n      dwnEndpointUrls: string[];\n      message: DwnMessage[T];\n      data?: Blob;\n      subscriptionHandler?: MessageHandler[T];\n    }\n  ): Promise<DwnMessageReply[T]> {\n    const errorMessages: { url: string, message: string }[] = [];\n\n    if (message.descriptor.method === DwnMethodName.Subscribe && subscriptionHandler === undefined) {\n      throw new Error('AgentDwnApi: Subscription handler is required for subscription requests.');\n    }\n\n    // Try sending to author's publicly addressable DWNs until the first request succeeds.\n    for (let dwnUrl of dwnEndpointUrls) {\n      try {\n        if (subscriptionHandler !== undefined) {\n          // we get the server info to check if the server supports WebSocket for subscription requests\n          const serverInfo = await this.agent.rpc.getServerInfo(dwnUrl);\n          if (!serverInfo.webSocketSupport) {\n            // If the server does not support WebSocket, add an error message and continue to the next URL.\n            errorMessages.push({\n              url     : dwnUrl,\n              message : 'WebSocket support is not enabled on the server.'\n            });\n            continue;\n          }\n\n          // If the server supports WebSocket, replace the subscription URL with a socket transport.\n          // For `http` we use the unsecured `ws` protocol, and for `https` we use the secured `wss` protocol.\n          const parsedUrl = new URL(dwnUrl);\n          parsedUrl.protocol = parsedUrl.protocol === 'http:' ? 'ws:' : 'wss:';\n          dwnUrl = parsedUrl.toString();\n        }\n\n        const dwnReply = await this.agent.rpc.sendDwnRequest({\n          dwnUrl,\n          targetDid,\n          message,\n          data,\n          subscriptionHandler\n        });\n\n        return dwnReply;\n      } catch(error: any) {\n        errorMessages.push({\n          url     : dwnUrl,\n          message : (error instanceof Error) ? error.message : 'Unknown error',\n        });\n      }\n    }\n\n    throw new Error(`Failed to send DWN RPC request: ${JSON.stringify(errorMessages)}`);\n  }\n\n  private async constructDwnMessage<T extends DwnInterface>({ request }: {\n    request: ProcessDwnRequest<T>\n  }): Promise<DwnMessageWithData<T>> {\n    // if the request has a granteeDid, ensure the messageParams include the proper grant parameters\n    if (request.granteeDid && !this.hasGrantParams(request.messageParams)) {\n      throw new Error('AgentDwnApi: Requested to sign with a permission but no grant messageParams were provided in the request');\n    }\n\n    const rawMessage = request.rawMessage;\n    let readableStream: Readable | undefined;\n    // TODO: Consider refactoring to move data transformations imposed by fetch() limitations to the HTTP transport-related methods.\n    // if the request is a RecordsWrite message, we need to handle the data stream and update the messageParams accordingly\n    if (isDwnRequest(request, DwnInterface.RecordsWrite)) {\n      const messageParams = request.messageParams;\n\n      if (request.dataStream && !messageParams?.data) {\n        const { dataStream } = request;\n        let isomorphicNodeReadable: Readable;\n\n        if (dataStream instanceof Blob) {\n          isomorphicNodeReadable = blobToIsomorphicNodeReadable(dataStream);\n          readableStream = blobToIsomorphicNodeReadable(dataStream);\n\n        } else if (dataStream instanceof ReadableStream) {\n          const [ forCid, forProcessMessage ] = dataStream.tee();\n          isomorphicNodeReadable = webReadableToIsomorphicNodeReadable(forCid);\n          readableStream = webReadableToIsomorphicNodeReadable(forProcessMessage);\n        }\n\n        if (!rawMessage) {\n          // @ts-ignore\n          messageParams.dataCid = await Cid.computeDagPbCidFromStream(isomorphicNodeReadable);\n          // @ts-ignore\n          messageParams.dataSize ??= isomorphicNodeReadable['bytesRead'];\n        }\n      }\n    }\n\n    let dwnMessage: DwnMessageInstance[T];\n    const dwnMessageConstructor = dwnMessageConstructors[request.messageType];\n\n    // if there is no raw message provided, we need to create the dwn message\n    if (!rawMessage) {\n\n      // If we need to sign as an author delegate or with permissions we need to get the grantee's signer\n      // The messageParams should include either a permissionGrantId, or a delegatedGrant message\n      const signer = request.granteeDid ?\n        await this.getSigner(request.granteeDid) :\n        await this.getSigner(request.author);\n\n      dwnMessage = await dwnMessageConstructor.create({\n        // TODO: Implement alternative to type assertion.\n        ...request.messageParams!,\n        signer\n      });\n\n    } else {\n      dwnMessage = await dwnMessageConstructor.parse(rawMessage);\n      if (isRecordsWrite(dwnMessage) && request.signAsOwner) {\n        // if we are signing as owner, we use the author's signer\n        const signer = await this.getSigner(request.author);\n        await dwnMessage.signAsOwner(signer);\n      } else if (request.granteeDid && isRecordsWrite(dwnMessage) && request.signAsOwnerDelegate) {\n        // if we are signing as owner delegate, we use the grantee's signer and the provided delegated grant\n        const signer = await this.getSigner(request.granteeDid);\n\n        //if we have reached here, the presence of the grant params has already been checked\n        const messageParams = request.messageParams as DwnMessageParams[DwnInterface.RecordsWrite];\n        await dwnMessage.signAsOwnerDelegate(signer, messageParams.delegatedGrant!);\n      }\n    }\n\n    return { message: dwnMessage.message as DwnMessage[T], dataStream: readableStream };\n  }\n\n  private hasGrantParams<T extends DwnInterface>(params?: DwnMessageParams[T]): boolean {\n    return params !== undefined &&\n      (('permissionGrantId' in params && params.permissionGrantId !== undefined) ||\n      ('delegatedGrant' in params && params.delegatedGrant !== undefined));\n  }\n\n  private async getSigner(author: string): Promise<DwnSigner> {\n    // If the author is the Agent's DID, use the Agent's signer.\n    if (author === this.agent.agentDid.uri) {\n      const signer = await this.agent.agentDid.getSigner();\n\n      return {\n        algorithm : signer.algorithm,\n        keyId     : signer.keyId,\n        sign      : async (data: Uint8Array) => {\n          return await signer.sign({ data });\n        }\n      };\n\n    } else {\n      // Otherwise, use the author's DID to determine the signing method.\n      try {\n        const signingMethod = await this.agent.did.getSigningMethod({ didUri: author });\n\n        if (!signingMethod.publicKeyJwk) {\n          throw new Error(`Verification method '${signingMethod.id}' does not contain a public key in JWK format`);\n        }\n\n        // Compute the key URI of the verification method's public key.\n        const keyUri = await this.agent.keyManager.getKeyUri({ key: signingMethod.publicKeyJwk });\n\n        // Verify that the key is present in the key manager. If not, an error is thrown.\n        const publicKey = await this.agent.keyManager.getPublicKey({ keyUri });\n\n        // Bind the Agent's Key Manager to the signer.\n        const keyManager = this.agent.keyManager;\n\n        return {\n          algorithm : CryptoUtils.getJoseSignatureAlgorithmFromPublicKey(publicKey),\n          keyId     : signingMethod.id,\n          sign      : async (data: Uint8Array) => {\n            return await keyManager.sign({ data, keyUri: keyUri! });\n          }\n        };\n      } catch (error: any) {\n        throw new Error(`AgentDwnApi: Unable to get signer for author '${author}': ${error.message}`);\n      }\n    }\n  }\n\n  /**\n   * FURTHER REFACTORING NEEDED BELOW THIS LINE\n   */\n\n  private async getDwnMessage<T extends DwnInterface>({ author, messageCid }: {\n    author: string;\n    messageType: T;\n    messageCid: string;\n  }): Promise<DwnMessageWithBlob<T>> {\n    const signer = await this.getSigner(author);\n\n    // Construct a MessagesRead message to fetch the message.\n    const messagesRead = await dwnMessageConstructors[DwnInterface.MessagesRead].create({\n      messageCid: messageCid,\n      signer\n    });\n\n    const result = await this._dwn.processMessage(author, messagesRead.message);\n\n    if (result.status.code !== 200) {\n      throw new Error(`AgentDwnApi: Failed to read message, response status: ${result.status.code} - ${result.status.detail}`);\n    }\n\n    const messageEntry = result.entry!;\n    const message = messageEntry.message as DwnMessage[T];\n\n    let dwnMessageWithBlob: DwnMessageWithBlob<T> = { message };\n    // If the message is a RecordsWrite, data will be present in the form of a stream\n\n    if (isRecordsWrite(messageEntry) && messageEntry.data) {\n      const dataBytes = await NodeStream.consumeToBytes({ readable: messageEntry.data });\n      dwnMessageWithBlob.data = new Blob([ dataBytes ], { type: messageEntry.message.descriptor.dataFormat });\n    }\n\n    return dwnMessageWithBlob;\n  }\n}", "/*! micro-ed25519-hdkey - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { ed25519 } from '@noble/curves/ed25519';\nimport { hmac } from '@noble/hashes/hmac';\nimport { ripemd160 } from '@noble/hashes/ripemd160';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { sha512 } from '@noble/hashes/sha512';\nimport { concatBytes, createView, hexToBytes, utf8ToBytes, bytesToHex } from '@noble/hashes/utils';\nimport { bytes as assertBytes } from '@noble/hashes/_assert';\nexport const MASTER_SECRET = utf8ToBytes('ed25519 seed');\nexport const HARDENED_OFFSET = 0x80000000;\nconst ZERO = new Uint8Array([0]);\nfunction ensureBytes(b, ...lengths) {\n    if (typeof b === 'string')\n        b = hexToBytes(b);\n    assertBytes(b, ...lengths);\n    return b;\n}\nconst hash160 = (data) => ripemd160(sha256(data));\nconst fromU32 = (data) => createView(data).getUint32(0, false);\nconst toU32 = (n) => {\n    if (!Number.isSafeInteger(n) || n < 0 || n > 2 ** 32 - 1) {\n        throw new Error(`Invalid number=${n}. Should be from 0 to 2 ** 32 - 1`);\n    }\n    const buf = new Uint8Array(4);\n    createView(buf).setUint32(0, n, false);\n    return buf;\n};\nexport class HDKey {\n    get publicKeyRaw() {\n        return ed25519.getPublicKey(this.privateKey);\n    }\n    get publicKey() {\n        return concatBytes(ZERO, this.publicKeyRaw);\n    }\n    get pubHash() {\n        return hash160(this.publicKey);\n    }\n    get fingerprint() {\n        return fromU32(this.pubHash);\n    }\n    get fingerprintHex() {\n        return bytesToHex(toU32(this.fingerprint));\n    }\n    get parentFingerprintHex() {\n        return bytesToHex(toU32(this.parentFingerprint));\n    }\n    static fromMasterSeed(seed) {\n        seed = ensureBytes(seed);\n        if (8 * seed.length < 128 || 8 * seed.length > 512) {\n            throw new Error(`HDKey: wrong seed length=${seed.length}. Should be between 128 and 512 bits; 256 bits is advised)`);\n        }\n        const I = hmac(sha512, MASTER_SECRET, seed);\n        return new HDKey({\n            privateKey: I.slice(0, 32),\n            chainCode: I.slice(32),\n        });\n    }\n    constructor(opt) {\n        this.depth = 0;\n        this.index = 0;\n        this.parentFingerprint = 0;\n        if (!opt || typeof opt !== 'object')\n            throw new Error('HDKey.constructor must not be called directly');\n        assertBytes(opt.privateKey, 32);\n        assertBytes(opt.chainCode, 32);\n        this.depth = opt.depth || 0;\n        this.index = opt.index || 0;\n        this.parentFingerprint = opt.parentFingerprint || 0;\n        if (!this.depth) {\n            if (this.parentFingerprint || this.index)\n                throw new Error('HDKey: zero depth with non-zero index/parent fingerprint');\n        }\n        this.chainCode = opt.chainCode;\n        this.privateKey = opt.privateKey;\n    }\n    derive(path, forceHardened = false) {\n        if (!/^[mM]'?/.test(path))\n            throw new Error('Path must start with \"m\" or \"M\"');\n        if (/^[mM]'?$/.test(path))\n            return this;\n        const parts = path.replace(/^[mM]'?\\//, '').split('/');\n        // tslint:disable-next-line\n        let child = this;\n        for (const c of parts) {\n            const m = /^(\\d+)('?)$/.exec(c);\n            if (!m || m.length !== 3)\n                throw new Error(`Invalid child index: ${c}`);\n            let idx = +m[1];\n            if (!Number.isSafeInteger(idx) || idx >= HARDENED_OFFSET)\n                throw new Error('Invalid index');\n            // hardened key\n            if (forceHardened || m[2] === \"'\")\n                idx += HARDENED_OFFSET;\n            child = child.deriveChild(idx);\n        }\n        return child;\n    }\n    deriveChild(index) {\n        if (index < HARDENED_OFFSET)\n            throw new Error(`Non-hardened child derivation not possible for Ed25519 (index=${index})`);\n        // Hardened child: 0x00 || ser256(kpar) || ser32(index)\n        const data = concatBytes(ZERO, this.privateKey, toU32(index));\n        const I = hmac(sha512, this.chainCode, data);\n        return new HDKey({\n            chainCode: I.slice(32),\n            depth: this.depth + 1,\n            parentFingerprint: this.fingerprint,\n            index,\n            privateKey: I.slice(0, 32),\n        });\n    }\n    sign(message) {\n        return ed25519.sign(message, this.privateKey);\n    }\n    verify(message, signature) {\n        signature = ensureBytes(signature, 64);\n        return ed25519.verify(signature, message, this.publicKeyRaw);\n    }\n}\n", "import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = /* @__PURE__ */ new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = /* @__PURE__ */ Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = /* @__PURE__ */ Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++) for (let j of [idxL, idxR]) j.push(j[i].map((k) => Rho[k]));\n\nconst shifts = /* @__PURE__ */ [\n  [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n  [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n  [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n  [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n  [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = /* @__PURE__ */ new Uint32Array([\n  0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr = /* @__PURE__ */ new Uint32Array([\n  0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word: number, shift: number) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group: number, x: number, y: number, z: number): number {\n  if (group === 0) return x ^ y ^ z;\n  else if (group === 1) return (x & y) | (~x & z);\n  else if (group === 2) return (x | ~y) ^ z;\n  else if (group === 3) return (x & z) | (y & ~z);\n  else return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends SHA2<RIPEMD160> {\n  private h0 = 0x67452301 | 0;\n  private h1 = 0xefcdab89 | 0;\n  private h2 = 0x98badcfe | 0;\n  private h3 = 0x10325476 | 0;\n  private h4 = 0xc3d2e1f0 | 0;\n\n  constructor() {\n    super(64, 20, 8, true);\n  }\n  protected get(): [number, number, number, number, number] {\n    const { h0, h1, h2, h3, h4 } = this;\n    return [h0, h1, h2, h3, h4];\n  }\n  protected set(h0: number, h1: number, h2: number, h3: number, h4: number) {\n    this.h0 = h0 | 0;\n    this.h1 = h1 | 0;\n    this.h2 = h2 | 0;\n    this.h3 = h3 | 0;\n    this.h4 = h4 | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) BUF[i] = view.getUint32(offset, true);\n    // prettier-ignore\n    let al = this.h0 | 0, ar = al,\n        bl = this.h1 | 0, br = bl,\n        cl = this.h2 | 0, cr = cl,\n        dl = this.h3 | 0, dr = dl,\n        el = this.h4 | 0, er = el;\n\n    // Instead of iterating 0 to 80, we split it into 5 groups\n    // And use the groups in constants, functions, etc. Much simpler\n    for (let group = 0; group < 5; group++) {\n      const rGroup = 4 - group;\n      const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n      const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n      const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n      for (let i = 0; i < 16; i++) {\n        const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n        al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n      }\n      // 2 loops are 10% faster\n      for (let i = 0; i < 16; i++) {\n        const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n        ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n      }\n    }\n    // Add the compressed chunk to the current hash value\n    this.set(\n      (this.h1 + cl + dr) | 0,\n      (this.h2 + dl + er) | 0,\n      (this.h3 + el + ar) | 0,\n      (this.h4 + al + br) | 0,\n      (this.h0 + bl + cr) | 0\n    );\n  }\n  protected roundClean() {\n    BUF.fill(0);\n  }\n  destroy() {\n    this.destroyed = true;\n    this.buffer.fill(0);\n    this.set(0, 0, 0, 0, 0);\n  }\n}\n\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = /* @__PURE__ */ wrapConstructor(() => new RIPEMD160());\n", "export const wordlist = `abandon\nability\nable\nabout\nabove\nabsent\nabsorb\nabstract\nabsurd\nabuse\naccess\naccident\naccount\naccuse\nachieve\nacid\nacoustic\nacquire\nacross\nact\naction\nactor\nactress\nactual\nadapt\nadd\naddict\naddress\nadjust\nadmit\nadult\nadvance\nadvice\naerobic\naffair\nafford\nafraid\nagain\nage\nagent\nagree\nahead\naim\nair\nairport\naisle\nalarm\nalbum\nalcohol\nalert\nalien\nall\nalley\nallow\nalmost\nalone\nalpha\nalready\nalso\nalter\nalways\namateur\namazing\namong\namount\namused\nanalyst\nanchor\nancient\nanger\nangle\nangry\nanimal\nankle\nannounce\nannual\nanother\nanswer\nantenna\nantique\nanxiety\nany\napart\napology\nappear\napple\napprove\napril\narch\narctic\narea\narena\nargue\narm\narmed\narmor\narmy\naround\narrange\narrest\narrive\narrow\nart\nartefact\nartist\nartwork\nask\naspect\nassault\nasset\nassist\nassume\nasthma\nathlete\natom\nattack\nattend\nattitude\nattract\nauction\naudit\naugust\naunt\nauthor\nauto\nautumn\naverage\navocado\navoid\nawake\naware\naway\nawesome\nawful\nawkward\naxis\nbaby\nbachelor\nbacon\nbadge\nbag\nbalance\nbalcony\nball\nbamboo\nbanana\nbanner\nbar\nbarely\nbargain\nbarrel\nbase\nbasic\nbasket\nbattle\nbeach\nbean\nbeauty\nbecause\nbecome\nbeef\nbefore\nbegin\nbehave\nbehind\nbelieve\nbelow\nbelt\nbench\nbenefit\nbest\nbetray\nbetter\nbetween\nbeyond\nbicycle\nbid\nbike\nbind\nbiology\nbird\nbirth\nbitter\nblack\nblade\nblame\nblanket\nblast\nbleak\nbless\nblind\nblood\nblossom\nblouse\nblue\nblur\nblush\nboard\nboat\nbody\nboil\nbomb\nbone\nbonus\nbook\nboost\nborder\nboring\nborrow\nboss\nbottom\nbounce\nbox\nboy\nbracket\nbrain\nbrand\nbrass\nbrave\nbread\nbreeze\nbrick\nbridge\nbrief\nbright\nbring\nbrisk\nbroccoli\nbroken\nbronze\nbroom\nbrother\nbrown\nbrush\nbubble\nbuddy\nbudget\nbuffalo\nbuild\nbulb\nbulk\nbullet\nbundle\nbunker\nburden\nburger\nburst\nbus\nbusiness\nbusy\nbutter\nbuyer\nbuzz\ncabbage\ncabin\ncable\ncactus\ncage\ncake\ncall\ncalm\ncamera\ncamp\ncan\ncanal\ncancel\ncandy\ncannon\ncanoe\ncanvas\ncanyon\ncapable\ncapital\ncaptain\ncar\ncarbon\ncard\ncargo\ncarpet\ncarry\ncart\ncase\ncash\ncasino\ncastle\ncasual\ncat\ncatalog\ncatch\ncategory\ncattle\ncaught\ncause\ncaution\ncave\nceiling\ncelery\ncement\ncensus\ncentury\ncereal\ncertain\nchair\nchalk\nchampion\nchange\nchaos\nchapter\ncharge\nchase\nchat\ncheap\ncheck\ncheese\nchef\ncherry\nchest\nchicken\nchief\nchild\nchimney\nchoice\nchoose\nchronic\nchuckle\nchunk\nchurn\ncigar\ncinnamon\ncircle\ncitizen\ncity\ncivil\nclaim\nclap\nclarify\nclaw\nclay\nclean\nclerk\nclever\nclick\nclient\ncliff\nclimb\nclinic\nclip\nclock\nclog\nclose\ncloth\ncloud\nclown\nclub\nclump\ncluster\nclutch\ncoach\ncoast\ncoconut\ncode\ncoffee\ncoil\ncoin\ncollect\ncolor\ncolumn\ncombine\ncome\ncomfort\ncomic\ncommon\ncompany\nconcert\nconduct\nconfirm\ncongress\nconnect\nconsider\ncontrol\nconvince\ncook\ncool\ncopper\ncopy\ncoral\ncore\ncorn\ncorrect\ncost\ncotton\ncouch\ncountry\ncouple\ncourse\ncousin\ncover\ncoyote\ncrack\ncradle\ncraft\ncram\ncrane\ncrash\ncrater\ncrawl\ncrazy\ncream\ncredit\ncreek\ncrew\ncricket\ncrime\ncrisp\ncritic\ncrop\ncross\ncrouch\ncrowd\ncrucial\ncruel\ncruise\ncrumble\ncrunch\ncrush\ncry\ncrystal\ncube\nculture\ncup\ncupboard\ncurious\ncurrent\ncurtain\ncurve\ncushion\ncustom\ncute\ncycle\ndad\ndamage\ndamp\ndance\ndanger\ndaring\ndash\ndaughter\ndawn\nday\ndeal\ndebate\ndebris\ndecade\ndecember\ndecide\ndecline\ndecorate\ndecrease\ndeer\ndefense\ndefine\ndefy\ndegree\ndelay\ndeliver\ndemand\ndemise\ndenial\ndentist\ndeny\ndepart\ndepend\ndeposit\ndepth\ndeputy\nderive\ndescribe\ndesert\ndesign\ndesk\ndespair\ndestroy\ndetail\ndetect\ndevelop\ndevice\ndevote\ndiagram\ndial\ndiamond\ndiary\ndice\ndiesel\ndiet\ndiffer\ndigital\ndignity\ndilemma\ndinner\ndinosaur\ndirect\ndirt\ndisagree\ndiscover\ndisease\ndish\ndismiss\ndisorder\ndisplay\ndistance\ndivert\ndivide\ndivorce\ndizzy\ndoctor\ndocument\ndog\ndoll\ndolphin\ndomain\ndonate\ndonkey\ndonor\ndoor\ndose\ndouble\ndove\ndraft\ndragon\ndrama\ndrastic\ndraw\ndream\ndress\ndrift\ndrill\ndrink\ndrip\ndrive\ndrop\ndrum\ndry\nduck\ndumb\ndune\nduring\ndust\ndutch\nduty\ndwarf\ndynamic\neager\neagle\nearly\nearn\nearth\neasily\neast\neasy\necho\necology\neconomy\nedge\nedit\neducate\neffort\negg\neight\neither\nelbow\nelder\nelectric\nelegant\nelement\nelephant\nelevator\nelite\nelse\nembark\nembody\nembrace\nemerge\nemotion\nemploy\nempower\nempty\nenable\nenact\nend\nendless\nendorse\nenemy\nenergy\nenforce\nengage\nengine\nenhance\nenjoy\nenlist\nenough\nenrich\nenroll\nensure\nenter\nentire\nentry\nenvelope\nepisode\nequal\nequip\nera\nerase\nerode\nerosion\nerror\nerupt\nescape\nessay\nessence\nestate\neternal\nethics\nevidence\nevil\nevoke\nevolve\nexact\nexample\nexcess\nexchange\nexcite\nexclude\nexcuse\nexecute\nexercise\nexhaust\nexhibit\nexile\nexist\nexit\nexotic\nexpand\nexpect\nexpire\nexplain\nexpose\nexpress\nextend\nextra\neye\neyebrow\nfabric\nface\nfaculty\nfade\nfaint\nfaith\nfall\nfalse\nfame\nfamily\nfamous\nfan\nfancy\nfantasy\nfarm\nfashion\nfat\nfatal\nfather\nfatigue\nfault\nfavorite\nfeature\nfebruary\nfederal\nfee\nfeed\nfeel\nfemale\nfence\nfestival\nfetch\nfever\nfew\nfiber\nfiction\nfield\nfigure\nfile\nfilm\nfilter\nfinal\nfind\nfine\nfinger\nfinish\nfire\nfirm\nfirst\nfiscal\nfish\nfit\nfitness\nfix\nflag\nflame\nflash\nflat\nflavor\nflee\nflight\nflip\nfloat\nflock\nfloor\nflower\nfluid\nflush\nfly\nfoam\nfocus\nfog\nfoil\nfold\nfollow\nfood\nfoot\nforce\nforest\nforget\nfork\nfortune\nforum\nforward\nfossil\nfoster\nfound\nfox\nfragile\nframe\nfrequent\nfresh\nfriend\nfringe\nfrog\nfront\nfrost\nfrown\nfrozen\nfruit\nfuel\nfun\nfunny\nfurnace\nfury\nfuture\ngadget\ngain\ngalaxy\ngallery\ngame\ngap\ngarage\ngarbage\ngarden\ngarlic\ngarment\ngas\ngasp\ngate\ngather\ngauge\ngaze\ngeneral\ngenius\ngenre\ngentle\ngenuine\ngesture\nghost\ngiant\ngift\ngiggle\nginger\ngiraffe\ngirl\ngive\nglad\nglance\nglare\nglass\nglide\nglimpse\nglobe\ngloom\nglory\nglove\nglow\nglue\ngoat\ngoddess\ngold\ngood\ngoose\ngorilla\ngospel\ngossip\ngovern\ngown\ngrab\ngrace\ngrain\ngrant\ngrape\ngrass\ngravity\ngreat\ngreen\ngrid\ngrief\ngrit\ngrocery\ngroup\ngrow\ngrunt\nguard\nguess\nguide\nguilt\nguitar\ngun\ngym\nhabit\nhair\nhalf\nhammer\nhamster\nhand\nhappy\nharbor\nhard\nharsh\nharvest\nhat\nhave\nhawk\nhazard\nhead\nhealth\nheart\nheavy\nhedgehog\nheight\nhello\nhelmet\nhelp\nhen\nhero\nhidden\nhigh\nhill\nhint\nhip\nhire\nhistory\nhobby\nhockey\nhold\nhole\nholiday\nhollow\nhome\nhoney\nhood\nhope\nhorn\nhorror\nhorse\nhospital\nhost\nhotel\nhour\nhover\nhub\nhuge\nhuman\nhumble\nhumor\nhundred\nhungry\nhunt\nhurdle\nhurry\nhurt\nhusband\nhybrid\nice\nicon\nidea\nidentify\nidle\nignore\nill\nillegal\nillness\nimage\nimitate\nimmense\nimmune\nimpact\nimpose\nimprove\nimpulse\ninch\ninclude\nincome\nincrease\nindex\nindicate\nindoor\nindustry\ninfant\ninflict\ninform\ninhale\ninherit\ninitial\ninject\ninjury\ninmate\ninner\ninnocent\ninput\ninquiry\ninsane\ninsect\ninside\ninspire\ninstall\nintact\ninterest\ninto\ninvest\ninvite\ninvolve\niron\nisland\nisolate\nissue\nitem\nivory\njacket\njaguar\njar\njazz\njealous\njeans\njelly\njewel\njob\njoin\njoke\njourney\njoy\njudge\njuice\njump\njungle\njunior\njunk\njust\nkangaroo\nkeen\nkeep\nketchup\nkey\nkick\nkid\nkidney\nkind\nkingdom\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknee\nknife\nknock\nknow\nlab\nlabel\nlabor\nladder\nlady\nlake\nlamp\nlanguage\nlaptop\nlarge\nlater\nlatin\nlaugh\nlaundry\nlava\nlaw\nlawn\nlawsuit\nlayer\nlazy\nleader\nleaf\nlearn\nleave\nlecture\nleft\nleg\nlegal\nlegend\nleisure\nlemon\nlend\nlength\nlens\nleopard\nlesson\nletter\nlevel\nliar\nliberty\nlibrary\nlicense\nlife\nlift\nlight\nlike\nlimb\nlimit\nlink\nlion\nliquid\nlist\nlittle\nlive\nlizard\nload\nloan\nlobster\nlocal\nlock\nlogic\nlonely\nlong\nloop\nlottery\nloud\nlounge\nlove\nloyal\nlucky\nluggage\nlumber\nlunar\nlunch\nluxury\nlyrics\nmachine\nmad\nmagic\nmagnet\nmaid\nmail\nmain\nmajor\nmake\nmammal\nman\nmanage\nmandate\nmango\nmansion\nmanual\nmaple\nmarble\nmarch\nmargin\nmarine\nmarket\nmarriage\nmask\nmass\nmaster\nmatch\nmaterial\nmath\nmatrix\nmatter\nmaximum\nmaze\nmeadow\nmean\nmeasure\nmeat\nmechanic\nmedal\nmedia\nmelody\nmelt\nmember\nmemory\nmention\nmenu\nmercy\nmerge\nmerit\nmerry\nmesh\nmessage\nmetal\nmethod\nmiddle\nmidnight\nmilk\nmillion\nmimic\nmind\nminimum\nminor\nminute\nmiracle\nmirror\nmisery\nmiss\nmistake\nmix\nmixed\nmixture\nmobile\nmodel\nmodify\nmom\nmoment\nmonitor\nmonkey\nmonster\nmonth\nmoon\nmoral\nmore\nmorning\nmosquito\nmother\nmotion\nmotor\nmountain\nmouse\nmove\nmovie\nmuch\nmuffin\nmule\nmultiply\nmuscle\nmuseum\nmushroom\nmusic\nmust\nmutual\nmyself\nmystery\nmyth\nnaive\nname\nnapkin\nnarrow\nnasty\nnation\nnature\nnear\nneck\nneed\nnegative\nneglect\nneither\nnephew\nnerve\nnest\nnet\nnetwork\nneutral\nnever\nnews\nnext\nnice\nnight\nnoble\nnoise\nnominee\nnoodle\nnormal\nnorth\nnose\nnotable\nnote\nnothing\nnotice\nnovel\nnow\nnuclear\nnumber\nnurse\nnut\noak\nobey\nobject\noblige\nobscure\nobserve\nobtain\nobvious\noccur\nocean\noctober\nodor\noff\noffer\noffice\noften\noil\nokay\nold\nolive\nolympic\nomit\nonce\none\nonion\nonline\nonly\nopen\nopera\nopinion\noppose\noption\norange\norbit\norchard\norder\nordinary\norgan\norient\noriginal\norphan\nostrich\nother\noutdoor\nouter\noutput\noutside\noval\noven\nover\nown\nowner\noxygen\noyster\nozone\npact\npaddle\npage\npair\npalace\npalm\npanda\npanel\npanic\npanther\npaper\nparade\nparent\npark\nparrot\nparty\npass\npatch\npath\npatient\npatrol\npattern\npause\npave\npayment\npeace\npeanut\npear\npeasant\npelican\npen\npenalty\npencil\npeople\npepper\nperfect\npermit\nperson\npet\nphone\nphoto\nphrase\nphysical\npiano\npicnic\npicture\npiece\npig\npigeon\npill\npilot\npink\npioneer\npipe\npistol\npitch\npizza\nplace\nplanet\nplastic\nplate\nplay\nplease\npledge\npluck\nplug\nplunge\npoem\npoet\npoint\npolar\npole\npolice\npond\npony\npool\npopular\nportion\nposition\npossible\npost\npotato\npottery\npoverty\npowder\npower\npractice\npraise\npredict\nprefer\nprepare\npresent\npretty\nprevent\nprice\npride\nprimary\nprint\npriority\nprison\nprivate\nprize\nproblem\nprocess\nproduce\nprofit\nprogram\nproject\npromote\nproof\nproperty\nprosper\nprotect\nproud\nprovide\npublic\npudding\npull\npulp\npulse\npumpkin\npunch\npupil\npuppy\npurchase\npurity\npurpose\npurse\npush\nput\npuzzle\npyramid\nquality\nquantum\nquarter\nquestion\nquick\nquit\nquiz\nquote\nrabbit\nraccoon\nrace\nrack\nradar\nradio\nrail\nrain\nraise\nrally\nramp\nranch\nrandom\nrange\nrapid\nrare\nrate\nrather\nraven\nraw\nrazor\nready\nreal\nreason\nrebel\nrebuild\nrecall\nreceive\nrecipe\nrecord\nrecycle\nreduce\nreflect\nreform\nrefuse\nregion\nregret\nregular\nreject\nrelax\nrelease\nrelief\nrely\nremain\nremember\nremind\nremove\nrender\nrenew\nrent\nreopen\nrepair\nrepeat\nreplace\nreport\nrequire\nrescue\nresemble\nresist\nresource\nresponse\nresult\nretire\nretreat\nreturn\nreunion\nreveal\nreview\nreward\nrhythm\nrib\nribbon\nrice\nrich\nride\nridge\nrifle\nright\nrigid\nring\nriot\nripple\nrisk\nritual\nrival\nriver\nroad\nroast\nrobot\nrobust\nrocket\nromance\nroof\nrookie\nroom\nrose\nrotate\nrough\nround\nroute\nroyal\nrubber\nrude\nrug\nrule\nrun\nrunway\nrural\nsad\nsaddle\nsadness\nsafe\nsail\nsalad\nsalmon\nsalon\nsalt\nsalute\nsame\nsample\nsand\nsatisfy\nsatoshi\nsauce\nsausage\nsave\nsay\nscale\nscan\nscare\nscatter\nscene\nscheme\nschool\nscience\nscissors\nscorpion\nscout\nscrap\nscreen\nscript\nscrub\nsea\nsearch\nseason\nseat\nsecond\nsecret\nsection\nsecurity\nseed\nseek\nsegment\nselect\nsell\nseminar\nsenior\nsense\nsentence\nseries\nservice\nsession\nsettle\nsetup\nseven\nshadow\nshaft\nshallow\nshare\nshed\nshell\nsheriff\nshield\nshift\nshine\nship\nshiver\nshock\nshoe\nshoot\nshop\nshort\nshoulder\nshove\nshrimp\nshrug\nshuffle\nshy\nsibling\nsick\nside\nsiege\nsight\nsign\nsilent\nsilk\nsilly\nsilver\nsimilar\nsimple\nsince\nsing\nsiren\nsister\nsituate\nsix\nsize\nskate\nsketch\nski\nskill\nskin\nskirt\nskull\nslab\nslam\nsleep\nslender\nslice\nslide\nslight\nslim\nslogan\nslot\nslow\nslush\nsmall\nsmart\nsmile\nsmoke\nsmooth\nsnack\nsnake\nsnap\nsniff\nsnow\nsoap\nsoccer\nsocial\nsock\nsoda\nsoft\nsolar\nsoldier\nsolid\nsolution\nsolve\nsomeone\nsong\nsoon\nsorry\nsort\nsoul\nsound\nsoup\nsource\nsouth\nspace\nspare\nspatial\nspawn\nspeak\nspecial\nspeed\nspell\nspend\nsphere\nspice\nspider\nspike\nspin\nspirit\nsplit\nspoil\nsponsor\nspoon\nsport\nspot\nspray\nspread\nspring\nspy\nsquare\nsqueeze\nsquirrel\nstable\nstadium\nstaff\nstage\nstairs\nstamp\nstand\nstart\nstate\nstay\nsteak\nsteel\nstem\nstep\nstereo\nstick\nstill\nsting\nstock\nstomach\nstone\nstool\nstory\nstove\nstrategy\nstreet\nstrike\nstrong\nstruggle\nstudent\nstuff\nstumble\nstyle\nsubject\nsubmit\nsubway\nsuccess\nsuch\nsudden\nsuffer\nsugar\nsuggest\nsuit\nsummer\nsun\nsunny\nsunset\nsuper\nsupply\nsupreme\nsure\nsurface\nsurge\nsurprise\nsurround\nsurvey\nsuspect\nsustain\nswallow\nswamp\nswap\nswarm\nswear\nsweet\nswift\nswim\nswing\nswitch\nsword\nsymbol\nsymptom\nsyrup\nsystem\ntable\ntackle\ntag\ntail\ntalent\ntalk\ntank\ntape\ntarget\ntask\ntaste\ntattoo\ntaxi\nteach\nteam\ntell\nten\ntenant\ntennis\ntent\nterm\ntest\ntext\nthank\nthat\ntheme\nthen\ntheory\nthere\nthey\nthing\nthis\nthought\nthree\nthrive\nthrow\nthumb\nthunder\nticket\ntide\ntiger\ntilt\ntimber\ntime\ntiny\ntip\ntired\ntissue\ntitle\ntoast\ntobacco\ntoday\ntoddler\ntoe\ntogether\ntoilet\ntoken\ntomato\ntomorrow\ntone\ntongue\ntonight\ntool\ntooth\ntop\ntopic\ntopple\ntorch\ntornado\ntortoise\ntoss\ntotal\ntourist\ntoward\ntower\ntown\ntoy\ntrack\ntrade\ntraffic\ntragic\ntrain\ntransfer\ntrap\ntrash\ntravel\ntray\ntreat\ntree\ntrend\ntrial\ntribe\ntrick\ntrigger\ntrim\ntrip\ntrophy\ntrouble\ntruck\ntrue\ntruly\ntrumpet\ntrust\ntruth\ntry\ntube\ntuition\ntumble\ntuna\ntunnel\nturkey\nturn\nturtle\ntwelve\ntwenty\ntwice\ntwin\ntwist\ntwo\ntype\ntypical\nugly\numbrella\nunable\nunaware\nuncle\nuncover\nunder\nundo\nunfair\nunfold\nunhappy\nuniform\nunique\nunit\nuniverse\nunknown\nunlock\nuntil\nunusual\nunveil\nupdate\nupgrade\nuphold\nupon\nupper\nupset\nurban\nurge\nusage\nuse\nused\nuseful\nuseless\nusual\nutility\nvacant\nvacuum\nvague\nvalid\nvalley\nvalve\nvan\nvanish\nvapor\nvarious\nvast\nvault\nvehicle\nvelvet\nvendor\nventure\nvenue\nverb\nverify\nversion\nvery\nvessel\nveteran\nviable\nvibrant\nvicious\nvictory\nvideo\nview\nvillage\nvintage\nviolin\nvirtual\nvirus\nvisa\nvisit\nvisual\nvital\nvivid\nvocal\nvoice\nvoid\nvolcano\nvolume\nvote\nvoyage\nwage\nwagon\nwait\nwalk\nwall\nwalnut\nwant\nwarfare\nwarm\nwarrior\nwash\nwasp\nwaste\nwater\nwave\nway\nwealth\nweapon\nwear\nweasel\nweather\nweb\nwedding\nweekend\nweird\nwelcome\nwest\nwet\nwhale\nwhat\nwheat\nwheel\nwhen\nwhere\nwhip\nwhisper\nwide\nwidth\nwife\nwild\nwill\nwin\nwindow\nwine\nwing\nwink\nwinner\nwinter\nwire\nwisdom\nwise\nwish\nwitness\nwolf\nwoman\nwonder\nwood\nwool\nword\nwork\nworld\nworry\nworth\nwrap\nwreck\nwrestle\nwrist\nwrite\nwrong\nyard\nyear\nyellow\nyou\nyoung\nyouth\nzebra\nzero\nzone\nzoo`.split('\\n');\n", "/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { bytes as assertBytes, number as assertNumber } from '@noble/hashes/_assert';\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { sha512 } from '@noble/hashes/sha512';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { utils as baseUtils } from '@scure/base';\n// Japanese wordlist\nconst isJapanese = (wordlist) => wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093';\n// Normalization replaces equivalent sequences of characters\n// so that any two texts that are equivalent will be reduced\n// to the same sequence of code points, called the normal form of the original text.\n// https://tonsky.me/blog/unicode/#why-is-a----\nfunction nfkd(str) {\n    if (typeof str !== 'string')\n        throw new TypeError(`Invalid mnemonic type: ${typeof str}`);\n    return str.normalize('NFKD');\n}\nfunction normalize(str) {\n    const norm = nfkd(str);\n    const words = norm.split(' ');\n    if (![12, 15, 18, 21, 24].includes(words.length))\n        throw new Error('Invalid mnemonic');\n    return { nfkd: norm, words };\n}\nfunction assertEntropy(entropy) {\n    assertBytes(entropy, 16, 20, 24, 28, 32);\n}\n/**\n * Generate x random words. Uses Cryptographically-Secure Random Number Generator.\n * @param wordlist imported wordlist for specific language\n * @param strength mnemonic strength 128-256 bits\n * @example\n * generateMnemonic(wordlist, 128)\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function generateMnemonic(wordlist, strength = 128) {\n    assertNumber(strength);\n    if (strength % 32 !== 0 || strength > 256)\n        throw new TypeError('Invalid entropy');\n    return entropyToMnemonic(randomBytes(strength / 8), wordlist);\n}\nconst calcChecksum = (entropy) => {\n    // Checksum is ent.length/4 bits long\n    const bitsLeft = 8 - entropy.length / 4;\n    // Zero rightmost \"bitsLeft\" bits in byte\n    // For example: bitsLeft=4 val=10111101 -> 10110000\n    return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]);\n};\nfunction getCoder(wordlist) {\n    if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== 'string')\n        throw new Error('Wordlist: expected array of 2048 strings');\n    wordlist.forEach((i) => {\n        if (typeof i !== 'string')\n            throw new Error(`Wordlist: non-string element: ${i}`);\n    });\n    return baseUtils.chain(baseUtils.checksum(1, calcChecksum), baseUtils.radix2(11, true), baseUtils.alphabet(wordlist));\n}\n/**\n * Reversible: Converts mnemonic string to raw entropy in form of byte array.\n * @param mnemonic 12-24 words\n * @param wordlist imported wordlist for specific language\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToEntropy(mnem, wordlist)\n * // Produces\n * new Uint8Array([\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ])\n */\nexport function mnemonicToEntropy(mnemonic, wordlist) {\n    const { words } = normalize(mnemonic);\n    const entropy = getCoder(wordlist).decode(words);\n    assertEntropy(entropy);\n    return entropy;\n}\n/**\n * Reversible: Converts raw entropy in form of byte array to mnemonic string.\n * @param entropy byte array\n * @param wordlist imported wordlist for specific language\n * @returns 12-24 words\n * @example\n * const ent = new Uint8Array([\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n *   0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ]);\n * entropyToMnemonic(ent, wordlist);\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function entropyToMnemonic(entropy, wordlist) {\n    assertEntropy(entropy);\n    const words = getCoder(wordlist).encode(entropy);\n    return words.join(isJapanese(wordlist) ? '\\u3000' : ' ');\n}\n/**\n * Validates mnemonic for being 12-24 words contained in `wordlist`.\n */\nexport function validateMnemonic(mnemonic, wordlist) {\n    try {\n        mnemonicToEntropy(mnemonic, wordlist);\n    }\n    catch (e) {\n        return false;\n    }\n    return true;\n}\nconst salt = (passphrase) => nfkd(`mnemonic${passphrase}`);\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * await mnemonicToSeed(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeed(mnemonic, passphrase = '') {\n    return pbkdf2Async(sha512, normalize(mnemonic).nfkd, salt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedSync(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedSync(mnemonic, passphrase = '') {\n    return pbkdf2(sha512, normalize(mnemonic).nfkd, salt(passphrase), { c: 2048, dkLen: 64 });\n}\n", "import { hash as assertHash, number as assertNumber } from './_assert.js';\nimport { hmac } from './hmac.js';\nimport { Hash, CHash, Input, createView, toBytes, checkOpts, asyncLoop } from './utils.js';\n\n// PBKDF (RFC 2898)\nexport type Pbkdf2Opt = {\n  c: number; // Iterations\n  dkLen?: number; // Desired key length in bytes (Intended output length in octets of the derived key\n  asyncTick?: number; // Maximum time in ms for which async function can block execution\n};\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: Input, _salt: Input, _opts: Pbkdf2Opt) {\n  assertHash(hash);\n  const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n  const { c, dkLen, asyncTick } = opts;\n  assertNumber(c);\n  assertNumber(dkLen);\n  assertNumber(asyncTick);\n  if (c < 1) throw new Error('PBKDF2: iterations (c) should be >= 1');\n  const password = toBytes(_password);\n  const salt = toBytes(_salt);\n  // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n  const DK = new Uint8Array(dkLen);\n  // U1 = PRF(Password, Salt + INT_32_BE(i))\n  const PRF = hmac.create(hash, password);\n  const PRFSalt = PRF._cloneInto().update(salt);\n  return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n  PRF: Hash<T>,\n  PRFSalt: Hash<T>,\n  DK: Uint8Array,\n  prfW: Hash<T>,\n  u: Uint8Array\n) {\n  PRF.destroy();\n  PRFSalt.destroy();\n  if (prfW) prfW.destroy();\n  u.fill(0);\n  return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n */\nexport function pbkdf2(hash: CHash, password: Input, salt: Input, opts: Pbkdf2Opt) {\n  const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n  let prfW: any; // Working copy\n  const arr = new Uint8Array(4);\n  const view = createView(arr);\n  const u = new Uint8Array(PRF.outputLen);\n  // DK = T1 + T2 + \u22EF + Tdklen/hlen\n  for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n    // Ti = F(Password, Salt, c, i)\n    const Ti = DK.subarray(pos, pos + PRF.outputLen);\n    view.setInt32(0, ti, false);\n    // F(Password, Salt, c, i) = U1 ^ U2 ^ \u22EF ^ Uc\n    // U1 = PRF(Password, Salt + INT_32_BE(i))\n    (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n    Ti.set(u.subarray(0, Ti.length));\n    for (let ui = 1; ui < c; ui++) {\n      // Uc = PRF(Password, Uc\u22121)\n      PRF._cloneInto(prfW).update(u).digestInto(u);\n      for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n    }\n  }\n  return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\nexport async function pbkdf2Async(hash: CHash, password: Input, salt: Input, opts: Pbkdf2Opt) {\n  const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n  let prfW: any; // Working copy\n  const arr = new Uint8Array(4);\n  const view = createView(arr);\n  const u = new Uint8Array(PRF.outputLen);\n  // DK = T1 + T2 + \u22EF + Tdklen/hlen\n  for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n    // Ti = F(Password, Salt, c, i)\n    const Ti = DK.subarray(pos, pos + PRF.outputLen);\n    view.setInt32(0, ti, false);\n    // F(Password, Salt, c, i) = U1 ^ U2 ^ \u22EF ^ Uc\n    // U1 = PRF(Password, Salt + INT_32_BE(i))\n    (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n    Ti.set(u.subarray(0, Ti.length));\n    await asyncLoop(c - 1, asyncTick, () => {\n      // Uc = PRF(Password, Uc\u22121)\n      PRF._cloneInto(prfW).update(u).digestInto(u);\n      for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n    });\n  }\n  return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n", "/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// Utilities\n/**\n * @__NO_SIDE_EFFECTS__\n */\nexport function assertNumber(n: number) {\n  if (!Number.isSafeInteger(n)) throw new Error(`Wrong integer: ${n}`);\n}\nexport interface Coder<F, T> {\n  encode(from: F): T;\n  decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n  encode: (data: Uint8Array) => string;\n  decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n  // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n  [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n  const id = (a: any) => a;\n  // Wrap call in closure so JIT can inline calls\n  const wrap = (a: any, b: any) => (c: any) => a(b(c));\n  // Construct chain of args[-1].encode(args[-2].encode([...]))\n  const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n  // Construct chain of args[0].decode(args[1].decode(...))\n  const decode = args.map((x) => x.decode).reduce(wrap, id);\n  return { encode, decode };\n}\n\ntype Alphabet = string[] | string;\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(alphabet: Alphabet): Coder<number[], string[]> {\n  return {\n    encode: (digits: number[]) => {\n      if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n        throw new Error('alphabet.encode input should be an array of numbers');\n      return digits.map((i) => {\n        assertNumber(i);\n        if (i < 0 || i >= alphabet.length)\n          throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`);\n        return alphabet[i]!;\n      });\n    },\n    decode: (input: string[]) => {\n      if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n        throw new Error('alphabet.decode input should be array of strings');\n      return input.map((letter) => {\n        if (typeof letter !== 'string')\n          throw new Error(`alphabet.decode: not string element=${letter}`);\n        const index = alphabet.indexOf(letter);\n        if (index === -1) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${alphabet}`);\n        return index;\n      });\n    },\n  };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n  if (typeof separator !== 'string') throw new Error('join separator should be string');\n  return {\n    encode: (from) => {\n      if (!Array.isArray(from) || (from.length && typeof from[0] !== 'string'))\n        throw new Error('join.encode input should be array of strings');\n      for (let i of from)\n        if (typeof i !== 'string') throw new Error(`join.encode: non-string input=${i}`);\n      return from.join(separator);\n    },\n    decode: (to) => {\n      if (typeof to !== 'string') throw new Error('join.decode input should be string');\n      return to.split(separator);\n    },\n  };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n  assertNumber(bits);\n  if (typeof chr !== 'string') throw new Error('padding chr should be string');\n  return {\n    encode(data: string[]): string[] {\n      if (!Array.isArray(data) || (data.length && typeof data[0] !== 'string'))\n        throw new Error('padding.encode input should be array of strings');\n      for (let i of data)\n        if (typeof i !== 'string') throw new Error(`padding.encode: non-string input=${i}`);\n      while ((data.length * bits) % 8) data.push(chr);\n      return data;\n    },\n    decode(input: string[]): string[] {\n      if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n        throw new Error('padding.encode input should be array of strings');\n      for (let i of input)\n        if (typeof i !== 'string') throw new Error(`padding.decode: non-string input=${i}`);\n      let end = input.length;\n      if ((end * bits) % 8)\n        throw new Error('Invalid padding: string should have whole number of bytes');\n      for (; end > 0 && input[end - 1] === chr; end--) {\n        if (!(((end - 1) * bits) % 8))\n          throw new Error('Invalid padding: string has too much padding');\n      }\n      return input.slice(0, end);\n    },\n  };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n  if (typeof fn !== 'function') throw new Error('normalize fn should be function');\n  return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n * @__NO_SIDE_EFFECTS__\n */\nfunction convertRadix(data: number[], from: number, to: number) {\n  // base 1 is impossible\n  if (from < 2) throw new Error(`convertRadix: wrong from=${from}, base cannot be less than 2`);\n  if (to < 2) throw new Error(`convertRadix: wrong to=${to}, base cannot be less than 2`);\n  if (!Array.isArray(data)) throw new Error('convertRadix: data should be array');\n  if (!data.length) return [];\n  let pos = 0;\n  const res = [];\n  const digits = Array.from(data);\n  digits.forEach((d) => {\n    assertNumber(d);\n    if (d < 0 || d >= from) throw new Error(`Wrong integer: ${d}`);\n  });\n  while (true) {\n    let carry = 0;\n    let done = true;\n    for (let i = pos; i < digits.length; i++) {\n      const digit = digits[i]!;\n      const digitBase = from * carry + digit;\n      if (\n        !Number.isSafeInteger(digitBase) ||\n        (from * carry) / from !== carry ||\n        digitBase - digit !== from * carry\n      ) {\n        throw new Error('convertRadix: carry overflow');\n      }\n      carry = digitBase % to;\n      const rounded = Math.floor(digitBase / to);\n      digits[i] = rounded;\n      if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n        throw new Error('convertRadix: carry overflow');\n      if (!done) continue;\n      else if (!rounded) pos = i;\n      else done = false;\n    }\n    res.push(carry);\n    if (done) break;\n  }\n  for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n  return res.reverse();\n}\n\nconst gcd = /* @__NO_SIDE_EFFECTS__ */ (a: number, b: number): number => (!b ? a : gcd(b, a % b));\nconst radix2carry = /*@__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n  from + (to - gcd(from, to));\n/**\n * Implemented with numbers, because BigInt is 5x slower\n * @__NO_SIDE_EFFECTS__\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n  if (!Array.isArray(data)) throw new Error('convertRadix2: data should be array');\n  if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n  if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n  if (radix2carry(from, to) > 32) {\n    throw new Error(\n      `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n    );\n  }\n  let carry = 0;\n  let pos = 0; // bitwise position in current element\n  const mask = 2 ** to - 1;\n  const res: number[] = [];\n  for (const n of data) {\n    assertNumber(n);\n    if (n >= 2 ** from) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n    carry = (carry << from) | n;\n    if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n    pos += from;\n    for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n    carry &= 2 ** pos - 1; // clean carry, otherwise it will cause overflow\n  }\n  carry = (carry << (to - pos)) & mask;\n  if (!padding && pos >= from) throw new Error('Excess padding');\n  if (!padding && carry) throw new Error(`Non-zero padding: ${carry}`);\n  if (padding && pos > 0) res.push(carry >>> 0);\n  return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n  assertNumber(num);\n  return {\n    encode: (bytes: Uint8Array) => {\n      if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n      return convertRadix(Array.from(bytes), 2 ** 8, num);\n    },\n    decode: (digits: number[]) => {\n      if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n        throw new Error('radix.decode input should be array of numbers');\n      return Uint8Array.from(convertRadix(digits, num, 2 ** 8));\n    },\n  };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n  assertNumber(bits);\n  if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n  if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n    throw new Error('radix2: carry overflow');\n  return {\n    encode: (bytes: Uint8Array) => {\n      if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n      return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n    },\n    decode: (digits: number[]) => {\n      if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n        throw new Error('radix2.decode input should be array of numbers');\n      return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n    },\n  };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n  if (typeof fn !== 'function') throw new Error('unsafeWrapper fn should be function');\n  return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n    try {\n      return fn.apply(null, args);\n    } catch (e) {}\n  };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction checksum(\n  len: number,\n  fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n  assertNumber(len);\n  if (typeof fn !== 'function') throw new Error('checksum fn should be function');\n  return {\n    encode(data: Uint8Array) {\n      if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n      const checksum = fn(data).slice(0, len);\n      const res = new Uint8Array(data.length + len);\n      res.set(data);\n      res.set(checksum, data.length);\n      return res;\n    },\n    decode(data: Uint8Array) {\n      if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n      const payload = data.slice(0, -len);\n      const newChecksum = fn(payload).slice(0, len);\n      const oldChecksum = data.slice(-len);\n      for (let i = 0; i < len; i++)\n        if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n      return payload;\n    },\n  };\n}\n\n// prettier-ignore\nexport const utils = {\n  alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\nexport const base16: BytesCoder = /* @__PURE__ */ chain(\n  radix2(4),\n  alphabet('0123456789ABCDEF'),\n  join('')\n);\nexport const base32: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n  padding(5),\n  join('')\n);\nexport const base32nopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n  join('')\n);\nexport const base32hex: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n  padding(5),\n  join('')\n);\nexport const base32hexnopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n  join('')\n);\nexport const base32crockford: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n  join(''),\n  normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\nexport const base64: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n  padding(6),\n  join('')\n);\nexport const base64nopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n  join('')\n);\nexport const base64url: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n  padding(6),\n  join('')\n);\nexport const base64urlnopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n  join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = (abc: string) => chain(radix(58), alphabet(abc), join(''));\n\nexport const base58: BytesCoder = /* @__PURE__ */ genBase58(\n  '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\nexport const base58flickr: BytesCoder = /* @__PURE__ */ genBase58(\n  '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\nexport const base58xrp: BytesCoder = /* @__PURE__ */ genBase58(\n  'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// xmr ver is done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n// Block encoding significantly reduces quadratic complexity of base58.\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\nexport const base58xmr: BytesCoder = {\n  encode(data: Uint8Array) {\n    let res = '';\n    for (let i = 0; i < data.length; i += 8) {\n      const block = data.subarray(i, i + 8);\n      res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n    }\n    return res;\n  },\n  decode(str: string) {\n    let res: number[] = [];\n    for (let i = 0; i < str.length; i += 11) {\n      const slice = str.slice(i, i + 11);\n      const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n      const block = base58.decode(slice);\n      for (let j = 0; j < block.length - blockLen; j++) {\n        if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n      }\n      res = res.concat(Array.from(block.slice(block.length - blockLen)));\n    }\n    return Uint8Array.from(res);\n  },\n};\n\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n  chain(\n    checksum(4, (data) => sha256(sha256(data))),\n    base58\n  );\n// legacy export, bad name\nexport const base58check = createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n  prefix: Prefix;\n  words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n  prefix: Prefix;\n  words: number[];\n  bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = /* @__PURE__ */ chain(\n  alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n  join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction bech32Polymod(pre: number): number {\n  const b = pre >> 25;\n  let chk = (pre & 0x1ffffff) << 5;\n  for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n    if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n  }\n  return chk;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n  const len = prefix.length;\n  let chk = 1;\n  for (let i = 0; i < len; i++) {\n    const c = prefix.charCodeAt(i);\n    if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n    chk = bech32Polymod(chk) ^ (c >> 5);\n  }\n  chk = bech32Polymod(chk);\n  for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n  for (let v of words) chk = bech32Polymod(chk) ^ v;\n  for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n  chk ^= encodingConst;\n  return BECH_ALPHABET.encode(convertRadix2([chk % 2 ** 30], 30, 5, false));\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m') {\n  const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n  const _words = radix2(5);\n  const fromWords = _words.decode;\n  const toWords = _words.encode;\n  const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n  function encode<Prefix extends string>(\n    prefix: Prefix,\n    words: number[] | Uint8Array,\n    limit: number | false = 90\n  ): `${Lowercase<Prefix>}1${string}` {\n    if (typeof prefix !== 'string')\n      throw new Error(`bech32.encode prefix should be string, not ${typeof prefix}`);\n    if (!Array.isArray(words) || (words.length && typeof words[0] !== 'number'))\n      throw new Error(`bech32.encode words should be array of numbers, not ${typeof words}`);\n    if (prefix.length === 0) throw new TypeError(`Invalid prefix length ${prefix.length}`);\n    const actualLength = prefix.length + 7 + words.length;\n    if (limit !== false && actualLength > limit)\n      throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n    const lowered = prefix.toLowerCase();\n    const sum = bechChecksum(lowered, words, ENCODING_CONST);\n    return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n  }\n\n  function decode<Prefix extends string>(\n    str: `${Prefix}1${string}`,\n    limit?: number | false\n  ): Bech32Decoded<Prefix>;\n  function decode(str: string, limit?: number | false): Bech32Decoded;\n  function decode(str: string, limit: number | false = 90): Bech32Decoded {\n    if (typeof str !== 'string')\n      throw new Error(`bech32.decode input should be string, not ${typeof str}`);\n    if (str.length < 8 || (limit !== false && str.length > limit))\n      throw new TypeError(`Wrong string length: ${str.length} (${str}). Expected (8..${limit})`);\n    // don't allow mixed case\n    const lowered = str.toLowerCase();\n    if (str !== lowered && str !== str.toUpperCase())\n      throw new Error(`String must be lowercase or uppercase`);\n    const sepIndex = lowered.lastIndexOf('1');\n    if (sepIndex === 0 || sepIndex === -1)\n      throw new Error(`Letter \"1\" must be present between prefix and data only`);\n    const prefix = lowered.slice(0, sepIndex);\n    const data = lowered.slice(sepIndex + 1);\n    if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n    const words = BECH_ALPHABET.decode(data).slice(0, -6);\n    const sum = bechChecksum(prefix, words, ENCODING_CONST);\n    if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n    return { prefix, words };\n  }\n\n  const decodeUnsafe = unsafeWrapper(decode);\n\n  function decodeToBytes(str: string): Bech32DecodedWithArray {\n    const { prefix, words } = decode(str, false);\n    return { prefix, words, bytes: fromWords(words) };\n  }\n\n  return { encode, decode, decodeToBytes, decodeUnsafe, fromWords, fromWordsUnsafe, toWords };\n}\n\nexport const bech32 = /* @__PURE__ */ genBech32('bech32');\nexport const bech32m = /* @__PURE__ */ genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\nexport const utf8: BytesCoder = {\n  encode: (data) => new TextDecoder().decode(data),\n  decode: (str) => new TextEncoder().encode(str),\n};\n\nexport const hex: BytesCoder = /* @__PURE__ */ chain(\n  radix2(4),\n  alphabet('0123456789abcdef'),\n  join(''),\n  normalize((s: string) => {\n    if (typeof s !== 'string' || s.length % 2)\n      throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n    return s.toLowerCase();\n  })\n);\n\n// prettier-ignore\nconst CODERS = {\n  utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof typeof CODERS;\nconst coderTypeError =\n  'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n  if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n  if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n  return CODERS[type].encode(bytes);\n};\nexport const str = bytesToString; // as in python, but for bytes only\n\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n  if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n  if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n  return CODERS[type].decode(str);\n};\nexport const bytes = stringToBytes;\n", "import type { Jwk } from '@web5/crypto';\n\nimport { KEY_URI_PREFIX_JWK, isPrivateJwk } from '@web5/crypto';\nimport { Convert } from '@web5/common';\n\nimport type { Web5PlatformAgent } from './types/agent.js';\n\nimport { DwnInterface } from './types/dwn.js';\nimport { JwkProtocolDefinition } from './store-data-protocols.js';\nimport { TENANT_SEPARATOR } from './utils-internal.js';\nimport { AgentDataStore, DataStoreDeleteParams, DataStoreGetParams, DataStoreListParams, DataStoreSetParams, DwnDataStore, InMemoryDataStore } from './store-data.js';\n\nexport class DwnKeyStore extends DwnDataStore<Jwk> implements AgentDataStore<Jwk> {\n  protected name = 'DwnKeyStore';\n\n  protected _recordProtocolDefinition = JwkProtocolDefinition;\n\n  /**\n   * Properties to use when writing and querying Private Key records with the DWN store.\n   */\n  protected _recordProperties = {\n    dataFormat   : 'application/json',\n    protocol     : this._recordProtocolDefinition.protocol,\n    protocolPath : 'privateJwk',\n    schema       : this._recordProtocolDefinition.types.privateJwk.schema,\n  };\n\n  public async delete(params: DataStoreDeleteParams): Promise<boolean> {\n    return await super.delete(params);\n  }\n\n  public async get(params: DataStoreGetParams): Promise<Jwk | undefined> {\n    return await super.get(params);\n  }\n\n  public async set(params: DataStoreSetParams<Jwk>): Promise<void> {\n    await super.set(params);\n  }\n\n  public async list(params: DataStoreListParams): Promise<Jwk[]> {\n    return await super.list(params);\n  }\n\n  protected async getAllRecords({ agent, tenantDid }: {\n    agent: Web5PlatformAgent;\n    tenantDid: string;\n  }): Promise<Jwk[]> {\n    // Clear the index since it will be rebuilt from the query results.\n    this._index.clear();\n\n    // Query the DWN for all stored Jwk objects.\n    const { reply: queryReply } = await agent.dwn.processRequest({\n      author        : tenantDid,\n      target        : tenantDid,\n      messageType   : DwnInterface.RecordsQuery,\n      messageParams : { filter: { ...this._recordProperties } }\n    });\n\n    // Loop through all of the stored Jwk records and accumulate the objects.\n    let storedKeys: Jwk[] = [];\n    for (const record of queryReply.entries ?? []) {\n      // All Jwk records are expected to be small enough such that the data is returned\n      // with the query results. If a record is returned without `encodedData` this is unexpected so\n      // throw an error.\n      if (!record.encodedData) {\n        throw new Error(`${this.name}: Expected 'encodedData' to be present in the DWN query result entry`);\n      }\n\n      const storedKey = Convert.base64Url(record.encodedData).toObject() as Jwk;\n      if (isPrivateJwk(storedKey)) {\n        // Update the index with the matching record ID.\n        const indexKey = `${tenantDid}${TENANT_SEPARATOR}${KEY_URI_PREFIX_JWK}${storedKey.kid}`;\n        this._index.set(indexKey, record.recordId);\n\n        // Add the stored key to the cache.\n        this._cache.set(record.recordId, storedKey);\n\n        storedKeys.push(storedKey);\n      }\n    }\n\n    return storedKeys;\n  }\n}\n\nexport class InMemoryKeyStore extends InMemoryDataStore<Jwk> implements AgentDataStore<Jwk> {\n  protected name = 'InMemoryKeyStore';\n\n  public async delete(params: DataStoreDeleteParams): Promise<boolean> {\n    return await super.delete(params);\n  }\n\n  public async get(params: DataStoreGetParams): Promise<Jwk | undefined> {\n    return await super.get(params);\n  }\n\n  public async list(params: DataStoreListParams): Promise<Jwk[]> {\n    return await super.list(params);\n  }\n\n  public async set(params: DataStoreSetParams<Jwk>): Promise<void> {\n    return await super.set(params);\n  }\n}", "import type {\n  Jwk,\n  Cipher,\n  Signer,\n  KeyWrapper,\n  SignParams,\n  AesGcmParams,\n  KeyGenerator,\n  VerifyParams,\n  KeyIdentifier,\n  KmsSignParams,\n  KmsDigestParams,\n  KmsVerifyParams,\n  GetPublicKeyParams,\n  KmsExportKeyParams,\n  KmsGetKeyUriParams,\n  KmsImportKeyParams,\n  KmsGenerateKeyParams,\n  KmsGetPublicKeyParams,\n  AsymmetricKeyGenerator,\n} from '@web5/crypto';\n\nimport {\n  isPrivateJwk,\n  Sha2Algorithm,\n  EcdsaAlgorithm,\n  EdDsaAlgorithm,\n  AesGcmAlgorithm,\n  CryptoAlgorithm,\n  KEY_URI_PREFIX_JWK,\n  computeJwkThumbprint,\n} from '@web5/crypto';\n\nimport type { AgentDataStore } from './store-data.js';\nimport type { Web5PlatformAgent } from './types/agent.js';\nimport type { AgentKeyManager } from './types/key-manager.js';\nimport type { InferType } from './prototyping/common/type-utils.js';\nimport type { CipherParams, UnwrapKeyParams, WrapKeyParams } from './prototyping/crypto/types/params-direct.js';\nimport type { KmsCipherParams, KmsUnwrapKeyParams, KmsWrapKeyParams } from './prototyping/crypto/types/params-kms.js';\n\nimport { InMemoryKeyStore } from './store-key.js';\nimport { AesKwAlgorithm } from './prototyping/crypto/algorithms/aes-kw.js';\nimport { CryptoError, CryptoErrorCode } from './prototyping/crypto/crypto-error.js';\n\n/**\n * `supportedAlgorithms` is an object mapping algorithm names to their respective implementations\n * Each entry in this map specifies the algorithm name and its associated properties, including the\n * implementation class and any relevant names or identifiers for the algorithm. This structure\n * allows for easy retrieval and instantiation of algorithm implementations based on the algorithm\n * name or key specification. It facilitates the support of multiple algorithms within the\n * `LocalKeyManager` class.\n */\nconst supportedAlgorithms = {\n  'AES-GCM': {\n    implementation : AesGcmAlgorithm,\n    names          : ['A128GCM', 'A192GCM', 'A256GCM'] as const,\n  },\n  'AES-KW': {\n    implementation : AesKwAlgorithm,\n    names          : ['A128KW', 'A192KW', 'A256KW'] as const,\n  },\n  'Ed25519': {\n    implementation : EdDsaAlgorithm,\n    names          : ['Ed25519'] as const,\n  },\n  'secp256k1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256K', 'secp256k1'] as const,\n  },\n  'secp256r1': {\n    implementation : EcdsaAlgorithm,\n    names          : ['ES256', 'secp256r1'] as const,\n  },\n  'SHA-256': {\n    implementation : Sha2Algorithm,\n    names          : ['SHA-256'] as const\n  }\n} satisfies {\n  [key: string]: {\n    implementation : typeof CryptoAlgorithm;\n    names          : readonly string[];\n  }\n};\n\n/* Helper type for `supportedAlgorithms`. */\ntype SupportedAlgorithm = keyof typeof supportedAlgorithms;\n\n/* Helper type for `supportedAlgorithms` implementations. */\ntype AlgorithmConstructor = typeof supportedAlgorithms[SupportedAlgorithm]['implementation'];\n\n/* Commented out but retaining in case it ends up being useful. */\n// type AlgorithmNames = typeof supportedAlgorithms[SupportedAlgorithm]['names'][number];\n\n/* Helper type for supported key generator algorithms. */\ntype SupportedKeyGeneratorAlgorithm =\n  | 'Ed25519'                                      // Edwards Curve Digital Signature Algorithm (EdDSA)\n  | 'secp256k1' | 'ES256K' | 'secp256r1' | 'ES256' // Elliptic Curve Digital Signature Algorithm (ECDSA)\n  | 'A128GCM' | 'A192GCM' | 'A256GCM'              // AES GCM with a 128-bit, 192-bit, or 256-bit key\n  | 'A128KW' | 'A192KW' | 'A256KW';                // AES Key Wrap with a 128-bit, 192-bit, or 256-bit key\n\n/**\n * The `LocalKmsParams` interface specifies the parameters for initializing an instance of\n * {@link LocalKeyManager}. It allows the optional inclusion of a {@link AgentDataStore} instance\n * for key management. If not provided, a default {@link InMemoryKeyStore} instance will be used for\n * storing keys. Note that the {@link InMemoryKeyStore} is not persistent and will be cleared when\n * the application exits.\n */\nexport type LocalKmsParams = {\n  agent?: Web5PlatformAgent;\n\n  /**\n   * An optional property to specify a custom {@link AgentDataStore} instance for key management. If\n   * not provided, {@link LocalKeyManager} uses a default {@link InMemoryKeyStore} instance. This\n   * store is responsible for managing cryptographic keys, allowing them to be retrieved, stored,\n   * and managed during cryptographic operations.\n   */\n  keyStore?: AgentDataStore<Jwk>;\n};\n\n/**\n * The `LocalKmsGenerateKeyParams` interface defines the algorithm-specific parameters that\n * should be passed into the {@link LocalKeyManager.generateKey | `LocalKeyManager.generateKey()`}\n * method when generating a key in the local KMS.\n */\nexport interface LocalKmsGenerateKeyParams extends KmsGenerateKeyParams {\n  /**\n   * A string defining the type of key to generate.\n   */\n  algorithm: InferType<SupportedKeyGeneratorAlgorithm>\n}\n\n/**\n * The `LocalKmsUnwrapKeyParams` interface defines the algorithm-specific parameters that\n * should be passed into the {@link LocalKeyManager.wrapKey} method when wrapping a key using a\n * key stored in the local KMS to encrypt the key material.\n */\nexport interface LocalKmsUnwrapKeyParams extends KmsUnwrapKeyParams {\n  /**\n   * A string defining the type of wrapped key. The value must be one of the following:\n   * - `\"A128GCM\"`: AES GCM using a 128-bit key.\n   * - `\"A192GCM\"`: AES GCM using a 192-bit key.\n   * - `\"A256GCM\"`: AES GCM using a 256-bit key.\n   * - `\"A128KW\"`: AES Key Wrap using a 128-bit key.\n   * - `\"A192KW\"`: AES Key Wrap using a 192-bit key.\n   * - `\"A256KW\"`: AES Key Wrap using a 256-bit key.\n   */\n  wrappedKeyAlgorithm: 'A128GCM' | 'A192GCM' | 'A256GCM' | 'A128KW' | 'A192KW' | 'A256KW';\n}\n\nexport class LocalKeyManager implements AgentKeyManager {\n  /**\n   * Holds the instance of a `Web5PlatformAgent` that represents the current execution context for\n   * the `LocalKeyManager`. This agent is used to interact with other Web5 agent components. It's\n   * vital to ensure this instance is set to correctly contextualize operations within the broader\n   * Web5 Agent framework.\n   */\n  private _agent?: Web5PlatformAgent;\n\n  /**\n   * A private map that stores instances of cryptographic algorithm implementations. Each key in\n   * this map is an `AlgorithmConstructor`, and its corresponding value is an instance of a class\n   * that implements a specific cryptographic algorithm. This map is used to cache and reuse\n   * instances for performance optimization, ensuring that each algorithm is instantiated only once.\n   */\n  private _algorithmInstances: Map<AlgorithmConstructor, InstanceType<typeof CryptoAlgorithm>> = new Map();\n\n  /**\n   * The `_keyStore` private variable in `LocalKeyManager` is a {@link AgentDataStore} instance used\n   * for storing and managing cryptographic keys. It allows the `LocalKeyManager` class to save,\n   * retrieve, and handle keys efficiently within the local Key Management System (KMS) context.\n   * This variable can be configured to use different storage backends, like in-memory storage or\n   * persistent storage, providing flexibility in key management according to the application's\n   * requirements.\n   */\n  private _keyStore: AgentDataStore<Jwk>;\n\n  constructor({ agent, keyStore }: LocalKmsParams = {}) {\n    this._agent = agent;\n\n    this._keyStore = keyStore ?? new InMemoryKeyStore();\n  }\n\n  /**\n   * Retrieves the `Web5PlatformAgent` execution context.\n   *\n   * @returns The `Web5PlatformAgent` instance that represents the current execution context.\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5PlatformAgent {\n    if (this._agent === undefined) {\n      throw new Error('LocalKeyManager: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5PlatformAgent) {\n    this._agent = agent;\n  }\n\n  public async decrypt({ keyUri, ...params }:\n    KmsCipherParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the cipher algorithm based on the algorithm name.\n    const cipher = this.getAlgorithm({ algorithm }) as Cipher<CipherParams, CipherParams>;\n\n    // Encrypt the data.\n    const ciphertext = await cipher.decrypt({ key: privateKey, ...params });\n\n    return ciphertext;\n  }\n\n  digest(_params: KmsDigestParams): Promise<Uint8Array> {\n    throw new Error('Method not implemented.');\n  }\n\n  public async encrypt({ keyUri, ...params }:\n    KmsCipherParams & AesGcmParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the cipher algorithm based on the algorithm name.\n    const cipher = this.getAlgorithm({ algorithm }) as Cipher<CipherParams, CipherParams>;\n\n    // Encrypt the data.\n    const ciphertext = await cipher.encrypt({ key: privateKey, ...params });\n\n    return ciphertext;\n  }\n\n  /**\n   * Exports a private key identified by the provided key URI from the local KMS.\n   *\n   * @remarks\n   * This method retrieves the key from the key store and returns it. It is primarily used\n   * for extracting keys for backup or transfer purposes.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const privateKey = await keyManager.exportKey({ keyUri });\n   * ```\n   *\n   * @param params - Parameters for exporting the key.\n   * @param params.keyUri - The key URI identifying the key to export.\n   *\n   * @returns A Promise resolving to the JWK representation of the exported key.\n   */\n  public async exportKey({ keyUri }:\n    KmsExportKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    return privateKey;\n  }\n\n  /**\n   * Generates a new cryptographic key in the local KMS with the specified algorithm and returns a\n   * unique key URI which can be used to reference the key in subsequent operations.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * console.log(keyUri); // Outputs the key URI\n   * ```\n   *\n   * @param params - The parameters for key generation.\n   * @param params.algorithm - The algorithm to use for key generation, defined in `SupportedAlgorithm`.\n   *\n   * @returns A Promise that resolves to the key URI, a unique identifier for the generated key.\n   */\n  public async generateKey({ algorithm: algorithmIdentifier }:\n    LocalKmsGenerateKeyParams\n  ): Promise<KeyIdentifier> {\n    // Determine the algorithm name based on the given algorithm identifier.\n    const algorithm = this.getAlgorithmName({ key: { alg: algorithmIdentifier } });\n\n    // Get the key generator implementation based on the algorithm.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as KeyGenerator<LocalKmsGenerateKeyParams, Jwk>;\n\n    // Generate the key.\n    const privateKey = await keyGenerator.generateKey({ algorithm: algorithmIdentifier });\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    privateKey.kid ??= await computeJwkThumbprint({ jwk: privateKey });\n\n    // Compute the key URI for the key.\n    const keyUri = await this.getKeyUri({ key: privateKey });\n\n    // Store the key in the key store.\n    await this._keyStore.set({\n      id                : keyUri,\n      data              : privateKey,\n      agent             : this.agent,\n      preventDuplicates : false,\n      useCache          : true\n    });\n\n    return keyUri;\n  }\n\n  /**\n   * Computes the Key URI for a given public JWK (JSON Web Key).\n   *\n   * @remarks\n   * This method generates a {@link https://datatracker.ietf.org/doc/html/rfc3986 | URI}\n   * (Uniform Resource Identifier) for the given JWK, which uniquely identifies the key across all\n   * `CryptoApi` implementations. The key URI is constructed by appending the\n   * {@link https://datatracker.ietf.org/doc/html/rfc7638 | JWK thumbprint} to the prefix\n   * `urn:jwk:`. The JWK thumbprint is deterministically computed from the JWK and is consistent\n   * regardless of property order or optional property inclusion in the JWK. This ensures that the\n   * same key material represented as a JWK will always yield the same thumbprint, and therefore,\n   * the same key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * const keyUriFromPublicKey = await keyManager.getKeyUri({ key: publicKey });\n   * console.log(keyUri === keyUriFromPublicKey); // Outputs `true`\n   * ```\n   *\n   * @param params - The parameters for getting the key URI.\n   * @param params.key - The JWK for which to compute the key URI.\n   *\n   * @returns A Promise that resolves to the key URI as a string.\n   */\n  public async getKeyUri({ key }:\n    KmsGetKeyUriParams\n  ): Promise<KeyIdentifier> {\n    // Compute the JWK thumbprint.\n    const jwkThumbprint = await computeJwkThumbprint({ jwk: key });\n\n    // Construct the key URI by appending the JWK thumbprint to the key URI prefix.\n    const keyUri = `${KEY_URI_PREFIX_JWK}${jwkThumbprint}`;\n\n    return keyUri;\n  }\n\n  /**\n   * Retrieves the public key associated with a previously generated private key, identified by\n   * the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const publicKey = await keyManager.getPublicKey({ keyUri });\n   * ```\n   *\n   * @param params - The parameters for retrieving the public key.\n   * @param params.keyUri - The key URI of the private key to retrieve the public key for.\n   *\n   * @returns A Promise that resolves to the public key in JWK format.\n   */\n  public async getPublicKey({ keyUri }:\n    KmsGetPublicKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the key generator based on the algorithm name.\n    const keyGenerator = this.getAlgorithm({ algorithm }) as AsymmetricKeyGenerator<LocalKmsGenerateKeyParams, Jwk, GetPublicKeyParams>;\n\n    // Get the public key properties from the private JWK.\n    const publicKey = await keyGenerator.getPublicKey({ key: privateKey });\n\n    return publicKey;\n  }\n\n  /**\n   * Imports a private key into the local KMS.\n   *\n   * @remarks\n   * This method stores the provided JWK in the key store, making it available for subsequent\n   * cryptographic operations. It is particularly useful for initializing the KMS with pre-existing\n   * keys or for restoring keys from backups.\n   *\n   * Note that, if defined, the `kid` (key ID) property of the JWK is used as the key URI for the\n   * imported key. If the `kid` property is not provided, the key URI is computed from the JWK\n   * thumbprint of the key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const privateKey = { ... } // A private key in JWK format\n   * const keyUri = await keyManager.importKey({ key: privateKey });\n   * ```\n   *\n   * @param params - Parameters for importing the key.\n   * @param params.key - The private key to import to in JWK format.\n   *\n   * @returns A Promise resolving to the key URI, uniquely identifying the imported key.\n   */\n  public async importKey({ key }:\n    KmsImportKeyParams\n  ): Promise<KeyIdentifier> {\n    if (!isPrivateJwk(key)) throw new TypeError('Invalid key provided. Must be a private key in JWK format.');\n\n    // Make a deep copy of the key to avoid mutating the original.\n    const privateKey = structuredClone(key);\n\n    // If the key ID is undefined, set it to the JWK thumbprint.\n    privateKey.kid ??= await computeJwkThumbprint({ jwk: privateKey });\n\n    // Compute the key URI for the key.\n    const keyUri = await this.getKeyUri({ key: privateKey });\n\n    // Store the key in the key store.\n    await this._keyStore.set({\n      id                : keyUri,\n      data              : privateKey,\n      agent             : this.agent,\n      preventDuplicates : true,\n      useCache          : true\n    });\n\n    return keyUri;\n  }\n\n  /**\n   * Signs the provided data using the private key identified by the provided key URI.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * private key identified by the provided key URI to sign the provided data. The signature can\n   * later be verified by parties with access to the corresponding public key, ensuring that the\n   * data has not been tampered with and was indeed signed by the holder of the private key.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * ```\n   *\n   * @param params - The parameters for the signing operation.\n   * @param params.keyUri - The key URI of the private key to use for signing.\n   * @param params.data - The data to sign.\n   *\n   * @returns A Promise resolving to the digital signature as a `Uint8Array`.\n   */\n  public async sign({ keyUri, data }:\n    KmsSignParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const privateKey = await this.getPrivateKey({ keyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key: privateKey });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Sign the data.\n    const signature = signer.sign({ data, key: privateKey });\n\n    return signature;\n  }\n\n  public async unwrapKey({ wrappedKeyBytes, wrappedKeyAlgorithm, decryptionKeyUri }:\n    LocalKmsUnwrapKeyParams\n  ): Promise<Jwk> {\n    // Get the private key from the key store.\n    const decryptionKey = await this.getPrivateKey({ keyUri: decryptionKeyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: decryptionKey });\n\n    // Get the key wrapping algorithm based on the algorithm name.\n    const keyWrapper = this.getAlgorithm({ algorithm }) as KeyWrapper<WrapKeyParams, UnwrapKeyParams>;\n\n    // Decrypt the key.\n    const unwrappedKey = await keyWrapper.unwrapKey({ wrappedKeyBytes, wrappedKeyAlgorithm, decryptionKey });\n\n    return unwrappedKey;\n  }\n\n  /**\n   * Verifies a digital signature associated the provided data using the provided key.\n   *\n   * @remarks\n   * This method uses the signature algorithm determined by the `alg` and/or `crv` properties of the\n   * provided key to check the validity of a digital signature against the original data. It\n   * confirms whether the signature was created by the holder of the corresponding private key and\n   * that the data has not been tampered with.\n   *\n   * @example\n   * ```ts\n   * const keyManager = new LocalKeyManager();\n   * const keyUri = await keyManager.generateKey({ algorithm: 'Ed25519' });\n   * const data = new TextEncoder().encode('Message to sign');\n   * const signature = await keyManager.sign({ keyUri, data });\n   * const isSignatureValid = await keyManager.verify({ keyUri, data, signature });\n   * ```\n   *\n   * @param params - The parameters for the verification operation.\n   * @param params.key - The key to use for verification.\n   * @param params.signature - The signature to verify.\n   * @param params.data - The data to verify.\n   *\n   * @returns A Promise resolving to a boolean indicating whether the signature is valid.\n   */\n  public async verify({ key, signature, data }:\n    KmsVerifyParams\n  ): Promise<boolean> {\n    // Determine the algorithm name based on the JWK's `alg` and `crv` properties.\n    const algorithm = this.getAlgorithmName({ key });\n\n    // Get the signature algorithm based on the algorithm name.\n    const signer = this.getAlgorithm({ algorithm }) as Signer<SignParams, VerifyParams>;\n\n    // Verify the signature.\n    const isSignatureValid = signer.verify({ key, signature, data });\n\n    return isSignatureValid;\n  }\n\n  public async wrapKey({ unwrappedKey, encryptionKeyUri }:\n    KmsWrapKeyParams\n  ): Promise<Uint8Array> {\n    // Get the private key from the key store.\n    const encryptionKey = await this.getPrivateKey({ keyUri: encryptionKeyUri });\n\n    // Determine the algorithm name based on the JWK's `alg` property.\n    const algorithm = this.getAlgorithmName({ key: encryptionKey });\n\n    // Get the key wrapping algorithm based on the algorithm name.\n    const keyWrapper = this.getAlgorithm({ algorithm }) as KeyWrapper<WrapKeyParams, UnwrapKeyParams>;\n\n    // Encrypt the key.\n    const wrappedKeyBytes = await keyWrapper.wrapKey({ unwrappedKey, encryptionKey });\n\n    return wrappedKeyBytes;\n  }\n\n  public async deleteKey({ keyUri }:{ keyUri: KeyIdentifier }): Promise<void> {\n    // Get the private key from the key store.\n    const jwk = await this._keyStore.get({ id: keyUri, agent: this.agent, useCache: true });\n    if (!jwk) {\n      throw new Error(`Key not found: ${keyUri}`);\n    }\n\n    await this._keyStore.delete({ id: keyUri, agent: this.agent });\n  }\n\n  /**\n   * Retrieves an algorithm implementation instance based on the provided algorithm name.\n   *\n   * @remarks\n   * This method checks if the requested algorithm is supported and returns a cached instance\n   * if available. If an instance does not exist, it creates and caches a new one. This approach\n   * optimizes performance by reusing algorithm instances across cryptographic operations.\n   *\n   * @example\n   * ```ts\n   * const signer = this.getAlgorithm({ algorithm: 'Ed25519' });\n   * ```\n   *\n   * @param params - The parameters for retrieving the algorithm implementation.\n   * @param params.algorithm - The name of the algorithm to retrieve.\n   *\n   * @returns An instance of the requested algorithm implementation.\n   *\n   * @throws Error if the requested algorithm is not supported.\n   */\n  private getAlgorithm({ algorithm }: {\n    algorithm: SupportedAlgorithm;\n  }): InstanceType<typeof CryptoAlgorithm> {\n    // Check if algorithm is supported.\n    const AlgorithmImplementation = supportedAlgorithms[algorithm]?.['implementation'];\n    if (!AlgorithmImplementation) {\n      throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Algorithm not supported: ${algorithm}`);\n    }\n\n    // Check if instance already exists for the `AlgorithmImplementation`.\n    if (!this._algorithmInstances.has(AlgorithmImplementation)) {\n      // If not, create a new instance and store it in the cache\n      this._algorithmInstances.set(AlgorithmImplementation, new AlgorithmImplementation());\n    }\n\n    // Return the cached instance\n    return this._algorithmInstances.get(AlgorithmImplementation)!;\n  }\n\n  /**\n   * Determines the algorithm name based on the key's properties.\n   *\n   * @remarks\n   * This method facilitates the identification of the correct algorithm for cryptographic\n   * operations based on the `alg` or `crv` properties of a {@link Jwk | JWK}.\n   *\n   * @example\n   * ```ts\n   * const publicKey = { ... }; // Public key in JWK format\n   * const algorithm = this.getAlgorithmName({ key: publicKey });\n   * ```\n   *\n   * @param params - The parameters for determining the algorithm name.\n   * @param params.key - A JWK containing the `alg` or `crv` properties.\n   *\n   * @returns The algorithm name associated with the key.\n   *\n   * @throws Error if the algorithm name cannot be determined from the provided input.\n   */\n  private getAlgorithmName({ key }: {\n    key: { alg?: string, crv?: string };\n  }): SupportedAlgorithm {\n    const algProperty = key.alg;\n    const crvProperty = key.crv;\n\n    for (const algorithmIdentifier of Object.keys(supportedAlgorithms) as SupportedAlgorithm[]) {\n      const algorithmNames = supportedAlgorithms[algorithmIdentifier].names as readonly string[];\n      if (algProperty && algorithmNames.includes(algProperty)) {\n        return algorithmIdentifier;\n      } else if (crvProperty && algorithmNames.includes(crvProperty)) {\n        return algorithmIdentifier;\n      }\n    }\n\n    throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported,\n      `Algorithm not supported based on provided input: alg=${algProperty}, crv=${crvProperty}. ` +\n      'Please check the documentation for the list of supported algorithms.'\n    );\n  }\n\n  /**\n   * Retrieves a private key from the key store based on the provided key URI.\n   *\n   * @example\n   * ```ts\n   * const privateKey = this.getPrivateKey({ keyUri: 'urn:jwk:...' });\n   * ```\n   *\n   * @param params - Parameters for retrieving the private key.\n   * @param params.keyUri - The key URI identifying the private key to retrieve.\n   *\n   * @returns A Promise resolving to the JWK representation of the private key.\n   *\n   * @throws Error if the key is not found in the key store.\n   */\n  private async getPrivateKey({ keyUri }: {\n    keyUri: KeyIdentifier;\n  }): Promise<Jwk> {\n    // Get the private key from the key store.\n    const privateKey = await this._keyStore.get({ id: keyUri, agent: this.agent, useCache: true });\n\n    if (!privateKey) {\n      throw new Error(`Key not found: ${keyUri}`);\n    }\n\n    return privateKey;\n  }\n}", "import type { JoseHeaderParams, Jwk, KeyIdentifier } from '@web5/crypto';\n\nimport { Convert } from '@web5/common';\n\nimport type { CryptoApi } from '../types/crypto-api.js';\nimport type { KeyManager } from '../types/key-manager.js';\n\nimport { CryptoError, CryptoErrorCode } from '../crypto-error.js';\n\n/**\n * Specifies options for decrypting a JWE, allowing the caller to define constraints on the JWE\n * decryption process, particularly regarding the algorithms used.\n *\n * These options ensure that only expected and permitted algorithms are utilized during the\n * decryption, enhancing security by preventing unexpected algorithm usage.\n */\nexport interface JweDecryptOptions {\n  /**\n   * The allowed \"alg\" (Algorithm) Header Parameter values.\n   *\n   * These values specify the cryptographic algorithms that are permissible for decrypting\n   * the Content Encryption Key (CEK) or for key agreement to determine the CEK.\n   *\n   * Note: If not specified, all algorithm values are considered allowed, which might not be\n   * desirable in all contexts.\n   */\n  allowedAlgValues?: string[];\n\n  /**\n   * The allowed \"enc\" (Encryption) Header Parameter values.\n   *\n   * These values determine the cryptographic algorithms that can be used for decrypting the\n   * ciphertext and protecting the integrity of the plaintext and Additional Authenticated Data.\n   *\n   * Note: If left unspecified, it implies that all encryption algorithms are acceptable, which may\n   * not be secure in every scenario.\n   *\n   */\n  allowedEncValues?: string[];\n}\n\n/**\n * Placeholder for specifying options during the JWE encryption process. Currently, this interface\n * does not define any specific options but can be extended in the future to include parameters\n * that control various aspects of the JWE encryption workflow.\n */\nexport interface JweEncryptOptions {}\n\n/**\n * JSON Web Encryption (JWE) Header Parameters\n *\n * The Header Parameter names for use in JWEs are registered in the IANA \"JSON Web Signature and\n * Encryption Header Parameters\" registry.\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7516#section-4.1 | RFC 7516, Section 4.1}\n */\nexport interface JweHeaderParams extends JoseHeaderParams {\n  /**\n   * Algorithm Header Parameter\n   *\n   * Identifies the cryptographic algorithm used to encrypt or determine the value of the Content\n   * Encryption Key (CEK). The encrypted content is not usable if the \"alg\" value does not represent\n   * a supported algorithm, or if the recipient does not have a key that can be used with that\n   * algorithm.\n   *\n   * \"alg\" values should either be registered in the IANA \"JSON Web Signature and Encryption\n   * Algorithms\" registry or be a value that contains a Collision-Resistant Name. The \"alg\" value is\n   * a case-sensitive ASCII string.  This Header Parameter MUST be present and MUST be understood\n   * and processed by implementations.\n   *\n   * @see {@link https://datatracker.ietf.org/doc/html/rfc7516#section-4.1.1 | RFC 7516, Section 4.1.1}\n   */\n  alg:\n    // AES Key Wrap with default initial value using 128-bit key\n    | 'A128KW'\n    // AES Key Wrap with default initial value using 192-bit key\n    | 'A192KW'\n    // AES Key Wrap with default initial value using 256-bit key\n    | 'A256KW'\n    // Direct use of a shared symmetric key as the CEK\n    | 'dir'\n    // Elliptic Curve Diffie-Hellman Ephemeral Static key agreement using Concat KDF\n    | 'ECDH-ES'\n    // ECDH-ES using Concat KDF and CEK wrapped with \"A128KW\"\n    | 'ECDH-ES+A128KW'\n    // ECDH-ES using Concat KDF and CEK wrapped with \"A192KW\"\n    | 'ECDH-ES+A192KW'\n    // ECDH-ES using Concat KDF and CEK wrapped with \"A256KW\"\n    | 'ECDH-ES+A256KW'\n    // Key wrapping with AES GCM using 128-bit key\n    | 'A128GCMKW'\n    // Key wrapping with AES GCM using 192-bit key\n    | 'A192GCMKW'\n    // Key wrapping with AES GCM using 256-bit key\n    | 'A256GCMKW'\n    // PBES2 with HMAC SHA-256 and \"A128KW\" wrapping\n    | 'PBES2-HS256+A128KW'\n    // PBES2 with HMAC SHA-384 and \"A192KW\" wrapping\n    | 'PBES2-HS384+A192KW'\n    // PBES2 with HMAC SHA-512 and \"A256KW\" wrapping\n    | 'PBES2-HS512+A256KW'\n    // PBES2 with HMAC SHA-512 and \"XC20PKW\" wrapping\n    | 'PBES2-HS512+XC20PKW'\n    // an unregistered, case-sensitive, collision-resistant string\n    | string;\n\n  /**\n   * Agreement PartyUInfo Header Parameter\n   *\n   * The \"apu\" (agreement PartyUInfo) value is a base64url-encoded octet sequence containing\n   * information about the producer of the JWE.  This information is used by the recipient to\n   * determine the key agreement algorithm and key encryption algorithm to use to decrypt the JWE.\n   *\n   * Note: This parameter is intended only for use when the recipient is a key agreement algorithm\n   * that uses public key cryptography.\n   */\n  apu?: string;\n\n  /**\n   * Agreement PartyVInfo Header Parameter\n   *\n   * The \"apv\" (agreement PartyVInfo) value is a base64url-encoded octet sequence containing\n   * information about the recipient of the JWE.  This information is used by the recipient to\n   * determine the key agreement algorithm and key encryption algorithm to use to decrypt the JWE.\n   *\n   * Note: This parameter is intended only for use when the recipient is a key agreement algorithm\n   * that uses public key cryptography.\n   */\n  apv?: string;\n\n  /**\n   * Critical Header Parameter\n   *\n   * Indicates that extensions to JOSE RFCs are being used that MUST be understood and processed.\n   */\n  crit?: string[];\n\n  /**\n   * Encryption Algorithm Header Parameter\n   *\n   * Identifies the content encryption algorithm used to encrypt and integrity-protect (also\n   * known as \"authenticated encryption\") the plaintext and to integrity-protect the Additional\n   * Authenticated Data (AAD), if any.  This algorithm MUST be an AEAD algorithm with a specified\n   * key length.\n   *\n   * The encrypted content is not usable if the \"enc\" value does not represent a supported\n   * algorithm.  \"enc\" values should either be registered in the IANA \"JSON Web Signature and\n   * Encryption Algorithms\" registry or be a value that contains a Collision-Resistant Name. The\n   * \"enc\" value is a case-sensitive ASCII string containing a StringOrURI value. This Header\n   * Parameter MUST be present and MUST be understood and processed by implementations.\n   *\n   * @see {@link https://datatracker.ietf.org/doc/html/rfc7516#section-4.1.2 | RFC 7516, Section 4.1.2}\n   */\n  enc:\n    // AES_128_CBC_HMAC_SHA_256 authenticated encryption algorithm,\n    // as defined in RFC 7518, Section 5.2.3\n    | 'A128CBC-HS256'\n    // AES_192_CBC_HMAC_SHA_384 authenticated encryption algorithm,\n    // as defined in RFC 7518, Section 5.2.4\n    | 'A192CBC-HS384'\n    // AES_256_CBC_HMAC_SHA_512 authenticated encryption algorithm,\n    // as defined in RFC 7518, Section 5.2.5\n    | 'A256CBC-HS512'\n    // AES GCM using 128-bit key\n    | 'A128GCM'\n    // AES GCM using 192-bit key\n    | 'A192GCM'\n    // AES GCM using 256-bit key\n    | 'A256GCM'\n    // XChaCha20-Poly1305 authenticated encryption algorithm\n    | 'XC20P'\n    // an unregistered, case-sensitive, collision-resistant string\n    | string;\n\n  /**\n   * Ephemeral Public Key Header Parameter\n   *\n   * The \"epk\" (ephemeral public key) value created by the originator for the use in key agreement\n   * algorithms.  It is the ephemeral public key that corresponds to the key used to encrypt the\n   * JWE.  This value is represented as a JSON Web Key (JWK).\n   *\n   * Note: This parameter is intended only for use when the recipient is a key agreement algorithm\n   * that uses public key cryptography.\n   */\n  epk?: Jwk;\n\n  /**\n   * Initialization Vector Header Parameter\n   *\n   * The \"iv\" (initialization vector) value is a base64url-encoded octet sequence used by the\n   * specified \"enc\" algorithm.  The length of this Initialization Vector value MUST be exactly\n   * equal to the value that would be produced by the \"enc\" algorithm.\n   *\n   * Note: With symmetric encryption algorithms such as AES GCM, this Header Parameter MUST\n   * be present and MUST be understood and processed by implementations.\n   */\n  iv?: string;\n\n  /**\n   * PBES2 Count Header Parameter\n   *\n   * The \"p2c\" (PBES2 count) value is an integer indicating the number of iterations of the PBKDF2\n   * algorithm performed during key derivation.\n   *\n   * Note: The iteration count adds computational expense, ideally compounded by the possible range\n   * of keys introduced by the salt.  A minimum iteration count of 1000 is RECOMMENDED.\n   */\n  p2c?: number;\n\n  /**\n   * PBES2 Salt Input Header Parameter\n   *\n   * The \"p2s\" (PBES2 salt) value is a base64url-encoded octet sequence used as the salt value\n   * input to the PBKDF2 algorithm during key derivation.\n   *\n   * The salt value used is (UTF8(Alg) || 0x00 || Salt Input), where Alg is the \"alg\" (algorithm)\n   * Header Parameter value.\n   *\n   * Note: The salt value is used to ensure that each key derived from the master key is\n   * independent of every other key. A suitable source of salt value is a sequence of\n   * cryptographically random bytes containing 8 or more octets.\n   */\n  p2s?: string;\n\n  /**\n   * Authentication Tag Header Parameter\n   *\n   * The \"tag\" value is a base64url-encoded octet sequence containing the value of the\n   * Authentication Tag output by the specified \"enc\" algorithm.  The length of this\n   * Authentication Tag value MUST be exactly equal to the value that would be produced by the\n   * \"enc\" algorithm.\n   *\n   * Note: With authenticated encryption algorithms such as AES GCM, this Header Parameter MUST\n   * be present and MUST be understood and processed by implementations.\n   */\n  tag?: string;\n\n  /**\n   * Additional Public or Private Header Parameter names.\n   */\n  [key: string]: unknown;\n}\n\n/**\n * Represents the result of the JWE key management encryption process, encapsulating the Content\n * Encryption Key (CEK) and optionally the encrypted CEK.\n */\nexport interface JweKeyManagementEncryptResult {\n  /**\n   * The Content Encryption Key (CEK) used for encrypting the JWE payload. It can be a Key\n   * Identifier such as a KMS URI or a JSON Web Key (JWK).\n   */\n  cek: KeyIdentifier | Jwk;\n\n  /**\n   * The encrypted version of the CEK, provided as a byte array. The encrypted version of the CEK\n   * is returned for all key management modes other than \"dir\" (Direct Encryption Mode).\n   */\n  encryptedKey?: Uint8Array;\n}\n\n/**\n * Defines the parameters required to decrypt a JWE encrypted key, including the key management\n * details.\n *\n * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.\n * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.\n */\nexport interface JweKeyManagementDecryptParams<TKeyManager, TCrypto> {\n  /**\n   * The decryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),\n   * or raw key material represented as a byte array.\n   */\n  key: KeyIdentifier | Jwk | Uint8Array;\n\n  /**\n   * The encrypted key extracted from the JWE, represented as a byte array. This parameter is\n   * optional and is used when the key is wrapped.\n   */\n  encryptedKey?: Uint8Array;\n\n  /**\n   * The JWE header parameters that define the characteristics of the decryption process, specifying\n   * the algorithm and encryption method among other settings.\n   */\n  joseHeader: JweHeaderParams;\n\n  /** Key Manager instance\u00DF responsible for managing cryptographic keys. */\n  keyManager: TKeyManager;\n\n  /** Crypto API instance that provides the necessary cryptographic operations. */\n  crypto: TCrypto;\n}\n\n/**\n * Defines the parameters required for encrypting a JWE CEK, including the key management details.\n *\n * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.\n * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.\n */\nexport interface JweKeyManagementEncryptParams<TKeyManager, TCrypto> {\n  /**\n   * The encryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),\n   * or raw key material represented as a byte array.\n   */\n  key: KeyIdentifier | Jwk | Uint8Array;\n\n  /**\n   * The JWE header parameters that define the characteristics of the encryption process, specifying\n   * the algorithm and encryption method among other settings.\n   */\n  joseHeader: JweHeaderParams;\n\n  /** Key Manager instance\u00DF responsible for managing cryptographic keys. */\n  keyManager: TKeyManager;\n\n  /** Crypto API instance that provides the necessary cryptographic operations. */\n  crypto: TCrypto;\n}\n\n/**\n * Checks if the provided object is a valid JWE (JSON Web Encryption) header.\n *\n * This function evaluates whether the given object adheres to the structure expected for\n * a JWE header, specifically looking for the presence and proper format of the \"alg\" (algorithm)\n * and \"enc\" (encryption algorithm) properties, which are essential for defining the JWE's\n * cryptographic operations.\n *\n * @example\n * ```ts\n * const header = {\n *   alg: 'dir',\n *   enc: 'A256GCM'\n * };\n *\n * if (isValidJweHeader(header)) {\n *   console.log('The object is a valid JWE header.');\n * } else {\n *   console.log('The object is not a valid JWE header.');\n * }\n * ```\n *\n * @param obj - The object to be validated as a JWE header.\n * @returns Returns `true` if the object is a valid JWE header, otherwise `false`.\n */\nexport function isValidJweHeader(obj: unknown): obj is JweHeaderParams {\n  return typeof obj === 'object' && obj !== null\n    && 'alg' in obj && obj.alg !== undefined\n    && 'enc' in obj && obj.enc !== undefined;\n}\n\n/**\n * The `JweKeyManagement` class implements the key management aspects of JSON Web Encryption (JWE)\n * as specified in {@link https://datatracker.ietf.org/doc/html/rfc7516 | RFC 7516}.\n *\n * It supports algorithms for encrypting and decrypting keys, thereby enabling the secure\n * transmission of information where the payload is encrypted, and the encryption key is also\n * encrypted or agreed upon using key agreement techniques.\n *\n * The choice of algorithm is determined by the \"alg\" parameter in the JWE\n * header, and the class is designed to handle the intricacies associated with each algorithm,\n * ensuring the secure handling of the encryption keys.\n *\n * Supported algorithms include:\n * - `\"dir\"`: Direct Encryption Mode\n * - `\"PBES2-HS256+A128KW\"`, `\"PBES2-HS384+A192KW\"`, `\"PBES2-HS512+A256KW\"`: Password-Based\n *   Encryption Mode with Key Wrapping (PBES2) using HMAC-SHA and AES Key Wrap algorithms for key\n *   wrapping and encryption.\n *\n * @example\n * // To encrypt a key:\n * const keyEncryptionKey = Convert.string(passphrase).toUint8Array()\n * const { cek, encryptedKey: encryptedCek } = await JweKeyManagement.encrypt({\n *   key: keyEncryptionKey,\n *   joseHeader: {\n *     alg: 'PBES2-HS512+A256KW',\n *     enc: 'A256GCM',\n *     p2c : 210_000,\n       p2s : Convert.uint8Array(saltInput).toBase64Url()\n *   },\n *   crypto: new AgentCryptoApi(),\n * });\n *\n * // To decrypt a key:\n * const cek = await JweKeyManagement.decrypt({\n *   key: keyEncryptionKey,\n *   encryptedKey: encryptedCek,\n *   joseHeader: {\n *     alg: 'PBES2-HS512+A256KW',\n *     enc: 'A256GCM',\n *     p2c : 210_000,\n       p2s : Convert.uint8Array(saltInput).toBase64Url()\n *   },\n *   crypto: new AgentCryptoApi(),\n * });\n */\nexport class JweKeyManagement {\n  /**\n   * Decrypts the encrypted key (JWE Encrypted Key) using the specified key encryption algorithm\n   * defined in the JWE Header's \"alg\" parameter.\n   *\n   * This method supports multiple key management algorithms, including Direct Encryption (dir) and\n   * PBES2 schemes with key wrapping.\n   *\n   * The method takes a key, which can be a Key Identifier, JWK, or raw byte array, and the\n   * encrypted key along with the JWE header. It returns the decrypted Content Encryption Key (CEK)\n   * which can then be used to decrypt the JWE ciphertext.\n   *\n   * @example\n   * ```ts\n   * // Decrypting the CEK with the PBES2-HS512+A256KW algorithm\n   * const cek = await JweKeyManagement.decrypt({\n   *   key: Convert.string(passphrase).toUint8Array(),\n   *   encryptedKey: encryptedCek,\n   *   joseHeader: {\n   *     alg: 'PBES2-HS512+A256KW',\n   *     enc: 'A256GCM',\n   *     p2c: 210_000,\n   *     p2s: Convert.uint8Array(saltInput).toBase64Url(),\n   *   },\n   *   crypto: new AgentCryptoApi()\n   * });\n   * ```\n   *\n   * @param params - The decryption parameters.\n   * @throws Throws an error if the key management algorithm is not supported or if required\n   *         parameters are missing or invalid.\n   */\n  public static async decrypt<TKeyManager extends KeyManager, TCrypto extends CryptoApi>({\n    key, encryptedKey, joseHeader, crypto\n  }: JweKeyManagementDecryptParams<TKeyManager, TCrypto>\n  ): Promise<KeyIdentifier | Jwk> {\n    // Determine the Key Management Mode employed by the algorithm specified by the \"alg\"\n    // (algorithm) Header Parameter.\n    switch (joseHeader.alg) {\n      case 'dir': {\n        // In Direct Encryption mode, a JWE \"Encrypted Key\" is not provided. Instead, the\n        // provided key management `key` is directly used as the Content Encryption Key (CEK) to\n        // decrypt the JWE payload.\n\n        // Verify that the JWE Encrypted Key value is empty.\n        if (encryptedKey !== undefined) {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JWE \"encrypted_key\" is not allowed when using \"dir\" (Direct Encryption Mode).');\n        }\n\n        // Verify the key management `key` is a Key Identifier or JWK.\n        if (key instanceof Uint8Array) {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Key management \"key\" must be a Key URI or JWK when using \"dir\" (Direct Encryption Mode).');\n        }\n\n        // return the key management `key` as the CEK.\n        return key;\n      }\n\n      case 'PBES2-HS256+A128KW':\n      case 'PBES2-HS384+A192KW':\n      case 'PBES2-HS512+A256KW': {\n        // In Key Encryption mode (PBES2) with key wrapping (A128KW, A192KW, A256KW), the given\n        // passphrase, salt (p2s), and iteration count (p2c) are used with the PBKDF2 key derivation\n        // function to derive the Key Encryption Key (KEK).  The KEK is then used to decrypt the JWE\n        // Encrypted Key to obtain the Content Encryption Key (CEK).\n\n        if (typeof joseHeader.p2c !== 'number') {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JOSE Header \"p2c\" (PBES2 Count) is missing or not a number.');\n        }\n\n        if (typeof joseHeader.p2s !== 'string') {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JOSE Header \"p2s\" (PBES2 salt) is missing or not a string.');\n        }\n\n        // Throw an error if the key management `key` is not a byte array. For PBES2, the key is\n        // expected to be a low-entropy passphrase as a byte array.\n        if (!(key instanceof Uint8Array)) {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Key management \"key\" must be a Uint8Array when using \"PBES2\" (Key Encryption Mode).');\n        }\n\n        // Verify that the JWE Encrypted Key value is present.\n        if (encryptedKey === undefined) {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JWE \"encrypted_key\" is required when using \"PBES2\" (Key Encryption Mode).');\n        }\n\n        // Per {@link https://www.rfc-editor.org/rfc/rfc7518.html#section-4.8.1.1 | RFC 7518, Section 4.8.1.1},\n        // the salt value used with PBES2 should be of the format (UTF8(Alg) || 0x00 || Salt Input),\n        // where Alg is the \"alg\" (algorithm) Header Parameter value. This reduces the potential for\n        // a precomputed dictionary attack (also known as a rainbow table attack).\n        let salt: Uint8Array;\n        try {\n          salt = new Uint8Array([\n            ...Convert.string(joseHeader.alg).toUint8Array(),\n            0x00,\n            ...Convert.base64Url(joseHeader.p2s).toUint8Array()\n          ]);\n        } catch {\n          throw new CryptoError(CryptoErrorCode.EncodingError, 'Failed to decode the JOSE Header \"p2s\" (PBES2 salt) value.');\n        }\n\n        // Derive the Key Encryption Key (KEK) from the given passphrase, salt, and iteration count.\n        const kek = await crypto.deriveKey({\n          algorithm    : joseHeader.alg,\n          baseKeyBytes : key,\n          iterations   : joseHeader.p2c,\n          salt\n        });\n\n        if (!(kek.alg && ['A128KW', 'A192KW', 'A256KW'].includes(kek.alg))) {\n          throw new CryptoError(CryptoErrorCode.AlgorithmNotSupported, `Unsupported Key Encryption Algorithm (alg) value: ${kek.alg}`);\n        }\n\n        // Decrypt the Content Encryption Key (CEK) with the derived KEK.\n        return await crypto.unwrapKey({\n          decryptionKey       : kek,\n          wrappedKeyBytes     : encryptedKey,\n          wrappedKeyAlgorithm : joseHeader.enc\n        });\n      }\n\n      default: {\n        throw new CryptoError(\n          CryptoErrorCode.AlgorithmNotSupported,\n          `Unsupported \"alg\" (Algorithm) Header Parameter value: ${joseHeader.alg}`\n        );\n      }\n    }\n  }\n\n  /**\n   * Encrypts a Content Encryption Key (CEK) using the key management algorithm specified in the\n   * JWE Header's \"alg\" parameter.\n   *\n   * This method supports various key management algorithms, including Direct Encryption (dir) and\n   * PBES2 with key wrapping.\n   *\n   * It generates a random CEK for the specified encryption algorithm in the JWE header, which\n   * can then be used to encrypt the actual payload. For algorithms that require an encrypted key,\n   * it returns the CEK along with the encrypted key.\n   *\n   * @example\n   * ```ts\n   * // Encrypting the CEK with the PBES2-HS512+A256KW algorithm\n   * const { cek, encryptedKey } = await JweKeyManagement.encrypt({\n   *   key: Convert.string(passphrase).toUint8Array(),\n   *   joseHeader: {\n   *     alg: 'PBES2-HS512+A256KW',\n   *     enc: 'A256GCM',\n   *     p2c: 210_000,\n   *     p2s: Convert.uint8Array(saltInput).toBase64Url(),\n   *   },\n   *   crypto: crypto: new AgentCryptoApi()\n   * });\n   * ```\n   *\n   * @param params - The encryption parameters.\n   * @returns The encrypted key result containing the CEK and optionally the encrypted CEK\n   *          (JWE Encrypted Key).\n   * @throws Throws an error if the key management algorithm is not supported or if required\n   *         parameters are missing or invalid.\n   */\n  public static async encrypt<TKeyManager extends KeyManager, TCrypto extends CryptoApi>({\n    key, joseHeader, crypto\n  }: JweKeyManagementEncryptParams<TKeyManager, TCrypto>\n  ): Promise<JweKeyManagementEncryptResult> {\n    let cek: KeyIdentifier | Jwk;\n    let encryptedKey: Uint8Array | undefined;\n\n    // Determine the Key Management Mode employed by the algorithm specified by the \"alg\"\n    // (algorithm) Header Parameter.\n    switch (joseHeader.alg) {\n      case 'dir': {\n        // In Direct Encryption mode (dir), a JWE \"Encrypted Key\" is not provided. Instead, the\n        // provided key management `key` is directly used as the Content Encryption Key (CEK) to\n        // decrypt the JWE payload.\n\n        // Verify that the JWE Encrypted Key value is empty.\n        if (encryptedKey !== undefined) {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JWE \"encrypted_key\" is not allowed when using \"dir\" (Direct Encryption Mode).');\n        }\n\n        // Verify the key management `key` is a Key Identifier or JWK.\n        if (key instanceof Uint8Array) {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Key management \"key\" must be a Key URI or JWK when using \"dir\" (Direct Encryption Mode).');\n        }\n\n        // Set the CEK to the key management `key`.\n        cek = key;\n\n        break;\n      }\n\n      case 'PBES2-HS256+A128KW':\n      case 'PBES2-HS384+A192KW':\n      case 'PBES2-HS512+A256KW': {\n        // In Key Encryption mode (PBES2) with key wrapping (A128KW, A192KW, A256KW), a randomly\n        // generated Content Encryption Key (CEK) is encrypted with a Key Encryption Key (KEK)\n        // derived from the given passphrase, salt (p2s), and iteration count (p2c) using the\n        // PBKDF2 key derivation function.\n\n        if (typeof joseHeader.p2c !== 'number') {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JOSE Header \"p2c\" (PBES2 Count) is missing or not a number.');\n        }\n\n        if (typeof joseHeader.p2s !== 'string') {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JOSE Header \"p2s\" (PBES2 salt) is missing or not a string.');\n        }\n\n        // Throw an error if the key management `key` is not a byte array.\n        if (!(key instanceof Uint8Array)) {\n          throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Key management \"key\" must be a Uint8Array when using \"PBES2\" (Key Encryption Mode).');\n        }\n\n        // Generate a random Content Encryption Key (CEK) using the algorithm specified by the \"enc\"\n        // (encryption) Header Parameter.\n        cek = await crypto.generateKey({ algorithm: joseHeader.enc });\n\n        // Per {@link https://www.rfc-editor.org/rfc/rfc7518.html#section-4.8.1.1 | RFC 7518, Section 4.8.1.1},\n        // the salt value used with PBES2 should be of the format (UTF8(Alg) || 0x00 || Salt Input),\n        // where Alg is the \"alg\" (algorithm) Header Parameter value. This reduces the potential for\n        // a precomputed dictionary attack (also known as a rainbow table attack).\n        let salt: Uint8Array;\n        try {\n          salt = new Uint8Array([\n            ...Convert.string(joseHeader.alg).toUint8Array(),\n            0x00,\n            ...Convert.base64Url(joseHeader.p2s).toUint8Array()\n          ]);\n        } catch {\n          throw new CryptoError(CryptoErrorCode.EncodingError, 'Failed to decode the JOSE Header \"p2s\" (PBES2 salt) value.');\n        }\n\n        // Derive a Key Encryption Key (KEK) from the given passphrase, salt, and iteration count.\n        const kek = await crypto.deriveKey({\n          algorithm    : joseHeader.alg,\n          baseKeyBytes : key,\n          iterations   : joseHeader.p2c,\n          salt\n        });\n\n        // Encrypt the randomly generated CEK with the derived Key Encryption Key (KEK).\n        encryptedKey = await crypto.wrapKey({ encryptionKey: kek, unwrappedKey: cek });\n\n        break;\n      }\n\n      default: {\n        throw new CryptoError(\n          CryptoErrorCode.AlgorithmNotSupported,\n          `Unsupported \"alg\" (Algorithm) Header Parameter value: ${joseHeader.alg}`\n        );\n      }\n    }\n\n    return { cek, encryptedKey };\n  }\n}", "import type { Cipher, KeyWrapper } from '@web5/crypto';\n\nimport type { KeyExporter, KeyImporter } from './types/key-io.js';\n\nexport function isCipher<EncryptInput, DecryptInput>(\n  obj: unknown\n): obj is Cipher<EncryptInput, DecryptInput> {\n  return (\n    obj !== null && typeof obj === 'object'\n    && 'encrypt' in obj && typeof obj.encrypt === 'function'\n    && 'decrypt' in obj && typeof obj.decrypt === 'function'\n  );\n}\n\nexport function isKeyExporter<ExportKeyInput, ExportKeyOutput>(\n  obj: unknown\n): obj is KeyExporter<ExportKeyInput, ExportKeyOutput> {\n  return (\n    obj !== null && typeof obj === 'object'\n    && 'exportKey' in obj && typeof obj.exportKey === 'function'\n  );\n}\n\nexport function isKeyImporter<ImportKeyInput, ImportKeyExport>(\n  obj: unknown\n): obj is KeyImporter<ImportKeyInput, ImportKeyExport> {\n  return (\n    obj !== null && typeof obj === 'object'\n    && 'importKey' in obj && typeof obj.importKey === 'function'\n  );\n}\n\nexport function isKeyWrapper<WrapKeyInput, UnwrapKeyInput>(\n  obj: unknown\n): obj is KeyWrapper<WrapKeyInput, UnwrapKeyInput> {\n  return (\n    obj !== null && typeof obj === 'object'\n    && 'wrapKey' in obj && typeof obj.wrapKey === 'function'\n    && 'unwrapKey' in obj && typeof obj.unwrapKey === 'function'\n  );\n}", "export function hasDuplicateProperties(...objects: Array<Record<string, any> | undefined>): boolean {\n  const propertySet = new Set<string>();\n  const objectsWithoutUndefined = objects.filter(Boolean); // Remove any undefined values\n\n  for (const obj of objectsWithoutUndefined) {\n    for (const key in obj) {\n      if (propertySet.has(key)) {\n        return true; // Return true if a duplicate property is found\n      }\n      propertySet.add(key);\n    }\n  }\n\n  return false; // Return false if no duplicates are found\n}", "import type { Jwk, KeyIdentifier } from '@web5/crypto';\n\nimport { Convert } from '@web5/common';\nimport { LocalKeyManager, CryptoUtils } from '@web5/crypto';\n\nimport type { CryptoApi } from '../types/crypto-api.js';\nimport type { KeyManager } from '../types/key-manager.js';\nimport type { JweDecryptOptions, JweEncryptOptions, JweHeaderParams } from './jwe.js';\n\nimport { isCipher } from '../utils.js';\nimport { AgentCryptoApi } from '../../../crypto-api.js';\nimport { JweKeyManagement, isValidJweHeader } from './jwe.js';\nimport { hasDuplicateProperties } from '../../common/object.js';\nimport { CryptoError, CryptoErrorCode } from '../crypto-error.js';\n\n/**\n * Parameters required for decrypting a flattened JWE.\n *\n * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.\n * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.\n */\nexport interface FlattenedJweDecryptParams<TKeyManager, TCrypto> {\n  /** The flattened JWE. */\n  jwe: FlattenedJweParams | FlattenedJwe;\n\n  /**\n   * The decryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),\n   * or raw key material represented as a byte array.\n   */\n  key: KeyIdentifier | Jwk | Uint8Array;\n\n  /** Key Manager instance\u00DF responsible for managing cryptographic keys. */\n  keyManager?: TKeyManager;\n\n  /** Crypto API instance that provides the necessary cryptographic operations. */\n  crypto?: TCrypto;\n\n  /** {@inheritDoc JweDecryptOptions} */\n  options?: JweDecryptOptions;\n}\n\n/**\n * Result of decrypting a flattened JWE, containing the plaintext and related information.\n */\nexport interface FlattenedJweDecryptResult {\n  /** JWE Additional Authenticated Data (AAD). */\n  additionalAuthenticatedData?: Uint8Array;\n\n  /** Plaintext. */\n  plaintext: Uint8Array;\n\n  /** JWE Protected Header. */\n  protectedHeader?: Partial<JweHeaderParams>;\n\n  /** JWE Shared Unprotected Header. */\n  sharedUnprotectedHeader?: Partial<JweHeaderParams>;\n\n  /** JWE Per-Recipient Unprotected Header. */\n  unprotectedHeader?: Partial<JweHeaderParams>;\n}\n\n/**\n * Parameters for encrypting data into a flattened JWE format.\n *\n * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.\n * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.\n */\nexport interface FlattenedJweEncryptParams<TKeyManager, TCrypto> extends FlattenedJweDecryptResult {\n  /**\n   * The encryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),\n   * or raw key material represented as a byte array.\n   */\n  key: KeyIdentifier | Jwk | Uint8Array;\n\n  /** Key Manager instance\u00DF responsible for managing cryptographic keys. */\n  keyManager?: TKeyManager;\n\n  /** Crypto API instance that provides the necessary cryptographic operations. */\n  crypto?: TCrypto;\n\n  /** {@inheritDoc JweEncryptOptions} */\n  options?: JweEncryptOptions;\n}\n\n/**\n * Represents the parameters for a flattened JWE object, typically used in single-recipient\n * scenarios.\n */\nexport interface FlattenedJweParams {\n  /** Base64URL encoded additional authenticated data. */\n  aad?: string;\n\n  /** Base64URL encoded ciphertext. */\n  ciphertext: string;\n\n  /** Base64URL encoded encrypted key. */\n  encrypted_key?: string;\n\n  /** Per-Recipient Unprotected Header parameters. */\n  header?: Partial<JweHeaderParams>;\n\n  /** Base64URL encoded initialization vector. */\n  iv?: string;\n\n  /** Base64URL encoded string of the Protected Header. */\n  protected?: string;\n\n  /** Base64URL encoded authentication tag. */\n  tag?: string;\n\n  /** Shared Unprotected Header parameters. */\n  unprotected?: Partial<JweHeaderParams>;\n}\n\n/**\n * A helper utility function used internally to decode a JWE header parameter from a Base64 URL\n * encoded string to a Uint8Array. It's designed to process individual JWE header parameter values,\n * ensuring they are correctly formatted and decoded.\n *\n * @param param - The name of the JWE header parameter being decoded; used for error messaging.\n * @param value - The Base64 URL encoded string value of the header parameter to decode.\n * @returns The decoded parameter as a Uint8Array, or undefined if the input value is undefined.\n * @throws {@link CryptoError} if the value is not a properly encoded Base64 URL string or if it's\n *         not a string.\n */\nfunction decodeHeaderParam(param: string, value?: string): Uint8Array | undefined {\n  // If the parameter value is not present, return undefined.\n  if (value === undefined) return undefined;\n\n  try {\n    if (typeof value !== 'string') throw new Error();\n    return Convert.base64Url(value).toUint8Array();\n  } catch {\n    throw new CryptoError(CryptoErrorCode.InvalidJwe,\n      `Failed to decode the JWE Header parameter '${param}' from Base64 URL format to ` +\n      'Uint8Array. Ensure the value is properly encoded in Base64 URL format without padding.'\n    );\n  }\n}\n\n/**\n * The `FlattenedJwe` class handles the encryption and decryption of JSON Web Encryption (JWE)\n * objects in the flattened serialization format. This format is a compact, URL-safe means of\n * representing encrypted content, typically used when dealing with a single recipient or when\n * bandwidth efficiency is important.\n *\n * This class provides methods to encrypt plaintext to a flattened JWE and decrypt a flattened JWE\n * back to plaintext, utilizing a variety of supported cryptographic algorithms as specified in the\n * JWE header parameters.\n *\n * @example\n * ```ts\n *  // Example usage of encrypt method\n * const plaintext = new TextEncoder().encode(\"Secret Message\");\n * const key = { kty: \"oct\", k: \"your-secret-key\" }; // Example symmetric key\n * const protectedHeader = { alg: \"dir\", enc: \"A256GCM\" };\n * const encryptedJwe = await FlattenedJwe.encrypt({\n *   plaintext,\n *   protectedHeader,\n *   key,\n * });\n * ```\n *\n * @example\n * // Decryption example\n * const { plaintext, protectedHeader } = await FlattenedJwe.decrypt({\n *   jwe: yourFlattenedJweObject,\n *   key: yourDecryptionKey,\n *   crypto: new YourCryptoApi(),\n * });\n */\nexport class FlattenedJwe {\n  /** Base64URL encoded additional authenticated data. */\n  public aad?: string;\n\n  /** Base64URL encoded ciphertext. */\n  public ciphertext: string = '';\n\n  /** Base64URL encoded encrypted key. */\n  public encrypted_key?: string;\n\n  /** Per-Recipient Unprotected Header parameters. */\n  public header?: Partial<JweHeaderParams>;\n\n  /** Base64URL encoded initialization vector. */\n  public iv?: string;\n\n  /** Base64URL encoded string of the Protected Header. */\n  public protected?: string;\n\n  /** Base64URL encoded authentication tag. */\n  public tag?: string;\n\n  /** Shared Unprotected Header parameters. */\n  public unprotected?: Partial<JweHeaderParams>;\n\n  constructor(params: FlattenedJweParams) {\n    Object.assign(this, params);\n  }\n\n  public static async decrypt<\n    TKeyManager extends KeyManager | undefined = KeyManager,\n    TCrypto extends CryptoApi | undefined = CryptoApi\n  >({\n    jwe,\n    key,\n    keyManager = new LocalKeyManager(),\n    crypto = new AgentCryptoApi(),\n    options = {}\n  }: FlattenedJweDecryptParams<TKeyManager, TCrypto>): Promise<FlattenedJweDecryptResult> {\n    // Verify that the provided Crypto API supports the decrypt operation before proceeding.\n    if (!isCipher(crypto)) {\n      throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Crypto API does not support the \"encrypt\" operation.');\n    }\n    // Verify that the provided Key Manager supports the decrypt operation before proceeding.\n    if (!isCipher(keyManager)) {\n      throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Key Manager does not support the \"decrypt\" operation.');\n    }\n\n    // Verify that at least one of the JOSE header objects is present.\n    if (!jwe.protected && !jwe.header && !jwe.unprotected) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwe,\n        'JWE is missing the required JOSE header parameters. ' +\n        'Please provide at least one of the following: \"protected\", \"header\", or \"unprotected\"'\n      );\n    }\n\n    // Verify that the JWE Ciphertext is present.\n    if (typeof jwe.ciphertext !== 'string') {\n      throw new CryptoError(CryptoErrorCode.InvalidJwe, 'JWE Ciphertext is missing or not a string.');\n    }\n\n    // Parse the JWE Protected Header, if present.\n    let parsedProtectedHeader: Partial<JweHeaderParams> | undefined;\n    if (jwe.protected) {\n      try {\n        parsedProtectedHeader = Convert.base64Url(jwe.protected).toObject();\n      } catch {\n        throw new Error('JWE Protected Header is invalid');\n      }\n    }\n\n    // Per {@link https://www.rfc-editor.org/rfc/rfc7516#section-5.2 | RFC7516 Section 5.2}\n    // the resulting JOSE Header MUST NOT contain duplicate Header Parameter names. In other words,\n    // the same Header Parameter name MUST NOT occur in the `header`, `protected`, and\n    // `unprotected` JSON object values that together comprise the JOSE Header.\n    if (hasDuplicateProperties(parsedProtectedHeader, jwe.header, jwe.unprotected)){\n      throw new Error(\n        'Duplicate properties detected. Please ensure that each parameter is defined only once ' +\n        'across the JWE \"header\", \"protected\", and \"unprotected\" objects.'\n      );\n    }\n\n    // The JOSE Header is the union of the members of the JWE Protected Header (`protected`), the\n    // JWE Shared Unprotected Header (`unprotected`), and the corresponding JWE Per-Recipient\n    // Unprotected Header (`header`).\n    const joseHeader = { ...parsedProtectedHeader, ...jwe.header, ...jwe.unprotected };\n\n    if (!isValidJweHeader(joseHeader)) {\n      throw new Error('JWE Header is missing required \"alg\" (Algorithm) and/or \"enc\" (Encryption) Header Parameters');\n    }\n\n    if (Array.isArray(options.allowedAlgValues)\n        && !options.allowedAlgValues.includes(joseHeader.alg)) {\n      throw new Error(`\"alg\" (Algorithm) Header Parameter value not allowed: ${joseHeader.alg}`);\n    }\n\n    if (Array.isArray(options.allowedEncValues)\n        && !options.allowedEncValues.includes(joseHeader.enc)) {\n      throw new Error(`\"enc\" (Encryption Algorithm) Header Parameter value not allowed: ${joseHeader.enc}`);\n    }\n\n    let cek: KeyIdentifier | Jwk;\n    try {\n      const encryptedKey = jwe.encrypted_key\n        ? Convert.base64Url(jwe.encrypted_key).toUint8Array()\n        : undefined;\n\n      cek = await JweKeyManagement.decrypt({ key, encryptedKey, joseHeader, keyManager, crypto });\n\n    } catch (error: any) {\n      // If the error is a CryptoError with code \"InvalidJwe\" or \"AlgorithmNotSupported\", re-throw.\n      if (error instanceof CryptoError\n          && (error.code === CryptoErrorCode.InvalidJwe || error.code === CryptoErrorCode.AlgorithmNotSupported)) {\n        throw error;\n      }\n\n      // Otherwise, generate a random CEK and proceed to the next step.\n      // As noted in\n      // {@link https://datatracker.ietf.org/doc/html/rfc7516#section-11.5 | RFC 7516 Section 11.5},\n      // to mitigate the attacks described in\n      // {@link https://datatracker.ietf.org/doc/html/rfc3218 | RFC 3218}, the recipient MUST NOT\n      // distinguish between format, padding, and length errors of encrypted keys. It is strongly\n      // recommended, in the event of receiving an improperly formatted key, that the recipient\n      // substitute a randomly generated CEK and proceed to the next step, to mitigate timing\n      // attacks.\n      cek = typeof key === 'string'\n        ? await keyManager.generateKey({ algorithm: joseHeader.enc })\n        : await crypto.generateKey({ algorithm: joseHeader.enc });\n    }\n\n    // If present, decode the JWE Initialization Vector (IV) and Authentication Tag.\n    const iv = decodeHeaderParam('iv', jwe.iv);\n    const tag = decodeHeaderParam('tag', jwe.tag);\n\n    // Decode the JWE Ciphertext to a byte array, and if present, append the Authentication Tag.\n    const ciphertext = tag !== undefined\n      ? new Uint8Array([\n        ...Convert.base64Url(jwe.ciphertext).toUint8Array(),\n        ...(tag ?? [])\n      ])\n      : Convert.base64Url(jwe.ciphertext).toUint8Array();\n\n    // If the JWE Additional Authenticated Data (AAD) is present, the Additional Authenticated Data\n    // input to the Content Encryption Algorithm is\n    // ASCII(Encoded Protected Header || '.' || BASE64URL(JWE AAD)). If the JWE AAD is absent, the\n    // Additional Authenticated Data is ASCII(BASE64URL(UTF8(JWE Protected Header))).\n    const additionalData = jwe.aad !== undefined\n      ? new Uint8Array([\n        ...Convert.string(jwe.protected ?? '').toUint8Array(),\n        ...Convert.string('.').toUint8Array(),\n        ...Convert.string(jwe.aad).toUint8Array()\n      ])\n      : Convert.string(jwe.protected ?? '').toUint8Array();\n\n    // Decrypt the JWE using the Content Encryption Key (CEK) with:\n    // - Key Manager: If the CEK is a Key Identifier.\n    // - Crypto API: If the CEK is a JWK.\n    const plaintext = typeof cek === 'string'\n      ? await keyManager.decrypt({ keyUri: cek, data: ciphertext, iv, additionalData })\n      : await crypto.decrypt({ key: cek, data: ciphertext, iv, additionalData });\n\n    return {\n      plaintext,\n      protectedHeader             : parsedProtectedHeader,\n      additionalAuthenticatedData : decodeHeaderParam('aad', jwe.aad),\n      sharedUnprotectedHeader     : jwe.unprotected,\n      unprotectedHeader           : jwe.header\n    };\n  }\n\n  public static async encrypt<\n    TKeyManager extends KeyManager | undefined = KeyManager,\n    TCrypto extends CryptoApi | undefined = CryptoApi\n  >({\n    key,\n    plaintext,\n    additionalAuthenticatedData,\n    protectedHeader,\n    sharedUnprotectedHeader,\n    unprotectedHeader,\n    keyManager = new LocalKeyManager(),\n    crypto = new AgentCryptoApi(),\n  }: FlattenedJweEncryptParams<TKeyManager, TCrypto>): Promise<FlattenedJwe> {\n    // Verify that the provided Crypto API supports the decrypt operation before proceeding.\n    if (!isCipher(crypto)) {\n      throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Crypto API does not support the \"encrypt\" operation.');\n    }\n    // Verify that the provided Key Manager supports the decrypt operation before proceeding.\n    if (!isCipher(keyManager)) {\n      throw new CryptoError(CryptoErrorCode.OperationNotSupported, 'Key Manager does not support the \"decrypt\" operation.');\n    }\n\n    // Verify that at least one of the JOSE header objects is present.\n    if (!protectedHeader && !sharedUnprotectedHeader && !unprotectedHeader) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwe,\n        'JWE is missing the required JOSE header parameters. ' +\n            'Please provide at least one of the following: \"protectedHeader\", \"sharedUnprotectedHeader\", or \"unprotectedHeader\"'\n      );\n    }\n\n    // Verify that the Plaintext is present.\n    if (!(plaintext instanceof Uint8Array)) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Plaintext is missing or not a byte array.');\n    }\n\n    // Per {@link https://www.rfc-editor.org/rfc/rfc7516#section-5.2 | RFC7516 Section 5.2}\n    // the resulting JOSE Header MUST NOT contain duplicate Header Parameter names. In other words,\n    // the same Header Parameter name MUST NOT occur in the `header`, `protected`, and\n    // `unprotected` JSON object values that together comprise the JOSE Header.\n    if (hasDuplicateProperties(protectedHeader, sharedUnprotectedHeader, unprotectedHeader)){\n      throw new Error(\n        'Duplicate properties detected. Please ensure that each parameter is defined only once ' +\n        'across the JWE \"protectedHeader\", \"sharedUnprotectedHeader\", and \"unprotectedHeader\" objects.'\n      );\n    }\n\n    // The JOSE Header is the union of the members of the JWE Protected Header (`protectedHeader`),\n    // the JWE Shared Unprotected Header (`sharedUnprotectedHeader`), and the corresponding JWE\n    // Per-Recipient Unprotected Header (`unprotectedHeader`).\n    const joseHeader = { ...protectedHeader, ...sharedUnprotectedHeader, ...unprotectedHeader };\n\n    if (!isValidJweHeader(joseHeader)) {\n      throw new Error('JWE Header is missing required \"alg\" (Algorithm) and/or \"enc\" (Encryption) Header Parameters');\n    }\n\n    const { cek, encryptedKey } = await JweKeyManagement.encrypt({ key, joseHeader, keyManager, crypto });\n\n    // If required for the Content Encryption Algorithm, generate a random JWE Initialization\n    // Vector (IV) of the correct size; otherwise, let the JWE Initialization Vector be the empty\n    // octet sequence.\n    let iv: Uint8Array;\n    switch (joseHeader.enc) {\n      case 'A128GCM':\n      case 'A192GCM':\n      case 'A256GCM':\n        iv = CryptoUtils.randomBytes(12);\n        break;\n      default:\n        iv = new Uint8Array(0);\n    }\n\n    // Compute the Encoded Protected Header value BASE64URL(UTF8(JWE Protected Header)).  If the JWE\n    // Protected Header is not present, let this value be the empty string.\n    const encodedProtectedHeader = protectedHeader\n      ? Convert.object(protectedHeader).toBase64Url()\n      : '';\n\n    // If the JWE Additional Authenticated Data (AAD) is present, the Additional Authenticated Data\n    // input to the Content Encryption Algorithm is\n    // ASCII(Encoded Protected Header || '.' || BASE64URL(JWE AAD)). If the JWE AAD is absent, the\n    // Additional Authenticated Data is ASCII(BASE64URL(UTF8(JWE Protected Header))).\n    let additionalData: Uint8Array;\n    let encodedAad: string | undefined;\n    if (additionalAuthenticatedData) {\n      encodedAad = Convert.uint8Array(additionalAuthenticatedData).toBase64Url();\n      additionalData = Convert.string(encodedProtectedHeader + '.' + encodedAad).toUint8Array();\n    } else {\n      additionalData = Convert.string(encodedProtectedHeader).toUint8Array();\n    }\n\n    // Encrypt the plaintext using the CEK, the JWE Initialization Vector, and the Additional\n    // Authenticated Data value using the specified content encryption algorithm to create the JWE\n    // Ciphertext value and the JWE Authentication Tag.\n    const ciphertextWithTag = typeof cek === 'string'\n      ? await keyManager.encrypt({ keyUri: cek, data: plaintext, iv, additionalData })\n      : await crypto.encrypt({ key: cek, data: plaintext, iv, additionalData });\n    const ciphertext = ciphertextWithTag.slice(0, -16);\n    const authenticationTag = ciphertextWithTag.slice(-16);\n\n    // Create the Flattened JWE JSON Serialization output, which is based upon the General syntax,\n    // but flattens it, optimizing it for the single-recipient case. It flattens it by removing the\n    // \"recipients\" member and instead placing those members defined for use in the \"recipients\"\n    // array (the \"header\" and \"encrypted_key\" members) in the top-level JSON object (at the same\n    // level as the \"ciphertext\" member).\n    const jwe = new FlattenedJwe({\n      ciphertext: Convert.uint8Array(ciphertext).toBase64Url(),\n    });\n    if (encryptedKey) jwe.encrypted_key = Convert.uint8Array(encryptedKey).toBase64Url();\n    if (protectedHeader) jwe.protected = encodedProtectedHeader;\n    if (sharedUnprotectedHeader) jwe.unprotected = sharedUnprotectedHeader;\n    if (unprotectedHeader) jwe.header = unprotectedHeader;\n    if (iv) jwe.iv = Convert.uint8Array(iv).toBase64Url();\n    if (encodedAad) jwe.aad = encodedAad;\n    if (authenticationTag) jwe.tag = Convert.uint8Array(authenticationTag).toBase64Url();\n\n    return jwe;\n  }\n}", "import type { Jwk, KeyIdentifier } from '@web5/crypto';\n\nimport { LocalKeyManager } from '@web5/crypto';\n\nimport type { CryptoApi } from '../types/crypto-api.js';\nimport type { KeyManager } from '../types/key-manager.js';\nimport type { JweDecryptOptions, JweEncryptOptions, JweHeaderParams } from './jwe.js';\n\nimport { isValidJweHeader } from './jwe.js';\nimport { FlattenedJwe } from './jwe-flattened.js';\nimport { AgentCryptoApi } from '../../../crypto-api.js';\nimport { CryptoError, CryptoErrorCode } from '../crypto-error.js';\n\n/**\n * Parameters required for decrypting a JWE in Compact Serialization format.\n *\n * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.\n * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.\n */\nexport interface CompactJweDecryptParams<TKeyManager, TCrypto> {\n  /** The JWE string in Compact Serialization format. */\n  jwe: string;\n\n  /**\n   * The decryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),\n   * or raw key material represented as a byte array.\n   */\n  key: KeyIdentifier | Jwk | Uint8Array;\n\n  /** Key Manager instance\u00DF responsible for managing cryptographic keys. */\n  keyManager?: TKeyManager;\n\n  /** Crypto API instance that provides the necessary cryptographic operations. */\n  crypto?: TCrypto;\n\n  /** {@inheritDoc JweDecryptOptions} */\n  options?: JweDecryptOptions;\n}\n\n/**\n * Result of decrypting a JWE in Compact Serialization format.\n */\nexport interface CompactJweDecryptResult {\n  /** Decrypted plaintext as a byte array. */\n  plaintext: Uint8Array;\n\n  /** The protected header of the JWE. */\n  protectedHeader: JweHeaderParams;\n}\n\n/**\n * Parameters required for encrypting data into a JWE in Compact Serialization format.\n *\n * @typeParam TKeyManager - The Key Manager used to manage cryptographic keys.\n * @typeParam TCrypto - The Crypto API used to perform cryptographic operations.\n */\nexport interface CompactJweEncryptParams<TKeyManager, TCrypto> {\n  /** The plaintext data to be encrypted as a byte array. */\n  plaintext: Uint8Array;\n\n  /** JWE Protected Header containing encryption algorithm details. */\n  protectedHeader: JweHeaderParams;\n\n  /**\n   * The encryption key which can be a Key Identifier such as a KMS key URI, a JSON Web Key (JWK),\n   * or raw key material represented as a byte array.\n   */\n  key: KeyIdentifier | Jwk | Uint8Array;\n\n  /** Key Manager instance\u00DF responsible for managing cryptographic keys. */\n  keyManager?: TKeyManager;\n\n  /** Crypto API instance that provides the necessary cryptographic operations. */\n  crypto?: TCrypto;\n\n  /** {@inheritDoc JweEncryptOptions} */\n  options?: JweEncryptOptions;\n}\n\n/**\n * The `CompactJwe` class facilitates encryption and decryption processes using the JSON Web\n * Encryption (JWE) Compact Serialization format. This class adheres to the specifications\n * outlined in {@link https://datatracker.ietf.org/doc/html/rfc7516 | RFC 7516}, enabling secure\n * data encapsulation through various cryptographic algorithms.\n *\n * Compact Serialization is a space-efficient representation of JWE, suitable for contexts\n * where verbose data structures are impractical, such as HTTP headers. It provides mechanisms to\n * encrypt content and protect its integrity with authenticated encryption, ensuring\n * confidentiality, authenticity, and non-repudiation.\n *\n * This class supports the following operations:\n * - Decrypting data from a compact serialized JWE string.\n * - Encrypting data and producing a compact serialized JWE string.\n *\n * Usage involves specifying the cryptographic details, such as keys and algorithms, and the class\n * handles the complexities of the JWE processing, including parsing, validating, and applying the\n * cryptographic operations defined in the JWE specification.\n *\n * @example\n * ```ts\n *  // Example usage of encrypt method\n * const plaintext = new TextEncoder().encode(\"Secret Message\");\n * const key = { kty: \"oct\", k: \"your-secret-key\" }; // Example symmetric key\n * const protectedHeader = { alg: \"dir\", enc: \"A256GCM\" };\n * const encryptedJweString = await CompactJwe.encrypt({\n *   plaintext,\n *   protectedHeader,\n *   key,\n * });\n * console.log(encryptedJweString); // Outputs the JWE string in Compact Serialization format\n * ```\n *\n * @example\n * ```ts\n * // Example usage of decrypt method\n * const jweString = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\"; // A JWE in Compact Serialization\n * const decryptionKey = { kty: \"oct\", k: \"your-secret-key\" }; // The key must match the one used for encryption\n * const { plaintext, protectedHeader } = await CompactJwe.decrypt({\n *   jwe: jweString,\n *   key: decryptionKey,\n * });\n * console.log(new TextDecoder().decode(plaintext)); // Outputs the decrypted message\n * ```\n */\nexport class CompactJwe {\n  /**\n   * Decrypts a JWE string in Compact Serialization format, extracting the plaintext and\n   * reconstructing the JWE Protected Header.\n   *\n   * This method parses the compact JWE, validates its structure, and applies the appropriate\n   * decryption algorithm as specified in the JWE Protected Header. It returns the decrypted\n   * plaintext along with the reconstructed protected header, ensuring the data's authenticity\n   * and integrity.\n   *\n   * @param params - The decryption parameters including the JWE string, cryptographic key, and\n   *                 optional instances of Key Manager and Crypto API.\n   * @returns A promise resolving to the decrypted content and the JWE Protected Header.\n   * @throws {@link CryptoError} if the JWE format is invalid or decryption fails.\n   */\n  public static async decrypt<\n    TKeyManager extends KeyManager | undefined = KeyManager,\n    TCrypto extends CryptoApi | undefined = CryptoApi\n  >({\n    jwe,\n    key,\n    keyManager = new LocalKeyManager(),\n    crypto = new AgentCryptoApi(),\n    options = {}\n  }: CompactJweDecryptParams<TKeyManager, TCrypto>\n  ): Promise<CompactJweDecryptResult> {\n    if (typeof jwe !== 'string') {\n      throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Invalid JWE format. JWE must be a string.');\n    }\n\n    // Split the JWE into its constituent parts.\n    const {\n      0: protectedHeader,\n      1: encryptedKey,\n      2: initializationVector,\n      3: ciphertext,\n      4: authenticationTag,\n      length,\n    } = jwe.split('.');\n\n    // Ensure that the JWE has the required number of parts.\n    if (length !== 5) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Invalid JWE format. JWE must have 5 parts.');\n    }\n\n    // Decrypt the JWE using the provided Key URI.\n    const flattenedJwe = await FlattenedJwe.decrypt({\n      jwe: {\n        ciphertext,\n        encrypted_key : encryptedKey || undefined,\n        iv            : initializationVector || undefined,\n        protected     : protectedHeader,\n        tag           : authenticationTag || undefined,\n      },\n      key,\n      keyManager,\n      crypto,\n      options\n    });\n\n    if (!isValidJweHeader(flattenedJwe.protectedHeader)) {\n      throw new CryptoError(CryptoErrorCode.InvalidJwe, 'Decrypt operation failed due to missing or malformed JWE Protected Header');\n    }\n\n    return { plaintext: flattenedJwe.plaintext, protectedHeader: flattenedJwe.protectedHeader };\n  }\n\n  /**\n   * Encrypts plaintext to a JWE string in Compact Serialization format, encapsulating the content\n   * with the specified cryptographic protections.\n   *\n   * It constructs the JWE by encrypting the plaintext, then serializing the output to the\n   * compact format, which includes concatenating various components like the protected header,\n   * encrypted key, initialization vector, ciphertext, and authentication tag.\n   *\n   * @param params - The encryption parameters, including plaintext, JWE Protected Header,\n   *                 cryptographic key, and optional Key Manager and Crypto API instances.\n   * @returns A promise that resolves to a string representing the JWE in Compact Serialization\n   *          format.\n   * @throws {@link CryptoError} if encryption fails or the input parameters are invalid.\n   */\n  public static async encrypt<\n    TKeyManager extends KeyManager | undefined = KeyManager,\n    TCrypto extends CryptoApi | undefined = CryptoApi\n  >({\n    plaintext,\n    protectedHeader,\n    key,\n    keyManager = new LocalKeyManager(),\n    crypto = new AgentCryptoApi(),\n    options = {}\n  }: CompactJweEncryptParams<TKeyManager, TCrypto>\n  ): Promise<string> {\n    const jwe = await FlattenedJwe.encrypt({ plaintext, protectedHeader, key, keyManager, crypto, options });\n\n    // Create the Compact Serialization, which is the string BASE64URL(UTF8(JWE Protected Header))\n    // || '.' || BASE64URL(JWE Encrypted Key) || '.' || BASE64URL(JWE Initialization Vector)\n    // || '.' || BASE64URL(JWE Ciphertext) || '.' || BASE64URL(JWE Authentication Tag).\n    return [jwe.protected, jwe.encrypted_key, jwe.iv, jwe.ciphertext, jwe.tag].join('.');\n  }\n}", "import type { Jwk } from '@web5/crypto';\nimport type { KeyValueStore } from '@web5/common';\nimport { DidDhtCreateOptions } from '@web5/dids';\n\nimport { HDKey } from 'ed25519-keygen/hdkey';\nimport { BearerDid, DidDht } from '@web5/dids';\nimport { Convert, MemoryStore } from '@web5/common';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nimport { generateMnemonic, mnemonicToSeed, validateMnemonic } from '@scure/bip39';\n\nimport type { JweHeaderParams } from './prototyping/crypto/jose/jwe.js';\nimport type { IdentityVaultBackup, IdentityVaultBackupData, IdentityVaultStatus, IdentityVaultParams, IdentityVault } from './types/identity-vault.js';\n\nimport { AgentCryptoApi } from './crypto-api.js';\nimport { LocalKeyManager } from './local-key-manager.js';\nimport { isPortableDid } from './prototyping/dids/utils.js';\nimport { DeterministicKeyGenerator } from './utils-internal.js';\nimport { CompactJwe } from './prototyping/crypto/jose/jwe-compact.js';\n\n/**\n * Extended initialization parameters for HdIdentityVault, including an optional recovery phrase\n * that can be used to derive keys to encrypt the vault and generate a DID.\n */\nexport type HdIdentityVaultInitializeParams = {\n  /**\n    * The password used to secure the vault.\n    *\n    * The password selected should be strong and securely managed to prevent unauthorized access.\n    */\n   password: string;\n\n   /**\n    * An optional recovery phrase used to derive the cryptographic keys for the vault.\n    *\n    * Providing a recovery phrase can be used to recover the vault's content or establish a\n    * deterministic key generation scheme. If not provided, a new recovery phrase will be generated\n    * during the initialization process.\n    */\n   recoveryPhrase?: string;\n\n   /**\n    * Optional dwnEndpoints to register didService endpoints during HdIdentityVault initialization\n    *\n    * The dwnEndpoints are used to register a DWN endpoint during DidDht.create(). This allows the\n    * agent to properly recover connectedDids from DWN. Also, this pattern can be used on the server\n    * side in place of the agentDid-->connectedDids pattern.\n    */\n    dwnEndpoints?: string[];\n };\n\n/**\n * Type guard function to check if a given object is an empty string or a string containing only\n * whitespace.\n *\n * This is an internal utility function used to validate password inputs, ensuring they are not\n * empty or filled with only whitespace characters, which are considered invalid for password\n * purposes.\n *\n * @param obj - The object to be checked, typically expected to be a password string.\n * @returns A boolean value indicating whether the object is an empty string or a string with only\n *          whitespace.\n */\nfunction isEmptyString(obj: unknown): obj is string {\n  return typeof obj !== 'string' || obj.trim().length === 0;\n}\n\n/**\n * Type guard function to check if a given object conforms to the {@link IdentityVaultBackup}\n * interface.\n *\n * This function is an internal utility meant to ensure the integrity and structure of the data\n * assumed to be an {@link IdentityVaultBackup}. It verifies the presence and types of the\n * `dateCreated`, `size`, and `data` properties, aligning with the expected structure of a backup\n * object in the context of an {@link IdentityVault}.\n *\n * @param obj - The object to be verified against the {@link IdentityVaultBackup} interface.\n * @returns A boolean value indicating whether the object is a valid {@link IdentityVaultBackup}.\n */\nfunction isIdentityVaultBackup(obj: unknown): obj is IdentityVaultBackup {\n  return typeof obj === 'object' && obj !== null\n    && 'dateCreated' in obj && typeof obj.dateCreated === 'string'\n    && 'size' in obj && typeof obj.size === 'number'\n    && 'data' in obj && typeof obj.data === 'string';\n}\n\n/**\n * Internal-only type guard function that checks if a given object conforms to the\n * {@link IdentityVaultStatus} interface.\n *\n * This function is utilized within the {@link HdIdentityVault} implementation to ensure the\n * integrity of the object representing the vault's status, verifying the presence and types of\n * required properties. It aasserts the presence and correct types of `initialized`, `lastBackup`,\n * and `lastRestore` properties, ensuring they align with the expected structure of an identity\n * vault's status.\n *\n * @param obj - The object to be checked against the {{@link IdentityVaultStatus} interface.\n * @returns A boolean indicating whether the object is an instance of {@link IdentityVaultStatus}.\n */\nfunction isIdentityVaultStatus(obj: unknown): obj is IdentityVaultStatus {\n  return typeof obj === 'object' && obj !== null\n    && 'initialized' in obj && typeof obj.initialized === 'boolean'\n    && 'lastBackup' in obj\n    && 'lastRestore' in obj;\n}\n\n/**\n * The `HdIdentityVault` class provides secure storage and management of identity data.\n *\n * The `HdIdentityVault` class implements the `IdentityVault` interface, providing secure storage\n * and management of identity data with an added layer of security using Hierarchical Deterministic\n * (HD) key derivation based on the SLIP-0010 standard for Ed25519 keys. It enhances identity\n * protection by generating and securing the identity using a derived HD key, allowing for the\n * deterministic regeneration of keys from a recovery phrase.\n *\n * The vault is capable of:\n * - Secure initialization with a password and an optional recovery phrase, employing HD key\n *   derivation.\n * - Encrypting the identity data using a derived content encryption key (CEK) which is securely\n *   encrypted and stored, accessible only by the correct password.\n * - Securely backing up and restoring the vault\u2019s contents, including the HD-derived keys and\n *   associated DID.\n * - Locking and unlocking the vault, which encrypts and decrypts the CEK for secure access to the\n *   vault's contents.\n * - Managing the DID associated with the identity, providing a secure identity layer for\n *   applications.\n *\n * Usage involves initializing the vault with a secure password (and optionally a recovery phrase),\n * which then allows for the secure storage, backup, and retrieval of the identity data.\n *\n * Note: Ensure the password is strong and securely managed, as it is crucial for the security of the\n * vault's encrypted contents.\n *\n * @example\n * ```typescript\n * const vault = new HdIdentityVault();\n * await vault.initialize({ password: 'secure-unique-phrase', recoveryPhrase: 'twelve words ...' });\n * const backup = await vault.backup();\n * await vault.restore({ backup, password: 'secure-unique-phrase' });\n * ```\n */\nexport class HdIdentityVault implements IdentityVault<{ InitializeResult: string }> {\n  /** Provides cryptographic functions needed for secure storage and management of the vault. */\n  public crypto = new AgentCryptoApi();\n\n  /** Determines the computational intensity of the key derivation process. */\n  private _keyDerivationWorkFactor: number;\n\n  /** The underlying key-value store for the vault's encrypted content. */\n  private _store: KeyValueStore<string, string>;\n\n  /** The cryptographic key used to encrypt and decrypt the vault's content securely. */\n  private _contentEncryptionKey: Jwk | undefined;\n\n  /**\n   * Constructs an instance of `HdIdentityVault`, initializing the key derivation factor and data\n   * store. It sets the default key derivation work factor and initializes the internal data store,\n   * either with the provided store or a default in-memory store. It also establishes the initial\n   * status of the vault as uninitialized and locked.\n   *\n   * @param params - Optional parameters when constructing a vault instance.\n   * @param params.keyDerivationWorkFactor - Optionally set the computational effort for key derivation.\n   * @param params.store - Optionally specify a custom key-value store for vault data.\n   */\n  constructor({ keyDerivationWorkFactor, store }: IdentityVaultParams = {}) {\n    this._keyDerivationWorkFactor = keyDerivationWorkFactor ?? 210_000;\n    this._store = store ?? new MemoryStore<string, string>();\n  }\n\n  /**\n   * Creates a backup of the vault's current state, including the encrypted DID and content\n   * encryption key, and returns it as an `IdentityVaultBackup` object. The backup includes a\n   * Base64Url-encoded string representing the vault's encrypted data, encapsulating the\n   * {@link PortableDid}, the content encryption key, and the vault's status.\n   *\n   * This method ensures that the vault is initialized and unlocked before proceeding with the\n   * backup operation.\n   *\n   * @throws Error if the vault is not initialized or is locked, preventing the backup.\n   * @returns A promise that resolves to the `IdentityVaultBackup` object containing the vault's\n   *          encrypted backup data.\n   */\n  public async backup(): Promise<IdentityVaultBackup> {\n    // Verify the identity vault has already been initialized and unlocked.\n    if (this.isLocked() || await this.isInitialized() === false) {\n      throw new Error(\n        'HdIdentityVault: Unable to proceed with the backup operation because the identity vault ' +\n        'has not been initialized and unlocked. Please ensure the vault is properly initialized ' +\n        'with a secure password before attempting to backup its contents.'\n      );\n    }\n\n    // Encode the encrypted CEK and DID as a single Base64Url string.\n    const backupData: IdentityVaultBackupData = {\n      did                  : await this.getStoredDid(),\n      contentEncryptionKey : await this.getStoredContentEncryptionKey(),\n      status               : await this.getStatus()\n    };\n    const backupDataString = Convert.object(backupData).toBase64Url();\n\n    // Create a backup object containing the encrypted vault contents.\n    const backup: IdentityVaultBackup = {\n      data        : backupDataString,\n      dateCreated : new Date().toISOString(),\n      size        : backupDataString.length\n    };\n\n    // Update the last backup timestamp in the data store.\n    await this.setStatus({ lastBackup: backup.dateCreated });\n\n    return backup;\n  }\n\n  /**\n   * Changes the password used to secure the vault.\n   *\n   * This method decrypts the existing content encryption key (CEK) with the old password, then\n   * re-encrypts it with the new password, updating the vault's stored encrypted CEK. It ensures\n   * that the vault is initialized and unlocks the vault if the password is successfully changed.\n   *\n   * @param params - Parameters required for changing the vault password.\n   * @param params.oldPassword - The current password used to unlock the vault.\n   * @param params.newPassword - The new password to replace the existing one.\n   * @throws Error if the vault is not initialized or the old password is incorrect.\n   * @returns A promise that resolves when the password change is complete.\n   */\n  public async changePassword({ oldPassword, newPassword }: {\n    oldPassword: string;\n    newPassword: string;\n  }): Promise<void> {\n    // Verify the identity vault has already been initialized.\n    if (await this.isInitialized() === false) {\n      throw new Error(\n        'HdIdentityVault: Unable to proceed with the change password operation because the ' +\n        'identity vault has not been initialized. Please ensure the vault is properly ' +\n        'initialized with a secure password before trying again.'\n      );\n    }\n\n    // Lock the vault.\n    await this.lock();\n\n    // Retrieve the content encryption key (CEK) record as a compact JWE from the data store.\n    const cekJwe = await this.getStoredContentEncryptionKey();\n\n    // Decrypt the compact JWE using the given `oldPassword` to verify it is correct.\n    let protectedHeader: JweHeaderParams;\n    let contentEncryptionKey: Jwk;\n    try {\n      let contentEncryptionKeyBytes: Uint8Array;\n      ({ plaintext: contentEncryptionKeyBytes, protectedHeader } = await CompactJwe.decrypt({\n        jwe        : cekJwe,\n        key        : Convert.string(oldPassword).toUint8Array(),\n        crypto     : this.crypto,\n        keyManager : new LocalKeyManager()\n      }));\n      contentEncryptionKey = Convert.uint8Array(contentEncryptionKeyBytes).toObject() as Jwk;\n\n    } catch (error: any) {\n      throw new Error(`HdIdentityVault: Unable to change the vault password due to an incorrectly entered old password.`);\n    }\n\n    // Re-encrypt the vault content encryption key (CEK) using the new password.\n    const newCekJwe = await CompactJwe.encrypt({\n      key        : Convert.string(newPassword).toUint8Array(),\n      protectedHeader, // Re-use the protected header from the original JWE.\n      plaintext  : Convert.object(contentEncryptionKey).toUint8Array(),\n      crypto     : this.crypto,\n      keyManager : new LocalKeyManager()\n    });\n\n    // Update the vault with the new CEK JWE.\n    await this._store.set('contentEncryptionKey', newCekJwe);\n\n    // Update the vault CEK in memory, effectively unlocking the vault.\n    this._contentEncryptionKey = contentEncryptionKey;\n  }\n\n  /**\n   * Retrieves the DID (Decentralized Identifier) associated with the vault.\n   *\n   * This method ensures the vault is initialized and unlocked before decrypting and returning the\n   * DID. The DID is stored encrypted and  is decrypted using the vault's content encryption key.\n   *\n   * @throws Error if the vault is not initialized, is locked, or the DID cannot be decrypted.\n   * @returns A promise that resolves with a {@link BearerDid}.\n   */\n  public async getDid(): Promise<BearerDid> {\n    // Verify the identity vault is unlocked.\n    if (this.isLocked()) {\n      throw new Error(`HdIdentityVault: Vault has not been initialized and unlocked.`);\n    }\n\n    // Retrieve the encrypted DID record as compact JWE from the vault store.\n    const didJwe = await this.getStoredDid();\n\n    // Decrypt the compact JWE to obtain the PortableDid as a byte array.\n    const { plaintext: portableDidBytes } = await CompactJwe.decrypt({\n      jwe        : didJwe,\n      key        : this._contentEncryptionKey!,\n      crypto     : this.crypto,\n      keyManager : new LocalKeyManager()\n    });\n\n    // Convert the DID from a byte array to PortableDid format.\n    const portableDid = Convert.uint8Array(portableDidBytes).toObject();\n    if (!isPortableDid(portableDid)) {\n      throw new Error('HdIdentityVault: Unable to decode malformed DID in identity vault');\n    }\n\n    // Return the DID in Bearer DID format.\n    return await BearerDid.import({ portableDid });\n  }\n\n  /**\n   * Fetches the current status of the `HdIdentityVault`, providing details on whether it's\n   * initialized and the timestamps of the last backup and restore operations.\n   *\n   * @returns A promise that resolves with the current status of the `HdIdentityVault`, detailing\n   *          its initialization, lock state, and the timestamps of the last backup and restore.\n   */\n  public async getStatus(): Promise<IdentityVaultStatus> {\n    const storedStatus = await this._store.get('vaultStatus');\n\n    // On the first run, the store will not contain an IdentityVaultStatus object yet, so return an\n    // uninitialized status.\n    if (!storedStatus) {\n      return {\n        initialized : false,\n        lastBackup  : null,\n        lastRestore : null\n      };\n    }\n\n    const vaultStatus = Convert.string(storedStatus).toObject();\n    if (!isIdentityVaultStatus(vaultStatus)) {\n      throw new Error('HdIdentityVault: Invalid IdentityVaultStatus object in store');\n    }\n\n    return vaultStatus;\n  }\n\n  /**\n   * Initializes the `HdIdentityVault` with a password and an optional recovery phrase.\n   *\n   * If a recovery phrase is not provided, a new one is generated. This process sets up the vault,\n   * deriving the necessary cryptographic keys and preparing the vault for use. It ensures the vault\n   * is ready to securely store and manage identity data.\n   *\n   * @example\n   * ```ts\n   * const identityVault = new HdIdentityVault();\n   * const recoveryPhrase = await identityVault.initialize({\n   *   password: 'your-secure-phrase'\n   * });\n   * console.log('Vault initialized. Recovery phrase:', recoveryPhrase);\n   * ```\n   *\n   * @param params - The initialization parameters.\n   * @param params.password - The password used to secure the vault.\n   * @param params.recoveryPhrase - An optional 12-word recovery phrase for key derivation. If\n   *                                omitted, a new recovery is generated.\n   * @returns A promise that resolves with the recovery phrase used during the initialization, which\n   *          should be securely stored by the user.\n   */\n  public async initialize({ password, recoveryPhrase, dwnEndpoints }:\n    HdIdentityVaultInitializeParams\n  ): Promise<string> {\n    /**\n     * STEP 0: Validate the input parameters and verify the identity vault is not already\n     * initialized.\n     */\n\n    // Verify that the identity vault was not previously initialized.\n    if (await this.isInitialized()) {\n      throw new Error(`HdIdentityVault: Vault has already been initialized.`);\n    }\n\n    // Verify that the password is not empty.\n    if (isEmptyString(password)) {\n      throw new Error(\n        `HdIdentityVault: The password is required and cannot be blank. Please provide a ' +\n        'valid, non-empty password.`\n      );\n    }\n\n    // If provided, verify that the recovery phrase is not empty.\n    if (recoveryPhrase && isEmptyString(recoveryPhrase)) {\n      throw new Error(\n        `HdIdentityVault: The password is required and cannot be blank. Please provide a ' +\n        'valid, non-empty password.`\n      );\n    }\n\n    /**\n     * STEP 1: Derive a Hierarchical Deterministic (HD) key pair from the given (or generated)\n     * recoveryPhrase.\n     */\n\n    // Generate a 12-word (128-bit) mnemonic, if one was not provided.\n    recoveryPhrase ??= generateMnemonic(wordlist, 128);\n\n    // Validate the mnemonic for being 12-24 words contained in `wordlist`.\n    if (!validateMnemonic(recoveryPhrase, wordlist)) {\n      throw new Error(\n        'HdIdentityVault: The provided recovery phrase is invalid. Please ensure that the ' +\n        'recovery phrase is a correctly formatted series of 12 words.'\n      );\n    }\n\n    // Derive a root seed from the mnemonic.\n    const rootSeed = await mnemonicToSeed(recoveryPhrase);\n\n    // Derive a root key for the DID from the root seed.\n    const rootHdKey = HDKey.fromMasterSeed(rootSeed);\n\n    /**\n     * STEP 2: Derive the vault HD key pair from the root key.\n     */\n\n    // The vault HD key is derived using account 0 and index 0 so that it can be\n    // deterministically re-derived. The vault key pair serves as input keying material for:\n    // - deriving the vault content encryption key (CEK)\n    // - deriving the salt that serves as input to derive the key that encrypts the vault CEK\n    const vaultHdKey = rootHdKey.derive(`m/44'/0'/0'/0'/0'`);\n\n    /**\n     * STEP 3: Derive the vault Content Encryption Key (CEK) from the vault private\n     * key and a non-secret static info value.\n     */\n\n    // A non-secret static info value is combined with the vault private key as input to HKDF\n    // (Hash-based Key Derivation Function) to derive a 32-byte content encryption key (CEK).\n    const contentEncryptionKey = await this.crypto.deriveKey({\n      algorithm           : 'HKDF-512',            // key derivation function\n      baseKeyBytes        : vaultHdKey.privateKey, // input keying material\n      salt                : '',                    // empty salt because private key is sufficiently random\n      info                : 'vault_cek',           // non-secret application specific information\n      derivedKeyAlgorithm : 'A256GCM'              // derived key algorithm\n    });\n\n    /**\n     * STEP 4: Using the given `password` and a `salt` derived from the vault public key, encrypt\n     * the vault CEK and store it in the data store as a compact JWE.\n     */\n\n    // A non-secret static info value is combined with the vault public key as input to HKDF\n    // (Hash-based Key Derivation Function) to derive a new 32-byte salt.\n    const saltInput = await this.crypto.deriveKeyBytes({\n      algorithm    : 'HKDF-512',           // key derivation function\n      baseKeyBytes : vaultHdKey.publicKey, // input keying material\n      salt         : '',                   // empty salt because public key is sufficiently random\n      info         : 'vault_unlock_salt',  // non-secret application specific information\n      length       : 256,                  // derived key length, in bits\n    });\n\n    // Construct the JWE header.\n    const cekJweProtectedHeader: JweHeaderParams = {\n      alg : 'PBES2-HS512+A256KW',\n      enc : 'A256GCM',\n      cty : 'text/plain',\n      p2c : this._keyDerivationWorkFactor,\n      p2s : Convert.uint8Array(saltInput).toBase64Url()\n    };\n\n    // Encrypt the vault content encryption key (CEK) to compact JWE format.\n    const cekJwe = await CompactJwe.encrypt({\n      key             : Convert.string(password).toUint8Array(),\n      protectedHeader : cekJweProtectedHeader,\n      plaintext       : Convert.object(contentEncryptionKey).toUint8Array(),\n      crypto          : this.crypto,\n      keyManager      : new LocalKeyManager()\n    });\n\n    // Store the compact JWE in the data store.\n    await this._store.set('contentEncryptionKey', cekJwe);\n\n    /**\n     * STEP 5: Create a DID using identity, signing, and encryption keys derived from the root key.\n     */\n\n    // Derive the identity key pair using index 0 and convert to JWK format.\n    // Note: The account is set to Unix epoch time so that in the future, the keys for a DID DHT\n    //       document can be deterministically derived based on the versionId returned in a DID\n    //       resolution result.\n    const identityHdKey = rootHdKey.derive(`m/44'/0'/1708523827'/0'/0'`);\n    const identityPrivateKey = await this.crypto.bytesToPrivateKey({\n      algorithm       : 'Ed25519',\n      privateKeyBytes : identityHdKey.privateKey\n    });\n\n    // Derive the signing key using index 1 and convert to JWK format.\n    let signingHdKey = rootHdKey.derive(`m/44'/0'/1708523827'/0'/1'`);\n    const signingPrivateKey = await this.crypto.bytesToPrivateKey({\n      algorithm       : 'Ed25519',\n      privateKeyBytes : signingHdKey.privateKey\n    });\n\n    // TODO: Enable this once DID DHT supports X25519 keys.\n    // Derive the encryption key using index 1 and convert to JWK format.\n    // const encryptionHdKey = rootHdKey.derive(`m/44'/0'/1708523827'/0'/1'`);\n    // const encryptionKeyEd25519 = await this.crypto.bytesToPrivateKey({\n    //   algorithm       : 'Ed25519',\n    //   privateKeyBytes : encryptionHdKey.privateKey\n    // });\n    // const encryptionPrivateKey = await Ed25519.convertPrivateKeyToX25519({ privateKey: encryptionKeyEd25519 });\n\n    // Add the identity and signing keys to the deterministic key generator so that when the DID is\n    // created it will use the derived keys.\n    const deterministicKeyGenerator = new DeterministicKeyGenerator();\n    await deterministicKeyGenerator.addPredefinedKeys({\n      privateKeys: [identityPrivateKey, signingPrivateKey]\n    });\n\n    // Create the DID using the derived identity, signing, and encryption keys.\n    const options = {\n      verificationMethods: [\n        {\n          algorithm : 'Ed25519',\n          id        : 'sig',\n          purposes  : ['assertionMethod', 'authentication']\n        },\n      ]\n    } as DidDhtCreateOptions<DeterministicKeyGenerator>;\n\n    if(dwnEndpoints && !!dwnEndpoints.length) {\n      options.services = [\n        {\n          id              : 'dwn',\n          type            : 'DecentralizedWebNode',\n          serviceEndpoint : dwnEndpoints,\n          enc             : '#enc',\n          sig             : '#sig',\n        }\n      ];\n    }\n\n    const did = await DidDht.create({ keyManager: deterministicKeyGenerator, options });\n\n    /**\n     * STEP 6: Convert the DID to portable format and store it in the data store as a\n     * compact JWE.\n     */\n\n    // Convert the DID to a portable format.\n    const portableDid = await did.export();\n\n    // Construct the JWE header.\n    const didJweProtectedHeader: JweHeaderParams = {\n      alg : 'dir',\n      enc : 'A256GCM',\n      cty : 'json'\n    };\n\n    // Encrypt the DID to compact JWE format.\n    const didJwe = await CompactJwe.encrypt({\n      key             : contentEncryptionKey,\n      plaintext       : Convert.object(portableDid).toUint8Array(),\n      protectedHeader : didJweProtectedHeader,\n      crypto          : this.crypto,\n      keyManager      : new LocalKeyManager()\n    });\n\n    // Store the compact JWE in the data store.\n    await this._store.set('did', didJwe);\n\n    /**\n     * STEP 7: Set the vault CEK (effectively unlocking the vault), set the status to initialized,\n     * and return the mnemonic used to generate the vault key.\n     */\n\n    this._contentEncryptionKey = contentEncryptionKey;\n\n    await this.setStatus({ initialized: true });\n\n    // Return the recovery phrase in case it was generated so that it can be displayed to the user\n    // for safekeeping.\n    return recoveryPhrase;\n  }\n\n  /**\n   * Determines whether the vault has been initialized.\n   *\n   * This method checks the vault's current status to determine if it has been\n   * initialized. Initialization is a prerequisite for most operations on the vault,\n   * ensuring that it is ready for use.\n   *\n   * @example\n   * ```ts\n   * const isInitialized = await identityVault.isInitialized();\n   * console.log('Is the vault initialized?', isInitialized);\n   * ```\n   *\n   * @returns A promise that resolves to `true` if the vault has been initialized, otherwise `false`.\n   */\n  public async isInitialized(): Promise<boolean> {\n    return this.getStatus().then(({ initialized }) => initialized);\n  }\n\n  /**\n   * Checks if the vault is currently locked.\n   *\n   * This method assesses the vault's current state to determine if it is locked.\n   * A locked vault restricts access to its contents, requiring the correct password\n   * to unlock and access the stored identity data. The vault must be unlocked to\n   * perform operations that access or modify its contents.\n   *\n   * @example\n   * ```ts\n   * const isLocked = await identityVault.isLocked();\n   * console.log('Is the vault locked?', isLocked);\n   * ```\n   *\n   * @returns `true` if the vault is locked, otherwise `false`.\n   */\n  public isLocked(): boolean {\n    return !this._contentEncryptionKey;\n  }\n\n  /**\n   * Locks the `HdIdentityVault`, securing its contents by clearing the in-memory encryption key.\n   *\n   * This method ensures that the vault's sensitive data cannot be accessed without unlocking the\n   * vault again with the correct password. It's an essential security feature for safeguarding\n   * the vault's contents against unauthorized access.\n   *\n   * @example\n   * ```ts\n   * const identityVault = new HdIdentityVault();\n   * await identityVault.lock();\n   * console.log('Vault is now locked.');\n   * ```\n   * @throws An error if the identity vault has not been initialized.\n   * @returns A promise that resolves when the vault is successfully locked.\n   */\n  public async lock(): Promise<void> {\n    // Verify the identity vault has already been initialized.\n    if (await this.isInitialized() === false) {\n      throw new Error(`HdIdentityVault: Lock operation failed. Vault has not been initialized.`);\n    }\n\n    // Clear the vault content encryption key (CEK), effectively locking the vault.\n    if (this._contentEncryptionKey) this._contentEncryptionKey.k = '';\n    this._contentEncryptionKey = undefined;\n  }\n\n  /**\n   * Restores the vault's data from a backup object, decrypting and reinitializing the vault's\n   * content with the provided backup data.\n   *\n   * This operation is crucial for data recovery scenarios, allowing users to regain access to their\n   * encrypted data using a previously saved backup and their password.\n   *\n   * @example\n   * ```ts\n   * const identityVault = new HdIdentityVault();\n   * await identityVault.initialize({ password: 'your-secure-phrase' });\n   * // Create a backup of the vault's contents.\n   * const backup = await identityVault.backup();\n   * // Restore the vault with the same password.\n   * await identityVault.restore({ backup: backup, password: 'your-secure-phrase' });\n   * console.log('Vault restored successfully.');\n   * ```\n   *\n   * @param params - The parameters required for the restore operation.\n   * @param params.backup - The backup object containing the encrypted vault data.\n   * @param params.password - The password used to encrypt the backup, necessary for decryption.\n   * @returns A promise that resolves when the vault has been successfully restored.\n   * @throws An error if the backup object is invalid or if the password is incorrect.\n   */\n  public async restore({ backup, password }: {\n    backup: IdentityVaultBackup;\n    password: string;\n  }): Promise<void> {\n    // Validate the backup object.\n    if (!isIdentityVaultBackup(backup)) {\n      throw new Error(`HdIdentityVault: Restore operation failed due to invalid backup object.`);\n    }\n\n    // Temporarily save the status and contents of the data store while attempting to restore the\n    // backup so that they are not lost in case the restore operation fails.\n    let previousStatus: IdentityVaultStatus;\n    let previousContentEncryptionKey: string;\n    let previousDid: string;\n    try {\n      previousDid = await this.getStoredDid();\n      previousContentEncryptionKey = await this.getStoredContentEncryptionKey();\n      previousStatus = await this.getStatus();\n    } catch {\n      throw new Error(\n        'HdIdentityVault: The restore operation cannot proceed because the existing vault ' +\n        'contents are missing or inaccessible. If the problem persists consider re-initializing ' +\n        'the vault and retrying the restore.'\n      );\n    }\n\n    try {\n      // Convert the backup data to a JSON object.\n      const backupData = Convert.base64Url(backup.data).toObject() as IdentityVaultBackupData;\n\n      // Restore the backup to the data store.\n      await this._store.set('did', backupData.did);\n      await this._store.set('contentEncryptionKey', backupData.contentEncryptionKey);\n      await this.setStatus(backupData.status);\n\n      // Attempt to unlock the vault with the given `password`.\n      await this.unlock({ password });\n\n    } catch (error: any) {\n      // If the restore operation fails, revert the data store to the status and contents that were\n      // saved before the restore operation was attempted.\n      await this.setStatus(previousStatus);\n      await this._store.set('contentEncryptionKey', previousContentEncryptionKey);\n      await this._store.set('did', previousDid);\n\n      throw new Error(\n        'HdIdentityVault: Restore operation failed due to invalid backup data or an incorrect ' +\n        'password. Please verify the password is correct for the provided backup and try again.'\n      );\n    }\n\n    // Update the last restore timestamp in the data store.\n    await this.setStatus({ lastRestore: new Date().toISOString() });\n  }\n\n  /**\n   * Unlocks the vault by decrypting the stored content encryption key (CEK) using the provided\n   * password.\n   *\n   * This method is essential for accessing the vault's encrypted contents, enabling the decryption\n   * of stored data and the execution of further operations requiring the vault to be unlocked.\n   *\n   * @example\n   * ```ts\n   * const identityVault = new HdIdentityVault();\n   * await identityVault.initialize({ password: 'your-initial-phrase' });\n   * // Unlock the vault with the correct password before accessing its contents\n   * await identityVault.unlock({ password: 'your-initial-phrase' });\n   * console.log('Vault unlocked successfully.');\n   * ```\n   *\n   *\n   * @param params - The parameters required for the unlock operation.\n   * @param params.password - The password used to encrypt the vault's CEK, necessary for\n   *                            decryption.\n   * @returns A promise that resolves when the vault has been successfully unlocked.\n   * @throws An error if the vault has not been initialized or if the provided password is\n   *         incorrect.\n   */\n  public async unlock({ password }: { password: string }): Promise<void> {\n    // Lock the vault.\n    await this.lock();\n\n    // Retrieve the content encryption key (CEK) record as a compact JWE from the data store.\n    const cekJwe = await this.getStoredContentEncryptionKey();\n\n    // Decrypt the compact JWE.\n    try {\n      const { plaintext: contentEncryptionKeyBytes } = await CompactJwe.decrypt({\n        jwe        : cekJwe,\n        key        : Convert.string(password).toUint8Array(),\n        crypto     : this.crypto,\n        keyManager : new LocalKeyManager()\n      });\n      const contentEncryptionKey = Convert.uint8Array(contentEncryptionKeyBytes).toObject() as Jwk;\n\n      // Save the content encryption key in memory, thereby unlocking the vault.\n      this._contentEncryptionKey = contentEncryptionKey;\n\n    } catch (error: any) {\n      throw new Error(`HdIdentityVault: Unable to unlock the vault due to an incorrect password.`);\n    }\n  }\n\n  /**\n   * Retrieves the Decentralized Identifier (DID) associated with the identity vault from the vault\n   * store.\n   *\n   * This DID is encrypted in compact JWE format and needs to be decrypted after the vault is\n   * unlocked. The method is intended to be used internally within the HdIdentityVault class to access\n   * the encrypted PortableDid.\n   *\n   * @returns A promise that resolves to the encrypted DID stored in the vault as a compact JWE.\n   * @throws Will throw an error if the DID cannot be retrieved from the vault.\n   */\n  private async getStoredDid(): Promise<string> {\n    // Retrieve the DID record as a compact JWE from the data store.\n    const didJwe = await this._store.get('did');\n\n    if (!didJwe) {\n      throw new Error(\n        'HdIdentityVault: Unable to retrieve the DID record from the vault. Please check the ' +\n        'vault status and if the problem persists consider re-initializing the vault and ' +\n        'restoring the contents from a previous backup.'\n      );\n    }\n\n    return didJwe;\n  }\n\n  /**\n   * Retrieves the encrypted Content Encryption Key (CEK) from the vault's storage.\n   *\n   * This CEK is used for encrypting and decrypting the vault's contents. It is stored as a\n   * compact JWE and should be decrypted with the user's password to be used for further\n   * cryptographic operations.\n   *\n   * @returns A promise that resolves to the stored CEK as a string in compact JWE format.\n   * @throws Will throw an error if the CEK cannot be retrieved, indicating potential issues with\n   *         the vault's integrity or state.\n   */\n  private async getStoredContentEncryptionKey(): Promise<string> {\n    // Retrieve the content encryption key (CEK) record as a compact JWE from the data store.\n    const cekJwe = await this._store.get('contentEncryptionKey');\n\n    if (!cekJwe) {\n      throw new Error(\n        'HdIdentityVault: Unable to retrieve the Content Encryption Key record from the vault. ' +\n        'Please check the vault status and if the problem persists consider re-initializing the ' +\n        'vault and restoring the contents from a previous backup.'\n      );\n    }\n\n    return cekJwe;\n  }\n\n  /**\n   * Updates the status of the `HdIdentityVault`, reflecting changes in its initialization, lock\n   * state, and the timestamps of the last backup and restore operations.\n   *\n   * This method directly manipulates the internal state stored in the vault's key-value store.\n   *\n   * @param params - The status properties to be updated.\n   * @param params.initialized - Updates the initialization state of the vault.\n   * @param params.lastBackup - Updates the timestamp of the last successful backup.\n   * @param params.lastRestore - Updates the timestamp of the last successful restore.\n   * @returns A promise that resolves to a boolean indicating successful status update.\n   * @throws Will throw an error if the status cannot be updated in the key-value store.\n   */\n  private async setStatus({ initialized, lastBackup, lastRestore }: Partial<IdentityVaultStatus>): Promise<boolean> {\n    // Get the current status values from the store, if any.\n    let vaultStatus = await this.getStatus();\n\n    // Update the status properties with new values specified, if any.\n    vaultStatus.initialized = initialized ?? vaultStatus.initialized;\n    vaultStatus.lastBackup = lastBackup ?? vaultStatus.lastBackup;\n    vaultStatus.lastRestore = lastRestore ?? vaultStatus.lastRestore;\n\n    // Write the changes to the store.\n    await this._store.set('vaultStatus', JSON.stringify(vaultStatus));\n\n    return true;\n  }\n}", "import { Convert } from '@web5/common';\n\nimport type { Web5PlatformAgent } from './types/agent.js';\nimport type { IdentityMetadata } from './types/identity.js';\nimport type { AgentDataStore, DataStoreDeleteParams, DataStoreGetParams, DataStoreListParams, DataStoreSetParams } from './store-data.js';\n\nimport { DwnInterface } from './types/dwn.js';\nimport { IdentityProtocolDefinition } from './store-data-protocols.js';\nimport { TENANT_SEPARATOR } from './utils-internal.js';\nimport { DwnDataStore, InMemoryDataStore } from './store-data.js';\n\nexport function isIdentityMetadata(obj: unknown): obj is IdentityMetadata {\n  // Validate that the given value is an object that has the necessary properties of IdentityMetadata.\n  return !(!obj || typeof obj !== 'object' || obj === null)\n    && 'name' in obj;\n}\n\nexport class DwnIdentityStore extends DwnDataStore<IdentityMetadata> implements AgentDataStore<IdentityMetadata> {\n  protected name = 'DwnIdentityStore';\n\n  protected _recordProtocolDefinition = IdentityProtocolDefinition;\n\n  /**\n   * Properties to use when writing and querying Identity records with the DWN store.\n   */\n  protected _recordProperties = {\n    dataFormat   : 'application/json',\n    protocol     : this._recordProtocolDefinition.protocol,\n    protocolPath : 'identityMetadata',\n    schema       : this._recordProtocolDefinition.types.identityMetadata.schema,\n  };\n\n  public async delete(params: DataStoreDeleteParams): Promise<boolean> {\n    return await super.delete(params);\n  }\n\n  public async get(params: DataStoreGetParams): Promise<IdentityMetadata | undefined> {\n    return await super.get(params);\n  }\n\n  public async set(params: DataStoreSetParams<IdentityMetadata>): Promise<void> {\n    return await super.set(params);\n  }\n\n  public async list(params: DataStoreListParams): Promise<IdentityMetadata[]> {\n    return await super.list(params);\n  }\n\n  protected async getAllRecords({ agent, tenantDid }: {\n    agent: Web5PlatformAgent;\n    tenantDid: string;\n  }): Promise<IdentityMetadata[]> {\n    // Clear the index since it will be rebuilt from the query results.\n    this._index.clear();\n\n    // Query the DWN for all stored IdentityMetadata objects.\n    const { reply: queryReply } = await agent.dwn.processRequest({\n      author        : tenantDid,\n      target        : tenantDid,\n      messageType   : DwnInterface.RecordsQuery,\n      messageParams : { filter: { ...this._recordProperties } }\n    });\n\n    // Loop through all of the stored IdentityMetadata records and accumulate the objects.\n    let storedIdentities: IdentityMetadata[] = [];\n    for (const record of queryReply.entries ?? []) {\n      // All IdentityMetadata records are expected to be small enough such that the data is returned\n      // with the query results. If a record is returned without `encodedData` this is unexpected so\n      // throw an error.\n      if (!record.encodedData) {\n        throw new Error(`${this.name}: Expected 'encodedData' to be present in the DWN query result entry`);\n      }\n\n      const storedIdentity = Convert.base64Url(record.encodedData).toObject() as IdentityMetadata;\n      if (isIdentityMetadata(storedIdentity)) {\n        // Update the index with the matching record ID.\n        const indexKey = `${tenantDid}${TENANT_SEPARATOR}${storedIdentity.uri}`;\n        this._index.set(indexKey, record.recordId);\n\n        // Add the stored Identity to the cache.\n        this._cache.set(record.recordId, storedIdentity);\n\n        storedIdentities.push(storedIdentity);\n      }\n    }\n\n    return storedIdentities;\n  }\n}\n\nexport class InMemoryIdentityStore extends InMemoryDataStore<IdentityMetadata> implements AgentDataStore<IdentityMetadata> {\n  protected name = 'InMemoryIdentityStore';\n\n  public async delete(params: DataStoreDeleteParams): Promise<boolean> {\n    return await super.delete(params);\n  }\n\n  public async get(params: DataStoreGetParams): Promise<IdentityMetadata | undefined> {\n    return await super.get(params);\n  }\n\n  public async list(params: DataStoreListParams): Promise<IdentityMetadata[]> {\n    return await super.list(params);\n  }\n\n  public async set(params: DataStoreSetParams<IdentityMetadata>): Promise<void> {\n    return await super.set(params);\n  }\n}", "import type { RequireOnly } from '@web5/common';\n\nimport type { AgentDataStore } from './store-data.js';\nimport type { Web5PlatformAgent } from './types/agent.js';\nimport type { DidMethodCreateOptions } from './did-api.js';\nimport type { AgentKeyManager } from './types/key-manager.js';\nimport type { IdentityMetadata, PortableIdentity } from './types/identity.js';\n\nimport { BearerIdentity } from './bearer-identity.js';\nimport { isPortableDid } from './prototyping/dids/utils.js';\nimport { InMemoryIdentityStore } from './store-identity.js';\nimport { getDwnServiceEndpointUrls } from './utils.js';\nimport { PortableDid } from '@web5/dids';\n\nexport interface IdentityApiParams<TKeyManager extends AgentKeyManager> {\n  agent?: Web5PlatformAgent<TKeyManager>;\n\n  store?: AgentDataStore<IdentityMetadata>;\n}\n\nexport interface IdentityCreateParams<\n  TKeyManager = AgentKeyManager,\n  TMethod extends keyof DidMethodCreateOptions<TKeyManager> = keyof DidMethodCreateOptions<TKeyManager>\n> {\n  metadata: RequireOnly<IdentityMetadata, 'name'>;\n  didMethod?: TMethod;\n  didOptions?: DidMethodCreateOptions<TKeyManager>[TMethod];\n  store?: boolean;\n}\n\nexport function isPortableIdentity(obj: unknown): obj is PortableIdentity {\n  // Validate that the given value is an object that has the necessary properties of PortableIdentity.\n  return !(!obj || typeof obj !== 'object' || obj === null)\n    && 'did' in obj\n    && 'metadata' in obj\n    && isPortableDid(obj.did);\n}\n\n/**\n * This API is used to manage and interact with Identities within the Web5 Agent framework.\n * An Identity is a DID that is associated with metadata that describes the Identity.\n * Metadata includes A name(label), and whether or not the Identity is connected (delegated to act on the behalf of another DID).\n *\n * A KeyManager is used to manage the cryptographic keys associated with the Identities.\n *\n * The `DidApi` is used internally to create, store, and manage DIDs.\n * When a DWN Data Store is used, the Identity and DID information are stored under the Agent DID's tenant.\n */\nexport class AgentIdentityApi<TKeyManager extends AgentKeyManager = AgentKeyManager> {\n  /**\n   * Holds the instance of a `Web5PlatformAgent` that represents the current execution context for\n   * the `AgentIdentityApi`. This agent is used to interact with other Web5 agent components. It's\n   * vital to ensure this instance is set to correctly contextualize operations within the broader\n   * Web5 Agent framework.\n   */\n  private _agent?: Web5PlatformAgent<TKeyManager>;\n\n  private _store: AgentDataStore<IdentityMetadata>;\n\n  constructor({ agent, store }: IdentityApiParams<TKeyManager> = {}) {\n    this._agent = agent;\n\n    // If `store` is not given, use an in-memory store by default.\n    this._store = store ?? new InMemoryIdentityStore();\n  }\n\n  /**\n   * Retrieves the `Web5PlatformAgent` execution context.\n   *\n   * @returns The `Web5PlatformAgent` instance that represents the current execution context.\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5PlatformAgent<TKeyManager> {\n    if (this._agent === undefined) {\n      throw new Error('AgentIdentityApi: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5PlatformAgent<TKeyManager>) {\n    this._agent = agent;\n  }\n\n  get tenant(): string {\n    if (!this._agent) {\n      throw new Error('AgentIdentityApi: The agent must be set to perform tenant specific actions.');\n    }\n\n    return this._agent.agentDid.uri;\n  }\n\n  public async create({ metadata, didMethod = 'dht', didOptions, store }:\n    IdentityCreateParams<TKeyManager>\n  ): Promise<BearerIdentity> {\n\n    const bearerDid = await this.agent.did.create({\n      method  : didMethod,\n      options : didOptions,\n      tenant  : this.tenant,\n      store,\n    });\n\n    // Create the BearerIdentity object.\n    const identity = new BearerIdentity({\n      did      : bearerDid,\n      metadata : { ...metadata, uri: bearerDid.uri, tenant: this.tenant }\n    });\n\n    // Persist the Identity to the store, by default, unless the `store` option is set to false.\n    if (store ?? true) {\n      await this._store.set({\n        id                : identity.did.uri,\n        data              : identity.metadata,\n        agent             : this.agent,\n        tenant            : identity.metadata.tenant,\n        preventDuplicates : false,\n        useCache          : true\n      });\n    }\n\n    return identity;\n  }\n\n  public async export({ didUri }: {\n    didUri: string;\n  }): Promise<PortableIdentity> {\n    const bearerIdentity = await this.get({ didUri });\n\n    if (!bearerIdentity) {\n      throw new Error(`AgentIdentityApi: Failed to export due to Identity not found: ${didUri}`);\n    }\n\n    // If the Identity was found, return the Identity in a portable format, and if supported by the\n    // Agent's key manager, the private key material.\n    const portableIdentity = await bearerIdentity.export();\n\n    return portableIdentity;\n  }\n\n  public async get({ didUri }: {\n    didUri: string;\n  }): Promise<BearerIdentity | undefined> {\n    const storedIdentity = await this._store.get({ id: didUri, agent: this.agent, useCache: true });\n\n    // If the Identity is not found in the store, return undefined.\n    if (!storedIdentity) return undefined;\n\n    // Retrieve the DID from the Agent's DID store using the tenant value from the stored\n    // Identity's metadata.\n    const storedDid = await this.agent.did.get({ didUri, tenant: storedIdentity.tenant });\n\n    // If the Identity is present but the DID is not found, throw an error.\n    if (!storedDid) {\n      throw new Error(`AgentIdentityApi: Identity is present in the store but DID is missing: ${didUri}`);\n    }\n\n    // Create the BearerIdentity object.\n    const identity = new BearerIdentity({ did: storedDid, metadata: storedIdentity });\n\n    return identity;\n  }\n\n  public async import({ portableIdentity }: {\n    portableIdentity: PortableIdentity;\n  }): Promise<BearerIdentity> {\n\n    // set the tenant of the portable identity to the agent's tenant\n    portableIdentity.metadata.tenant = this.tenant;\n\n    // Import the PortableDid to the Agent's DID store.\n    const storedDid = await this.agent.did.import({\n      portableDid : portableIdentity.portableDid,\n      tenant      : portableIdentity.metadata.tenant\n    });\n\n    // Verify the DID is present in the Agent's DID store.\n    if (!storedDid) {\n      throw new Error(`AgentIdentityApi: Failed to import Identity: ${portableIdentity.metadata.uri}`);\n    }\n\n    // Create the BearerIdentity object.\n    const identity = new BearerIdentity({ did: storedDid, metadata: portableIdentity.metadata });\n\n    // Store the Identity metadata in the Agent's Identity store.\n    await this._store.set({\n      id                : identity.did.uri,\n      data              : identity.metadata,\n      agent             : this.agent,\n      tenant            : identity.metadata.tenant,\n      preventDuplicates : true,\n      useCache          : true\n    });\n\n    return identity;\n  }\n\n  public async list({ tenant }: {\n    tenant?: string;\n  } = {}): Promise<BearerIdentity[]> {\n    // Retrieve the list of Identities from the Agent's Identity store.\n    const storedIdentities = await this._store.list({ agent: this.agent, tenant });\n\n    const identities = await Promise.all(storedIdentities.map(metadata => this.get({ didUri: metadata.uri })));\n\n    return identities.filter(identity => typeof identity !== 'undefined') as BearerIdentity[];\n  }\n\n  public async delete({ didUri }:{\n    didUri: string;\n  }): Promise<void> {\n    const storedIdentity = await this._store.get({ id: didUri, agent: this.agent, useCache: true });\n    if (!storedIdentity) {\n      throw new Error(`AgentIdentityApi: Failed to purge due to Identity not found: ${didUri}`);\n    }\n\n    // Delete the Identity from the Agent's Identity store.\n    await this._store.delete({ id: didUri, agent: this.agent });\n  }\n\n  /**\n   * Returns the DWN endpoints for the given DID.\n   *\n   * @param didUri - The DID URI to get the DWN endpoints for.\n   * @returns An array of DWN endpoints.\n   * @throws An error if the DID is not found, or no DWN service exists.\n   */\n  public getDwnEndpoints({ didUri }: { didUri: string; }): Promise<string[]> {\n    return getDwnServiceEndpointUrls(didUri, this.agent.did);\n  }\n\n  /**\n   * Sets the DWN endpoints for the given DID.\n   *\n   * @param didUri - The DID URI to set the DWN endpoints for.\n   * @param endpoints - The array of DWN endpoints to set.\n   * @throws An error if the DID is not found, or if an update cannot be performed.\n   */\n  public async setDwnEndpoints({ didUri, endpoints }: { didUri: string; endpoints: string[] }): Promise<void> {\n    const bearerDid = await this.agent.did.get({ didUri });\n    if (!bearerDid) {\n      throw new Error(`AgentIdentityApi: Failed to set DWN endpoints due to DID not found: ${didUri}`);\n    }\n\n    const portableDid = await bearerDid.export();\n    const dwnService = portableDid.document.service?.find(service => service.id.endsWith('dwn'));\n    if (dwnService) {\n      // Update the existing DWN Service with the provided endpoints\n      dwnService.serviceEndpoint = endpoints;\n    } else {\n\n      // create a DWN Service to add to the DID document\n      const newDwnService = {\n        id              : 'dwn',\n        type            : 'DecentralizedWebNode',\n        serviceEndpoint : endpoints,\n        enc             : '#enc',\n        sig             : '#sig'\n      };\n\n      // if no other services exist, create a new array with the DWN service\n      if (!portableDid.document.service) {\n        portableDid.document.service = [newDwnService];\n      } else {\n        // otherwise, push the new DWN service to the existing services\n        portableDid.document.service.push(newDwnService);\n      }\n    }\n\n    await this.agent.did.update({ portableDid, tenant: this.agent.agentDid.uri });\n  }\n\n  /**\n   * Updates the Identity's metadata name field.\n   *\n   * @param didUri - The DID URI of the Identity to update.\n   * @param name - The new name to set for the Identity.\n   *\n   * @throws An error if the Identity is not found, name is not provided, or no changes are detected.\n   */\n  public async setMetadataName({ didUri, name }: { didUri: string; name: string }): Promise<void> {\n    if (!name) {\n      throw new Error('AgentIdentityApi: Failed to set metadata name due to missing name value.');\n    }\n\n    const identity = await this.get({ didUri });\n    if (!identity) {\n      throw new Error(`AgentIdentityApi: Failed to set metadata name due to Identity not found: ${didUri}`);\n    }\n\n    if (identity.metadata.name === name) {\n      throw new Error('AgentIdentityApi: No changes detected.');\n    }\n\n    // Update the name in the Identity's metadata and store it\n    await this._store.set({\n      id             : identity.did.uri,\n      data           : { ...identity.metadata, name },\n      agent          : this.agent,\n      tenant         : identity.metadata.tenant,\n      updateExisting : true,\n      useCache       : true\n    });\n  }\n\n  /**\n   * Returns the connected Identity, if one is available.\n   *\n   * Accepts optional `connectedDid` parameter to filter the a specific connected identity,\n   * if none is provided the first connected identity is returned.\n   */\n  public async connectedIdentity({ connectedDid }:{ connectedDid?: string } = {}): Promise<BearerIdentity | undefined> {\n    const identities = await this.list();\n    if (identities.length < 1) {\n      return undefined;\n    }\n\n    // If a specific connected DID is provided, return the first identity that matches it.\n    // Otherwise, return the first connected identity.\n    return connectedDid ?\n      identities.find(identity => identity.metadata.connectedDid === connectedDid) :\n      identities.find(identity => identity.metadata.connectedDid !== undefined);\n  }\n}", "import { PermissionGrant, PermissionGrantData, PermissionRequestData, PermissionRevocationData, PermissionsProtocol } from '@tbd54566975/dwn-sdk-js';\nimport { Web5Agent } from './types/agent.js';\nimport { DwnDataEncodedRecordsWriteMessage, DwnInterface, DwnMessageParams, DwnMessagesPermissionScope, DwnPermissionGrant, DwnPermissionRequest, DwnPermissionScope, DwnProtocolPermissionScope, DwnRecordsPermissionScope, ProcessDwnRequest } from './types/dwn.js';\nimport { Convert, TtlCache } from '@web5/common';\nimport { CreateGrantParams, CreateRequestParams, CreateRevocationParams, FetchPermissionRequestParams, FetchPermissionsParams, GetPermissionParams, IsGrantRevokedParams, PermissionGrantEntry, PermissionRequestEntry, PermissionRevocationEntry, PermissionsApi } from './types/permissions.js';\nimport { isRecordsType } from './dwn-api.js';\n\nexport class AgentPermissionsApi implements PermissionsApi {\n\n  /** cache for fetching a permission {@link PermissionGrant}, keyed by a specific MessageType and protocol */\n  private _cachedPermissions: TtlCache<string, PermissionGrantEntry> = new TtlCache({ ttl: 60 * 1000 });\n\n  private _agent?: Web5Agent;\n\n  get agent(): Web5Agent {\n    if (!this._agent) {\n      throw new Error('AgentPermissionsApi: Agent is not set');\n    }\n    return this._agent;\n  }\n\n  set agent(agent:Web5Agent) {\n    this._agent = agent;\n  }\n\n  constructor({ agent }: { agent?: Web5Agent } = {}) {\n    this._agent = agent;\n  }\n\n  async getPermissionForRequest({\n    connectedDid,\n    delegateDid,\n    delegate,\n    messageType,\n    protocol,\n    cached = false\n  }: GetPermissionParams): Promise<PermissionGrantEntry> {\n    // Currently we only support finding grants based on protocols\n    // A different approach may be necessary when we introduce `protocolPath` and `contextId` specific impersonation\n    const cacheKey = [ connectedDid, delegateDid, messageType, protocol ].join('~');\n    const cachedGrant = cached ? this._cachedPermissions.get(cacheKey) : undefined;\n    if (cachedGrant) {\n      return cachedGrant;\n    }\n\n    const permissionGrants = await this.fetchGrants({\n      author  : delegateDid,\n      target  : delegateDid,\n      grantor : connectedDid,\n      grantee : delegateDid,\n    });\n\n    // get the delegate grants that match the messageParams and are associated with the connectedDid as the grantor\n    const grant = await AgentPermissionsApi.matchGrantFromArray(\n      connectedDid,\n      delegateDid,\n      { messageType, protocol },\n      permissionGrants,\n      delegate\n    );\n\n    if (!grant) {\n      throw new Error(`CachedPermissions: No permissions found for ${messageType}: ${protocol}`);\n    }\n\n    this._cachedPermissions.set(cacheKey, grant);\n    return grant;\n  }\n\n  async fetchGrants({\n    author,\n    target,\n    grantee,\n    grantor,\n    protocol,\n    remote = false\n  }: FetchPermissionsParams): Promise<PermissionGrantEntry[]> {\n\n    // filter by a protocol using tags if provided\n    const tags = protocol ? { protocol } : undefined;\n\n    const params: ProcessDwnRequest<DwnInterface.RecordsQuery> = {\n      author        : author,\n      target        : target,\n      messageType   : DwnInterface.RecordsQuery,\n      messageParams : {\n        filter: {\n          author       : grantor, // the author of the grant would be the grantor\n          recipient    : grantee, // the recipient of the grant would be the grantee\n          protocol     : PermissionsProtocol.uri,\n          protocolPath : PermissionsProtocol.grantPath,\n          tags\n        }\n      }\n    };\n\n    const { reply } = remote ? await this.agent.sendDwnRequest(params) : await this.agent.processDwnRequest(params);\n    if (reply.status.code !== 200) {\n      throw new Error(`PermissionsApi: Failed to fetch grants: ${reply.status.detail}`);\n    }\n\n    const grants:PermissionGrantEntry[] = [];\n    for (const entry of reply.entries! as DwnDataEncodedRecordsWriteMessage[]) {\n      // TODO: Check for revocation status based on a request parameter and filter out revoked grants\n      const grant = await DwnPermissionGrant.parse(entry);\n      grants.push({ grant, message: entry });\n    }\n\n    return grants;\n  }\n\n  async fetchRequests({\n    author,\n    target,\n    protocol,\n    remote = false\n  }:FetchPermissionRequestParams):Promise<PermissionRequestEntry[]> {\n    // filter by a protocol using tags if provided\n    const tags = protocol ? { protocol } : undefined;\n\n    const params: ProcessDwnRequest<DwnInterface.RecordsQuery> = {\n      author        : author,\n      target        : target,\n      messageType   : DwnInterface.RecordsQuery,\n      messageParams : {\n        filter: {\n          protocol     : PermissionsProtocol.uri,\n          protocolPath : PermissionsProtocol.requestPath,\n          tags\n        }\n      }\n    };\n\n    const { reply } = remote ? await this.agent.sendDwnRequest(params) : await this.agent.processDwnRequest(params);\n    if (reply.status.code !== 200) {\n      throw new Error(`PermissionsApi: Failed to fetch requests: ${reply.status.detail}`);\n    }\n\n    const requests: PermissionRequestEntry[] = [];\n    for (const entry of reply.entries! as DwnDataEncodedRecordsWriteMessage[]) {\n      const request = await DwnPermissionRequest.parse(entry);\n      requests.push({ request, message: entry });\n    }\n\n    return requests;\n  }\n\n  async isGrantRevoked({\n    author,\n    target,\n    grantRecordId,\n    remote = false\n  }: IsGrantRevokedParams): Promise<boolean> {\n    const params: ProcessDwnRequest<DwnInterface.RecordsRead> = {\n      author,\n      target,\n      messageType   : DwnInterface.RecordsRead,\n      messageParams : {\n        filter: {\n          parentId     : grantRecordId,\n          protocol     : PermissionsProtocol.uri,\n          protocolPath : PermissionsProtocol.revocationPath,\n        }\n      }\n    };\n\n    const { reply: revocationReply } = remote ? await this.agent.sendDwnRequest(params) : await this.agent.processDwnRequest(params);\n    if (revocationReply.status.code === 404) {\n      // no revocation found, the grant is not revoked\n      return false;\n    } else if (revocationReply.status.code === 200) {\n      // a revocation was found, the grant is revoked\n      return true;\n    }\n\n    throw new Error(`PermissionsApi: Failed to check if grant is revoked: ${revocationReply.status.detail}`);\n  }\n\n  async createGrant(params: CreateGrantParams): Promise<PermissionGrantEntry> {\n    const { author, store = false, delegated = false, ...createGrantParams } = params;\n\n    let tags = undefined;\n    if (PermissionsProtocol.hasProtocolScope(createGrantParams.scope)) {\n      tags = { protocol: createGrantParams.scope.protocol };\n    }\n\n    const permissionGrantData: PermissionGrantData = {\n      dateExpires : createGrantParams.dateExpires,\n      requestId   : createGrantParams.requestId,\n      description : createGrantParams.description,\n      delegated,\n      scope       : createGrantParams.scope\n    };\n\n    const permissionsGrantBytes = Convert.object(permissionGrantData).toUint8Array();\n\n    const messageParams: DwnMessageParams[DwnInterface.RecordsWrite] = {\n      recipient    : createGrantParams.grantedTo,\n      protocol     : PermissionsProtocol.uri,\n      protocolPath : PermissionsProtocol.grantPath,\n      dataFormat   : 'application/json',\n      tags\n    };\n\n    const { reply, message } = await this.agent.processDwnRequest({\n      store,\n      author,\n      target      : author,\n      messageType : DwnInterface.RecordsWrite,\n      messageParams,\n      dataStream  : new Blob([ permissionsGrantBytes ])\n    });\n\n    if (reply.status.code !== 202) {\n      throw new Error(`PermissionsApi: Failed to create grant: ${reply.status.detail}`);\n    }\n\n    const dataEncodedMessage: DwnDataEncodedRecordsWriteMessage = {\n      ...message!,\n      encodedData: Convert.uint8Array(permissionsGrantBytes).toBase64Url()\n    };\n\n    const grant = await DwnPermissionGrant.parse(dataEncodedMessage);\n\n    return { grant, message: dataEncodedMessage };\n  }\n\n  async createRequest(params: CreateRequestParams): Promise<PermissionRequestEntry> {\n    const { author, store = false, delegated = false, ...createGrantParams } = params;\n\n    let tags = undefined;\n    if (PermissionsProtocol.hasProtocolScope(createGrantParams.scope)) {\n      tags = { protocol: createGrantParams.scope.protocol };\n    }\n\n    const permissionRequestData: PermissionRequestData = {\n      description : createGrantParams.description,\n      delegated,\n      scope       : createGrantParams.scope\n    };\n\n    const permissionRequestBytes = Convert.object(permissionRequestData).toUint8Array();\n\n    const messageParams: DwnMessageParams[DwnInterface.RecordsWrite] = {\n      protocol     : PermissionsProtocol.uri,\n      protocolPath : PermissionsProtocol.requestPath,\n      dataFormat   : 'application/json',\n      tags\n    };\n\n    const { reply, message } = await this.agent.processDwnRequest({\n      store,\n      author,\n      target      : author,\n      messageType : DwnInterface.RecordsWrite,\n      messageParams,\n      dataStream  : new Blob([ permissionRequestBytes ])\n    });\n\n    if (reply.status.code !== 202) {\n      throw new Error(`PermissionsApi: Failed to create request: ${reply.status.detail}`);\n    }\n\n    const dataEncodedMessage: DwnDataEncodedRecordsWriteMessage = {\n      ...message!,\n      encodedData: Convert.uint8Array(permissionRequestBytes).toBase64Url()\n    };\n\n    const request = await DwnPermissionRequest.parse(dataEncodedMessage);\n\n    return { request, message: dataEncodedMessage };\n  }\n\n  async createRevocation(params: CreateRevocationParams): Promise<PermissionRevocationEntry> {\n    const { author, store = false, grant, description } = params;\n\n    const revokeData: PermissionRevocationData = { description };\n\n    const permissionRevocationBytes = Convert.object(revokeData).toUint8Array();\n\n    let tags = undefined;\n    if (PermissionsProtocol.hasProtocolScope(grant.scope)) {\n      tags = { protocol: grant.scope.protocol };\n    }\n\n    const messageParams: DwnMessageParams[DwnInterface.RecordsWrite] = {\n      parentContextId : grant.id,\n      protocol        : PermissionsProtocol.uri,\n      protocolPath    : PermissionsProtocol.revocationPath,\n      dataFormat      : 'application/json',\n      tags\n    };\n\n    const { reply, message } = await this.agent.processDwnRequest({\n      store,\n      author,\n      target      : author,\n      messageType : DwnInterface.RecordsWrite,\n      messageParams,\n      dataStream  : new Blob([ permissionRevocationBytes ])\n    });\n\n    if (reply.status.code !== 202) {\n      throw new Error(`PermissionsApi: Failed to create revocation: ${reply.status.detail}`);\n    }\n\n    const dataEncodedMessage: DwnDataEncodedRecordsWriteMessage = {\n      ...message!,\n      encodedData: Convert.uint8Array(permissionRevocationBytes).toBase64Url()\n    };\n\n    return { message: dataEncodedMessage };\n  }\n\n  async clear():Promise<void> {\n    this._cachedPermissions.clear();\n  }\n\n  /**\n   * Matches the appropriate grant from an array of grants based on the provided parameters.\n   *\n   * @param delegated if true, only delegated grants are turned, if false all grants are returned including delegated ones.\n   */\n  static async matchGrantFromArray<T extends DwnInterface>(\n    grantor: string,\n    grantee: string,\n    messageParams: {\n      messageType: T,\n      protocol?: string,\n      protocolPath?: string,\n      contextId?: string,\n    },\n    grants: PermissionGrantEntry[],\n    delegated: boolean = false\n  ): Promise<PermissionGrantEntry | undefined> {\n    for (const entry of grants) {\n      const { grant, message } = entry;\n      if (delegated === true && grant.delegated !== true) {\n        continue;\n      }\n      const { messageType, protocol, protocolPath, contextId } = messageParams;\n\n      if (this.matchScopeFromGrant(grantor, grantee, messageType, grant, protocol, protocolPath, contextId)) {\n        return { grant, message };\n      }\n    }\n  }\n\n  private static matchScopeFromGrant<T extends DwnInterface>(\n    grantor: string,\n    grantee: string,\n    messageType: T,\n    grant: PermissionGrant,\n    protocol?: string,\n    protocolPath?: string,\n    contextId?: string\n  ): boolean {\n  // Check if the grant matches the provided parameters\n    if (grant.grantee !== grantee || grant.grantor !== grantor) {\n      return false;\n    }\n\n    const scope = grant.scope;\n    const scopeMessageType = scope.interface + scope.method;\n    if (scopeMessageType === messageType) {\n      if (isRecordsType(messageType)) {\n        const recordScope = scope as DwnRecordsPermissionScope;\n        if (recordScope.protocol !== protocol) {\n          return false;\n        }\n\n        // If the grant scope is not restricted to a specific context or protocol path, it is unrestricted and can be used\n        if (this.isUnrestrictedProtocolScope(recordScope)) {\n          return true;\n        }\n\n        // protocolPath and contextId are mutually exclusive\n        // If the permission is scoped to a protocolPath and the permissionParams matches that path, this grant can be used\n        if (recordScope.protocolPath !== undefined && recordScope.protocolPath === protocolPath) {\n          return true;\n        }\n\n        // If the permission is scoped to a contextId and the permissionParams starts with that contextId, this grant can be used\n        if (recordScope.contextId !== undefined && contextId?.startsWith(recordScope.contextId)) {\n          return true;\n        }\n      } else {\n        const messagesScope = scope as DwnMessagesPermissionScope | DwnProtocolPermissionScope;\n        // Checks for unrestricted protocol scope, if no protocol is defined in the scope it is unrestricted\n        if (messagesScope.protocol === undefined) {\n          return true;\n        }\n\n        if (messagesScope.protocol !== protocol) {\n          return false;\n        }\n\n        return this.isUnrestrictedProtocolScope(messagesScope);\n      }\n    }\n\n    return false;\n  }\n\n  private static isUnrestrictedProtocolScope(scope: DwnPermissionScope & { contextId?: string, protocolPath?: string }): boolean {\n    return scope.contextId === undefined && scope.protocolPath === undefined;\n  }\n}", "export type JsonRpcId = string | number | null;\nexport type JsonRpcParams = any;\nexport type JsonRpcVersion = '2.0';\n\nexport interface JsonRpcRequest {\n  jsonrpc: JsonRpcVersion;\n  id?: JsonRpcId;\n  /** JSON RPC Subscription Extension Parameters */\n  subscription?: { id: JsonRpcId }\n  method: string;\n  params?: any;\n}\n\nexport interface JsonRpcError {\n  code: JsonRpcErrorCodes;\n  message: string;\n  data?: any;\n}\n\nexport enum JsonRpcErrorCodes {\n  // JSON-RPC 2.0 pre-defined errors\n  InvalidRequest = -32600,\n  MethodNotFound = -32601,\n  InvalidParams = -32602,\n  InternalError = -32603,\n  ParseError = -32700,\n  TransportError = -32300,\n\n  // App defined errors\n  BadRequest = -50400, // equivalent to HTTP Status 400\n  Unauthorized = -50401, // equivalent to HTTP Status 401\n  Forbidden = -50403, // equivalent to HTTP Status 403,\n  Conflict = -50409, // equivalent to HTTP Status 409\n}\n\nexport type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;\n\nexport interface JsonRpcSuccessResponse {\n  jsonrpc: JsonRpcVersion;\n  id: JsonRpcId;\n  result: any;\n  error?: never;\n}\n\nexport interface JsonRpcErrorResponse {\n  jsonrpc: JsonRpcVersion;\n  id: JsonRpcId;\n  result?: never;\n  error: JsonRpcError;\n}\n\nexport const createJsonRpcErrorResponse = (\n  id: JsonRpcId,\n  code: JsonRpcErrorCodes,\n  message: string,\n  data?: any,\n): JsonRpcErrorResponse => {\n  const error: JsonRpcError = { code, message, data };\n  return {\n    jsonrpc: '2.0',\n    id,\n    error,\n  };\n};\n\nexport const createJsonRpcRequest = (\n  id: JsonRpcId,\n  method: string,\n  params?: JsonRpcParams,\n): JsonRpcRequest => {\n  return {\n    jsonrpc: '2.0',\n    id,\n    method,\n    params,\n  };\n};\n\nexport const createJsonRpcSubscriptionRequest = (\n  id: JsonRpcId,\n  method: string,\n  subscriptionId: JsonRpcId,\n  params?: any\n): JsonRpcRequest => {\n  return {\n    jsonrpc      : '2.0',\n    id,\n    method       : `rpc.subscribe.${method}`,\n    params,\n    subscription : {\n      id: subscriptionId,\n    }\n  };\n};\n\nexport const createJsonRpcSuccessResponse = (\n  id: JsonRpcId,\n  result: any,\n): JsonRpcSuccessResponse => {\n  return {\n    jsonrpc: '2.0',\n    id,\n    result,\n  };\n};\n\nexport function parseJson(text: string): object | null {\n  try {\n    return JSON.parse(text);\n  } catch {\n    return null;\n  }\n}", "\nimport ms from 'ms';\nimport { TtlCache } from '@web5/common';\nimport { DwnServerInfoCache, ServerInfo } from './server-info-types.js';\n\n/**\n * Configuration parameters for creating an in-memory cache for DWN ServerInfo entries.\n *\n * Allows customization of the cache time-to-live (TTL) setting.\n */\nexport type DwnServerInfoCacheMemoryParams = {\n  /**\n   * Optional. The time-to-live for cache entries, expressed as a string (e.g., '1h', '15m').\n   * Determines how long a cache entry should remain valid before being considered expired.\n   *\n   * Defaults to '15m' if not specified.\n   */\n  ttl?: string;\n}\n\nexport class DwnServerInfoCacheMemory implements DwnServerInfoCache {\n  private cache: TtlCache<string, ServerInfo>;\n\n  constructor({ ttl = '15m' }: DwnServerInfoCacheMemoryParams= {}) {\n    this.cache = new TtlCache({ ttl: ms(ttl) });\n  }\n\n  /**\n   * Retrieves a DWN ServerInfo entry from the cache.\n   *\n   * If the cached item has exceeded its TTL, it's scheduled for deletion and undefined is returned.\n   *\n   * @param dwnUrl - The DWN URL endpoint string used as the key for getting the entry.\n   * @returns The cached DWN ServerInfo entry or undefined if not found or expired.\n   */\n  public async get(dwnUrl: string): Promise<ServerInfo| undefined> {\n    return this.cache.get(dwnUrl);\n  }\n\n  /**\n   * Stores a DWN ServerInfo entry in the cache with a TTL.\n   *\n   * @param dwnUrl - The DWN URL endpoint string used as the key for storing the entry.\n   * @param value - The DWN ServerInfo entry to be cached.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  public async set(dwnUrl: string, value: ServerInfo): Promise<void> {\n    this.cache.set(dwnUrl, value);\n  }\n\n  /**\n   * Deletes a DWN ServerInfo entry from the cache.\n   *\n   * @param dwnUrl - The DWN URL endpoint string used as the key for deletion.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  public async delete(dwnUrl: string): Promise<void> {\n    this.cache.delete(dwnUrl);\n  }\n\n  /**\n   * Clears all entries from the cache.\n   *\n   * @returns A promise that resolves when the operation is complete.\n   */\n  public async clear(): Promise<void> {\n    this.cache.clear();\n  }\n\n  /**\n   * This method is a no-op but exists to be consistent with other DWN ServerInfo Cache\n   * implementations.\n   *\n   * @returns A promise that resolves immediately.\n   */\n  public async close(): Promise<void> {\n    // No-op since there is no underlying store to close.\n  }\n}", "import type { JsonRpcResponse } from './json-rpc.js';\nimport type { DwnRpc, DwnRpcRequest, DwnRpcResponse } from './dwn-rpc-types.js';\n\nimport { createJsonRpcRequest, parseJson } from './json-rpc.js';\nimport { CryptoUtils } from '@web5/crypto';\nimport { DwnServerInfoCache, ServerInfo } from './server-info-types.js';\nimport { DwnServerInfoCacheMemory } from './dwn-server-info-cache-memory.js';\n\n/**\n * HTTP client that can be used to communicate with Dwn Servers\n */\nexport class HttpDwnRpcClient implements DwnRpc {\n  private serverInfoCache: DwnServerInfoCache;\n  constructor(serverInfoCache?: DwnServerInfoCache) {\n    this.serverInfoCache = serverInfoCache ?? new DwnServerInfoCacheMemory();\n  }\n\n  get transportProtocols() { return ['http:', 'https:']; }\n\n  async sendDwnRequest(request: DwnRpcRequest): Promise<DwnRpcResponse> {\n    const requestId = CryptoUtils.randomUuid();\n    const jsonRpcRequest = createJsonRpcRequest(requestId, 'dwn.processMessage', {\n      target  : request.targetDid,\n      message : request.message\n    });\n\n    const fetchOpts = {\n      method  : 'POST',\n      headers : {\n        'dwn-request': JSON.stringify(jsonRpcRequest)\n      }\n    };\n\n    if (request.data) {\n      // @ts-expect-error TODO: REMOVE\n      fetchOpts.headers['content-type'] = 'application/octet-stream';\n      // @ts-expect-error TODO: REMOVE\n      fetchOpts['body'] = request.data;\n    }\n\n    const resp = await fetch(request.dwnUrl, fetchOpts);\n    let dwnRpcResponse: JsonRpcResponse;\n\n    // check to see if response is in header first. if it is, that means the response is a ReadableStream\n    let dataStream;\n    const { headers } = resp;\n    if (headers.has('dwn-response')) {\n      // @ts-expect-error TODO: REMOVE\n      const jsonRpcResponse = parseJson(headers.get('dwn-response')) as JsonRpcResponse;\n\n      if (jsonRpcResponse == null) {\n        throw new Error(`failed to parse json rpc response. dwn url: ${request.dwnUrl}`);\n      }\n\n      dataStream = resp.body;\n      dwnRpcResponse = jsonRpcResponse;\n    } else {\n      // TODO: wonder if i need to try/catch this?\n      const responseBody = await resp.text();\n      dwnRpcResponse = JSON.parse(responseBody);\n    }\n\n    if (dwnRpcResponse.error) {\n      const { code, message } = dwnRpcResponse.error;\n      throw new Error(`(${code}) - ${message}`);\n    }\n\n    const { reply } = dwnRpcResponse.result;\n    if (dataStream && reply.record) {\n      reply.record.data = dataStream;\n    } else if (dataStream && reply.entry) {\n      reply.entry.data = dataStream;\n    }\n\n    return reply as DwnRpcResponse;\n  }\n\n  async getServerInfo(dwnUrl: string): Promise<ServerInfo> {\n    const serverInfo = await this.serverInfoCache.get(dwnUrl);\n    if (serverInfo) {\n      return serverInfo;\n    }\n\n    const url = new URL(dwnUrl);\n\n    // add `/info` to the dwn server url path\n    url.pathname.endsWith('/') ? url.pathname += 'info' : url.pathname += '/info';\n\n    try {\n      const response = await fetch(url.toString());\n      if(response.ok) {\n        const results = await response.json() as ServerInfo;\n\n        // explicitly return and cache only the desired properties.\n        const serverInfo = {\n          registrationRequirements : results.registrationRequirements,\n          maxFileSize              : results.maxFileSize,\n          webSocketSupport         : results.webSocketSupport,\n        };\n        this.serverInfoCache.set(dwnUrl, serverInfo);\n\n        return serverInfo;\n      } else {\n        throw new Error(`HTTP (${response.status}) - ${response.statusText}`);\n      }\n    } catch(error: any) {\n      throw new Error(`Error encountered while processing response from ${url.toString()}: ${error.message}`);\n    }\n  }\n}\n", "// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js\n\nvar ws = null\n\nif (typeof WebSocket !== 'undefined') {\n  ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined') {\n  ws = MozWebSocket\n} else if (typeof global !== 'undefined') {\n  ws = global.WebSocket || global.MozWebSocket\n} else if (typeof window !== 'undefined') {\n  ws = window.WebSocket || window.MozWebSocket\n} else if (typeof self !== 'undefined') {\n  ws = self.WebSocket || self.MozWebSocket\n}\n\nexport default ws\n", "import { CryptoUtils } from '@web5/crypto';\nimport IsomorphicWebSocket from 'isomorphic-ws';\nimport { JsonRpcId, JsonRpcRequest, JsonRpcResponse, createJsonRpcSubscriptionRequest, parseJson } from './json-rpc.js';\n\n// These were arbitrarily chosen, but can be modified via connect options\nconst CONNECT_TIMEOUT = 3_000;\nconst RESPONSE_TIMEOUT = 30_000;\n\nexport interface JsonRpcSocketOptions {\n  /** socket connection timeout in milliseconds */\n  connectTimeout?: number;\n  /** response timeout for rpc requests in milliseconds */\n  responseTimeout?: number;\n  /** optional connection close handler */\n  onclose?: () => void;\n  /** optional socket error handler */\n  onerror?: (error?: any) => void;\n}\n\n/**\n * JSON RPC Socket Client for WebSocket request/response and long-running subscriptions.\n *\n * NOTE: This is temporarily copied over from https://github.com/TBD54566975/dwn-server/blob/main/src/json-rpc-socket.ts\n * This was done in order to avoid taking a dependency on the `dwn-server`, until a future time when there will be a `clients` package.\n */\nexport class JsonRpcSocket {\n  private messageHandlers: Map<JsonRpcId, (event: { data: any }) => void> = new Map();\n\n  private constructor(private socket: IsomorphicWebSocket, private responseTimeout: number) {}\n\n  static async connect(url: string, options: JsonRpcSocketOptions = {}): Promise<JsonRpcSocket> {\n    const { connectTimeout = CONNECT_TIMEOUT, responseTimeout = RESPONSE_TIMEOUT, onclose, onerror } = options;\n\n    const socket = new IsomorphicWebSocket(url);\n\n    if (!onclose) {\n      socket.onclose = ():void => {\n        console.info(`JSON RPC Socket close ${url}`);\n      };\n    } else {\n      socket.onclose = onclose;\n    }\n\n    if (!onerror) {\n      socket.onerror = (error?: any):void => {\n        console.error(`JSON RPC Socket error ${url}`, error);\n      };\n    } else {\n      socket.onerror = onerror;\n    }\n\n    return new Promise<JsonRpcSocket>((resolve, reject) => {\n      socket.addEventListener('open', () => {\n        const jsonRpcSocket = new JsonRpcSocket(socket, responseTimeout);\n\n        socket.addEventListener('message', (event: { data: any }) => {\n          const jsonRpcResponse = parseJson(event.data) as JsonRpcResponse;\n          const handler = jsonRpcSocket.messageHandlers.get(jsonRpcResponse.id);\n          if (handler) {\n            handler(event);\n          }\n        });\n\n        resolve(jsonRpcSocket);\n      });\n\n      socket.addEventListener('error', (error: any) => {\n        reject(error);\n      });\n\n      setTimeout(() => reject, connectTimeout);\n    });\n  }\n\n  close(): void {\n    this.socket.close();\n  }\n\n  /**\n   * Sends a JSON-RPC request through the socket and waits for a single response.\n   */\n  async request(request: JsonRpcRequest): Promise<JsonRpcResponse> {\n    return new Promise((resolve, reject) => {\n      request.id ??= CryptoUtils.randomUuid();\n\n      const handleResponse = (event: { data: any }):void => {\n        const jsonRpsResponse = parseJson(event.data) as JsonRpcResponse;\n        if (jsonRpsResponse.id === request.id) {\n          // if the incoming response id matches the request id, we will remove the listener and resolve the response\n          this.messageHandlers.delete(request.id);\n          return resolve(jsonRpsResponse);\n        }\n      };\n\n      // add the listener to the map of message handlers\n      this.messageHandlers.set(request.id, handleResponse);\n      this.send(request);\n\n      // reject this promise if we don't receive any response back within the timeout period\n      setTimeout(() => {\n        this.messageHandlers.delete(request.id!);\n        reject(new Error('request timed out'));\n      }, this.responseTimeout);\n    });\n  }\n\n  /**\n   * Sends a JSON-RPC request through the socket and keeps a listener open to read associated responses as they arrive.\n   * Returns a close method to clean up the listener.\n   */\n  async subscribe(request: JsonRpcRequest, listener: (response: JsonRpcResponse) => void): Promise<{\n    response: JsonRpcResponse;\n    close?: () => Promise<void>;\n   }> {\n\n    if (!request.method.startsWith('rpc.subscribe.')) {\n      throw new Error('subscribe rpc requests must include the `rpc.subscribe` prefix');\n    }\n\n    if (!request.subscription) {\n      throw new Error('subscribe rpc requests must include subscribe options');\n    }\n\n    const subscriptionId = request.subscription.id;\n    const socketEventListener = (event: { data: any }):void => {\n      const jsonRpcResponse = parseJson(event.data.toString()) as JsonRpcResponse;\n      if (jsonRpcResponse.id === subscriptionId) {\n        if (jsonRpcResponse.error !== undefined) {\n          // remove the event listener upon receipt of a JSON RPC Error.\n          this.messageHandlers.delete(subscriptionId);\n          this.closeSubscription(subscriptionId);\n        }\n        listener(jsonRpcResponse);\n      }\n    };\n\n    this.messageHandlers.set(subscriptionId, socketEventListener);\n\n    const response = await this.request(request);\n    if (response.error) {\n      this.messageHandlers.delete(subscriptionId);\n      return { response };\n    }\n\n    // clean up listener and create a `rpc.subscribe.close` message to use when closing this JSON RPC subscription\n    const close = async (): Promise<void> => {\n      this.messageHandlers.delete(subscriptionId);\n      await this.closeSubscription(subscriptionId);\n    };\n\n    return {\n      response,\n      close\n    };\n  }\n\n  private closeSubscription(id: JsonRpcId): Promise<JsonRpcResponse> {\n    const requestId = CryptoUtils.randomUuid();\n    const request = createJsonRpcSubscriptionRequest(requestId, 'close', id, {});\n    return this.request(request);\n  }\n\n  /**\n   * Sends a JSON-RPC request through the socket. You must subscribe to a message listener separately to capture the response.\n   */\n  send(request: JsonRpcRequest):void {\n    this.socket.send(JSON.stringify(request));\n  }\n}", "import type { DwnRpc, DwnRpcRequest, DwnRpcResponse, DwnSubscriptionHandler } from './dwn-rpc-types.js';\nimport type { GenericMessage, MessageSubscription, UnionMessageReply } from '@tbd54566975/dwn-sdk-js';\n\nimport { CryptoUtils } from '@web5/crypto';\nimport { createJsonRpcRequest, createJsonRpcSubscriptionRequest } from './json-rpc.js';\nimport { JsonRpcSocket, JsonRpcSocketOptions } from './json-rpc-socket.js';\n\ninterface SocketConnection {\n  socket: JsonRpcSocket;\n  subscriptions: Map<string, MessageSubscription>;\n}\n\nexport class WebSocketDwnRpcClient implements DwnRpc {\n  public get transportProtocols() { return ['ws:', 'wss:']; }\n  // a map of dwn host to WebSocket connection\n  private static connections = new Map<string, SocketConnection>();\n\n  async sendDwnRequest(request: DwnRpcRequest, jsonRpcSocketOptions?: JsonRpcSocketOptions): Promise<DwnRpcResponse> {\n\n    // validate that the dwn URL provided is a valid WebSocket URL\n    const url = new URL(request.dwnUrl);\n    if (url.protocol !== 'ws:' && url.protocol !== 'wss:') {\n      throw new Error(`Invalid websocket protocol ${url.protocol}`);\n    }\n\n    // check if there is already a connection to this host, if it does not exist, initiate a new connection\n    const hasConnection = WebSocketDwnRpcClient.connections.has(url.host);\n    if (!hasConnection) {\n      try {\n        const socket = await JsonRpcSocket.connect(url.toString(), jsonRpcSocketOptions);\n        const subscriptions = new Map();\n        WebSocketDwnRpcClient.connections.set(url.host, { socket, subscriptions });\n      } catch(error) {\n        throw new Error(`Error connecting to ${url.host}: ${(error as Error).message}`);\n      }\n    }\n\n    const connection = WebSocketDwnRpcClient.connections.get(url.host)!;\n    const { targetDid, message, subscriptionHandler } = request;\n\n    if (subscriptionHandler) {\n      return WebSocketDwnRpcClient.subscriptionRequest(connection, targetDid, message, subscriptionHandler);\n    }\n\n    return WebSocketDwnRpcClient.processMessage(connection, targetDid, message);\n  }\n\n  private static async processMessage(connection: SocketConnection, target: string, message: GenericMessage): Promise<DwnRpcResponse> {\n    const requestId = CryptoUtils.randomUuid();\n    const request = createJsonRpcRequest(requestId, 'dwn.processMessage', { target, message });\n\n    const { socket } = connection;\n    const response = await socket.request(request);\n\n    const { error, result } = response;\n    if (error !== undefined) {\n      throw new Error(`error sending DWN request: ${error.message}`);\n    }\n\n    return result.reply as DwnRpcResponse;\n  }\n\n  private static async subscriptionRequest(connection: SocketConnection, target:string, message: GenericMessage, messageHandler: DwnSubscriptionHandler): Promise<DwnRpcResponse> {\n    const requestId = CryptoUtils.randomUuid();\n    const subscriptionId = CryptoUtils.randomUuid();\n    const request = createJsonRpcSubscriptionRequest(requestId, 'dwn.processMessage', subscriptionId, { target, message });\n\n    const { socket, subscriptions } = connection;\n    const { response, close } = await socket.subscribe(request, (response) => {\n      const { result, error } = response;\n      if (error) {\n\n        // if there is an error, close the subscription and delete it from the connection\n        const subscription = subscriptions.get(subscriptionId);\n        if (subscription) {\n          subscription.close();\n        }\n\n        subscriptions.delete(subscriptionId);\n        return;\n      }\n\n      const { event } = result;\n      messageHandler(event);\n    });\n\n    const { error, result } = response;\n    if (error) {\n      throw new Error(`could not subscribe via jsonrpc socket: ${error.message}`);\n    }\n\n    const { reply } = result as { reply: UnionMessageReply };\n    if (reply.subscription && close) {\n      subscriptions.set(subscriptionId, { ...reply.subscription, close });\n      reply.subscription.close = close;\n    }\n\n    return reply;\n  }\n}", "import { CryptoUtils } from '@web5/crypto';\n\n\nimport type { DwnRpc, DwnRpcRequest, DwnRpcResponse } from './prototyping/clients/dwn-rpc-types.js';\nimport type { DwnServerInfoRpc, ServerInfo } from './prototyping/clients/server-info-types.js';\nimport type { JsonRpcResponse } from './prototyping/clients/json-rpc.js';\n\nimport { createJsonRpcRequest } from './prototyping/clients/json-rpc.js';\nimport { HttpDwnRpcClient } from './prototyping/clients/http-dwn-rpc-client.js';\nimport { WebSocketDwnRpcClient } from './prototyping/clients/web-socket-clients.js';\n\n/**\n * Interface that can be implemented to communicate with {@link Web5Agent | Web5 Agent}\n * implementations via JSON-RPC.\n */\nexport interface DidRpc {\n  get transportProtocols(): string[]\n  sendDidRequest(request: DidRpcRequest): Promise<DidRpcResponse>\n}\n\nexport enum DidRpcMethod {\n  Create = 'did.create',\n  Resolve = 'did.resolve'\n}\n\nexport type DidRpcRequest = {\n  data: string;\n  method: DidRpcMethod;\n  url: string;\n}\n\nexport type DidRpcResponse = {\n  data?: string;\n  ok: boolean;\n  status: RpcStatus;\n}\n\nexport type RpcStatus = {\n  code: number;\n  message: string;\n};\n\nexport interface Web5Rpc extends DwnRpc, DidRpc, DwnServerInfoRpc {}\n\n/**\n * Client used to communicate with Dwn Servers\n */\nexport class Web5RpcClient implements Web5Rpc {\n  private transportClients: Map<string, Web5Rpc>;\n\n  constructor(clients: Web5Rpc[] = []) {\n    this.transportClients = new Map();\n\n    // include http and socket clients as default.\n    // can be overwritten for 'http:', 'https:', 'ws: or ':wss' if instantiated with other clients.\n    clients = [new HttpWeb5RpcClient(), new WebSocketWeb5RpcClient(), ...clients];\n\n    for (let client of clients) {\n      for (let transportScheme of client.transportProtocols) {\n        this.transportClients.set(transportScheme, client);\n      }\n    }\n  }\n\n  get transportProtocols(): string[] {\n    return Array.from(this.transportClients.keys());\n  }\n\n  async sendDidRequest(request: DidRpcRequest): Promise<DidRpcResponse> {\n    // URL() will throw if provided `url` is invalid.\n    const url = new URL(request.url);\n\n    const transportClient = this.transportClients.get(url.protocol);\n    if (!transportClient) {\n      const error = new Error(`no ${url.protocol} transport client available`);\n      error.name = 'NO_TRANSPORT_CLIENT';\n\n      throw error;\n    }\n\n    return transportClient.sendDidRequest(request);\n  }\n\n  sendDwnRequest(request: DwnRpcRequest): Promise<DwnRpcResponse> {\n    // will throw if url is invalid\n    const url = new URL(request.dwnUrl);\n\n    const transportClient = this.transportClients.get(url.protocol);\n    if (!transportClient) {\n      const error = new Error(`no ${url.protocol} transport client available`);\n      error.name = 'NO_TRANSPORT_CLIENT';\n\n      throw error;\n    }\n\n    return transportClient.sendDwnRequest(request);\n  }\n\n  async getServerInfo(dwnUrl: string): Promise<ServerInfo> {\n    // will throw if url is invalid\n    const url = new URL(dwnUrl);\n\n    const transportClient = this.transportClients.get(url.protocol);\n    if(!transportClient) {\n      const error = new Error(`no ${url.protocol} transport client available`);\n      error.name = 'NO_TRANSPORT_CLIENT';\n\n      throw error;\n    }\n\n    return transportClient.getServerInfo(dwnUrl);\n  }\n}\n\nexport class HttpWeb5RpcClient extends HttpDwnRpcClient implements Web5Rpc {\n  async sendDidRequest(request: DidRpcRequest): Promise<DidRpcResponse> {\n    const requestId = CryptoUtils.randomUuid();\n    const jsonRpcRequest = createJsonRpcRequest(requestId, request.method, {\n      data: request.data\n    });\n\n    const httpRequest = new Request(request.url, {\n      method  : 'POST',\n      headers : {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify(jsonRpcRequest),\n    });\n\n    let jsonRpcResponse: JsonRpcResponse;\n\n    try {\n      const response = await fetch(httpRequest);\n\n      if (response.ok) {\n        jsonRpcResponse = await response.json();\n\n        // If the response is an error, throw an error.\n        if (jsonRpcResponse.error) {\n          const { code, message } = jsonRpcResponse.error;\n          throw new Error(`JSON RPC (${code}) - ${message}`);\n        }\n      } else {\n        throw new Error(`HTTP (${response.status}) - ${response.statusText}`);\n      }\n    } catch (error: any) {\n      throw new Error(`Error encountered while processing response from ${request.url}: ${error.message}`);\n    }\n\n    return jsonRpcResponse.result as DidRpcResponse;\n  }\n}\n\nexport class WebSocketWeb5RpcClient extends WebSocketDwnRpcClient implements Web5Rpc {\n  async sendDidRequest(_request: DidRpcRequest): Promise<DidRpcResponse> {\n    throw new Error(`not implemented for transports [${this.transportProtocols.join(', ')}]`);\n  }\n\n  async getServerInfo(_dwnUrl: string): Promise<ServerInfo> {\n    throw new Error(`not implemented for transports [${this.transportProtocols.join(', ')}]`);\n  }\n}", "import type { SyncEngine, SyncIdentityOptions } from './types/sync.js';\nimport type { Web5PlatformAgent } from './types/agent.js';\n\nexport type SyncApiParams = {\n  agent?: Web5PlatformAgent;\n  syncEngine: SyncEngine;\n}\n\nexport class AgentSyncApi implements SyncEngine {\n  /**\n   * Holds the instance of a `Web5PlatformAgent` that represents the current execution context for\n   * the `AgentSyncApi`. This agent is used to interact with other Web5 agent components. It's vital\n   * to ensure this instance is set to correctly contextualize operations within the broader Web5\n   * Agent framework.\n   */\n  private _agent?: Web5PlatformAgent;\n\n  private _syncEngine: SyncEngine;\n\n  constructor({ agent, syncEngine }: SyncApiParams) {\n    this._syncEngine = syncEngine;\n    this._agent = agent;\n  }\n\n  /**\n   * Retrieves the `Web5PlatformAgent` execution context.\n   *\n   * @returns The `Web5PlatformAgent` instance that represents the current execution context.\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5PlatformAgent {\n    if (this._agent === undefined) {\n      throw new Error('AgentSyncApi: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5PlatformAgent) {\n    this._agent = agent;\n    this._syncEngine.agent = agent;\n  }\n\n  public async registerIdentity(params: { did: string; options?: SyncIdentityOptions }): Promise<void> {\n    await this._syncEngine.registerIdentity(params);\n  }\n\n  public async unregisterIdentity(did: string): Promise<void> {\n    await this._syncEngine.unregisterIdentity(did);\n  }\n\n  public async getIdentityOptions(did: string): Promise<SyncIdentityOptions | undefined> {\n    return await this._syncEngine.getIdentityOptions(did);\n  }\n\n  public async updateIdentityOptions(params: { did: string, options: SyncIdentityOptions }): Promise<void> {\n    await this._syncEngine.updateIdentityOptions(params);\n  }\n\n  public sync(direction?: 'push' | 'pull'): Promise<void> {\n    return this._syncEngine.sync(direction);\n  }\n\n  public startSync(params: { interval: string; }): Promise<void> {\n    return this._syncEngine.startSync(params);\n  }\n\n  public stopSync(timeout?: number): Promise<void> {\n    return this._syncEngine.stopSync(timeout);\n  }\n}", "import type { ULIDFactory } from 'ulidx';\nimport type { AbstractBatchOperation, AbstractLevel } from 'abstract-level';\nimport type {\n  GenericMessage,\n  MessagesQueryReply,\n  MessagesReadReply,\n  PaginationCursor,\n  UnionMessageReply,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport ms from 'ms';\nimport { Level } from 'level';\nimport { monotonicFactory } from 'ulidx';\nimport { NodeStream } from '@web5/common';\nimport {\n  DwnInterfaceName,\n  DwnMethodName,\n} from '@tbd54566975/dwn-sdk-js';\n\nimport type { SyncEngine, SyncIdentityOptions } from './types/sync.js';\nimport type { Web5Agent, Web5PlatformAgent } from './types/agent.js';\n\nimport { DwnInterface } from './types/dwn.js';\nimport { getDwnServiceEndpointUrls, isRecordsWrite } from './utils.js';\nimport { PermissionsApi } from './types/permissions.js';\nimport { AgentPermissionsApi } from './permissions-api.js';\n\nexport type SyncEngineLevelParams = {\n  agent?: Web5PlatformAgent;\n  dataPath?: string;\n  db?: AbstractLevel<string | Buffer | Uint8Array>;\n}\n\ntype LevelBatchOperation = AbstractBatchOperation<AbstractLevel<string | Buffer | Uint8Array>, string, string>;\n\ntype SyncDirection = 'push' | 'pull';\n\ntype SyncState = {\n  did: string;\n  delegateDid?: string;\n  dwnUrl: string;\n  cursor?: PaginationCursor,\n  protocol?: string;\n}\n\ntype SyncMessageParams = {\n  did: string;\n  messageCid: string;\n  watermark: string;\n  dwnUrl: string;\n  delegateDid?: string;\n  cursor?: PaginationCursor,\n  protocol?: string;\n}\n\nexport class SyncEngineLevel implements SyncEngine {\n  /**\n   * Holds the instance of a `Web5PlatformAgent` that represents the current execution context for\n   * the `SyncEngineLevel`. This agent is used to interact with other Web5 agent components. It's\n   * vital to ensure this instance is set to correctly contextualize operations within the broader\n   * Web5 Agent framework.\n   */\n  private _agent?: Web5PlatformAgent;\n\n  /**\n   * An instance of the `AgentPermissionsApi` that is used to interact with permissions grants used during sync\n   */\n  private _permissionsApi: PermissionsApi;;\n\n  private _db: AbstractLevel<string | Buffer | Uint8Array>;\n  private _syncIntervalId?: ReturnType<typeof setInterval>;\n  private _syncLock = false;\n  private _ulidFactory: ULIDFactory;\n\n  constructor({ agent, dataPath, db }: SyncEngineLevelParams) {\n    this._agent = agent;\n    this._permissionsApi = new AgentPermissionsApi({ agent: agent as Web5Agent });\n    this._db = (db) ? db : new Level<string, string>(dataPath ?? 'DATA/AGENT/SYNC_STORE');\n    this._ulidFactory = monotonicFactory();\n  }\n\n  /**\n   * Retrieves the `Web5PlatformAgent` execution context.\n   *\n   * @returns The `Web5PlatformAgent` instance that represents the current execution context.\n   * @throws Will throw an error if the `agent` instance property is undefined.\n   */\n  get agent(): Web5PlatformAgent {\n    if (this._agent === undefined) {\n      throw new Error('SyncEngineLevel: Unable to determine agent execution context.');\n    }\n\n    return this._agent;\n  }\n\n  set agent(agent: Web5PlatformAgent) {\n    this._agent = agent;\n    this._permissionsApi = new AgentPermissionsApi({ agent: agent as Web5Agent });\n  }\n\n  public async clear(): Promise<void> {\n    await this._permissionsApi.clear();\n    await this._db.clear();\n  }\n\n  public async close(): Promise<void> {\n    await this._db.close();\n  }\n\n  private async pull(): Promise<void> {\n    const syncPeerState = await this.getSyncPeerState({ syncDirection: 'pull' });\n    await this.enqueueOperations({ syncDirection: 'pull', syncPeerState });\n\n    const pullQueue = this.getPullQueue();\n    const pullJobs = await pullQueue.iterator().all();\n\n    const deleteOperations: LevelBatchOperation[] = [];\n    const errored: Set<string> = new Set();\n\n    for (let job of pullJobs) {\n      const [key] = job;\n      const { did, dwnUrl, messageCid, delegateDid, protocol } = SyncEngineLevel.parseSyncMessageParamsKey(key);\n      // If a particular DWN service endpoint is unreachable, skip subsequent pull operations.\n      if (errored.has(dwnUrl)) {\n        continue;\n      }\n\n      const messageExists = await this.messageExists(did, messageCid);\n      if (messageExists) {\n        deleteOperations.push({ type: 'del', key: key });\n        continue;\n      }\n\n      let permissionGrantId: string | undefined;\n      let granteeDid: string | undefined;\n      if (delegateDid) {\n        try {\n          const messagesReadGrant = await this._permissionsApi.getPermissionForRequest({\n            connectedDid : did,\n            messageType  : DwnInterface.MessagesRead,\n            delegateDid,\n            protocol,\n            cached       : true\n          });\n\n          permissionGrantId = messagesReadGrant.grant.id;\n          granteeDid = delegateDid;\n        } catch(error:any) {\n          console.error('SyncEngineLevel: pull - Error fetching MessagesRead permission grant for delegate DID', error);\n          continue;\n        }\n      }\n\n      const messagesRead = await this.agent.processDwnRequest({\n        store         : false,\n        author        : did,\n        target        : did,\n        messageType   : DwnInterface.MessagesRead,\n        granteeDid,\n        messageParams : {\n          messageCid,\n          permissionGrantId\n        }\n      });\n\n      let reply: MessagesReadReply;\n\n      try {\n        reply = await this.agent.rpc.sendDwnRequest({\n          dwnUrl,          targetDid : did,\n          message   : messagesRead.message,\n        }) as MessagesReadReply;\n      } catch(e) {\n        errored.add(dwnUrl);\n        continue;\n      }\n\n      if (reply.status.code !== 200 || !reply.entry?.message) {\n        await this.addMessage(did, messageCid);\n        deleteOperations.push({ type: 'del', key: key });\n        continue;\n      }\n\n      const replyEntry = reply.entry;\n      const message = replyEntry.message;\n      // if the message includes data we convert it to a Node readable stream\n      // otherwise we set it as undefined, as the message does not include data\n      // this occurs when the message is a RecordsWrite message that has been updated\n      const dataStream = isRecordsWrite(replyEntry) && replyEntry.data ?\n        NodeStream.fromWebReadable({ readableStream: replyEntry.data as unknown as ReadableStream })\n        : undefined;\n\n      const pullReply = await this.agent.dwn.node.processMessage(did, message, { dataStream });\n      if (SyncEngineLevel.syncMessageReplyIsSuccessful(pullReply)) {\n        await this.addMessage(did, messageCid);\n        deleteOperations.push({ type: 'del', key: key });\n      }\n    }\n\n    await pullQueue.batch(deleteOperations as any);\n  }\n\n  private async push(): Promise<void> {\n    const syncPeerState = await this.getSyncPeerState({ syncDirection: 'push' });\n    await this.enqueueOperations({ syncDirection: 'push', syncPeerState });\n\n    const pushQueue = this.getPushQueue();\n    const pushJobs = await pushQueue.iterator().all();\n\n    const deleteOperations: LevelBatchOperation[] = [];\n    const errored: Set<string> = new Set();\n\n    for (let job of pushJobs) {\n      const [key] = job;\n      const { did, delegateDid, protocol, dwnUrl, messageCid } = SyncEngineLevel.parseSyncMessageParamsKey(key);\n      // If a particular DWN service endpoint is unreachable, skip subsequent push operations.\n      if (errored.has(dwnUrl)) {\n        continue;\n      }\n\n      // Attempt to retrieve the message from the local DWN.\n      const dwnMessage = await this.getDwnMessage({ author: did, messageCid, delegateDid, protocol });\n\n      // If the message does not exist on the local DWN, remove the sync operation from the\n      // push queue, update the push watermark for this DID/DWN endpoint combination, add the\n      // message to the local message store, and continue to the next job.\n      if (!dwnMessage) {\n        deleteOperations.push({ type: 'del', key: key });\n        await this.addMessage(did, messageCid);\n\n        continue;\n      }\n\n      try {\n        const reply = await this.agent.rpc.sendDwnRequest({\n          dwnUrl,\n          targetDid : did,\n          data      : dwnMessage.data,\n          message   : dwnMessage.message\n        });\n\n        // Update the watermark and add the messageCid to the Sync Message Store if either:\n        if (SyncEngineLevel.syncMessageReplyIsSuccessful(reply)) {\n          await this.addMessage(did, messageCid);\n          deleteOperations.push({ type: 'del', key: key });\n        }\n      } catch {\n        // Error is intentionally ignored; 'errored' set is updated with 'dwnUrl'.\n        errored.add(dwnUrl);\n      }\n    }\n\n    await pushQueue.batch(deleteOperations as any);\n  }\n\n  public async registerIdentity({ did, options }: { did: string; options?: SyncIdentityOptions }): Promise<void> {\n    // Get a reference to the `registeredIdentities` sublevel.\n    const registeredIdentities = this._db.sublevel('registeredIdentities');\n\n    const existing = await this.getIdentityOptions(did);\n    if (existing) {\n      throw new Error(`SyncEngineLevel: Identity with DID ${did} is already registered.`);\n    }\n\n    // if no options are provided, we default to no delegateDid and all protocols (empty array)\n    options ??= { protocols: [] };\n\n    // Add (or overwrite, if present) the Identity's DID as a registered identity.\n    await registeredIdentities.put(did, JSON.stringify(options));\n  }\n\n  public async unregisterIdentity(did: string): Promise<void> {\n    const registeredIdentities = this._db.sublevel('registeredIdentities');\n    const existing = await this.getIdentityOptions(did);\n    if (!existing) {\n      throw new Error(`SyncEngineLevel: Identity with DID ${did} is not registered.`);\n    }\n\n    await registeredIdentities.del(did);\n  }\n\n  public async getIdentityOptions(did: string): Promise<SyncIdentityOptions | undefined> {\n    const registeredIdentities = this._db.sublevel('registeredIdentities');\n    try {\n      const options = await registeredIdentities.get(did);\n      if (options) {\n        return JSON.parse(options) as SyncIdentityOptions;\n      }\n    } catch(error) {\n      const e = error as { code: string };\n      // `Level`` throws an error if the key is not present.  Return `undefined` in this case.\n      if (e.code === 'LEVEL_NOT_FOUND') {\n        return;\n      } else {\n        throw new Error(`SyncEngineLevel: Error reading level: ${e.code}.`);\n      }\n    }\n  }\n\n  public async updateIdentityOptions({ did, options }: { did: string, options: SyncIdentityOptions }): Promise<void> {\n    const registeredIdentities = this._db.sublevel('registeredIdentities');\n    const existingOptions = await this.getIdentityOptions(did);\n    if (!existingOptions) {\n      throw new Error(`SyncEngineLevel: Identity with DID ${did} is not registered.`);\n    }\n\n    await registeredIdentities.put(did, JSON.stringify(options));\n  }\n\n  public async sync(direction?: 'push' | 'pull'): Promise<void> {\n    if (this._syncLock) {\n      throw new Error('SyncEngineLevel: Sync operation is already in progress.');\n    }\n\n    this._syncLock = true;\n    try {\n      if (!direction || direction === 'push') {\n        await this.push();\n      }\n      if (!direction || direction === 'pull') {\n        await this.pull();\n      }\n    } finally {\n      this._syncLock = false;\n    }\n  }\n\n  public async startSync({ interval }: {\n    interval: string\n  }): Promise<void> {\n    // Convert the interval string to milliseconds.\n    const intervalMilliseconds = ms(interval);\n\n    const intervalSync = async () => {\n      if (this._syncLock) {\n        return;\n      }\n\n      clearInterval(this._syncIntervalId);\n      this._syncIntervalId = undefined;\n\n      try {\n        await this.sync();\n      } catch (error) {\n        console.error('SyncEngineLevel: Error during sync operation', error);\n      }\n\n      if (!this._syncIntervalId) {\n        this._syncIntervalId = setInterval(intervalSync, intervalMilliseconds);\n      }\n    };\n\n    if (this._syncIntervalId) {\n      clearInterval(this._syncIntervalId);\n    }\n\n    // Set up a new interval.\n    this._syncIntervalId = setInterval(intervalSync, intervalMilliseconds);\n\n    // initiate an immediate sync\n    if (!this._syncLock) {\n      await this.sync();\n    }\n  }\n\n  /**\n   * stopSync currently awaits the completion of the current sync operation before stopping the sync interval.\n   * TODO: implement a signal to gracefully stop sync immediately https://github.com/TBD54566975/web5-js/issues/890\n   */\n  public async stopSync(timeout: number = 2000): Promise<void> {\n    let elapsedTimeout = 0;\n\n    while(this._syncLock) {\n      if (elapsedTimeout >= timeout) {\n        throw new Error(`SyncEngineLevel: Existing sync operation did not complete within ${timeout} milliseconds.`);\n      }\n\n      elapsedTimeout += 100;\n      await new Promise((resolve) => setTimeout(resolve, timeout < 100 ? timeout : 100));\n    }\n\n    if (this._syncIntervalId) {\n      clearInterval(this._syncIntervalId);\n      this._syncIntervalId = undefined;\n    }\n  }\n\n  /**\n   * 202: message was successfully written to the remote DWN\n   * 204: an initial write message was written without any data, cannot yet be read until a subsequent message is written with data\n   * 409: message was already present on the remote DWN\n   * RecordsDelete and the status code is 404: the initial write message was not found or the message was already deleted\n   */\n  private static syncMessageReplyIsSuccessful(reply: UnionMessageReply): boolean {\n    return reply.status.code === 202 ||\n      // a 204 status code is returned when the message was accepted without any data.\n      // This is the case for an initial RecordsWrite messages for records that have been updated.\n      // For context: https://github.com/TBD54566975/dwn-sdk-js/issues/695\n      reply.status.code === 204 ||\n      reply.status.code === 409 ||\n      (\n        // If the message is a RecordsDelete and the status code is 404, the initial write message was not found or the message was already deleted\n        reply.entry?.message.descriptor.interface === DwnInterfaceName.Records &&\n        reply.entry?.message.descriptor.method === DwnMethodName.Delete &&\n        reply.status.code === 404\n      );\n  }\n\n  private async enqueueOperations({ syncDirection, syncPeerState }: {\n    syncDirection: SyncDirection,\n    syncPeerState: SyncState[]\n  }) {\n    const enqueueOps = await Promise.allSettled(syncPeerState.map(async (syncState) => {\n      // Get the event log from the remote DWN if pull sync, or local DWN if push sync.\n      const eventLog = await this.getDwnEventLog({\n        did         : syncState.did,\n        delegateDid : syncState.delegateDid,\n        dwnUrl      : syncState.dwnUrl,\n        cursor      : syncState.cursor,\n        protocol    : syncState.protocol,\n        syncDirection\n      });\n\n      const syncOperations: LevelBatchOperation[] = [];\n\n      for (let messageCid of eventLog) {\n        const watermark = this._ulidFactory();\n        const operationKey = SyncEngineLevel.generateSyncMessageParamsKey({\n          ...syncState,\n          watermark,\n          messageCid\n        });\n\n        syncOperations.push({ type: 'put', key: operationKey, value: '' });\n      }\n\n      if (syncOperations.length > 0) {\n        const syncQueue = (syncDirection === 'pull')\n          ? this.getPullQueue()\n          : this.getPushQueue();\n        await syncQueue.batch(syncOperations as any);\n      }\n    }));\n\n    // log any errors that occurred during the enqueuing process\n    enqueueOps.forEach((result, index) => {\n      if (result.status === 'rejected') {\n        const peerState = syncPeerState[index];\n        console.error(`SyncEngineLevel: Error enqueuing sync operation for peerState: ${JSON.stringify(peerState)}`, result.reason);\n      }\n    });\n  }\n\n  private static generateSyncMessageParamsKey({ did, delegateDid, dwnUrl, protocol, watermark, messageCid }:SyncMessageParams): string {\n    // Use \"did~dwnUrl~watermark~messageCid\" as the key in the sync queue.\n    // Note: It is critical that `watermark` precedes `messageCid` to ensure that when the sync\n    //       jobs are pulled off the queue, they are lexographically sorted oldest to newest.\n    //\n    //        `protocol` and `delegateDid` may be undefined, which is fine, its part of the key will be stored as an empty string.\n    //        Later, when parsing the key, we will handle this case and return an actual undefined.\n    //        This is information useful for subset and delegated sync.\n    return [did, delegateDid, dwnUrl, protocol, watermark, messageCid ].join('~');\n  }\n\n  private static parseSyncMessageParamsKey(key: string): SyncMessageParams {\n    // The order is import here, see `generateKey` for more information.\n    const [did, delegateDidString, dwnUrl, protocolString, watermark, messageCid] = key.split('~');\n\n    // `protocol` or `delegateDid` may be parsed as an empty string, so we need to handle that case and returned an actual undefined.\n    const protocol = protocolString === '' ? undefined : protocolString;\n    const delegateDid = delegateDidString === '' ? undefined : delegateDidString;\n    return { did, delegateDid, dwnUrl, watermark, messageCid, protocol };\n  }\n\n  private async getDwnEventLog({ did, delegateDid, dwnUrl, syncDirection, cursor, protocol }: {\n    did: string,\n    delegateDid?: string,\n    dwnUrl: string,\n    syncDirection: SyncDirection,\n    cursor?: PaginationCursor\n    protocol?: string\n  }) {\n    let messagesReply = {} as MessagesQueryReply;\n    let permissionGrantId: string | undefined;\n    if (delegateDid) {\n      // fetch the grants for the delegate DID\n      try {\n        const messagesQueryGrant = await this._permissionsApi.getPermissionForRequest({\n          connectedDid : did,\n          messageType  : DwnInterface.MessagesQuery,\n          delegateDid,\n          protocol,\n          cached       : true\n        });\n\n        permissionGrantId = messagesQueryGrant.grant.id;\n      } catch(error:any) {\n        console.error('SyncEngineLevel: Error fetching MessagesQuery permission grant for delegate DID', error);\n        return [];\n      }\n    }\n\n    if (syncDirection === 'pull') {\n      // filter for a specific protocol if one is provided\n      const filters = protocol ? [{ protocol }] : [];\n      // When sync is a pull, get the event log from the remote DWN.\n      const messagesQueryMessage = await this.agent.dwn.processRequest({\n        store         : false,\n        target        : did,\n        author        : did,\n        messageType   : DwnInterface.MessagesQuery,\n        granteeDid    : delegateDid,\n        messageParams : { filters, cursor, permissionGrantId }\n      });\n\n      try {\n        messagesReply = await this.agent.rpc.sendDwnRequest({\n          dwnUrl    : dwnUrl,\n          targetDid : did,\n          message   : messagesQueryMessage.message,\n        }) as MessagesQueryReply;\n      } catch {\n        // If a particular DWN service endpoint is unreachable, silently ignore.\n      }\n\n    } else if (syncDirection === 'push') {\n      const filters = protocol ? [{ protocol }] : [];\n      // When sync is a push, get the event log from the local DWN.\n      const messagesQueryDwnResponse = await this.agent.dwn.processRequest({\n        author        : did,\n        target        : did,\n        messageType   : DwnInterface.MessagesQuery,\n        granteeDid    : delegateDid,\n        messageParams : { filters, cursor, permissionGrantId }\n      });\n      messagesReply = messagesQueryDwnResponse.reply as MessagesQueryReply;\n    }\n\n    const eventLog = messagesReply.entries ?? [];\n    if (messagesReply.cursor) {\n      this.setCursor(did, dwnUrl, syncDirection, messagesReply.cursor, protocol);\n    }\n\n    return eventLog;\n  }\n\n  private async getDwnMessage({ author, delegateDid, protocol, messageCid }: {\n    author: string;\n    delegateDid?: string;\n    protocol?: string;\n    messageCid: string;\n  }): Promise<{ message: GenericMessage, data?: Blob } | undefined> {\n    let permissionGrantId: string | undefined;\n    if (delegateDid) {\n      try {\n        const messagesReadGrant = await this._permissionsApi.getPermissionForRequest({\n          connectedDid : author,\n          messageType  : DwnInterface.MessagesRead,\n          delegateDid,\n          protocol,\n          cached       : true\n        });\n\n        permissionGrantId = messagesReadGrant.grant.id;\n      } catch(error:any) {\n        console.error('SyncEngineLevel: push - Error fetching MessagesRead permission grant for delegate DID', error);\n        return;\n      }\n    }\n\n    let { reply } = await this.agent.dwn.processRequest({\n      author        : author,\n      target        : author,\n      messageType   : DwnInterface.MessagesRead,\n      granteeDid    : delegateDid,\n      messageParams : { messageCid, permissionGrantId }\n    });\n\n\n    // Absence of a messageEntry or message within messageEntry can happen because updating a\n    // Record creates another RecordsWrite with the same recordId. Only the first and\n    // most recent RecordsWrite messages are kept for a given recordId. Any RecordsWrite messages\n    // that aren't the first or most recent are discarded by the DWN.\n    if (reply.status.code !== 200 || !reply.entry) {\n      return undefined;\n    }\n    const messageEntry = reply.entry!;\n\n    let dwnMessageWithBlob: { message: GenericMessage, data?: Blob } = { message: messageEntry.message };\n\n    // If the message is a RecordsWrite, either data will be present,\n    // OR we have to fetch it using a RecordsRead.\n    if (isRecordsWrite(messageEntry) && messageEntry.data) {\n      const dataBytes = await NodeStream.consumeToBytes({ readable: messageEntry.data });\n      dwnMessageWithBlob.data = new Blob([ dataBytes ], { type: messageEntry.message.descriptor.dataFormat });\n    }\n\n    return dwnMessageWithBlob;\n  }\n\n  private async getSyncPeerState({ syncDirection }: {\n    syncDirection: SyncDirection;\n  }): Promise<SyncState[]> {\n\n    // Array to accumulate the list of sync peers for each DID.\n    const syncPeerState: SyncState[] = [];\n\n    // iterate over all registered identities\n    for await (const [ did, options ] of this._db.sublevel('registeredIdentities').iterator()) {\n\n      const { protocols, delegateDid } = await new Promise<SyncIdentityOptions>((resolve) => {\n        try {\n          const { protocols, delegateDid } = JSON.parse(options) as SyncIdentityOptions;\n          resolve({ protocols, delegateDid });\n        } catch(error: any) {\n          resolve({ protocols: [] });\n        }\n      });\n\n      // First, confirm the DID can be resolved and extract the DWN service endpoint URLs.\n      const dwnEndpointUrls = await getDwnServiceEndpointUrls(did, this.agent.did);\n      if (dwnEndpointUrls.length === 0) {\n        // Silently ignore and do not try to perform Sync for any DID that does not have a DWN\n        // service endpoint published in its DID document.\n        continue;\n      }\n\n      // Get the cursor (or undefined) for each (DID, DWN service endpoint, sync direction)\n      // combination and add it to the sync peer state array.\n      for (let dwnUrl of dwnEndpointUrls) {\n        if (protocols.length === 0) {\n          const cursor = await this.getCursor(did, dwnUrl, syncDirection);\n          syncPeerState.push({ did, delegateDid, dwnUrl, cursor });\n        } else {\n          for (const protocol of protocols) {\n            const cursor = await this.getCursor(did, dwnUrl, syncDirection, protocol);\n            syncPeerState.push({ did, delegateDid, dwnUrl, cursor, protocol });\n          }\n        }\n      }\n    }\n\n    return syncPeerState;\n  }\n\n  private async getCursor(did: string, dwnUrl: string, direction: SyncDirection, protocol?: string): Promise<PaginationCursor | undefined> {\n\n    // if a protocol is provided, we append it to the key\n    const cursorKey = protocol ? `${did}~${dwnUrl}~${direction}-${protocol}` :\n      `${did}~${dwnUrl}~${direction}`;\n\n    const cursorsStore = this.getCursorStore();\n    try {\n      const cursorValue = await cursorsStore.get(cursorKey);\n      if (cursorValue) {\n        return JSON.parse(cursorValue) as PaginationCursor;\n      }\n    } catch(error: any) {\n      // Don't throw when a key wasn't found.\n      if (error.notFound) {\n        return undefined;\n      }\n    }\n  }\n\n  private async setCursor(did: string, dwnUrl: string, direction: SyncDirection, cursor: PaginationCursor, protocol?: string) {\n    const cursorKey = protocol ? `${did}~${dwnUrl}~${direction}-${protocol}` :\n      `${did}~${dwnUrl}~${direction}`;\n    const cursorsStore = this.getCursorStore();\n    await cursorsStore.put(cursorKey, JSON.stringify(cursor));\n  }\n\n  /**\n   * The message store is used to prevent \"echoes\" that occur during a sync pull operation.\n   * After a message is confirmed to already be synchronized on the local DWN, its CID is added\n   * to the message store to ensure that any subsequent pull attempts are skipped.\n   */\n  private async messageExists(did: string, messageCid: string) {\n    const messageStore = this.getMessageStore(did);\n\n    // If the `messageCid` exists in this DID's store, return true. Otherwise, return false.\n    try {\n      await messageStore.get(messageCid);\n      return true;\n    } catch (error: any) {\n      if (error.notFound) {\n        return false;\n      }\n      throw error;\n    }\n  }\n\n  private async addMessage(did: string, messageCid: string) {\n    const messageStore = this.getMessageStore(did);\n\n    return await messageStore.put(messageCid, '');\n  }\n\n  private getMessageStore(did: string) {\n    return this._db.sublevel('history').sublevel(did).sublevel('messages');\n  }\n\n  private getCursorStore() {\n    return this._db.sublevel('cursors');\n  }\n\n  private getPushQueue() {\n    return this._db.sublevel('pushQueue');\n  }\n\n  private getPullQueue() {\n    return this._db.sublevel('pullQueue');\n  }\n}", "import type { KeyValueStore } from '@web5/common';\nimport type { AbstractLevel } from 'abstract-level';\n\nimport { Level } from 'level';\nimport { LevelStore, MemoryStore } from '@web5/common';\nimport { DataStoreLevel, Dwn, EventEmitterStream, EventLogLevel, MessageStoreLevel, ResumableTaskStoreLevel } from '@tbd54566975/dwn-sdk-js';\nimport { DidDht, DidJwk, DidResolutionResult, DidResolverCache } from '@web5/dids';\n\nimport type { Web5PlatformAgent } from './types/agent.js';\n\nimport { AgentDidApi } from './did-api.js';\nimport { AgentDidResolverCache } from './agent-did-resolver-cache.js';\nimport { AgentDwnApi } from './dwn-api.js';\nimport { AgentSyncApi } from './sync-api.js';\nimport { Web5RpcClient } from './rpc-client.js';\nimport { AgentCryptoApi } from './crypto-api.js';\nimport { AgentIdentityApi } from './identity-api.js';\nimport { BearerIdentity } from './bearer-identity.js';\nimport { HdIdentityVault } from './hd-identity-vault.js';\nimport { LocalKeyManager } from './local-key-manager.js';\nimport { SyncEngineLevel } from './sync-engine-level.js';\nimport { DwnDidStore, InMemoryDidStore } from './store-did.js';\nimport { DwnKeyStore, InMemoryKeyStore } from './store-key.js';\nimport { DwnIdentityStore, InMemoryIdentityStore } from './store-identity.js';\nimport { DidResolverCacheMemory } from './prototyping/dids/resolver-cache-memory.js';\nimport { AgentPermissionsApi } from './permissions-api.js';\n\ntype PlatformAgentTestHarnessParams = {\n  agent: Web5PlatformAgent<LocalKeyManager>\n\n  agentStores: 'dwn' | 'memory';\n  didResolverCache: DidResolverCache;\n  dwn: Dwn;\n  dwnDataStore: DataStoreLevel;\n  dwnEventLog: EventLogLevel;\n  dwnMessageStore: MessageStoreLevel;\n  dwnResumableTaskStore: ResumableTaskStoreLevel;\n  syncStore: AbstractLevel<string | Buffer | Uint8Array>;\n  vaultStore: KeyValueStore<string, string>;\n  dwnStores: {\n    keyStore: DwnKeyStore;\n    identityStore: DwnIdentityStore;\n    didStore: DwnDidStore;\n    clear: () => void;\n  }\n}\n\nexport class PlatformAgentTestHarness {\n  public agent: Web5PlatformAgent<LocalKeyManager>;\n\n  public agentStores: 'dwn' | 'memory';\n  public didResolverCache: DidResolverCache;\n  public dwn: Dwn;\n  public dwnDataStore: DataStoreLevel;\n  public dwnEventLog: EventLogLevel;\n  public dwnMessageStore: MessageStoreLevel;\n  public dwnResumableTaskStore: ResumableTaskStoreLevel;\n  public syncStore: AbstractLevel<string | Buffer | Uint8Array>;\n  public vaultStore: KeyValueStore<string, string>;\n\n  /**\n   * Custom DWN Stores for `keyStore`, `identityStore` and `didStore`.\n   * This allows us to clear the store cache between tests\n   */\n  public dwnStores: {\n    keyStore: DwnKeyStore;\n    identityStore: DwnIdentityStore;\n    didStore: DwnDidStore;\n    /** clears the protocol initialization caches */\n    clear: () => void;\n  };\n\n  constructor(params: PlatformAgentTestHarnessParams) {\n    this.agent = params.agent;\n    this.agentStores = params.agentStores;\n    this.didResolverCache = params.didResolverCache;\n    this.dwn = params.dwn;\n    this.dwnDataStore = params.dwnDataStore;\n    this.dwnEventLog = params.dwnEventLog;\n    this.dwnMessageStore = params.dwnMessageStore;\n    this.syncStore = params.syncStore;\n    this.vaultStore = params.vaultStore;\n    this.dwnResumableTaskStore = params.dwnResumableTaskStore;\n    this.dwnStores = params.dwnStores;\n  }\n\n  public async clearStorage(): Promise<void> {\n    // first stop any ongoing sync operations\n    await this.agent.sync.stopSync();\n\n    // @ts-expect-error since normally this property shouldn't be set to undefined.\n    this.agent.agentDid = undefined;\n    await this.didResolverCache.clear();\n    await this.dwnDataStore.clear();\n    await this.dwnEventLog.clear();\n    await this.dwnMessageStore.clear();\n    await this.dwnResumableTaskStore.clear();\n    await this.syncStore.clear();\n    await this.vaultStore.clear();\n    await this.agent.permissions.clear();\n    this.dwnStores.clear();\n\n    // Reset the indexes and caches for the Agent's DWN data stores.\n    // if (this.agentStores === 'dwn') {\n    //   const { didApi, identityApi } = PlatformAgentTestHarness.useDiskStores({ testDataLocation: '__TESTDATA__', agent: this.agent });\n    //   this.agent.crypto = cryptoApi;\n    //   this.agent.did = didApi;\n    //   this.agent.identity = identityApi;\n    // }\n\n    // Easiest way to start with fresh in-memory stores is to re-instantiate Agent components.\n    if (this.agentStores === 'memory') {\n      const { didApi, identityApi, permissionsApi, keyManager } = PlatformAgentTestHarness.useMemoryStores({ agent: this.agent });\n      this.agent.did = didApi;\n      this.agent.identity = identityApi;\n      this.agent.keyManager = keyManager;\n      this.agent.permissions = permissionsApi;\n    }\n  }\n\n  public async closeStorage(): Promise<void> {\n    await this.didResolverCache.close();\n    await this.dwnDataStore.close();\n    await this.dwnEventLog.close();\n    await this.dwnMessageStore.close();\n    await this.dwnResumableTaskStore.close();\n    await this.syncStore.close();\n    await this.vaultStore.close();\n  }\n\n  public async createAgentDid(): Promise<void> {\n    // Create a DID for the Agent.\n    this.agent.agentDid = await DidJwk.create({\n      options: { algorithm: 'Ed25519' }\n    });\n  }\n\n  public async createIdentity({ name, testDwnUrls }: {\n    name: string;\n    testDwnUrls: string[];\n  }): Promise<BearerIdentity> {\n    const bearerIdentity = await this.agent.identity.create({\n      didMethod  : 'dht',\n      didOptions : {\n        services: [\n          {\n            id              : 'dwn',\n            type            : 'DecentralizedWebNode',\n            serviceEndpoint : testDwnUrls,\n            enc             : '#enc',\n            sig             : '#sig',\n          }\n        ],\n        verificationMethods: [\n          {\n            algorithm : 'Ed25519',\n            id        : 'sig',\n            purposes  : ['assertionMethod', 'authentication']\n          },\n          {\n            algorithm : 'secp256k1',\n            id        : 'enc',\n            purposes  : ['keyAgreement']\n          }\n        ]\n      },\n      metadata: { name }\n    });\n\n    return bearerIdentity;\n  }\n\n  public static async setup({ agentClass, agentStores, testDataLocation }: {\n      agentClass: new (params: any) => Web5PlatformAgent<LocalKeyManager>\n      agentStores?: 'dwn' | 'memory';\n      testDataLocation?: string;\n    }): Promise<PlatformAgentTestHarness> {\n    agentStores ??= 'memory';\n    testDataLocation ??= '__TESTDATA__';\n\n    const testDataPath = (path: string) => `${testDataLocation}/${path}`;\n\n    // Instantiate Agent's Crypto API.\n    const cryptoApi = new AgentCryptoApi();\n\n    // Instantiate Agent's RPC Client.\n    const rpcClient = new Web5RpcClient();\n\n    const dwnStores = {\n      keyStore      : new DwnKeyStore(),\n      identityStore : new DwnIdentityStore(),\n      didStore      : new DwnDidStore(),\n      clear         : ():void => {\n        dwnStores.keyStore['_protocolInitializedCache']?.clear();\n        dwnStores.identityStore['_protocolInitializedCache']?.clear();\n        dwnStores.didStore['_protocolInitializedCache']?.clear();\n      }\n    };\n\n    const {\n      agentVault,\n      didApi,\n      identityApi,\n      keyManager,\n      didResolverCache,\n      vaultStore,\n      permissionsApi\n    } = (agentStores === 'memory')\n      ? PlatformAgentTestHarness.useMemoryStores()\n      : PlatformAgentTestHarness.useDiskStores({ testDataLocation, stores: dwnStores });\n\n    // Instantiate custom stores to use with DWN instance.\n    // Note: There is no in-memory store for DWN, so we always use LevelDB-based disk stores.\n    const dwnDataStore = new DataStoreLevel({ blockstoreLocation: testDataPath('DWN_DATASTORE') });\n    const dwnEventLog = new EventLogLevel({ location: testDataPath('DWN_EVENTLOG') });\n    const dwnEventStream = new EventEmitterStream();\n    const dwnResumableTaskStore = new ResumableTaskStoreLevel({ location: testDataPath('DWN_RESUMABLETASKSTORE') });\n\n    const dwnMessageStore = new MessageStoreLevel({\n      blockstoreLocation : testDataPath('DWN_MESSAGESTORE'),\n      indexLocation      : testDataPath('DWN_MESSAGEINDEX')\n    });\n\n    // Instantiate DWN instance using the custom stores.\n    const dwn = await AgentDwnApi.createDwn({\n      dataPath           : testDataLocation,\n      dataStore          : dwnDataStore,\n      didResolver        : didApi,\n      eventLog           : dwnEventLog,\n      eventStream        : dwnEventStream,\n      messageStore       : dwnMessageStore,\n      resumableTaskStore : dwnResumableTaskStore\n    });\n\n    // Instantiate Agent's DWN API using the custom DWN instance.\n    const dwnApi = new AgentDwnApi({ dwn });\n\n    // Instantiate Agent's Sync API using a custom LevelDB-backed store.\n    const syncStore = new Level(testDataPath('SYNC_STORE'));\n    const syncEngine = new SyncEngineLevel({ db: syncStore });\n    const syncApi = new AgentSyncApi({ syncEngine });\n\n    // Create Web5PlatformAgent instance\n    const agent = new agentClass({\n      agentVault,\n      cryptoApi,\n      didApi,\n      dwnApi,\n      identityApi,\n      keyManager,\n      permissionsApi,\n      rpcClient,\n      syncApi,\n    });\n\n    return new PlatformAgentTestHarness({\n      agent,\n      agentStores,\n      didResolverCache,\n      dwn,\n      dwnDataStore,\n      dwnEventLog,\n      dwnMessageStore,\n      dwnResumableTaskStore,\n      dwnStores,\n      syncStore,\n      vaultStore\n    });\n  }\n\n  private static useDiskStores({ agent, testDataLocation, stores }: {\n    agent?: Web5PlatformAgent;\n    stores: {\n      keyStore: DwnKeyStore;\n      identityStore: DwnIdentityStore;\n      didStore: DwnDidStore;\n    }\n    testDataLocation: string;\n  }) {\n    const testDataPath = (path: string) => `${testDataLocation}/${path}`;\n\n    const vaultStore = new LevelStore<string, string>({ location: testDataPath('VAULT_STORE') });\n    const agentVault = new HdIdentityVault({ keyDerivationWorkFactor: 1, store: vaultStore });\n\n    const { didStore, identityStore, keyStore } = stores;\n\n    // Setup DID Resolver Cache\n    const didResolverCache = new AgentDidResolverCache({\n      location: testDataPath('DID_RESOLVERCACHE')\n    });\n\n    const didApi = new AgentDidApi({\n      agent         : agent,\n      didMethods    : [DidDht, DidJwk],\n      resolverCache : didResolverCache,\n      store         : didStore\n    });\n\n    const identityApi = new AgentIdentityApi({ agent, store: identityStore });\n\n    const keyManager = new LocalKeyManager({ agent, keyStore: keyStore });\n\n    const permissionsApi = new AgentPermissionsApi({ agent });\n\n    return { agentVault, didApi, didResolverCache, identityApi, keyManager, permissionsApi, vaultStore };\n  }\n\n  private static useMemoryStores({ agent }: { agent?: Web5PlatformAgent<LocalKeyManager> } = {}) {\n    const vaultStore = new MemoryStore<string, string>();\n    const agentVault = new HdIdentityVault({ keyDerivationWorkFactor: 1, store: vaultStore });\n\n    // Setup DID Resolver Cache\n    const didResolverCache = new DidResolverCacheMemory();\n\n    const didApi = new AgentDidApi({\n      agent         : agent,\n      didMethods    : [DidDht, DidJwk],\n      resolverCache : didResolverCache,\n      store         : new InMemoryDidStore()\n    });\n\n    const keyManager = new LocalKeyManager({ agent, keyStore: new InMemoryKeyStore() });\n\n    const identityApi = new AgentIdentityApi<LocalKeyManager>({ agent, store: new InMemoryIdentityStore() });\n\n    const permissionsApi = new AgentPermissionsApi({ agent });\n\n    return { agentVault, didApi, didResolverCache, identityApi, keyManager, permissionsApi, vaultStore };\n  }\n}", "import type { DidResolverCache, DidResolutionResult } from '@web5/dids';\n\nimport ms from 'ms';\nimport { TtlCache } from '@web5/common';\n\n/**\n * Configuration parameters for creating an in-memory cache for DID resolution results.\n *\n * Allows customization of the cache time-to-live (TTL) setting.\n */\nexport type DidResolverCacheMemoryParams = {\n  /**\n   * Optional. The time-to-live for cache entries, expressed as a string (e.g., '1h', '15m').\n   * Determines how long a cache entry should remain valid before being considered expired.\n   *\n   * Defaults to '15m' if not specified.\n   */\n  ttl?: string;\n}\n\nexport class DidResolverCacheMemory implements DidResolverCache {\n  private cache: TtlCache<string, DidResolutionResult>;\n\n  constructor({ ttl = '15m' }: DidResolverCacheMemoryParams = {}) {\n    this.cache = new TtlCache({ ttl: ms(ttl) });\n  }\n\n  /**\n   * Retrieves a DID resolution result from the cache.\n   *\n   * If the cached item has exceeded its TTL, it's scheduled for deletion and undefined is returned.\n   *\n   * @param didUri - The DID string used as the key for retrieving the cached result.\n   * @returns The cached DID resolution result or undefined if not found or expired.\n   */\n  public async get(didUri: string): Promise<DidResolutionResult | void> {\n    if (!didUri) {\n      throw new Error('Key cannot be null or undefined');\n    }\n\n    return this.cache.get(didUri);\n  }\n\n  /**\n   * Stores a DID resolution result in the cache with a TTL.\n   *\n   * @param didUri - The DID string used as the key for storing the result.\n   * @param resolutionResult - The DID resolution result to be cached.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  public async set(didUri: string, resolutionResult: DidResolutionResult): Promise<void> {\n    this.cache.set(didUri, resolutionResult);\n  }\n\n  /**\n   * Deletes a DID resolution result from the cache.\n   *\n   * @param didUri - The DID string used as the key for deletion.\n   * @returns A promise that resolves when the operation is complete.\n   */\n  public async delete(didUri: string): Promise<void> {\n    this.cache.delete(didUri);\n  }\n\n  /**\n   * Clears all entries from the cache.\n   *\n   * @returns A promise that resolves when the operation is complete.\n   */\n  public async clear(): Promise<void> {\n    this.cache.clear();\n  }\n\n  /**\n   * This method is a no-op but exists to be consistent with other DID Resolver Cache\n   * implementations.\n   *\n   * @returns A promise that resolves immediately.\n   */\n  public async close(): Promise<void> {\n    // No-op since there is no underlying store to close.\n  }\n}"],
  "mappings": "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kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,gEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,CACF,CACF,EACA,IAAK,CACH,IAAK,EACL,OAAQ,CACN,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,iEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,kEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,iEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mEACA,kEACF,EACA,CACE,mE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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
  "names": ["require_base64_js", "__commonJSMin", "exports", "init_shim", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "init_shim", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "d", "s", "value", "c", "rt", "require_buffer", "__commonJSMin", "exports", "init_shim", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "i", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "checkInt", "min", "maxBytes", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "hi", "lo", "src", "dst", "type", "alphabet", "table", "i16", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "defaultClearTimeout", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "len", "args", "i", "Item", "array", "noop", "name", "dir", "import_buffer", "import_process", "_globalThis", "init_shim", "__esmMin", "Object", "get", "_global", "require_freeGlobal", "__commonJSMin", "exports", "module", "init_shim", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "init_shim", "freeGlobal", "freeSelf", "root", "require_Symbol", "__commonJSMin", "exports", "module", "init_shim", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "init_shim", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_overArg", "__commonJSMin", "exports", "module", "init_shim", "overArg", "func", "transform", "arg", "require_getPrototype", "__commonJSMin", "exports", "module", "init_shim", "overArg", "getPrototype", "require_isObjectLike", "__commonJSMin", "exports", "module", "init_shim", "isObjectLike", "value", "require_isPlainObject", "__commonJSMin", "exports", "module", "init_shim", "baseGetTag", "getPrototype", "isObjectLike", "objectTag", "funcProto", "objectProto", "funcToString", "hasOwnProperty", "objectCtorString", "isPlainObject", "value", "proto", "Ctor", "require_err_code", "__commonJSMin", "exports", "module", "init_shim", "assign", "obj", "props", "key", "createError", "err", "code", "ErrClass", "require_murmurHash3js", "__commonJSMin", "exports", "module", "init_shim", "root", "undefined", "library", "_validBytes", "bytes", "i", "_x86Multiply", "m", "n", "_x86Rotl", "_x86Fmix", "h", "_x64Add", "o", "_x64Multiply", "_x64Rotl", "_x64LeftShift", "_x64Xor", "_x64Fmix", "seed", "remainder", "blocks", "h1", "k1", "c1", "c2", "h2", "h3", "h4", "k2", "k3", "k4", "c3", "c4", "require_murmurhash3js_revisited", "__commonJSMin", "exports", "module", "init_shim", "require_sparse_array", "__commonJSMin", "exports", "module", "init_shim", "index", "value", "pos", "needsSort", "last", "iterator", "i", "mapped", "reducer", "initialValue", "acc", "finder", "found", "noCreate", "bytePos", "byte", "bitPos", "previousPopCount", "popCountReduce", "mask", "bytePopCount", "popCount", "targetLength", "data", "elem", "randomIndex", "sortInternal", "bytes", "pendingBitsForResultingByte", "pendingBitsForNewByte", "resultingByte", "newByte", "pending", "usingBits", "masked", "valueOnly", "count", "_v", "v", "a", "b", "require_buffer", "__commonJSMin", "exports", "init_shim", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "i", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "MAX_BYTES", "MAX_UINT32", "oldBrowser", "Buffer", "crypto", "randomBytes", "size", "cb", "bytes", "generated", "process", "require_inherits_browser", "__commonJSMin", "exports", "module", "init_shim", "ctor", "superCtor", "TempCtor", "require_events", "__commonJSMin", "exports", "module", "init_shim", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "i", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_createClass", "protoProps", "staticProps", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_require", "Buffer", "_require2", "inspect", "custom", "copyBuffer", "src", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "hasStrings", "c", "str", "nb", "buf", "_", "options", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "process", "emitErrorNT", "emitCloseNT", "emitErrorAndCloseNT", "self", "undestroy", "errorOrDestroy", "stream", "rState", "wState", "require_errors_browser", "__commonJSMin", "exports", "module", "init_shim", "_inheritsLoose", "subClass", "superClass", "codes", "createErrorType", "code", "message", "Base", "getMessage", "arg1", "arg2", "arg3", "NodeError", "_Base", "oneOf", "expected", "thing", "len", "i", "startsWith", "str", "search", "pos", "endsWith", "this_len", "includes", "start", "name", "value", "actual", "determiner", "msg", "type", "arg", "require_state", "__commonJSMin", "exports", "module", "init_shim", "ERR_INVALID_OPT_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getHighWaterMark", "state", "hwm", "name", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "deprecate", "fn", "msg", "config", "warned", "deprecated", "name", "val", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "Duplex", "WritableState", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "options", "stream", "isDuplex", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "process", "validChunk", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "rState", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "objectKeys", "obj", "keys", "key", "Duplex", "Readable", "Writable", "v", "method", "options", "onend", "process", "onEndNT", "self", "value", "require_string_decoder", "__commonJSMin", "exports", "init_shim", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "ERR_STREAM_PREMATURE_CLOSE", "once", "callback", "called", "_len", "args", "_key", "noop", "isRequest", "stream", "eos", "opts", "readable", "writable", "onlegacyfinish", "onfinish", "writableEnded", "readableEnded", "onend", "onerror", "err", "onclose", "onrequest", "require_async_iterator", "__commonJSMin", "exports", "module", "init_shim", "_Object$setPrototypeO", "_defineProperty", "obj", "key", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "finished", "kLastResolve", "kLastReject", "kError", "kEnded", "kLastPromise", "kHandlePromise", "kStream", "createIterResult", "done", "readAndResolve", "iter", "resolve", "data", "onReadable", "process", "wrapForNext", "lastPromise", "reject", "AsyncIteratorPrototype", "ReadableStreamAsyncIteratorPrototype", "_this", "error", "promise", "_this2", "err", "createReadableStreamAsyncIterator", "stream", "_Object$create", "iterator", "require_from_browser", "__commonJSMin", "exports", "module", "init_shim", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "Readable", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "debugUtil", "debug", "BufferList", "destroyImpl", "_require", "getHighWaterMark", "_require$codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "StringDecoder", "createReadableStreamAsyncIterator", "from", "errorOrDestroy", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "emitReadable", "enc", "decoder", "p", "content", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "process", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "_this", "paused", "method", "endReadableNT", "wState", "iterable", "opts", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "_require$codes", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_TRANSFORM_ALREADY_TRANSFORMING", "ERR_TRANSFORM_WITH_LENGTH_0", "Duplex", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "eos", "once", "callback", "called", "_require$codes", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "noop", "err", "isRequest", "stream", "destroyer", "reading", "writing", "closed", "destroyed", "call", "fn", "pipe", "from", "to", "popCallback", "streams", "pipeline", "_len", "_key", "error", "destroys", "i", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_hash_base", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Transform", "inherits", "throwIfNotStringOrBuffer", "val", "prefix", "HashBase", "blockSize", "chunk", "encoding", "callback", "error", "err", "data", "block", "offset", "j", "carry", "digest", "i", "require_md5", "__commonJSMin", "exports", "module", "init_shim", "inherits", "HashBase", "Buffer", "ARRAY16", "MD5", "M", "i", "a", "b", "c", "d", "fnF", "fnG", "fnH", "fnI", "buffer", "rotl", "x", "n", "m", "k", "require_ripemd160", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "inherits", "HashBase", "ARRAY16", "zl", "zr", "sl", "sr", "hl", "hr", "RIPEMD160", "words", "j", "al", "bl", "cl", "dl", "el", "ar", "br", "cr", "dr", "er", "i", "tl", "tr", "fn1", "fn5", "fn2", "fn4", "fn3", "rotl", "t", "buffer", "x", "n", "a", "b", "c", "d", "e", "m", "k", "s", "require_hash", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Hash", "blockSize", "finalSize", "data", "enc", "block", "length", "accum", "offset", "assigned", "remainder", "i", "rem", "bits", "lowBits", "highBits", "hash", "require_sha", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha", "rotl5", "num", "rotl30", "ft", "s", "b", "c", "d", "M", "a", "e", "i", "j", "t", "H", "require_sha1", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha1", "rotl1", "num", "rotl5", "rotl30", "ft", "s", "b", "c", "d", "M", "a", "e", "i", "j", "t", "H", "require_sha256", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha256", "ch", "x", "y", "z", "maj", "sigma0", "sigma1", "gamma0", "gamma1", "M", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "T1", "T2", "H", "require_sha224", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Sha256", "Hash", "Buffer", "W", "Sha224", "H", "require_sha512", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Hash", "Buffer", "K", "W", "Sha512", "Ch", "x", "y", "z", "maj", "sigma0", "xl", "sigma1", "Gamma0", "Gamma0l", "Gamma1", "Gamma1l", "getCarry", "a", "b", "M", "ah", "bh", "ch", "dh", "eh", "fh", "gh", "hh", "al", "bl", "cl", "dl", "el", "fl", "gl", "hl", "i", "xh", "gamma0", "gamma0l", "gamma1", "gamma1l", "Wi7h", "Wi7l", "Wi16h", "Wi16l", "Wil", "Wih", "j", "majh", "majl", "sigma0h", "sigma0l", "sigma1h", "sigma1l", "Kih", "Kil", "chh", "chl", "t1l", "t1h", "t2l", "t2h", "H", "writeInt64BE", "h", "l", "offset", "require_sha384", "__commonJSMin", "exports", "module", "init_shim", "inherits", "SHA512", "Hash", "Buffer", "W", "Sha384", "H", "writeInt64BE", "h", "l", "offset", "require_sha", "__commonJSMin", "exports", "module", "init_shim", "algorithm", "Algorithm", "require_stream_browserify", "__commonJSMin", "exports", "module", "init_shim", "Stream", "EE", "inherits", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "require_cipher_base", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "Transform", "StringDecoder", "inherits", "CipherBase", "hashMode", "data", "inputEnc", "outputEnc", "outData", "_", "next", "err", "e", "done", "value", "enc", "fin", "out", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "inherits", "MD5", "RIPEMD160", "sha", "Base", "Hash", "hash", "data", "alg", "require_legacy", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "Base", "ZEROS", "blocksize", "Hmac", "alg", "key", "ipad", "opad", "data", "h", "require_md5", "__commonJSMin", "exports", "module", "init_shim", "MD5", "buffer", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Legacy", "Base", "Buffer", "md5", "RIPEMD160", "sha", "ZEROS", "Hmac", "alg", "key", "blocksize", "hash", "ipad", "opad", "i", "data", "h", "require_algorithms", "__commonJSMin", "exports", "module", "require_algos", "__commonJSMin", "exports", "module", "init_shim", "require_precondition", "__commonJSMin", "exports", "module", "init_shim", "MAX_ALLOC", "iterations", "keylen", "require_default_encoding", "__commonJSMin", "exports", "module", "init_shim", "defaultEncoding", "pVersionMajor", "process", "require_to_buffer", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "thing", "encoding", "name", "require_sync_browser", "__commonJSMin", "exports", "module", "init_shim", "md5", "RIPEMD160", "sha", "Buffer", "checkParameters", "defaultEncoding", "toBuffer", "ZEROS", "sizes", "Hmac", "alg", "key", "saltLen", "hash", "getDigest", "blocksize", "ipad", "opad", "i", "ipad1", "data", "h", "shaFunc", "rmd160Func", "pbkdf2", "password", "salt", "iterations", "keylen", "digest", "hmac", "DK", "block1", "destPos", "hLen", "l", "T", "U", "j", "k", "require_async", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "checkParameters", "defaultEncoding", "sync", "toBuffer", "ZERO_BUF", "subtle", "toBrowser", "checks", "checkNative", "algo", "prom", "browserPbkdf2", "nextTick", "getNextTick", "password", "salt", "iterations", "length", "key", "res", "resolvePromise", "promise", "callback", "out", "e", "keylen", "digest", "resp", "require_browser", "__commonJSMin", "exports", "init_shim", "require_utils", "__commonJSMin", "exports", "init_shim", "bytes", "off", "res", "value", "inL", "inR", "out", "outL", "outR", "i", "j", "num", "shift", "pc2table", "len", "r", "sTable", "b", "sb", "permuteTable", "size", "group", "str", "require_minimalistic_assert", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "l", "require_cipher", "__commonJSMin", "exports", "module", "init_shim", "assert", "Cipher", "options", "data", "off", "min", "out", "inputOff", "outputOff", "count", "max", "buffer", "first", "last", "require_des", "__commonJSMin", "exports", "module", "init_shim", "assert", "inherits", "utils", "Cipher", "DESState", "DES", "options", "state", "shiftTable", "key", "kL", "kR", "i", "shift", "inp", "inOff", "out", "outOff", "l", "r", "buffer", "off", "value", "pad", "lStart", "rStart", "keyL", "keyR", "s", "f", "t", "require_cbc", "__commonJSMin", "exports", "init_shim", "assert", "inherits", "proto", "CBCState", "iv", "i", "instantiate", "Base", "CBC", "options", "keys", "key", "state", "inp", "inOff", "out", "outOff", "superProto", "require_ede", "__commonJSMin", "exports", "module", "init_shim", "assert", "inherits", "Cipher", "DES", "EDEState", "type", "key", "k1", "k2", "k3", "EDE", "options", "state", "inp", "inOff", "out", "outOff", "require_des", "__commonJSMin", "exports", "init_shim", "require_browserify_des", "__commonJSMin", "exports", "module", "init_shim", "CipherBase", "des", "inherits", "Buffer", "modes", "DES", "opts", "modeName", "mode", "type", "key", "iv", "data", "require_ecb", "__commonJSMin", "exports", "init_shim", "self", "block", "require_buffer_xor", "__commonJSMin", "exports", "module", "init_shim", "a", "b", "length", "buffer", "i", "require_cbc", "__commonJSMin", "exports", "init_shim", "xor", "self", "block", "data", "pad", "out", "require_cfb", "__commonJSMin", "exports", "init_shim", "Buffer", "xor", "encryptStart", "self", "data", "decrypt", "len", "out", "require_cfb8", "__commonJSMin", "exports", "init_shim", "Buffer", "encryptByte", "self", "byteParam", "decrypt", "pad", "out", "chunk", "len", "i", "require_cfb1", "__commonJSMin", "exports", "init_shim", "Buffer", "encryptByte", "self", "byteParam", "decrypt", "pad", "len", "out", "bit", "value", "shiftIn", "buffer", "i", "chunk", "require_ofb", "__commonJSMin", "exports", "init_shim", "xor", "getBlock", "self", "chunk", "pad", "require_incr32", "__commonJSMin", "exports", "module", "init_shim", "incr32", "iv", "len", "item", "require_ctr", "__commonJSMin", "exports", "init_shim", "xor", "Buffer", "incr32", "getBlock", "self", "out", "blockSize", "chunk", "chunkNum", "start", "offset", "pad", "require_list", "__commonJSMin", "exports", "module", "require_modes", "__commonJSMin", "exports", "module", "init_shim", "modeModules", "modes", "key", "require_aes", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "asUInt32Array", "buf", "len", "out", "i", "scrubVec", "v", "cryptBlock", "M", "keySchedule", "SUB_MIX", "SBOX", "nRounds", "SUB_MIX0", "SUB_MIX1", "SUB_MIX2", "SUB_MIX3", "s0", "s1", "s2", "s3", "t0", "t1", "t2", "t3", "ksRow", "round", "RCON", "G", "d", "j", "INV_SBOX", "INV_SUB_MIX", "x", "xi", "sx", "x2", "x4", "x8", "t", "AES", "key", "keyWords", "keySize", "ksRows", "k", "invKeySchedule", "ik", "ksR", "tt", "m1", "require_ghash", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "ZEROES", "toArray", "buf", "fromArray", "out", "GHASH", "key", "block", "i", "Vi", "Zi", "j", "xi", "lsbVi", "chunk", "abl", "bl", "require_authCipher", "__commonJSMin", "exports", "module", "init_shim", "aes", "Buffer", "Transform", "inherits", "GHASH", "xor", "incr32", "xorTest", "a", "b", "out", "len", "calcIv", "self", "iv", "ck", "ghash", "toPad", "ivBits", "tail", "StreamCipher", "mode", "key", "decrypt", "h", "chunk", "rump", "tag", "buf", "require_streamCipher", "__commonJSMin", "exports", "module", "init_shim", "aes", "Buffer", "Transform", "inherits", "StreamCipher", "mode", "key", "iv", "decrypt", "chunk", "require_evp_bytestokey", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "MD5", "EVP_BytesToKey", "password", "salt", "keyBits", "ivLen", "keyLen", "key", "iv", "tmp", "hash", "used", "keyStart", "ivStart", "length", "require_encrypter", "__commonJSMin", "exports", "init_shim", "MODES", "AuthCipher", "Buffer", "StreamCipher", "Transform", "aes", "ebtk", "inherits", "Cipher", "mode", "key", "iv", "Splitter", "data", "chunk", "thing", "out", "PADDING", "setTo", "len", "padBuff", "i", "createCipheriv", "suite", "password", "config", "createCipher", "keys", "require_decrypter", "__commonJSMin", "exports", "init_shim", "AuthCipher", "Buffer", "MODES", "StreamCipher", "Transform", "aes", "ebtk", "inherits", "Decipher", "mode", "key", "iv", "Splitter", "data", "chunk", "thing", "out", "unpad", "setTo", "autoPadding", "last", "padded", "i", "createDecipheriv", "suite", "password", "config", "createDecipher", "keys", "require_browser", "__commonJSMin", "exports", "init_shim", "ciphers", "deciphers", "modes", "getCiphers", "require_modes", "__commonJSMin", "exports", "init_shim", "require_browser", "__commonJSMin", "exports", "init_shim", "DES", "aes", "aesModes", "desModes", "ebtk", "createCipher", "suite", "password", "keyLen", "ivLen", "keys", "createCipheriv", "createDecipher", "createDecipheriv", "key", "iv", "getCiphers", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "w", "parseLength", "parseBase", "str", "end", "mul", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "size", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "ArrayType", "byteLength", "reqLength", "littleEndian", "res", "b", "q", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "fftm", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "m", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "bits", "carryMask", "newCarry", "hint", "extended", "mask", "maskedWords", "shift", "mode", "bhi", "bhiBits", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_brorand", "__commonJSMin", "exports", "module", "init_shim", "r", "len", "Rand", "rand", "n", "res", "i", "arr", "crypto", "require_mr", "__commonJSMin", "exports", "module", "init_shim", "bn", "brorand", "MillerRabin", "rand", "n", "len", "min_bytes", "a", "start", "stop", "size", "k", "cb", "red", "rone", "n1", "s", "d", "rn1", "prime", "x", "i", "g", "require_generatePrime", "__commonJSMin", "exports", "module", "init_shim", "randomBytes", "findPrime", "simpleSieve", "fermatTest", "BN", "TWENTYFOUR", "MillerRabin", "millerRabin", "ONE", "TWO", "FIVE", "SIXTEEN", "EIGHT", "TEN", "THREE", "SEVEN", "ELEVEN", "FOUR", "TWELVE", "primes", "_getPrimes", "limit", "res", "i", "k", "sqrt", "j", "p", "red", "bits", "gen", "num", "n2", "require_primes", "__commonJSMin", "exports", "module", "require_dh", "__commonJSMin", "exports", "module", "init_shim", "BN", "MillerRabin", "millerRabin", "TWENTYFOUR", "ELEVEN", "TEN", "THREE", "SEVEN", "primes", "randomBytes", "DH", "setPublicKey", "pub", "enc", "setPrivateKey", "priv", "primeCache", "checkPrime", "prime", "generator", "gen", "hex", "error", "rem", "malleable", "other", "secret", "out", "front", "formatReturnValue", "bn", "buf", "require_browser", "__commonJSMin", "exports", "init_shim", "generatePrime", "primes", "DH", "getDiffieHellman", "mod", "prime", "gen", "ENCODINGS", "createDiffieHellman", "enc", "generator", "genc", "require_process_nextick_args", "__commonJSMin", "exports", "module", "init_shim", "process", "nextTick", "fn", "arg1", "arg2", "arg3", "len", "args", "i", "require_isarray", "__commonJSMin", "exports", "module", "init_shim", "toString", "arr", "require_stream_browser", "__commonJSMin", "exports", "module", "init_shim", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_shim", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_util", "__commonJSMin", "exports", "init_shim", "isArray", "arg", "objectToString", "isBoolean", "isNull", "isNullOrUndefined", "isNumber", "isString", "isSymbol", "isUndefined", "isRegExp", "re", "isObject", "isDate", "d", "isError", "e", "isFunction", "isPrimitive", "o", "require_BufferList", "__commonJSMin", "exports", "module", "init_shim", "_classCallCheck", "instance", "Constructor", "Buffer", "util", "copyBuffer", "src", "target", "offset", "BufferList", "v", "entry", "ret", "s", "p", "n", "i", "obj", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "pna", "destroy", "err", "cb", "_this", "readableDestroyed", "writableDestroyed", "emitErrorNT", "undestroy", "self", "require_stream_writable", "__commonJSMin", "exports", "module", "init_shim", "pna", "Writable", "CorkedRequest", "state", "_this", "onCorkedFinish", "asyncWrite", "process", "Duplex", "WritableState", "util", "internalUtil", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "destroyImpl", "nop", "options", "stream", "isDuplex", "hwm", "writableHwm", "defaultHwm", "noDecode", "er", "onwrite", "current", "out", "realHasInstance", "object", "writeAfterEnd", "cb", "validChunk", "valid", "encoding", "ret", "isBuf", "writeOrBuffer", "clearBuffer", "decodeChunk", "newChunk", "len", "last", "doWrite", "writev", "onwriteError", "sync", "finishMaybe", "onwriteStateUpdate", "finished", "needFinish", "afterWrite", "onwriteDrain", "entry", "l", "buffer", "holder", "count", "allBuffers", "endWritable", "callFinal", "err", "prefinish", "need", "corkReq", "value", "require_stream_duplex", "__commonJSMin", "exports", "module", "init_shim", "pna", "objectKeys", "obj", "keys", "key", "Duplex", "util", "Readable", "Writable", "v", "method", "options", "onend", "onEndNT", "self", "value", "err", "cb", "require_string_decoder", "__commonJSMin", "exports", "init_shim", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "require_stream_readable", "__commonJSMin", "exports", "module", "init_shim", "pna", "Readable", "isArray", "Duplex", "ReadableState", "EE", "EElistenerCount", "emitter", "type", "Stream", "Buffer", "OurUint8Array", "_uint8ArrayToBuffer", "chunk", "_isUint8Array", "obj", "util", "debugUtil", "debug", "BufferList", "destroyImpl", "StringDecoder", "kProxyEvents", "prependListener", "event", "fn", "options", "stream", "isDuplex", "hwm", "readableHwm", "defaultHwm", "value", "err", "cb", "encoding", "state", "skipChunkCheck", "readableAddChunk", "addToFront", "onEofChunk", "er", "chunkInvalid", "addChunk", "maybeReadMore", "needMoreData", "emitReadable", "enc", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "doEnd", "process", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "pipeOnDrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "increasedAwaitDrain", "indexOf", "dests", "i", "index", "ev", "res", "nReadingNextTick", "self", "resume", "resume_", "_this", "paused", "method", "fromListPartial", "list", "hasStrings", "copyFromBufferString", "copyFromBuffer", "p", "c", "str", "nb", "buf", "endReadableNT", "xs", "x", "l", "require_stream_transform", "__commonJSMin", "exports", "module", "init_shim", "Transform", "Duplex", "util", "afterTransform", "er", "data", "ts", "cb", "rs", "options", "prefinish", "_this", "done", "chunk", "encoding", "n", "err", "_this2", "err2", "stream", "require_stream_passthrough", "__commonJSMin", "exports", "module", "init_shim", "PassThrough", "Transform", "util", "options", "chunk", "encoding", "cb", "require_readable_browser", "__commonJSMin", "exports", "module", "init_shim", "require_bn", "__commonJSMin", "exports", "module", "init_shim", "assert", "val", "msg", "inherits", "ctor", "superCtor", "TempCtor", "BN", "number", "base", "endian", "Buffer", "num", "left", "right", "start", "i", "j", "w", "off", "parseHex4Bits", "string", "index", "c", "parseHexByte", "lowerBound", "r", "parseLength", "parseBase", "str", "end", "mul", "b", "len", "limbLen", "limbPow", "total", "mod", "word", "pow", "dest", "move", "src", "size", "inspect", "zeros", "groupSizes", "groupBases", "padding", "out", "carry", "groupSize", "groupBase", "ret", "length", "allocate", "ArrayType", "byteLength", "reqLength", "res", "postfix", "position", "shift", "t", "hi", "toBitArray", "bit", "wbit", "width", "a", "bytesNeeded", "bitsLeft", "cmp", "smallMulTo", "self", "lo", "k", "ncarry", "rword", "maxJ", "comb10MulTo", "o", "mid", "a0", "al0", "ah0", "a1", "al1", "ah1", "a2", "al2", "ah2", "a3", "al3", "ah3", "a4", "al4", "ah4", "a5", "al5", "ah5", "a6", "al6", "ah6", "a7", "al7", "ah7", "a8", "al8", "ah8", "a9", "al9", "ah9", "b0", "bl0", "bh0", "b1", "bl1", "bh1", "b2", "bl2", "bh2", "b3", "bl3", "bh3", "b4", "bl4", "bh4", "b5", "bl5", "bh5", "b6", "bl6", "bh6", "b7", "bl7", "bh7", "b8", "bl8", "bh8", "b9", "bl9", "bh9", "w0", "w1", "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w11", "w12", "w13", "w14", "w15", "w16", "w17", "w18", "bigMulTo", "hncarry", "jumboMulTo", "FFTM", "x", "y", "N", "l", "rb", "rbt", "rws", "iws", "rtws", "itws", "s", "rtwdf", "itwdf", "p", "rtwdf_", "itwdf_", "re", "ie", "ro", "io", "rx", "n", "odd", "ws", "ph", "_", "rwst", "iwst", "nrws", "nrwst", "niwst", "rmws", "isNegNum", "q", "bits", "carryMask", "newCarry", "hint", "extended", "h", "mask", "maskedWords", "mode", "bhi", "bhiBits", "m", "diff", "qj", "positive", "div", "dm", "half", "r2", "acc", "A", "B", "C", "D", "g", "yp", "xp", "im", "jm", "x1", "x2", "delta", "negative", "Red", "ctx", "primes", "MPrime", "name", "tmp", "rlen", "input", "K256", "output", "outLen", "prev", "next", "P224", "P192", "P25519", "prime", "mod3", "one", "nOne", "lpow", "z", "inv", "windowSize", "wnd", "current", "currentLen", "Mont", "u", "require_browserify_rsa", "__commonJSMin", "exports", "module", "init_shim", "BN", "randomBytes", "blind", "priv", "r", "getr", "blinder", "len", "crt", "msg", "blinds", "blinded", "c1", "c2", "qinv", "p", "q", "m1", "m2", "h", "require_package", "__commonJSMin", "exports", "module", "require_utils", "__commonJSMin", "exports", "init_shim", "utils", "toArray", "msg", "enc", "res", "i", "c", "hi", "lo", "zero2", "word", "toHex", "arr", "require_utils", "__commonJSMin", "exports", "init_shim", "utils", "BN", "minAssert", "minUtils", "getNAF", "num", "w", "bits", "naf", "ws", "k", "z", "mod", "getJSF", "k1", "k2", "jsf", "d1", "d2", "m8", "m14", "m24", "u1", "u2", "cachedProperty", "obj", "name", "computer", "key", "parseBytes", "bytes", "intFromLE", "require_base", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "getNAF", "getJSF", "assert", "BaseCurve", "type", "conf", "adjustCount", "p", "k", "doubles", "naf", "I", "repr", "j", "nafW", "l", "a", "b", "i", "w", "nafPoints", "wnd", "acc", "z", "defW", "points", "coeffs", "len", "jacobianResult", "wndWidth", "max", "comb", "index", "jsf", "ja", "jb", "tmp", "zero", "BasePoint", "curve", "bytes", "enc", "res", "compact", "x", "power", "precomputed", "step", "dbl", "require_short", "__commonJSMin", "exports", "module", "init_shim", "utils", "BN", "inherits", "Base", "assert", "ShortCurve", "conf", "beta", "lambda", "betas", "lambdas", "basis", "vec", "num", "red", "tinv", "ntinv", "s", "l1", "l2", "aprxSqrt", "u", "v", "x1", "y1", "x2", "y2", "a0", "b0", "a1", "b1", "a2", "b2", "prevR", "i", "r", "x", "q", "y", "len1", "len2", "k", "v1", "v2", "c1", "c2", "p1", "p2", "q1", "q2", "k1", "k2", "odd", "isOdd", "point", "ax", "rhs", "points", "coeffs", "jacobianResult", "npoints", "ncoeffs", "split", "p", "res", "j", "Point", "curve", "isRed", "obj", "pre", "endoMul", "obj2point", "c", "nx", "ny", "ys1", "a", "dyinv", "_precompute", "negate", "JPoint", "z", "zinv", "zinv2", "ay", "pz2", "z2", "u1", "u2", "s1", "s2", "h", "h2", "h3", "nz", "pow", "jx", "jy", "jz", "jz4", "jyd", "jx2", "jyd2", "jyd4", "t1", "t2", "dny", "xx", "yy", "yyyy", "m", "t", "yyyy8", "b", "d", "e", "f", "c8", "delta", "gamma", "alpha", "beta4", "beta8", "ggamma8", "jy2", "jxd4", "jyd8", "zz", "mm", "ee", "yyu4", "kbase", "z3", "pz3", "zs", "rx", "xc", "require_mont", "__commonJSMin", "exports", "module", "init_shim", "BN", "inherits", "Base", "utils", "MontCurve", "conf", "point", "x", "x2", "rhs", "y", "Point", "curve", "z", "bytes", "enc", "obj", "a", "aa", "b", "bb", "c", "nx", "nz", "p", "diff", "d", "da", "cb", "k", "t", "bits", "i", "other", "require_edwards", "__commonJSMin", "exports", "module", "init_shim", "utils", "BN", "inherits", "Base", "assert", "EdwardsCurve", "conf", "num", "x", "y", "z", "t", "odd", "x2", "rhs", "lhs", "y2", "isOdd", "point", "Point", "curve", "obj", "a", "b", "c", "d", "e", "g", "f", "h", "nx", "ny", "nt", "nz", "j", "p", "tmp", "k", "k1", "k2", "zi", "other", "rx", "xc", "require_curve", "__commonJSMin", "exports", "init_shim", "curve", "require_utils", "__commonJSMin", "exports", "init_shim", "assert", "inherits", "isSurrogatePair", "msg", "i", "toArray", "enc", "res", "p", "c", "toHex", "zero2", "htonl", "w", "toHex32", "endian", "zero8", "word", "join32", "start", "end", "len", "k", "split32", "m", "rotr32", "b", "rotl32", "sum32", "a", "sum32_3", "sum32_4", "d", "sum32_5", "e", "sum64", "buf", "pos", "ah", "al", "bh", "bl", "lo", "hi", "sum64_hi", "sum64_lo", "sum64_4_hi", "ch", "cl", "dh", "dl", "carry", "sum64_4_lo", "sum64_5_hi", "eh", "el", "sum64_5_lo", "rotr64_hi", "num", "r", "rotr64_lo", "shr64_hi", "shr64_lo", "require_common", "__commonJSMin", "exports", "init_shim", "utils", "assert", "BlockHash", "msg", "enc", "r", "len", "bytes", "k", "res", "i", "t", "require_common", "__commonJSMin", "exports", "init_shim", "utils", "rotr32", "ft_1", "s", "x", "y", "z", "ch32", "p32", "maj32", "s0_256", "s1_256", "g0_256", "g1_256", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "shaCommon", "rotl32", "sum32", "sum32_5", "ft_1", "BlockHash", "sha1_K", "SHA1", "msg", "start", "W", "a", "b", "c", "e", "s", "t", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "shaCommon", "assert", "sum32", "sum32_4", "sum32_5", "ch32", "maj32", "s0_256", "s1_256", "g0_256", "g1_256", "BlockHash", "sha256_K", "SHA256", "msg", "start", "W", "a", "b", "c", "e", "f", "g", "h", "T1", "T2", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "SHA256", "SHA224", "enc", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "common", "assert", "rotr64_hi", "rotr64_lo", "shr64_hi", "shr64_lo", "sum64", "sum64_hi", "sum64_lo", "sum64_4_hi", "sum64_4_lo", "sum64_5_hi", "sum64_5_lo", "BlockHash", "sha512_K", "SHA512", "msg", "start", "W", "c0_hi", "g1_512_hi", "c0_lo", "g1_512_lo", "c1_hi", "c1_lo", "c2_hi", "g0_512_hi", "c2_lo", "g0_512_lo", "c3_hi", "c3_lo", "ah", "al", "bh", "bl", "ch", "cl", "dh", "dl", "eh", "el", "fh", "fl", "gh", "gl", "hh", "hl", "i", "s1_512_hi", "s1_512_lo", "ch64_hi", "ch64_lo", "c4_hi", "c4_lo", "T1_hi", "T1_lo", "s0_512_hi", "s0_512_lo", "maj64_hi", "maj64_lo", "T2_hi", "T2_lo", "enc", "xh", "xl", "yh", "yl", "zh", "r", "zl", "require__", "__commonJSMin", "exports", "module", "init_shim", "utils", "SHA512", "SHA384", "enc", "require_sha", "__commonJSMin", "exports", "init_shim", "require_ripemd", "__commonJSMin", "exports", "init_shim", "utils", "common", "rotl32", "sum32", "sum32_3", "sum32_4", "BlockHash", "RIPEMD160", "msg", "start", "A", "B", "C", "D", "E", "Ah", "Bh", "Ch", "Dh", "Eh", "j", "T", "f", "r", "K", "s", "rh", "Kh", "sh", "enc", "x", "y", "z", "require_hmac", "__commonJSMin", "exports", "module", "init_shim", "utils", "assert", "Hmac", "hash", "key", "enc", "i", "msg", "require_hash", "__commonJSMin", "exports", "init_shim", "hash", "require_secp256k1", "__commonJSMin", "exports", "module", "init_shim", "require_curves", "__commonJSMin", "exports", "init_shim", "curves", "hash", "curve", "utils", "assert", "PresetCurve", "options", "defineCurve", "name", "pre", "require_hmac_drbg", "__commonJSMin", "exports", "module", "init_shim", "hash", "utils", "assert", "HmacDRBG", "options", "entropy", "nonce", "pers", "seed", "i", "kmac", "entropyEnc", "add", "addEnc", "len", "enc", "temp", "res", "require_key", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "KeyPair", "ec", "options", "pub", "enc", "priv", "compact", "key", "msg", "signature", "require_signature", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "Signature", "options", "enc", "Position", "getLength", "buf", "p", "initial", "octetLen", "val", "i", "off", "rmPadding", "len", "data", "rlen", "r", "slen", "s", "constructLength", "arr", "octets", "backHalf", "res", "require_ec", "__commonJSMin", "exports", "module", "init_shim", "BN", "HmacDRBG", "utils", "curves", "rand", "assert", "KeyPair", "Signature", "EC", "options", "priv", "enc", "pub", "drbg", "bytes", "ns2", "msg", "truncOnly", "delta", "key", "bkey", "nonce", "ns1", "iter", "k", "kp", "kpX", "r", "s", "recoveryParam", "signature", "sinv", "u1", "u2", "p", "j", "n", "e", "isYOdd", "isSecondKey", "rInv", "s1", "s2", "Q", "Qprime", "require_key", "__commonJSMin", "exports", "module", "init_shim", "utils", "assert", "parseBytes", "cachedProperty", "KeyPair", "eddsa", "params", "pub", "secret", "hash", "lastIx", "a", "message", "sig", "enc", "require_signature", "__commonJSMin", "exports", "module", "init_shim", "BN", "utils", "assert", "cachedProperty", "parseBytes", "Signature", "eddsa", "sig", "require_eddsa", "__commonJSMin", "exports", "module", "init_shim", "hash", "curves", "utils", "assert", "parseBytes", "KeyPair", "Signature", "EDDSA", "curve", "message", "secret", "key", "r", "R", "Rencoded", "s_", "S", "sig", "pub", "h", "SG", "RplusAh", "i", "point", "enc", "bytes", "lastIx", "normed", "xIsOdd", "y", "num", "val", "require_elliptic", "__commonJSMin", "exports", "init_shim", "elliptic", "require_api", "__commonJSMin", "exports", "init_shim", "asn1", "inherits", "api", "name", "body", "Entity", "base", "named", "entity", "enc", "data", "options", "reporter", "require_reporter", "__commonJSMin", "exports", "init_shim", "inherits", "Reporter", "options", "obj", "ReporterError", "state", "data", "key", "index", "value", "prev", "now", "msg", "err", "inherited", "elem", "result", "path", "e", "require_buffer", "__commonJSMin", "exports", "init_shim", "inherits", "Reporter", "Buffer", "DecoderBuffer", "base", "options", "save", "res", "fail", "bytes", "EncoderBuffer", "value", "reporter", "item", "out", "offset", "require_node", "__commonJSMin", "exports", "module", "init_shim", "Reporter", "EncoderBuffer", "DecoderBuffer", "assert", "tags", "methods", "overrided", "Node", "enc", "parent", "state", "stateProps", "cstate", "prop", "res", "method", "clone", "body", "child", "args", "children", "arg", "key", "value", "tag", "item", "val", "num", "newKey", "obj", "input", "options", "result", "present", "prevKey", "save", "prevObj", "explicit", "start", "data", "entity", "match", "node", "reporter", "content", "primitive", "cls", "str", "require_base", "__commonJSMin", "exports", "init_shim", "base", "require_der", "__commonJSMin", "exports", "init_shim", "constants", "require_constants", "__commonJSMin", "exports", "init_shim", "constants", "map", "res", "key", "value", "require_der", "__commonJSMin", "exports", "module", "init_shim", "inherits", "asn1", "base", "bignum", "der", "DERDecoder", "entity", "DERNode", "data", "options", "parent", "buffer", "tag", "any", "state", "decodedTag", "derDecodeTag", "len", "derDecodeLen", "res", "fail", "decoder", "result", "possibleEnd", "unused", "raw", "str", "i", "numstr", "printstr", "values", "relative", "identifiers", "ident", "subident", "first", "second", "tmp", "year", "mon", "day", "hour", "min", "sec", "obj", "buf", "cls", "primitive", "oct", "tagStr", "num", "j", "require_pem", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "DERDecoder", "PEMDecoder", "entity", "data", "options", "lines", "label", "re", "start", "end", "i", "match", "base64", "input", "require_decoders", "__commonJSMin", "exports", "init_shim", "decoders", "require_der", "__commonJSMin", "exports", "module", "init_shim", "inherits", "Buffer", "asn1", "base", "der", "DEREncoder", "entity", "DERNode", "data", "reporter", "parent", "tag", "primitive", "cls", "content", "encodedTag", "encodeTag", "header", "lenOctets", "i", "j", "str", "buf", "id", "values", "relative", "size", "ident", "objid", "offset", "two", "num", "time", "date", "numArray", "out", "value", "obj", "dataBuffer", "state", "res", "require_pem", "__commonJSMin", "exports", "module", "init_shim", "inherits", "DEREncoder", "PEMEncoder", "entity", "data", "options", "buf", "p", "out", "i", "require_encoders", "__commonJSMin", "exports", "init_shim", "encoders", "require_asn1", "__commonJSMin", "exports", "init_shim", "asn1", "require_certificate", "__commonJSMin", "exports", "module", "init_shim", "asn", "Time", "AttributeTypeValue", "AlgorithmIdentifier", "SubjectPublicKeyInfo", "RelativeDistinguishedName", "RDNSequence", "Name", "Validity", "Extension", "TBSCertificate", "X509Certificate", "require_asn1", "__commonJSMin", "exports", "init_shim", "asn1", "RSAPrivateKey", "RSAPublicKey", "AlgorithmIdentifier", "PublicKey", "PrivateKeyInfo", "EncryptedPrivateKeyInfo", "DSAPrivateKey", "ECParameters", "ECPrivateKey", "require_aesid", "__commonJSMin", "exports", "module", "require_fixProc", "__commonJSMin", "exports", "module", "init_shim", "findProc", "startRegex", "fullRegex", "evp", "ciphers", "Buffer", "okey", "password", "key", "match", "decrypted", "suite", "iv", "cipherText", "cipherKey", "out", "cipher", "match2", "tag", "require_parse_asn1", "__commonJSMin", "exports", "module", "init_shim", "asn1", "aesid", "fixProc", "ciphers", "compat", "Buffer", "decrypt", "data", "password", "salt", "iters", "algo", "iv", "cipherText", "keylen", "key", "cipher", "out", "parseKeys", "buffer", "stripped", "type", "subtype", "ndata", "require_curves", "__commonJSMin", "exports", "module", "require_sign", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "createHmac", "crt", "EC", "BN", "parseKeys", "curves", "RSA_PKCS1_PADDING", "sign", "hash", "key", "hashType", "signType", "tag", "priv", "ecSign", "dsaSign", "len", "pad", "i", "out", "curveId", "curve", "algo", "x", "p", "q", "g", "r", "k", "H", "bits2int", "s", "kv", "getKey", "makeKey", "makeR", "toDER", "total", "res", "zeros", "hlen", "hbits", "bits2octets", "v", "obits", "bits", "shift", "t", "require_verify", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "BN", "EC", "parseKeys", "curves", "verify", "sig", "hash", "key", "signType", "tag", "pub", "ecVerify", "dsaVerify", "len", "pad", "padNum", "i", "red", "out", "curveId", "curve", "pubkey", "p", "q", "g", "y", "unpacked", "s", "r", "checkValue", "montp", "w", "v", "b", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "createHash", "stream", "inherits", "sign", "verify", "algorithms", "key", "Sign", "algorithm", "data", "_", "done", "enc", "hash", "sig", "Verify", "sigBuffer", "createSign", "createVerify", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "elliptic", "BN", "curve", "ECDH", "aliases", "enc", "format", "other", "inenc", "otherPub", "out", "formatReturnValue", "key", "pub", "priv", "_priv", "bn", "len", "buf", "zeros", "require_mgf", "__commonJSMin", "exports", "module", "init_shim", "createHash", "Buffer", "seed", "len", "t", "i", "c", "i2ops", "out", "require_xor", "__commonJSMin", "exports", "module", "init_shim", "a", "b", "len", "require_withPublic", "__commonJSMin", "exports", "module", "init_shim", "BN", "Buffer", "withPublic", "paddedMsg", "key", "require_publicEncrypt", "__commonJSMin", "exports", "module", "init_shim", "parseKeys", "randomBytes", "createHash", "mgf", "xor", "BN", "withPublic", "crt", "Buffer", "publicKey", "msg", "reverse", "padding", "key", "paddedMsg", "oaep", "pkcs1", "k", "mLen", "iHash", "hLen", "hLen2", "ps", "dblen", "seed", "maskedDb", "maskedSeed", "nonZero", "len", "out", "i", "cache", "cur", "num", "require_privateDecrypt", "__commonJSMin", "exports", "module", "init_shim", "parseKeys", "mgf", "xor", "BN", "crt", "createHash", "withPublic", "Buffer", "privateKey", "enc", "reverse", "padding", "key", "k", "msg", "zBuffer", "oaep", "pkcs1", "iHash", "hLen", "maskedSeed", "maskedDb", "seed", "db", "compare", "i", "p1", "status", "ps", "a", "b", "dif", "len", "require_browser", "__commonJSMin", "exports", "init_shim", "key", "buf", "require_browser", "__commonJSMin", "exports", "init_shim", "oldBrowser", "safeBuffer", "randombytes", "Buffer", "kBufferMaxLength", "crypto", "kMaxUint32", "assertOffset", "offset", "length", "assertSize", "size", "process", "randomFill", "randomFillSync", "buf", "cb", "actualFill", "ourBuf", "uint", "err", "bytes", "require_crypto_browserify", "__commonJSMin", "exports", "init_shim", "algos", "algoKeys", "hashes", "p", "aes", "dh", "sign", "publicEncrypt", "rf", "u8a", "a", "u8", "arr", "exports", "u16", "u32", "createView", "hexes", "_", "i", "bytesToHex", "bytes", "hex", "hexToBytes", "len", "array", "j", "hexByte", "byte", "nextTick", "asyncLoop", "iters", "tick", "cb", "ts", "diff", "utf8ToBytes", "str", "bytesToUtf8", "toBytes", "data", "concatBytes", "arrays", "r", "sum", "pad", "isPlainObject", "obj", "checkOpts", "defaults", "opts", "ensureBytes", "b", "equalBytes", "isSame", "Hash", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "require_consts", "__commonJSMin", "exports", "init_shim", "require_config", "__commonJSMin", "exports", "init_shim", "consts_1", "Config", "ellipticCurve", "isEphemeralKeyCompressed", "isHkdfKeyCompressed", "symmetricAlgorithm", "symmetricNonceLength", "ephemeralKeySize", "mapping", "exports", "crypto_1", "randomBytes", "bytesLength", "exports", "getWebcryptoSubtle", "number", "n", "exports", "bool", "b", "isBytes", "a", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "exports", "crypto_1", "u8", "arr", "exports", "u32", "isBytes", "a", "createView", "rotr", "word", "shift", "hexes", "_", "i", "bytesToHex", "bytes", "hex", "asciis", "asciiToBase16", "char", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "nextTick", "asyncLoop", "iters", "tick", "cb", "ts", "diff", "utf8ToBytes", "str", "toBytes", "data", "concatBytes", "arrays", "sum", "res", "pad", "Hash", "toStr", "checkOpts", "defaults", "opts", "wrapConstructor", "hashCons", "hashC", "msg", "tmp", "wrapConstructorWithOpts", "wrapXOFConstructorWithOpts", "randomBytes", "bytesLength", "_assert_js_1", "utils_js_1", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "SHA2", "blockLen", "outputLen", "padOffset", "data", "buffer", "len", "pos", "take", "dataView", "out", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "exports", "U32_MASK64", "_32n", "fromBig", "n", "le", "exports", "split", "lst", "Ah", "Al", "h", "l", "toBig", "shrSH", "_l", "s", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "_h", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "Bh", "Bl", "add3L", "Cl", "add3H", "low", "Ch", "add4L", "Dl", "add4H", "Dh", "add5L", "El", "add5H", "Eh", "u64", "_sha2_js_1", "_u64_js_1", "utils_js_1", "SHA512_Kh", "SHA512_Kl", "n", "SHA512_W_H", "SHA512_W_L", "SHA512", "Ah", "Al", "Bh", "Bl", "Ch", "Cl", "Dh", "Dl", "Eh", "El", "Fh", "Fl", "Gh", "Gl", "Hh", "Hl", "view", "offset", "i", "W15h", "W15l", "s0h", "s0l", "W2h", "W2l", "s1h", "s1l", "SUMl", "SUMh", "sigma1h", "sigma1l", "CHIh", "CHIl", "T1ll", "T1h", "T1l", "sigma0h", "sigma0l", "MAJh", "MAJl", "All", "exports", "SHA512_224", "SHA512_256", "SHA384", "_0n", "_1n", "_2n", "isBytes", "a", "exports", "hexes", "_", "i", "bytesToHex", "bytes", "hex", "numberToHexUnpadded", "num", "hexToNumber", "asciis", "asciiToBase16", "char", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "bytesToNumberBE", "bytesToNumberLE", "numberToBytesBE", "n", "len", "numberToBytesLE", "numberToVarBytesBE", "ensureBytes", "title", "expectedLength", "res", "e", "concatBytes", "arrays", "sum", "pad", "equalBytes", "b", "diff", "utf8ToBytes", "str", "bitLen", "bitGet", "pos", "bitSet", "value", "bitMask", "u8n", "data", "u8fr", "arr", "createHmacDrbg", "hashLen", "qByteLen", "hmacFn", "v", "k", "reset", "h", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validateObject", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "utils_js_1", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "exports", "pow", "num", "power", "modulo", "res", "pow2", "x", "invert", "number", "y", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "Q", "S", "Z", "p1div4", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "c1", "n2", "nv", "i", "isNegativeLE", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "FpDiv", "lhs", "rhs", "FpIsSquare", "legendreConst", "nLength", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "BITS", "BYTES", "sqrtP", "lst", "bytes", "FpSqrtOdd", "elm", "FpSqrtEven", "hashToPrivateScalar", "hash", "groupOrder", "hashLen", "minLen", "getFieldBytesLength", "fieldOrder", "bitLength", "getMinHashLength", "length", "mapHashToField", "key", "len", "fieldLen", "reduced", "modular_js_1", "utils_js_1", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "exports", "validateBasic", "curve", "modular_js_1", "ut", "utils_js_1", "curve_js_1", "_0n", "_1n", "_2n", "_8n", "VERIFY_DEFAULT", "validateOpts", "curve", "opts", "twistedEdwards", "curveDef", "CURVE", "Fp", "CURVE_ORDER", "prehash", "cHash", "randomBytes", "nByteLength", "cofactor", "MASK", "modP", "uvRatio", "u", "v", "adjustScalarBytes", "bytes", "domain", "data", "ctx", "phflag", "inBig", "n", "inRange", "max", "in0MaskRange", "assertInRange", "assertGE0", "pointPrecomputes", "isPoint", "other", "Point", "ex", "ey", "ez", "et", "p", "x", "y", "points", "toInv", "i", "windowSize", "a", "d", "X", "Y", "Z", "T", "X2", "Y2", "Z2", "Z4", "aX2", "left", "right", "XY", "ZT", "X1", "Y1", "Z1", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "wnaf", "scalar", "f", "I", "iz", "z", "is0", "ax", "ay", "zz", "hex", "zip215", "len", "normed", "lastByte", "y2", "isValid", "isXOdd", "isLastByteOdd", "privKey", "getExtendedPublicKey", "modN", "modN_LE", "hash", "key", "hashed", "head", "prefix", "point", "pointBytes", "getPublicKey", "hashDomainToScalar", "context", "msgs", "msg", "sign", "options", "r", "R", "k", "s", "res", "verifyOpts", "verify", "sig", "publicKey", "SB", "exports", "modular_js_1", "utils_js_1", "_0n", "_1n", "validateOpts", "curve", "montgomery", "curveDef", "CURVE", "P", "modP", "n", "montgomeryBits", "montgomeryBytes", "fieldLen", "adjustScalarBytes", "bytes", "powPminus2", "x", "cswap", "swap", "x_2", "x_3", "dummy", "assertFieldElement", "a24", "montgomeryLadder", "pointU", "scalar", "u", "k", "x_1", "z_2", "z_3", "sw", "t", "k_t", "A", "AA", "B", "BB", "E", "C", "D", "DA", "CB", "dacb", "da_cb", "z2", "encodeUCoordinate", "decodeUCoordinate", "uEnc", "decodeScalar", "len", "scalarMult", "_scalar", "pu", "GuBytes", "scalarMultBase", "privateKey", "publicKey", "exports", "modular_js_1", "utils_js_1", "validateDST", "dst", "os2ip", "i2osp", "value", "length", "res", "i", "strxor", "a", "b", "arr", "abytes", "item", "isNum", "expand_message_xmd", "msg", "DST", "lenInBytes", "H", "b_in_bytes", "r_in_bytes", "ell", "DST_prime", "Z_pad", "l_i_b_str", "b_0", "args", "exports", "expand_message_xof", "k", "dkLen", "hash_to_field", "count", "options", "p", "m", "hash", "expand", "_DST", "log2p", "L", "len_in_bytes", "prb", "u", "e", "j", "elm_offset", "tv", "isogenyMap", "field", "map", "COEFF", "x", "y", "xNum", "xDen", "yNum", "yDen", "val", "acc", "createHasher", "Point", "mapToCurve", "def", "u0", "u1", "P", "sha512_1", "utils_1", "edwards_js_1", "montgomery_js_1", "modular_js_1", "utils_js_1", "hash_to_curve_js_1", "ED25519_P", "ED25519_SQRT_M1", "_0n", "_1n", "_2n", "_5n", "_10n", "_20n", "_40n", "_80n", "ed25519_pow_2_252_3", "x", "P", "b2", "b4", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "adjustScalarBytes", "bytes", "uvRatio", "u", "v", "v3", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "exports", "Fp", "ed25519Defaults", "ed25519_domain", "data", "ctx", "phflag", "pow_p_5_8", "edwardsToMontgomeryPub", "edwardsPub", "y", "edwardsToMontgomeryPriv", "edwardsPriv", "hashed", "ELL2_C1", "ELL2_C2", "ELL2_C3", "ELL2_C4", "ELL2_J", "map_to_curve_elligator2_curve25519", "tv1", "xd", "x1n", "tv2", "gxd", "gx1", "tv3", "y11", "y12", "e1", "y1", "x2n", "y21", "y22", "gx2", "e2", "y2", "e3", "xn", "e4", "ELL2_C1_EDWARDS", "map_to_curve_elligator2_edwards25519", "xMn", "xMd", "yMn", "yMd", "yn", "yd", "e", "inv", "htf", "scalars", "assertRstPoint", "other", "RistPoint", "SQRT_M1", "SQRT_AD_MINUS_ONE", "INVSQRT_A_MINUS_D", "ONE_MINUS_D_SQ", "D_MINUS_ONE_SQ", "invertSqrt", "number", "MAX_255B", "bytes255ToNumberLE", "calcElligatorRistrettoMap", "r0", "d", "mod", "r", "Ns", "c", "D", "Ns_D_is_sq", "s", "s_", "Nt", "s2", "W0", "W1", "W2", "W3", "_RistPoint", "ep", "ap", "hex", "r1", "R1", "r2", "R2", "a", "emsg", "u1", "u2", "u1_2", "u2_2", "isValid", "I", "Dx", "Dy", "t", "z", "u2sq", "invsqrt", "D1", "D2", "zInv", "_x", "_y", "X1", "Y1", "X2", "Y2", "one", "two", "scalar", "hashToRistretto255", "msg", "options", "DST", "uniform_bytes", "_sha2_js_1", "utils_js_1", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "s1", "sigma1", "T1", "T2", "SHA224", "exports", "mod", "ut", "utils_js_1", "curve_js_1", "validatePointOpts", "curve", "opts", "endo", "Fp", "a", "b2n", "h2b", "exports", "m", "data", "E", "len", "res", "hex", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "_c", "point", "_isCompressed", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "isCompressed", "_bits", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "cat", "head", "y2", "isYOdd", "numToNByteStr", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "utils", "length", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "SWUFpSqrtRatio", "Z", "o", "c1", "_2n_pow_c1_1", "_2n_pow_c1", "c2", "c3", "c4", "c5", "c6", "c7", "sqrtRatio", "u", "tv1", "tv2", "tv3", "tv5", "tv4", "isQR", "tvv5", "e1", "v", "y1", "mapToCurveSimpleSWU", "tv6", "isValid", "value", "_assert_js_1", "utils_js_1", "HMAC", "hash", "_key", "key", "blockLen", "pad", "i", "buf", "out", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "exports", "hmac", "message", "hmac_1", "utils_1", "weierstrass_js_1", "getHash", "hash", "key", "msgs", "exports", "createCurve", "curveDef", "defHash", "create", "sha256_1", "utils_1", "modular_js_1", "weierstrass_js_1", "utils_js_1", "hash_to_curve_js_1", "_shortw_utils_js_1", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "exports", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "k2", "k1neg", "k2neg", "_0n", "fe", "x", "ge", "TAGGED_HASH_PREFIXES", "taggedHash", "tag", "messages", "tagP", "tagH", "c", "pointToBytes", "point", "numTo32b", "modP", "modN", "Point", "GmulAdd", "Q", "schnorrGetExtPubKey", "priv", "d_", "p", "lift_x", "xx", "challenge", "args", "schnorrGetPublicKey", "privateKey", "schnorrSign", "message", "auxRand", "m", "px", "d", "t", "rand", "k_", "rx", "e", "sig", "schnorrVerify", "signature", "publicKey", "pub", "r", "s", "R", "isoMap", "i", "j", "mapSWU", "htf", "scalars", "require_hex", "__commonJSMin", "exports", "init_shim", "utils_1", "remove0x", "hex", "decodeHex", "number", "n", "exports", "bool", "b", "bytes", "lengths", "hash", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "utils_js_1", "_assert_js_1", "u8to16", "a", "i", "Poly1305", "key", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "data", "offset", "isLast", "hibit", "h", "r", "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "h0", "h1", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "c", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "pad", "g", "mask", "f", "buffer", "blockLen", "len", "pos", "take", "out", "opos", "outputLen", "res", "wrapConstructorWithKey", "hashCons", "hashC", "msg", "tmp", "exports", "_assert_js_1", "utils_js_1", "sigma16", "sigma32", "sigma16_32", "sigma32_32", "isAligned32", "b", "salsaBasic", "opts", "core", "rounds", "counterRight", "counterLen", "allow128bitKeys", "extendNonceFn", "blockLen", "blockLen32", "key", "nonce", "data", "output", "counter", "toClean", "k", "sigma", "nonceLen", "nc", "block", "b32", "k32", "n32", "d32", "o32", "len", "pos", "ctr", "take", "pos32", "j", "i", "exports", "utils_js_1", "_poly1305_js_1", "_salsa_js_1", "rotl", "a", "b", "chachaCore", "c", "k", "n", "out", "cnt", "rounds", "y00", "y01", "y02", "y03", "y04", "y05", "y06", "y07", "y08", "y09", "y10", "y11", "y12", "y13", "y14", "y15", "x00", "x01", "x02", "x03", "x04", "x05", "x06", "x07", "x08", "x09", "x10", "x11", "x12", "x13", "x14", "x15", "i", "oi", "hchacha", "key", "src", "k32", "i32", "o32", "exports", "ZERO", "updatePadded", "h", "msg", "left", "computeTag", "fn", "nonce", "data", "AAD", "authKey", "num", "view", "res", "_poly1305_aead", "xorStream", "plaintext", "output", "plength", "clength", "tag", "ciphertext", "passedTag", "number", "n", "exports", "bool", "b", "isBytes", "a", "bytes", "lengths", "hash", "h", "exists", "instance", "checkFinished", "output", "out", "min", "assert", "exports", "crypto_1", "_assert_js_1", "isBytes", "a", "exports", "u8", "arr", "u32", "createView", "rotr", "word", "shift", "rotl", "byteSwap", "n", "byteSwap32", "i", "hexes", "_", "bytesToHex", "bytes", "hex", "asciis", "asciiToBase16", "char", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "nextTick", "asyncLoop", "iters", "tick", "cb", "ts", "diff", "utf8ToBytes", "str", "toBytes", "data", "concatBytes", "arrays", "sum", "res", "pad", "Hash", "toStr", "checkOpts", "defaults", "opts", "wrapConstructor", "hashCons", "hashC", "msg", "tmp", "wrapConstructorWithOpts", "wrapXOFConstructorWithOpts", "randomBytes", "bytesLength", "_assert_js_1", "utils_js_1", "HMAC", "hash", "_key", "key", "blockLen", "pad", "i", "buf", "out", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "exports", "hmac", "message", "_assert_js_1", "utils_js_1", "hmac_js_1", "extract", "hash", "ikm", "salt", "exports", "HKDF_COUNTER", "EMPTY_BUFFER", "expand", "prk", "info", "length", "blocks", "okm", "HMAC", "HMACTmp", "T", "counter", "hkdf", "_assert_js_1", "utils_js_1", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "Chi", "a", "b", "c", "exports", "Maj", "HashMD", "blockLen", "outputLen", "padOffset", "data", "buffer", "len", "pos", "take", "dataView", "out", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "_md_js_1", "utils_js_1", "SHA256_K", "SHA256_IV", "SHA256_W", "SHA256", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "s1", "sigma1", "T1", "T2", "SHA224", "exports", "require_compat", "__commonJSMin", "exports", "init_shim", "utils_1", "crypto_1", "consts_1", "aes256gcm", "key", "nonce", "AAD", "encrypt", "plainText", "cipher", "updated", "finalized", "decrypt", "cipherText", "encrypted", "tag", "decipher", "require_symmetric", "__commonJSMin", "exports", "init_shim", "chacha_1", "utils_1", "utils_2", "hkdf_1", "sha256_1", "config_1", "consts_1", "compat_1", "aesEncrypt", "key", "plainText", "_exec", "aesDecrypt", "cipherText", "deriveKey", "master", "is_encryption", "data", "algorithm", "callback", "_encrypt", "_decrypt", "func", "nonceLength", "nonce", "cipher", "ciphered", "encrypted", "tag", "nonceTagLength", "decipher", "require_elliptic", "__commonJSMin", "exports", "init_shim", "utils_1", "utils_2", "ed25519_1", "secp256k1_1", "config_1", "consts_1", "hex_1", "symmetric_1", "getValidSecret", "key", "isValidPrivateKey", "secret", "_exec", "curve", "getPublicKey", "getSharedKey", "ephemeralPoint", "sharedPoint", "getSharedPoint", "sk", "pk", "compressed", "scalar", "point", "convertPublicKeyFormat", "hexToPublicKey", "hex", "decoded", "fixed", "secp256k1Callback", "x25519Callback", "ed25519Callback", "require_utils", "__commonJSMin", "exports", "init_shim", "__createBinding", "o", "m", "k", "k2", "desc", "__exportStar", "p", "require_PublicKey", "__commonJSMin", "exports", "init_shim", "utils_1", "config_1", "utils_2", "PublicKey", "data", "hex", "compressed", "sk", "senderPoint", "sharedPoint", "other", "require_PrivateKey", "__commonJSMin", "exports", "init_shim", "utils_1", "config_1", "utils_2", "PublicKey_1", "PrivateKey", "secret", "sk", "hex", "pk", "senderPoint", "sharedPoint", "compressed", "other", "require_keys", "__commonJSMin", "exports", "init_shim", "PrivateKey_1", "PublicKey_1", "require_dist", "__commonJSMin", "exports", "init_shim", "utils_1", "config_1", "keys_1", "utils_2", "encrypt", "receiverRawPK", "msg", "ephemeralKey", "receiverPK", "symKey", "encrypted", "pk", "decrypt", "receiverRawSK", "receiverSK", "keySize", "senderPK", "config_2", "keys_2", "require_primordials", "__commonJSMin", "exports", "module", "init_shim", "self", "el", "sep", "fn", "start", "end", "thisArgs", "args", "instance", "props", "name", "prop", "obj", "target", "proto", "thenFn", "catchFn", "err", "val", "value", "buf", "len", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "AbortController", "AbortSignal", "require_util", "__commonJSMin", "exports", "module", "init_shim", "bufferModule", "kResistStopPropagation", "SymbolDispose", "AbortSignal", "AbortController", "AsyncFunction", "Blob", "isBlob", "b", "validateAbortSignal", "signal", "name", "validateFunction", "value", "AggregateError", "errors", "message", "i", "callback", "called", "args", "resolve", "reject", "res", "rej", "fn", "err", "format", "_unused", "type", "replacement", "arr", "listener", "removeEventListener", "_removeEventListener", "signals", "ac", "abort", "require_errors", "__commonJSMin", "exports", "module", "init_shim", "format", "inspect", "CustomAggregateError", "AggregateError", "kIsNodeError", "kTypes", "classRegExp", "nodeInternalPrefix", "codes", "assert", "value", "message", "addNumericalSeparator", "val", "res", "i", "start", "getMessage", "key", "msg", "args", "expectedLength", "E", "code", "Base", "NodeError", "hideStackFrames", "fn", "hidden", "aggregateTwoErrors", "innerError", "outerError", "err", "AbortError", "options", "name", "expected", "actual", "types", "instances", "other", "pos", "last", "_actual$constructor", "inspected", "reason", "input", "_value$constructor", "type", "len", "a", "str", "range", "received", "require_validators", "__commonJSMin", "exports", "module", "init_shim", "ArrayIsArray", "ArrayPrototypeIncludes", "ArrayPrototypeJoin", "ArrayPrototypeMap", "NumberIsInteger", "NumberIsNaN", "NumberMAX_SAFE_INTEGER", "NumberMIN_SAFE_INTEGER", "NumberParseInt", "ObjectPrototypeHasOwnProperty", "RegExpPrototypeExec", "String", "StringPrototypeToUpperCase", "StringPrototypeTrim", "hideStackFrames", "ERR_SOCKET_BAD_PORT", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_ARG_VALUE", "ERR_OUT_OF_RANGE", "ERR_UNKNOWN_SIGNAL", "normalizeEncoding", "isAsyncFunction", "isArrayBufferView", "signals", "isInt32", "value", "isUint32", "octalReg", "modeDesc", "parseFileMode", "name", "def", "validateUint32", "validateInteger", "min", "max", "validateInt32", "positive", "validateString", "validateNumber", "validateOneOf", "oneOf", "reason", "v", "validateBoolean", "getOwnPropertyValueOrDefault", "options", "key", "defaultValue", "validateObject", "allowArray", "allowFunction", "validateDictionary", "validateArray", "minLength", "validateStringArray", "i", "validateBooleanArray", "validateAbortSignalArray", "signal", "indexedName", "validateAbortSignal", "validateSignalName", "validateBuffer", "buffer", "validateEncoding", "data", "encoding", "normalizedEncoding", "length", "validatePort", "port", "allowZero", "validateFunction", "validatePlainFunction", "validateUndefined", "validateUnion", "union", "linkValueRegExp", "validateLinkHeaderFormat", "validateLinkHeaderValue", "hints", "hintsLength", "result", "link", "require_utils", "__commonJSMin", "exports", "module", "init_shim", "SymbolAsyncIterator", "SymbolIterator", "SymbolFor", "kIsDestroyed", "kIsErrored", "kIsReadable", "kIsWritable", "kIsDisturbed", "kIsClosedPromise", "kControllerErrorFunction", "isReadableNodeStream", "obj", "strict", "_obj$_readableState", "isWritableNodeStream", "_obj$_writableState", "isDuplexNodeStream", "isNodeStream", "isReadableStream", "isWritableStream", "isTransformStream", "isWebStream", "isIterable", "isAsync", "isDestroyed", "stream", "wState", "rState", "state", "isWritableEnded", "isWritableFinished", "isReadableEnded", "isReadableFinished", "isReadable", "isWritable", "isFinished", "opts", "isWritableErrored", "_stream$_writableStat", "_stream$_writableStat2", "isReadableErrored", "_stream$_readableStat", "_stream$_readableStat2", "isClosed", "isOutgoingMessage", "isServerResponse", "isServerRequest", "_stream$req", "willEmitClose", "isDisturbed", "_stream$kIsDisturbed", "isErrored", "_ref", "_ref2", "_ref3", "_ref4", "_ref5", "_stream$kIsErrored", "_stream$_readableStat3", "_stream$_writableStat3", "_stream$_readableStat4", "_stream$_writableStat4", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "process", "AbortError", "codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PREMATURE_CLOSE", "kEmptyObject", "once", "validateAbortSignal", "validateFunction", "validateObject", "validateBoolean", "Promise", "PromisePrototypeThen", "SymbolDispose", "isClosed", "isReadable", "isReadableNodeStream", "isReadableStream", "isReadableFinished", "isReadableErrored", "isWritable", "isWritableNodeStream", "isWritableStream", "isWritableFinished", "isWritableErrored", "isNodeStream", "_willEmitClose", "kIsClosedPromise", "addAbortListener", "isRequest", "stream", "nop", "eos", "options", "callback", "_options$readable", "_options$writable", "eosWeb", "readable", "writable", "wState", "rState", "onlegacyfinish", "onfinish", "willEmitClose", "writableFinished", "readableFinished", "onend", "onerror", "err", "closed", "onclose", "errored", "onclosed", "onrequest", "cleanup", "abort", "endCallback", "disposable", "originalCallback", "args", "isAborted", "resolverFn", "finished", "opts", "_opts", "autoCleanup", "resolve", "reject", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "process", "aggregateTwoErrors", "ERR_MULTIPLE_CALLBACK", "AbortError", "Symbol", "kIsDestroyed", "isDestroyed", "isFinished", "isServerRequest", "kDestroy", "kConstruct", "checkError", "err", "w", "destroy", "cb", "s", "_destroy", "er", "self", "called", "onDestroy", "r", "emitErrorCloseNT", "emitCloseNT", "emitErrorNT", "undestroy", "errorOrDestroy", "stream", "sync", "construct", "constructNT", "onConstruct", "emitConstructNT", "isRequest", "emitCloseLegacy", "emitErrorCloseLegacy", "destroyer", "require_legacy", "__commonJSMin", "exports", "module", "init_shim", "ArrayIsArray", "ObjectSetPrototypeOf", "EE", "Stream", "opts", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "prependListener", "emitter", "event", "fn", "require_add_abort_signal", "__commonJSMin", "exports", "module", "init_shim", "SymbolDispose", "AbortError", "codes", "isNodeStream", "isWebStream", "kControllerErrorFunction", "eos", "ERR_INVALID_ARG_TYPE", "addAbortListener", "validateAbortSignal", "signal", "name", "stream", "onAbort", "disposable", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "StringPrototypeSlice", "SymbolIterator", "TypedArrayPrototypeSet", "Uint8Array", "Buffer", "inspect", "v", "entry", "ret", "s", "p", "n", "hasStrings", "data", "slice", "c", "str", "retLen", "buf", "_", "options", "require_state", "__commonJSMin", "exports", "module", "init_shim", "MathFloor", "NumberIsInteger", "validateInteger", "ERR_INVALID_ARG_VALUE", "defaultHighWaterMarkBytes", "defaultHighWaterMarkObjectMode", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getDefaultHighWaterMark", "objectMode", "setDefaultHighWaterMark", "value", "getHighWaterMark", "state", "hwm", "name", "require_from", "__commonJSMin", "exports", "module", "init_shim", "process", "PromisePrototypeThen", "SymbolAsyncIterator", "SymbolIterator", "Buffer", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_NULL_VALUES", "from", "Readable", "iterable", "opts", "iterator", "isAsync", "readable", "reading", "next", "error", "cb", "close", "e", "hadError", "hasThrow", "value", "done", "res", "err", "require_readable", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayPrototypeIndexOf", "NumberIsInteger", "NumberIsNaN", "NumberParseInt", "ObjectDefineProperties", "ObjectKeys", "ObjectSetPrototypeOf", "Promise", "SafeSet", "SymbolAsyncDispose", "SymbolAsyncIterator", "Symbol", "Readable", "ReadableState", "EE", "Stream", "prependListener", "Buffer", "addAbortSignal", "eos", "debug", "fn", "BufferList", "destroyImpl", "getHighWaterMark", "getDefaultHighWaterMark", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_OUT_OF_RANGE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "AbortError", "validateObject", "kPaused", "StringDecoder", "from", "nop", "errorOrDestroy", "kObjectMode", "kEnded", "kEndEmitted", "kReading", "kConstructed", "kSync", "kNeedReadable", "kEmittedReadable", "kReadableListening", "kResumeScheduled", "kErrorEmitted", "kEmitClose", "kAutoDestroy", "kDestroyed", "kClosed", "kCloseEmitted", "kMultiAwaitDrain", "kReadingMore", "kDataEmitted", "makeBitMapDescriptor", "bit", "value", "options", "stream", "isDuplex", "maybeReadMore", "err", "cb", "error", "resolve", "reject", "chunk", "encoding", "readableAddChunk", "addToFront", "state", "onEofChunk", "addChunk", "emitReadable", "enc", "decoder", "buffer", "content", "data", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "pause", "pipeOnDrain", "er", "s", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "paused", "streamKeys", "j", "streamToAsyncIterator", "iter", "createAsyncIterator", "callback", "next", "r", "val", "endReadableNT", "endWritableNT", "wState", "iterable", "opts", "webStreamsAdapters", "lazyWebStreams", "readableStream", "streamReadable", "_ref", "_src$readableObjectMo", "require_writable", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayPrototypeSlice", "Error", "FunctionPrototypeSymbolHasInstance", "ObjectDefineProperty", "ObjectDefineProperties", "ObjectSetPrototypeOf", "StringPrototypeToLowerCase", "Symbol", "SymbolHasInstance", "Writable", "WritableState", "EE", "Stream", "Buffer", "destroyImpl", "addAbortSignal", "getHighWaterMark", "getDefaultHighWaterMark", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_ALREADY_FINISHED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "kOnFinished", "options", "stream", "isDuplex", "noDecode", "onwrite", "resetBuffer", "state", "clearBuffer", "finishMaybe", "object", "_write", "chunk", "encoding", "cb", "err", "writeOrBuffer", "callback", "len", "ret", "doWrite", "writev", "onwriteError", "er", "errorBuffer", "sync", "afterWriteTick", "afterWrite", "count", "n", "_state$errored", "onfinishCallbacks", "_state$errored2", "buffered", "bufferedIndex", "objectMode", "bufferedLength", "i", "chunks", "needFinish", "callFinal", "called", "onFinish", "finish", "prefinish", "rState", "value", "w", "val", "wState", "destroy", "webStreamsAdapters", "lazyWebStreams", "writableStream", "streamWritable", "require_duplexify", "__commonJSMin", "exports", "module", "init_shim", "process", "bufferModule", "isReadable", "isWritable", "isIterable", "isNodeStream", "isReadableNodeStream", "isWritableNodeStream", "isDuplexNodeStream", "isReadableStream", "isWritableStream", "eos", "AbortError", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "destroyer", "Duplex", "Readable", "Writable", "createDeferredPromise", "from", "Blob", "isBlob", "b", "AbortController", "FunctionPrototypeCall", "Duplexify", "options", "duplexify", "body", "name", "_duplexify", "value", "write", "final", "destroy", "fromAsyncGen", "then", "d", "promise", "val", "err", "cb", "readable", "writable", "fn", "resolve", "ac", "signal", "_promise", "chunk", "done", "encoding", "_resolve", "pair", "r", "w", "ondrain", "onfinish", "onreadable", "onclose", "onfinished", "callback", "buf", "require_duplex", "__commonJSMin", "exports", "module", "init_shim", "ObjectDefineProperties", "ObjectGetOwnPropertyDescriptor", "ObjectKeys", "ObjectSetPrototypeOf", "Duplex", "Readable", "Writable", "keys", "i", "method", "options", "value", "webStreamsAdapters", "lazyWebStreams", "pair", "duplex", "duplexify", "body", "require_transform", "__commonJSMin", "exports", "module", "init_shim", "ObjectSetPrototypeOf", "Symbol", "Transform", "ERR_METHOD_NOT_IMPLEMENTED", "Duplex", "getHighWaterMark", "kCallback", "options", "readableHighWaterMark", "prefinish", "final", "cb", "er", "data", "chunk", "encoding", "callback", "rState", "wState", "length", "err", "val", "require_passthrough", "__commonJSMin", "exports", "module", "init_shim", "ObjectSetPrototypeOf", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayIsArray", "Promise", "SymbolAsyncIterator", "SymbolDispose", "eos", "once", "destroyImpl", "Duplex", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "ERR_STREAM_PREMATURE_CLOSE", "AbortError", "validateFunction", "validateAbortSignal", "isIterable", "isReadable", "isReadableNodeStream", "isNodeStream", "isTransformStream", "isWebStream", "isReadableStream", "isReadableFinished", "AbortController", "PassThrough", "Readable", "addAbortListener", "destroyer", "stream", "reading", "writing", "finished", "cleanup", "err", "popCallback", "streams", "makeAsyncIterable", "val", "fromReadable", "pumpToNode", "iterable", "writable", "finish", "end", "error", "onresolve", "resume", "callback", "wait", "resolve", "reject", "chunk", "pumpToWeb", "readable", "writer", "pipeline", "pipelineImpl", "opts", "ac", "signal", "outerSignal", "lastStreamCleanup", "abort", "finishImpl", "disposable", "value", "destroys", "finishCount", "final", "_disposable", "fn", "ret", "i", "isLastStream", "onError", "destroy", "_ret", "_ret2", "pt", "then", "toRead", "pipe", "src", "dst", "ended", "endFn", "rState", "require_compose", "__commonJSMin", "exports", "module", "init_shim", "pipeline", "Duplex", "destroyer", "isNodeStream", "isReadable", "isWritable", "isWebStream", "isTransformStream", "isWritableStream", "isReadableStream", "AbortError", "ERR_INVALID_ARG_VALUE", "ERR_MISSING_ARGS", "eos", "streams", "orgStreams", "idx", "n", "ondrain", "onfinish", "onreadable", "onclose", "d", "onfinished", "err", "cb", "readable", "writable", "head", "tail", "chunk", "encoding", "callback", "writer", "toRead", "buf", "reader", "value", "done", "require_operators", "__commonJSMin", "exports", "module", "init_shim", "AbortController", "ERR_INVALID_ARG_VALUE", "ERR_INVALID_ARG_TYPE", "ERR_MISSING_ARGS", "ERR_OUT_OF_RANGE", "AbortError", "validateAbortSignal", "validateInteger", "validateObject", "kWeakHandler", "kResistStopPropagation", "finished", "staticCompose", "addAbortSignalNoValidate", "isWritable", "isNodeStream", "deprecate", "ArrayPrototypePush", "Boolean", "MathFloor", "Number", "NumberIsNaN", "Promise", "PromiseReject", "PromiseResolve", "PromisePrototypeThen", "Symbol", "kEmpty", "kEof", "compose", "stream", "options", "composedStream", "map", "fn", "concurrency", "highWaterMark", "signal", "queue", "signalOpt", "next", "resume", "done", "cnt", "onCatch", "afterItemProcessed", "maybeResume", "pump", "val", "err", "resolve", "asIndexedPairs", "index", "_options$signal", "some", "unused", "filter", "every", "args", "find", "result", "forEach", "forEachFn", "value", "filterFn", "ReduceAwareErrMissingArgs", "reduce", "reducer", "initialValue", "_options$signal2", "hasInitialValue", "ac", "opts", "gotAnyItemFromStream", "_options$signal3", "toArray", "_options$signal4", "flatMap", "values", "toIntegerOrInfinity", "number", "drop", "_options$signal5", "_options$signal6", "take", "_options$signal7", "_options$signal8", "require_promises", "__commonJSMin", "exports", "module", "init_shim", "ArrayPrototypePop", "Promise", "isIterable", "isNodeStream", "isWebStream", "pl", "finished", "pipeline", "streams", "resolve", "reject", "signal", "end", "lastArg", "options", "err", "value", "require_stream", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "ObjectDefineProperty", "ObjectKeys", "ReflectApply", "customPromisify", "streamReturningOperators", "promiseReturningOperators", "ERR_ILLEGAL_CONSTRUCTOR", "compose", "setDefaultHighWaterMark", "getDefaultHighWaterMark", "pipeline", "destroyer", "eos", "promises", "utils", "Stream", "key", "fn", "args", "op", "addAbortSignal", "value", "chunk", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "CustomStream", "promises", "originalDestroy", "Math", "imul", "clz32", "JSBI", "abs", "max", "floor", "length", "sign", "i", "_", "a", "u", "setPrototypeOf", "prototype", "__kMaxLength", "RangeError", "g", "e", "c", "l", "result", "B", "digit", "t", "push", "toString", "join", "radix", "__toStringGeneric", "__toStringBasePowerOfTwo", "Error", "newLength", "last", "pop", "__clz30", "__digit", "multiplier", "summand", "mLow", "mHigh", "carry", "high", "d", "dLow", "dHigh", "pLow", "__imul", "pMid1", "pMid2", "pHigh", "v", "o", "__setDigit", "startIndex", "halfDigits", "sum", "__halfDigit", "__setHalfDigit", "subtrahend", "borrow", "current", "r0", "sub", "r15", "n", "D", "shift", "len", "__unsignedDigit", "value", "digitIndex", "previous", "updated", "arg", "Number", "isFinite", "__zero", "__isOneDigitInt", "__oneDigit", "__fromDouble", "__fromString", "SyntaxError", "_typeof", "constructor", "primitive", "__toPrimitive", "BigInt", "TypeError", "x", "xLength", "xMsd", "msdLeadingZeros", "xBitLength", "exponent", "currentDigit", "mantissaHigh", "r", "mantissaHighBitsUnset", "mantissaLow", "mantissaLowBitsUnset", "h", "b", "rounding", "__decideRounding", "signBit", "__kBitConversionInts", "__kBitConversionDouble", "__copy", "__absoluteSubOne", "__trim", "__absoluteAddOne", "y", "unaryMinus", "expValue", "__kMaxLengthBits", "neededDigits", "__initializeDigits", "msd", "runningSquare", "multiply", "resultLength", "__clzmsd", "__multiplyAccumulate", "__absoluteCompare", "quotient", "resultSign", "divisor", "__absoluteDivSmall", "__absoluteDivLarge", "remainderDigit", "__absoluteModSmall", "remainder", "__absoluteAdd", "__absoluteSub", "__rightShiftByAbsolute", "__leftShiftByAbsolute", "__compareToBigInt", "equal", "__absoluteAnd", "y1", "__absoluteOr", "__absoluteAndNot", "__absoluteXor", "neededLength", "topDigit", "compareDigit", "__truncateToNBits", "__truncateAndSubFromPowerOfTwo", "bitsInTopDigit", "__toNumeric", "__isBigInt", "add", "__compare", "EQ", "__equalToNumber", "dataview", "byteOffset", "littleEndian", "asIntN", "DataViewGetBigUint64", "getUint32", "low", "s", "DataViewSetBigUint64", "asUintN", "d1", "setUint32", "mantissaBitsUnset", "topUnconsumedBit", "mask", "rawExponent", "digits", "kMantissaHighTopBit", "msdTopBit", "remainingMantissaBits", "string", "cursor", "charCodeAt", "__isWhitespace", "chars", "bitsPerChar", "__kMaxBitsPerChar", "roundup", "__kBitsPerCharTableMultiplier", "bitsMin", "__kBitsPerCharTableShift", "limDigit", "limAlpha", "done", "charsSoFar", "part", "S", "k", "m", "I", "digitsSoFar", "__inplaceMultiplyAdd", "parts", "partsBits", "bits", "f", "p", "__fillFromParts", "bitsInDigit", "partBits", "charMask", "charsRequired", "Array", "pos", "availableBits", "newDigit", "__kConversionChars", "consumedBits", "isRecursiveCall", "bitLength", "maxBitsPerChar", "minBitsPerChar", "secondHalf", "secondHalfChars", "conqueror", "exponentiate", "input", "divisionResult", "firstHalf", "leftNegative", "bothNegative", "xSign", "__unequalSign", "__absoluteGreater", "__absoluteLess", "ySign", "yAbs", "xDigit", "__compareToDouble", "yBitLength", "compareMantissa", "op", "__comparisonResultToBool", "__compareToNumber", "inputLength", "__setDigitGrow", "yLength", "numPairs", "tmp", "tmpLength", "diff", "multiplicand", "accumulator", "accumulatorIndex", "m2Low", "m2High", "acc", "m1", "m1Low", "m1High", "rLow", "rMid1", "rMid2", "rHigh", "source", "factor", "rx", "ry", "upperHalf", "lowerHalf", "dividend", "wantQuotient", "wantRemainder", "__halfDigitLength", "n2", "q", "qhatv", "__clz15", "__specialLeftShift", "vn1", "halfDigitBuffer", "j", "qhat", "ujn", "rhat", "vn2", "ujn2", "__internalMultiplyAdd", "__inplaceSub", "__inplaceAdd", "__inplaceRightShift", "addDigit", "__toShiftAmount", "digitShift", "bitsShift", "grow", "__rightShiftByMaximum", "mustRoundDown", "obj", "hint", "Symbol", "toPrimitive", "exoticToPrim", "valueOf", "call", "drop", "min", "limit", "resultMsd", "msdBitsConsumed", "minuendMsd", "base", "ArrayBuffer", "Float64Array", "__kBitConversionBuffer", "Int32Array", "LN2", "log", "_CodeOrName", "exports", "Name", "s", "_Code", "code", "item", "_a", "c", "names", "_", "strs", "args", "i", "addCodeArg", "plus", "str", "expr", "safeStringify", "optimize", "arg", "interpolate", "res", "mergeExprItems", "a", "b", "strConcat", "c1", "c2", "x", "stringify", "getProperty", "key", "getEsmExportName", "regexpCode", "rx", "code_1", "ValueError", "name", "UsedValueState", "exports", "Scope", "prefixes", "parent", "nameOrPrefix", "prefix", "ng", "_b", "_a", "ValueScopeName", "nameStr", "value", "property", "itemIndex", "line", "ValueScope", "opts", "valueKey", "vs", "_name", "s", "keyOrRef", "scopeName", "values", "usedValues", "getCode", "valueCode", "code", "nameSet", "def", "code_1", "scope_1", "code_2", "exports", "scope_2", "Node", "_names", "_constants", "Def", "varKind", "name", "rhs", "es5", "_n", "names", "constants", "optimizeExpr", "Assign", "lhs", "sideEffects", "addExprNames", "AssignOp", "op", "Label", "label", "Break", "Throw", "error", "AnyCode", "code", "ParentNode", "nodes", "opts", "i", "n", "subtractNames", "addNames", "BlockNode", "Root", "Else", "If", "_If", "condition", "cond", "e", "ns", "not", "_a", "For", "ForLoop", "iteration", "ForRange", "from", "to", "ForIter", "loop", "iterable", "Func", "args", "async", "Return", "Try", "_b", "Catch", "Finally", "CodeGen", "extScope", "prefix", "prefixOrName", "value", "keyOrRef", "scopeName", "nameOrPrefix", "constant", "_constant", "c", "keyValues", "key", "thenBody", "elseBody", "node", "forBody", "arr", "obj", "tryBody", "catchCode", "finallyCode", "body", "nodeCount", "len", "toClose", "funcBody", "N1", "N2", "expr", "replaceName", "canOptimize", "items", "x", "par", "andCode", "mappend", "and", "orCode", "or", "y", "codegen_1", "code_1", "toHash", "arr", "hash", "item", "exports", "alwaysValidSchema", "it", "schema", "checkUnknownRules", "schemaHasRules", "opts", "self", "rules", "key", "checkStrictMode", "schemaHasRulesButRef", "RULES", "schemaRefOrVal", "topSchemaRef", "schemaPath", "keyword", "$data", "unescapeFragment", "str", "unescapeJsonPointer", "escapeFragment", "escapeJsonPointer", "eachItem", "xs", "f", "x", "makeMergeEvaluated", "mergeNames", "mergeToName", "mergeValues", "resultToName", "gen", "from", "to", "toName", "res", "setEvaluated", "evaluatedPropsToName", "items", "ps", "props", "p", "snippets", "useFunc", "Type", "getErrorPath", "dataProp", "dataPropType", "jsPropertySyntax", "isNumber", "msg", "mode", "codegen_1", "names", "exports", "codegen_1", "util_1", "names_1", "exports", "keyword", "schemaType", "reportError", "cxt", "error", "errorPaths", "overrideAllErrors", "it", "gen", "compositeRule", "allErrors", "errObj", "errorObjectCode", "addError", "returnErrors", "reportExtraError", "resetErrorsCount", "errsCount", "extendErrors", "schemaValue", "data", "err", "i", "errs", "validateName", "schemaEnv", "E", "createErrors", "errorObject", "keyValues", "errorInstancePath", "errorSchemaPath", "extraErrorProps", "errorPath", "instancePath", "instPath", "errSchemaPath", "schemaPath", "parentSchema", "schPath", "params", "message", "opts", "propertyName", "topSchemaRef", "errors_1", "codegen_1", "names_1", "boolError", "topBoolOrEmptySchema", "it", "gen", "schema", "validateName", "falseSchemaError", "exports", "boolOrEmptySchema", "valid", "overrideAllErrors", "data", "cxt", "_jsonTypes", "jsonTypes", "isJSONType", "x", "exports", "getRules", "groups", "schemaHasRulesForType", "schema", "self", "type", "group", "shouldUseGroup", "exports", "rule", "shouldUseRule", "_a", "kwd", "rules_1", "applicability_1", "errors_1", "codegen_1", "util_1", "DataType", "exports", "getSchemaTypes", "schema", "types", "getJSONTypes", "ts", "coerceAndCheckDataType", "it", "gen", "data", "opts", "coerceTo", "coerceToTypes", "checkTypes", "wrongType", "checkDataTypes", "coerceData", "reportTypeError", "COERCIBLE", "coerceTypes", "t", "dataType", "coerced", "coerceSpecificType", "assignParentData", "parentData", "parentDataProperty", "expr", "checkDataType", "strictNums", "correct", "EQ", "cond", "numCond", "_cond", "dataTypes", "notObj", "typeError", "schemaValue", "cxt", "getTypeErrorContext", "schemaCode", "codegen_1", "util_1", "assignDefaults", "it", "ty", "properties", "items", "key", "assignDefault", "sch", "i", "exports", "prop", "defaultValue", "gen", "compositeRule", "data", "opts", "childData", "condition", "codegen_1", "util_1", "names_1", "util_2", "checkReportMissingProp", "cxt", "prop", "gen", "data", "it", "noPropertyInData", "exports", "checkMissingProp", "opts", "properties", "missing", "reportMissingProp", "hasPropFunc", "isOwnProperty", "property", "propertyInData", "ownProperties", "cond", "allSchemaProperties", "schemaMap", "p", "schemaProperties", "callValidateCode", "schemaCode", "topSchemaRef", "schemaPath", "errorPath", "func", "context", "passSchema", "dataAndSchema", "valCxt", "args", "newRegExp", "usePattern", "pattern", "u", "regExp", "rx", "validateArray", "keyword", "valid", "validArr", "validateItems", "notValid", "len", "i", "validateUnion", "schema", "sch", "schValid", "_sch", "schCxt", "codegen_1", "names_1", "code_1", "errors_1", "macroKeywordCode", "cxt", "def", "gen", "keyword", "schema", "parentSchema", "it", "macroSchema", "schemaRef", "useKeyword", "valid", "exports", "funcKeywordCode", "$data", "checkAsyncKeyword", "validate", "validateRef", "validateKeyword", "_a", "assignValid", "modifyData", "reportErrs", "ruleErrs", "validateAsync", "validateSync", "addErrs", "e", "validateErrs", "_await", "passCxt", "passSchema", "errors", "data", "errs", "schemaEnv", "result", "validSchemaType", "schemaType", "allowUndefined", "st", "validateKeywordUsage", "opts", "self", "errSchemaPath", "deps", "kwd", "msg", "codegen_1", "util_1", "getSubschema", "it", "keyword", "schemaProp", "schema", "schemaPath", "errSchemaPath", "topSchemaRef", "sch", "exports", "extendSubschemaData", "subschema", "dataProp", "dpType", "data", "dataTypes", "propertyName", "gen", "errorPath", "dataPathArr", "opts", "nextData", "dataContextProps", "_nextData", "extendSubschemaMode", "jtdDiscriminator", "jtdMetadata", "compositeRule", "createErrors", "allErrors", "require_fast_deep_equal", "__commonJSMin", "exports", "module", "init_shim", "equal", "a", "b", "length", "keys", "key", "require_json_schema_traverse", "__commonJSMin", "exports", "module", "init_shim", "traverse", "schema", "opts", "cb", "pre", "post", "_traverse", "jsonPtr", "rootSchema", "parentJsonPtr", "parentKeyword", "parentSchema", "keyIndex", "key", "sch", "i", "prop", "escapeJsonPtr", "str", "util_1", "equal", "traverse", "SIMPLE_INLINED", "inlineRef", "schema", "limit", "hasRef", "countKeys", "exports", "REF_KEYWORDS", "key", "sch", "count", "getFullPath", "resolver", "id", "normalize", "normalizeId", "p", "_getFullPath", "TRAILING_SLASH_HASH", "resolveUrl", "baseId", "ANCHOR", "getSchemaRefs", "schemaId", "uriResolver", "schId", "baseIds", "pathPrefix", "localRefs", "schemaRefs", "jsonPtr", "_", "parentJsonPtr", "fullPath", "addRef", "addAnchor", "ref", "_resolve", "ambiguos", "schOrRef", "checkAmbiguosRef", "anchor", "sch1", "sch2", "boolSchema_1", "dataType_1", "applicability_1", "dataType_2", "defaults_1", "keyword_1", "subschema_1", "codegen_1", "names_1", "resolve_1", "util_1", "errors_1", "validateFunctionCode", "it", "isSchemaObj", "checkKeywords", "schemaCxtHasRules", "topSchemaObjCode", "validateFunction", "exports", "gen", "validateName", "schema", "schemaEnv", "opts", "body", "funcSourceUrl", "destructureValCxtES5", "destructureValCxt", "commentKeyword", "checkNoDefault", "resetEvaluated", "typeAndKeywords", "returnResults", "schId", "subschemaCode", "valid", "subSchemaObjCode", "self", "key", "updateContext", "checkAsyncSchema", "errsCount", "checkRefsAndKeywords", "schemaKeywords", "types", "checkedTypes", "errSchemaPath", "msg", "schemaPath", "rootName", "ValidationError", "assignEvaluated", "evaluated", "props", "items", "typeErrors", "data", "allErrors", "RULES", "keywordCode", "checkStrictTypes", "group", "groupKeywords", "iterateKeywords", "useDefaults", "rule", "checkContextTypes", "checkMultipleTypes", "checkKeywordTypes", "t", "includesType", "strictTypesError", "narrowSchemaTypes", "ts", "rules", "keyword", "type", "hasApplicableType", "schTs", "kwdT", "withTypes", "KeywordCxt", "def", "getData", "condition", "successAction", "failAction", "schemaCode", "append", "errorParams", "errorPaths", "cond", "obj", "assign", "codeBlock", "$dataValid", "schemaType", "wrong$DataType", "invalid$DataSchema", "st", "validateSchemaRef", "appl", "subschema", "nextContext", "schemaCxt", "toName", "ruleType", "cxt", "JSON_POINTER", "RELATIVE_JSON_POINTER", "$data", "dataLevel", "dataNames", "dataPathArr", "jsonPointer", "matches", "up", "errorMsg", "expr", "segments", "segment", "pointerType", "ValidationError", "errors", "exports", "resolve_1", "MissingRefError", "resolver", "baseId", "ref", "msg", "exports", "codegen_1", "validation_error_1", "names_1", "resolve_1", "util_1", "validate_1", "SchemaEnv", "env", "schema", "_a", "exports", "compileSchema", "sch", "_sch", "getCompilingSchema", "rootId", "es5", "lines", "ownProperties", "gen", "_ValidationError", "validateName", "schemaCxt", "sourceCode", "validateCode", "validate", "props", "items", "e", "resolveRef", "root", "baseId", "ref", "schOrFunc", "resolve", "schemaId", "inlineOrCompile", "schEnv", "sameSchemaEnv", "s1", "s2", "resolveSchema", "p", "refPath", "getJsonPointer", "id", "schOrRef", "schId", "PREVENT_SCOPE_CHANGE", "parsedRef", "part", "partSchema", "$ref", "require_data", "__commonJSMin", "exports", "module", "merge", "sets", "_len", "_key", "length", "slice", "xl", "x", "join", "subexp", "str", "typeOf", "o", "undefined", "Object", "prototype", "toString", "call", "split", "pop", "shift", "toLowerCase", "toUpperCase", "toArray", "obj", "Array", "setInterval", "assign", "target", "source", "key", "buildExps", "isIRI", "ALPHA$$", "CR$", "DIGIT$$", "DQUOTE$$", "HEXDIG$$", "SP$$", "PCT_ENCODED$", "SUB_DELIMS$$", "RESERVED$$", "GEN_DELIMS$$", "UCSCHAR$$", "SCHEME$", "USERINFO$", "UNRESERVED$$", "DEC_OCTET$", "DEC_OCTET_RELAXED$", "H16$", "LS32$", "IPV4ADDRESS$", "IPV6ADDRESS1$", "IPV6ADDRESS2$", "IPV6ADDRESS3$", "IPV6ADDRESS4$", "IPV6ADDRESS5$", "IPV6ADDRESS6$", "IPV6ADDRESS7$", "IPV6ADDRESS8$", "IPV6ADDRESS9$", "ZONEID$", "IPV6ADDRESS$", "IP_LITERAL$", "IPV6ADDRZ_RELAXED$", "IPVFUTURE$", "HOST$", "REG_NAME$", "PORT$", "AUTHORITY$", "PCHAR$", "SEGMENT$", "SEGMENT_NZ$", "SEGMENT_NZ_NC$", "PATH_ABEMPTY$", "PATH_ABSOLUTE$", "PATH$", "PATH_NOSCHEME$", "PATH_ROOTLESS$", "PATH_EMPTY$", "QUERY$", "IPRIVATE$$", "FRAGMENT$", "HIER_PART$", "URI$", "RELATIVE_PART$", "RELATIVE$", "URI_REFERENCE$", "ABSOLUTE_URI$", "GENERIC_REF$", "RELATIVE_REF$", "ABSOLUTE_REF$", "SAMEDOC_REF$", "AUTHORITY_REF$", "RegExp", "URI_PROTOCOL", "IRI_PROTOCOL", "maxInt", "base", "tMin", "tMax", "skew", "damp", "initialBias", "initialN", "delimiter", "regexPunycode", "regexNonASCII", "regexSeparators", "errors", "baseMinusTMin", "floor", "Math", "stringFromCharCode", "String", "fromCharCode", "error", "type", "RangeError", "map", "array", "fn", "result", "mapDomain", "string", "parts", "replace", "labels", "encoded", "ucs2decode", "output", "counter", "value", "charCodeAt", "extra", "push", "ucs2encode", "fromCodePoint", "toConsumableArray", "basicToDigit", "codePoint", "digitToBasic", "digit", "flag", "adapt", "delta", "numPoints", "firstTime", "k", "decode", "input", "inputLength", "i", "n", "bias", "basic", "lastIndexOf", "j", "index", "oldi", "w", "t", "baseMinusT", "out", "splice", "encode", "_step", "_iteratorNormalCompletion", "_iterator", "currentValue", "basicLength", "handledCPCount", "m", "_step2", "_iteratorNormalCompletion2", "_iterator2", "handledCPCountPlusOne", "_step3", "_iteratorNormalCompletion3", "_iterator3", "q", "qMinusT", "toUnicode", "test", "toASCII", "punycode", "SCHEMES", "pctEncChar", "chr", "c", "e", "pctDecChars", "newStr", "il", "parseInt", "substr", "c2", "c3", "_normalizeComponentEncoding", "components", "protocol", "decodeUnreserved", "decStr", "match", "UNRESERVED", "scheme", "PCT_ENCODED", "NOT_SCHEME", "userinfo", "NOT_USERINFO", "host", "NOT_HOST", "path", "NOT_PATH", "NOT_PATH_NOSCHEME", "query", "NOT_QUERY", "fragment", "NOT_FRAGMENT", "_stripLeadingZeros", "_normalizeIPv4", "matches", "IPV4ADDRESS", "address", "_matches", "_normalizeIPv6", "IPV6ADDRESS", "_matches2", "zone", "reverse", "last", "_address$toLowerCase$2", "first", "firstFields", "lastFields", "isLastFieldIPv4Address", "fieldCount", "lastFieldsStart", "fields", "allZeroFields", "reduce", "acc", "field", "lastLongest", "longestZeroFields", "sort", "a", "b", "newHost", "newFirst", "newLast", "URI_PARSE", "NO_MATCH_IS_UNDEFINED", "parse", "uriString", "options", "iri", "reference", "port", "isNaN", "indexOf", "schemeHandler", "unicodeSupport", "domainHost", "_recomposeAuthority", "uriTokens", "_", "$1", "$2", "RDS1", "RDS2", "RDS3", "RDS5", "removeDotSegments", "im", "s", "Error", "serialize", "authority", "charAt", "absolutePath", "resolveComponents", "relative", "skipNormalization", "tolerant", "resolve", "baseURI", "relativeURI", "schemelessOptions", "normalize", "uri", "equal", "uriA", "uriB", "escapeComponent", "ESCAPE", "unescapeComponent", "handler", "secure", "http", "isSecure", "wsComponents", "resourceName", "_wsComponents$resourc2", "ws", "O", "ATEXT$$", "QTEXT$$", "VCHAR$$", "SOME_DELIMS$$", "NOT_LOCAL_PART", "NOT_HFNAME", "NOT_HFVALUE", "mailtoComponents", "to", "unknownHeaders", "headers", "hfields", "hfield", "toAddrs", "subject", "body", "addr", "toAddr", "atIdx", "localPart", "domain", "name", "URN_PARSE", "urnComponents", "nid", "nss", "urnScheme", "uriComponents", "UUID", "uuidComponents", "uuid", "https", "wss", "mailto", "urn", "uri", "exports", "validate_1", "exports", "codegen_1", "validation_error_1", "ref_error_1", "rules_1", "compile_1", "codegen_2", "resolve_1", "dataType_1", "util_1", "$dataRefSchema", "uri_1", "defaultRegExp", "str", "flags", "META_IGNORE_OPTIONS", "EXT_SCOPE_NAMES", "removedOptions", "deprecatedOptions", "MAX_EXPRESSION", "requiredOptions", "o", "s", "_optz", "_a", "optimize", "regExp", "_c", "_b", "uriResolver", "_d", "_f", "_e", "_h", "_g", "_k", "_j", "_m", "_l", "_p", "_o", "_q", "_r", "_s", "_t", "_u", "_v", "_w", "_x", "_y", "_z", "_0", "Ajv", "opts", "es5", "lines", "getLogger", "formatOpt", "checkOptions", "getMetaSchemaOptions", "addInitialFormats", "addInitialKeywords", "addInitialSchemas", "$data", "meta", "schemaId", "_dataRefSchema", "schemaKeyRef", "data", "v", "valid", "schema", "_meta", "sch", "loadSchema", "runCompileAsync", "_schema", "loadMetaSchema", "_compileAsync", "$ref", "e", "checkLoaded", "loadMissingSchema", "ref", "missingRef", "_loadSchema", "p", "key", "_validateSchema", "id", "throwOrLogError", "$schema", "message", "keyRef", "getSchEnv", "root", "cacheKey", "definitions", "def", "kwdOrDef", "keyword", "checkKeyword", "kwd", "addRule", "keywordMetaschema", "definition", "k", "t", "rule", "RULES", "group", "name", "format", "errors", "separator", "dataVar", "text", "msg", "metaSchema", "keywordsJsonPointers", "rules", "jsonPointer", "segments", "keywords", "seg", "schemaOrData", "schemas", "regex", "baseId", "validateSchema", "addSchema", "localRefs", "currentOpts", "checkOpts", "options", "log", "opt", "optsSchemas", "defs", "metaOpts", "noLogs", "logger", "KEYWORD_NAME", "dataType", "post", "ruleGroup", "addBeforeRule", "before", "i", "_rule", "$dataRef", "def", "exports", "ref_error_1", "code_1", "codegen_1", "names_1", "compile_1", "util_1", "def", "cxt", "gen", "$ref", "it", "baseId", "env", "validateName", "opts", "self", "root", "callRootRef", "schOrEnv", "callValidate", "inlineRefSchema", "callRef", "rootName", "sch", "getValidate", "schName", "valid", "schCxt", "exports", "v", "$async", "allErrors", "passCxt", "callAsyncRef", "callSyncRef", "addEvaluatedFrom", "e", "addErrorsFrom", "source", "errs", "schEvaluated", "_a", "props", "items", "id_1", "ref_1", "core", "exports", "codegen_1", "ops", "KWDs", "error", "keyword", "schemaCode", "def", "cxt", "data", "exports", "codegen_1", "error", "schemaCode", "def", "cxt", "gen", "data", "it", "prec", "res", "invalid", "exports", "ucs2length", "str", "len", "length", "pos", "value", "exports", "codegen_1", "util_1", "ucs2length_1", "error", "keyword", "schemaCode", "comp", "def", "cxt", "data", "it", "op", "len", "exports", "code_1", "codegen_1", "error", "schemaCode", "def", "cxt", "data", "$data", "schema", "it", "u", "regExp", "exports", "codegen_1", "error", "keyword", "schemaCode", "comp", "def", "cxt", "data", "op", "exports", "code_1", "codegen_1", "util_1", "error", "missingProperty", "def", "cxt", "gen", "schema", "schemaCode", "data", "$data", "it", "opts", "useLoop", "allErrorsMode", "exitOnErrorMode", "props", "definedProperties", "requiredKey", "schemaPath", "msg", "loopAllRequired", "prop", "missing", "valid", "loopUntilMissing", "exports", "codegen_1", "error", "keyword", "schemaCode", "comp", "def", "cxt", "data", "op", "exports", "equal", "exports", "dataType_1", "codegen_1", "util_1", "equal_1", "error", "i", "j", "def", "cxt", "gen", "data", "$data", "schema", "parentSchema", "schemaCode", "it", "valid", "itemTypes", "validateUniqueItems", "canOptimize", "loopN", "loopN2", "t", "item", "wrongType", "indices", "eql", "outer", "exports", "codegen_1", "util_1", "equal_1", "error", "schemaCode", "def", "cxt", "gen", "data", "$data", "schema", "exports", "codegen_1", "util_1", "equal_1", "error", "schemaCode", "def", "cxt", "gen", "data", "$data", "schema", "it", "useLoop", "eql", "getEql", "valid", "loopEnum", "vSchema", "_x", "i", "equalCode", "v", "sch", "exports", "limitNumber_1", "multipleOf_1", "limitLength_1", "pattern_1", "limitProperties_1", "required_1", "limitItems_1", "uniqueItems_1", "const_1", "enum_1", "validation", "exports", "codegen_1", "util_1", "error", "len", "def", "cxt", "parentSchema", "it", "items", "validateAdditionalItems", "gen", "schema", "data", "keyword", "valid", "validateItems", "i", "exports", "codegen_1", "util_1", "code_1", "def", "cxt", "schema", "it", "validateTuple", "extraItems", "schArr", "gen", "parentSchema", "data", "keyword", "checkStrictTuple", "valid", "len", "sch", "i", "opts", "errSchemaPath", "l", "fullTuple", "msg", "exports", "items_1", "def", "cxt", "exports", "codegen_1", "util_1", "code_1", "additionalItems_1", "error", "len", "def", "cxt", "schema", "parentSchema", "it", "prefixItems", "exports", "codegen_1", "util_1", "error", "min", "max", "def", "cxt", "gen", "schema", "parentSchema", "data", "it", "minContains", "maxContains", "len", "cond", "valid", "validateItems", "validateItemsWithCount", "schValid", "count", "checkLimits", "_valid", "block", "i", "exports", "codegen_1", "util_1", "code_1", "exports", "property", "depsCount", "deps", "property_ies", "missingProperty", "def", "cxt", "propDeps", "schDeps", "splitDependencies", "validatePropertyDeps", "validateSchemaDeps", "schema", "propertyDeps", "schemaDeps", "key", "gen", "data", "it", "missing", "prop", "hasProperty", "depProp", "keyword", "valid", "schCxt", "codegen_1", "util_1", "error", "params", "def", "cxt", "gen", "schema", "data", "it", "valid", "key", "exports", "code_1", "codegen_1", "names_1", "util_1", "error", "params", "def", "cxt", "gen", "schema", "parentSchema", "data", "errsCount", "it", "allErrors", "opts", "props", "patProps", "checkAdditionalProperties", "key", "additionalPropertyCode", "isAdditional", "definedProp", "propsSchema", "p", "deleteAdditional", "valid", "applyAdditionalSchema", "errors", "subschema", "exports", "validate_1", "code_1", "util_1", "additionalProperties_1", "def", "cxt", "gen", "schema", "parentSchema", "data", "it", "allProps", "prop", "properties", "p", "valid", "hasDefault", "applyPropertySchema", "exports", "code_1", "codegen_1", "util_1", "util_2", "def", "cxt", "gen", "schema", "data", "parentSchema", "it", "opts", "patterns", "alwaysValidPatterns", "p", "checkProperties", "valid", "props", "validatePatternProperties", "pat", "checkMatchingProperties", "validateProperties", "prop", "key", "alwaysValid", "exports", "util_1", "def", "cxt", "gen", "schema", "it", "valid", "exports", "code_1", "def", "exports", "codegen_1", "util_1", "error", "params", "def", "cxt", "gen", "schema", "parentSchema", "it", "schArr", "valid", "passing", "schValid", "validateOneOf", "sch", "i", "schCxt", "exports", "util_1", "def", "cxt", "gen", "schema", "it", "valid", "sch", "i", "schCxt", "exports", "codegen_1", "util_1", "error", "params", "def", "cxt", "gen", "parentSchema", "it", "hasThen", "hasSchema", "hasElse", "valid", "schValid", "validateIf", "ifClause", "validateClause", "schCxt", "keyword", "schema", "exports", "util_1", "def", "keyword", "parentSchema", "it", "exports", "additionalItems_1", "prefixItems_1", "items_1", "items2020_1", "contains_1", "dependencies_1", "propertyNames_1", "additionalProperties_1", "properties_1", "patternProperties_1", "not_1", "anyOf_1", "oneOf_1", "allOf_1", "if_1", "thenElse_1", "getApplicator", "draft2020", "applicator", "exports", "codegen_1", "names_1", "compile_1", "ref_1", "def", "cxt", "dynamicAnchor", "anchor", "gen", "it", "v", "validate", "_getValidate", "exports", "schemaEnv", "schema", "self", "root", "baseId", "localRefs", "meta", "schemaId", "sch", "codegen_1", "names_1", "ref_1", "def", "cxt", "dynamicRef", "ref", "gen", "keyword", "it", "anchor", "_dynamicRef", "valid", "v", "_callRef", "validate", "exports", "dynamicAnchor_1", "util_1", "def", "cxt", "exports", "dynamicRef_1", "def", "cxt", "exports", "dynamicAnchor_1", "dynamicRef_1", "recursiveAnchor_1", "recursiveRef_1", "dynamic", "exports", "dependencies_1", "def", "cxt", "exports", "dependencies_1", "def", "cxt", "exports", "util_1", "def", "keyword", "parentSchema", "it", "exports", "dependentRequired_1", "dependentSchemas_1", "limitContains_1", "next", "exports", "codegen_1", "util_1", "names_1", "error", "params", "def", "cxt", "gen", "schema", "data", "errsCount", "it", "allErrors", "props", "key", "unevaluatedDynamic", "unevaluatedPropCode", "unevaluatedStatic", "valid", "evaluatedProps", "ps", "p", "exports", "codegen_1", "util_1", "error", "len", "def", "cxt", "gen", "schema", "data", "it", "items", "valid", "validateItems", "from", "i", "exports", "unevaluatedProperties_1", "unevaluatedItems_1", "unevaluated", "exports", "codegen_1", "error", "schemaCode", "def", "cxt", "ruleType", "gen", "data", "$data", "schema", "it", "opts", "errSchemaPath", "schemaEnv", "self", "validate$DataFormat", "validateFormat", "fmts", "fDef", "fType", "format", "unknownFmt", "invalidFmt", "callFormat", "validData", "formatDef", "unknownFormat", "fmtType", "fmtRef", "getFormat", "validCondition", "unknownMsg", "fmtDef", "code", "fmt", "exports", "format_1", "format", "exports", "exports", "core_1", "validation_1", "applicator_1", "dynamic_1", "next_1", "unevaluated_1", "format_1", "metadata_1", "draft2020Vocabularies", "exports", "DiscrError", "exports", "codegen_1", "types_1", "compile_1", "util_1", "error", "discrError", "tagName", "tag", "def", "cxt", "gen", "data", "schema", "parentSchema", "it", "oneOf", "valid", "validateMapping", "mapping", "getMapping", "tagValue", "applyTagSchema", "schemaProp", "_valid", "schCxt", "oneOfMapping", "topRequired", "hasRequired", "tagRequired", "i", "sch", "propSch", "_a", "addMappings", "required", "addMapping", "exports", "require_schema", "__commonJSMin", "exports", "module", "require_applicator", "__commonJSMin", "exports", "module", "require_unevaluated", "__commonJSMin", "exports", "module", "require_content", "__commonJSMin", "exports", "module", "require_core", "__commonJSMin", "exports", "module", "require_format_annotation", "__commonJSMin", "exports", "module", "require_meta_data", "__commonJSMin", "exports", "module", "require_validation", "__commonJSMin", "exports", "module", "metaSchema", "applicator", "unevaluated", "content", "core", "format", "metadata", "validation", "META_SUPPORT_DATA", "addMetaSchema2020", "$data", "with$data", "sch", "ajv", "exports", "core_1", "draft2020_1", "discriminator_1", "json_schema_2020_12_1", "META_SCHEMA_ID", "Ajv2020", "opts", "v", "$data", "meta", "module", "exports", "validate_1", "codegen_1", "validation_error_1", "ref_error_1", "require_ttlcache", "__commonJSMin", "exports", "module", "init_shim", "perf", "now", "isPosInt", "n", "isPosIntOrInf", "TTLCache", "_TTLCache", "max", "ttl", "updateAgeOnGet", "checkAgeOnGet", "noUpdateTTL", "dispose", "noDisposeOnSet", "expiration", "t", "exp", "process", "entries", "key", "val", "current", "k", "oldValue", "_", "__", "value", "keys", "s", "require_level_supports", "__commonJSMin", "exports", "init_shim", "manifests", "manifest", "acc", "m", "require_module_error", "__commonJSMin", "exports", "module", "init_shim", "message", "options", "require_text_endec", "__commonJSMin", "exports", "module", "init_shim", "lazy", "require_encoding", "__commonJSMin", "exports", "init_shim", "ModuleError", "formats", "Encoding", "options", "require_formats", "__commonJSMin", "exports", "init_shim", "Buffer", "Encoding", "textEndec", "BufferFormat", "options", "ViewFormat", "data", "view", "UTF8Format", "textEncoder", "textDecoder", "require_encodings", "__commonJSMin", "exports", "init_shim", "Buffer", "textEncoder", "textDecoder", "BufferFormat", "ViewFormat", "UTF8Format", "identity", "v", "data", "buffer", "require_level_transcoder", "__commonJSMin", "exports", "init_shim", "ModuleError", "encodings", "Encoding", "BufferFormat", "ViewFormat", "UTF8Format", "kFormats", "kEncodings", "validFormats", "Transcoder", "formats", "f", "k", "err", "encoding", "resolved", "lookup", "from", "name", "format", "options", "maybeType", "anonymousCount", "detectFormat", "aliases", "require_next_tick_browser", "__commonJSMin", "exports", "module", "init_shim", "fn", "require_catering", "__commonJSMin", "exports", "init_shim", "nextTick", "callback", "symbol", "promise", "resolve", "reject", "err", "res", "require_common", "__commonJSMin", "exports", "init_shim", "options", "callback", "def", "require_abstract_iterator", "__commonJSMin", "exports", "init_shim", "fromCallback", "ModuleError", "getOptions", "getCallback", "kPromise", "kCallback", "kWorking", "kHandleOne", "kHandleMany", "kAutoClose", "kFinishWork", "kReturnMany", "kClosing", "kHandleClose", "kClosed", "kCloseCallbacks", "kKeyEncoding", "kValueEncoding", "kAbortOnClose", "kLegacy", "kKeys", "kValues", "kLimit", "kCount", "emptyOptions", "noop", "warnedEnd", "CommonIterator", "db", "options", "legacy", "hint", "callback", "promise", "resolve", "reject", "err", "key", "value", "size", "acc", "onnext", "count", "nextv", "onnextv", "items", "cb", "target", "keyEncoding", "keyFormat", "mapped", "callbacks", "item", "AbstractIterator", "IteratorDecodeError", "entries", "entry", "AbstractKeyIterator", "keys", "AbstractValueIterator", "values", "subject", "cause", "k", "require_default_kv_iterator", "__commonJSMin", "exports", "init_shim", "AbstractKeyIterator", "AbstractValueIterator", "kIterator", "kCallback", "kHandleOne", "kHandleMany", "DefaultKeyIterator", "db", "options", "DefaultValueIterator", "Iterator", "keys", "mapEntry", "entry", "callback", "err", "key", "value", "size", "entries", "target", "require_deferred_iterator", "__commonJSMin", "exports", "init_shim", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "ModuleError", "kNut", "kUndefer", "kFactory", "DeferredIterator", "db", "options", "DeferredKeyIterator", "DeferredValueIterator", "Iterator", "callback", "size", "target", "require_abstract_chained_batch", "__commonJSMin", "exports", "init_shim", "fromCallback", "ModuleError", "getCallback", "getOptions", "kPromise", "kStatus", "kOperations", "kFinishClose", "kCloseCallbacks", "AbstractChainedBatch", "db", "hint", "key", "value", "options", "err", "original", "keyEncoding", "valueEncoding", "keyFormat", "mappedKey", "mappedValue", "callback", "callbacks", "cb", "require_default_chained_batch", "__commonJSMin", "exports", "init_shim", "AbstractChainedBatch", "ModuleError", "kEncoded", "DefaultChainedBatch", "db", "key", "value", "options", "callback", "require_range_options", "__commonJSMin", "exports", "module", "init_shim", "ModuleError", "hasOwnProperty", "rangeOptions", "options", "keyEncoding", "result", "k", "require_queue_microtask", "__commonJSMin", "exports", "module", "init_shim", "promise", "cb", "err", "require_next_tick_browser", "__commonJSMin", "exports", "module", "init_shim", "queueMicrotask", "fn", "args", "require_abstract_sublevel_iterator", "__commonJSMin", "exports", "init_shim", "AbstractIterator", "AbstractKeyIterator", "AbstractValueIterator", "kUnfix", "kIterator", "kHandleOne", "kHandleMany", "kCallback", "AbstractSublevelIterator", "db", "options", "iterator", "unfix", "err", "key", "value", "callback", "entries", "entry", "AbstractSublevelKeyIterator", "keys", "AbstractSublevelValueIterator", "Iterator", "size", "target", "require_abstract_sublevel", "__commonJSMin", "exports", "module", "init_shim", "ModuleError", "Buffer", "AbstractSublevelIterator", "AbstractSublevelKeyIterator", "AbstractSublevelValueIterator", "kPrefix", "kUpperBound", "kPrefixRange", "kParent", "kUnfix", "textEncoder", "defaults", "AbstractLevel", "AbstractSublevel", "options", "db", "name", "separator", "manifest", "forward", "trim", "reserved", "parent", "x", "mergeManifests", "prefix", "upperBound", "MultiFormat", "Unfixer", "key", "keyFormat", "view", "result", "buffer", "range", "callback", "value", "keys", "operations", "iterator", "unfix", "supportsEncoding", "encoding", "prefixLength", "str", "char", "start", "end", "require_abstract_level", "__commonJSMin", "exports", "init_shim", "supports", "Transcoder", "EventEmitter", "fromCallback", "ModuleError", "AbstractIterator", "DefaultKeyIterator", "DefaultValueIterator", "DeferredIterator", "DeferredKeyIterator", "DeferredValueIterator", "DefaultChainedBatch", "getCallback", "getOptions", "rangeOptions", "kPromise", "kLanded", "kResources", "kCloseResources", "kOperations", "kUndefer", "kDeferOpen", "kOptions", "kStatus", "kDefaultOptions", "kTranscoder", "kKeyEncoding", "kValueEncoding", "noop", "AbstractLevel", "manifest", "options", "keyEncoding", "valueEncoding", "passive", "forward", "formats", "encoding", "callback", "maybeOpened", "err", "maybeClosed", "cancel", "pending", "sync", "next", "resource", "key", "maybeError", "keyFormat", "valueFormat", "value", "keys", "mappedKeys", "i", "values", "mappedKey", "mappedValue", "operations", "mapped", "ke", "ve", "op", "db", "valueErr", "name", "AbstractSublevel", "original", "fn", "k", "require_abstract_level", "__commonJSMin", "exports", "init_shim", "require_run_parallel_limit", "__commonJSMin", "exports", "module", "init_shim", "runParallelLimit", "queueMicrotask", "tasks", "limit", "cb", "results", "len", "pending", "keys", "isErrored", "isSync", "next", "done", "err", "end", "each", "i", "result", "key", "task", "require_key_range", "__commonJSMin", "exports", "module", "init_shim", "options", "lower", "upper", "lowerExclusive", "upperExclusive", "require_deserialize", "__commonJSMin", "exports", "module", "init_shim", "textEncoder", "data", "require_iterator", "__commonJSMin", "exports", "init_shim", "AbstractIterator", "createKeyRange", "deserialize", "kCache", "kFinished", "kOptions", "kCurrentOptions", "kPosition", "kLocation", "kFirst", "emptyOptions", "Iterator", "db", "location", "options", "size", "callback", "keyRange", "transaction", "store", "entries", "method", "ev", "cursor", "key", "value", "maybeCommit", "keys", "values", "complete", "length", "i", "err", "cache", "target", "require_clear", "__commonJSMin", "exports", "module", "init_shim", "db", "location", "keyRange", "options", "callback", "transaction", "store", "count", "method", "direction", "ev", "cursor", "require_browser_level", "__commonJSMin", "exports", "init_shim", "AbstractLevel", "ModuleError", "parallel", "fromCallback", "Iterator", "deserialize", "clear", "createKeyRange", "DEFAULT_PREFIX", "kIDB", "kNamePrefix", "kLocation", "kVersion", "kStore", "kOnComplete", "kPromise", "BrowserLevel", "location", "options", "_", "prefix", "version", "forward", "callback", "req", "ev", "db", "mode", "request", "transaction", "key", "store", "err", "value", "keys", "tasks", "next", "operations", "index", "error", "loop", "op", "keyRange", "require_browser", "__commonJSMin", "exports", "init_shim", "require_primordials", "__commonJSMin", "exports", "module", "init_shim", "self", "el", "sep", "fn", "start", "end", "thisArgs", "args", "instance", "props", "name", "prop", "obj", "target", "proto", "thenFn", "catchFn", "err", "value", "buf", "len", "require_util", "__commonJSMin", "exports", "module", "init_shim", "bufferModule", "AsyncFunction", "Blob", "isBlob", "b", "AggregateError", "errors", "message", "i", "callback", "called", "args", "resolve", "reject", "res", "rej", "fn", "err", "format", "_unused", "type", "replacement", "value", "arr", "require_errors", "__commonJSMin", "exports", "module", "init_shim", "format", "inspect", "CustomAggregateError", "AggregateError", "kIsNodeError", "kTypes", "classRegExp", "nodeInternalPrefix", "codes", "assert", "value", "message", "addNumericalSeparator", "val", "res", "i", "start", "getMessage", "key", "msg", "args", "expectedLength", "E", "code", "Base", "NodeError", "hideStackFrames", "fn", "hidden", "aggregateTwoErrors", "innerError", "outerError", "err", "AbortError", "options", "name", "expected", "actual", "types", "instances", "other", "pos", "last", "_actual$constructor", "inspected", "reason", "input", "_value$constructor", "type", "len", "a", "str", "range", "received", "require_validators", "__commonJSMin", "exports", "module", "init_shim", "ArrayIsArray", "ArrayPrototypeIncludes", "ArrayPrototypeJoin", "ArrayPrototypeMap", "NumberIsInteger", "NumberIsNaN", "NumberMAX_SAFE_INTEGER", "NumberMIN_SAFE_INTEGER", "NumberParseInt", "ObjectPrototypeHasOwnProperty", "RegExpPrototypeExec", "String", "StringPrototypeToUpperCase", "StringPrototypeTrim", "hideStackFrames", "ERR_SOCKET_BAD_PORT", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_ARG_VALUE", "ERR_OUT_OF_RANGE", "ERR_UNKNOWN_SIGNAL", "normalizeEncoding", "isAsyncFunction", "isArrayBufferView", "signals", "isInt32", "value", "isUint32", "octalReg", "modeDesc", "parseFileMode", "name", "def", "validateUint32", "validateInteger", "min", "max", "validateInt32", "positive", "validateString", "validateNumber", "validateOneOf", "oneOf", "reason", "v", "validateBoolean", "getOwnPropertyValueOrDefault", "options", "key", "defaultValue", "validateObject", "allowArray", "allowFunction", "validateDictionary", "validateArray", "minLength", "validateStringArray", "i", "validateBooleanArray", "validateSignalName", "signal", "validateBuffer", "buffer", "validateEncoding", "data", "encoding", "normalizedEncoding", "length", "validatePort", "port", "allowZero", "validateAbortSignal", "validateFunction", "validatePlainFunction", "validateUndefined", "validateUnion", "union", "linkValueRegExp", "validateLinkHeaderFormat", "validateLinkHeaderValue", "hints", "hintsLength", "result", "link", "require_utils", "__commonJSMin", "exports", "module", "init_shim", "Symbol", "SymbolAsyncIterator", "SymbolIterator", "SymbolFor", "kDestroyed", "kIsErrored", "kIsReadable", "kIsDisturbed", "kIsClosedPromise", "kControllerErrorFunction", "isReadableNodeStream", "obj", "strict", "_obj$_readableState", "isWritableNodeStream", "_obj$_writableState", "isDuplexNodeStream", "isNodeStream", "isReadableStream", "isWritableStream", "isTransformStream", "isWebStream", "isIterable", "isAsync", "isDestroyed", "stream", "wState", "rState", "state", "isWritableEnded", "isWritableFinished", "isReadableEnded", "isReadableFinished", "isReadable", "isWritable", "isFinished", "opts", "isWritableErrored", "_stream$_writableStat", "_stream$_writableStat2", "isReadableErrored", "_stream$_readableStat", "_stream$_readableStat2", "isClosed", "isOutgoingMessage", "isServerResponse", "isServerRequest", "_stream$req", "willEmitClose", "isDisturbed", "_stream$kIsDisturbed", "isErrored", "_ref", "_ref2", "_ref3", "_ref4", "_ref5", "_stream$kIsErrored", "_stream$_readableStat3", "_stream$_writableStat3", "_stream$_readableStat4", "_stream$_writableStat4", "require_end_of_stream", "__commonJSMin", "exports", "module", "init_shim", "process", "AbortError", "codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PREMATURE_CLOSE", "kEmptyObject", "once", "validateAbortSignal", "validateFunction", "validateObject", "validateBoolean", "Promise", "PromisePrototypeThen", "isClosed", "isReadable", "isReadableNodeStream", "isReadableStream", "isReadableFinished", "isReadableErrored", "isWritable", "isWritableNodeStream", "isWritableStream", "isWritableFinished", "isWritableErrored", "isNodeStream", "_willEmitClose", "kIsClosedPromise", "isRequest", "stream", "nop", "eos", "options", "callback", "_options$readable", "_options$writable", "eosWeb", "readable", "writable", "wState", "rState", "onlegacyfinish", "onfinish", "willEmitClose", "writableFinished", "readableFinished", "onend", "onerror", "err", "closed", "onclose", "errored", "onclosed", "onrequest", "cleanup", "abort", "endCallback", "originalCallback", "args", "isAborted", "resolverFn", "finished", "opts", "_opts", "autoCleanup", "resolve", "reject", "require_destroy", "__commonJSMin", "exports", "module", "init_shim", "process", "aggregateTwoErrors", "ERR_MULTIPLE_CALLBACK", "AbortError", "Symbol", "kDestroyed", "isDestroyed", "isFinished", "isServerRequest", "kDestroy", "kConstruct", "checkError", "err", "w", "destroy", "cb", "s", "_destroy", "er", "self", "called", "onDestroy", "r", "emitErrorCloseNT", "emitCloseNT", "emitErrorNT", "undestroy", "errorOrDestroy", "stream", "sync", "construct", "constructNT", "onConstruct", "emitConstructNT", "isRequest", "emitCloseLegacy", "emitErrorCloseLegacy", "destroyer", "require_legacy", "__commonJSMin", "exports", "module", "init_shim", "ArrayIsArray", "ObjectSetPrototypeOf", "EE", "Stream", "opts", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "prependListener", "emitter", "event", "fn", "require_add_abort_signal", "__commonJSMin", "exports", "module", "init_shim", "AbortError", "codes", "isNodeStream", "isWebStream", "kControllerErrorFunction", "eos", "ERR_INVALID_ARG_TYPE", "validateAbortSignal", "signal", "name", "stream", "onAbort", "require_buffer_list", "__commonJSMin", "exports", "module", "init_shim", "StringPrototypeSlice", "SymbolIterator", "TypedArrayPrototypeSet", "Uint8Array", "Buffer", "inspect", "v", "entry", "ret", "s", "p", "n", "hasStrings", "data", "slice", "c", "str", "retLen", "buf", "_", "options", "require_state", "__commonJSMin", "exports", "module", "init_shim", "MathFloor", "NumberIsInteger", "ERR_INVALID_ARG_VALUE", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getDefaultHighWaterMark", "objectMode", "getHighWaterMark", "state", "hwm", "name", "require_from", "__commonJSMin", "exports", "module", "init_shim", "process", "PromisePrototypeThen", "SymbolAsyncIterator", "SymbolIterator", "Buffer", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_NULL_VALUES", "from", "Readable", "iterable", "opts", "iterator", "isAsync", "readable", "reading", "next", "error", "cb", "close", "e", "hadError", "hasThrow", "value", "done", "res", "err", "require_readable", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayPrototypeIndexOf", "NumberIsInteger", "NumberIsNaN", "NumberParseInt", "ObjectDefineProperties", "ObjectKeys", "ObjectSetPrototypeOf", "Promise", "SafeSet", "SymbolAsyncIterator", "Symbol", "Readable", "ReadableState", "EE", "Stream", "prependListener", "Buffer", "addAbortSignal", "eos", "debug", "fn", "BufferList", "destroyImpl", "getHighWaterMark", "getDefaultHighWaterMark", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_OUT_OF_RANGE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "validateObject", "kPaused", "StringDecoder", "from", "nop", "errorOrDestroy", "options", "stream", "isDuplex", "maybeReadMore", "err", "cb", "chunk", "encoding", "readableAddChunk", "addToFront", "state", "onEofChunk", "addChunk", "emitReadable", "enc", "decoder", "buffer", "content", "data", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "pause", "pipeOnDrain", "er", "s", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "paused", "streamKeys", "j", "streamToAsyncIterator", "iter", "createAsyncIterator", "callback", "next", "resolve", "error", "r", "val", "value", "endReadableNT", "endWritableNT", "wState", "iterable", "opts", "webStreamsAdapters", "lazyWebStreams", "readableStream", "streamReadable", "_ref", "_src$readableObjectMo", "require_writable", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayPrototypeSlice", "Error", "FunctionPrototypeSymbolHasInstance", "ObjectDefineProperty", "ObjectDefineProperties", "ObjectSetPrototypeOf", "StringPrototypeToLowerCase", "Symbol", "SymbolHasInstance", "Writable", "WritableState", "EE", "Stream", "Buffer", "destroyImpl", "addAbortSignal", "getHighWaterMark", "getDefaultHighWaterMark", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_ALREADY_FINISHED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "kOnFinished", "options", "stream", "isDuplex", "noDecode", "onwrite", "resetBuffer", "state", "clearBuffer", "finishMaybe", "object", "_write", "chunk", "encoding", "cb", "err", "writeOrBuffer", "callback", "len", "ret", "doWrite", "writev", "onwriteError", "er", "errorBuffer", "sync", "afterWriteTick", "afterWrite", "count", "n", "_state$errored", "onfinishCallbacks", "_state$errored2", "buffered", "bufferedIndex", "objectMode", "bufferedLength", "i", "chunks", "needFinish", "callFinal", "called", "onFinish", "finish", "prefinish", "rState", "value", "w", "val", "wState", "destroy", "webStreamsAdapters", "lazyWebStreams", "writableStream", "streamWritable", "require_duplexify", "__commonJSMin", "exports", "module", "init_shim", "process", "bufferModule", "isReadable", "isWritable", "isIterable", "isNodeStream", "isReadableNodeStream", "isWritableNodeStream", "isDuplexNodeStream", "eos", "AbortError", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "destroyer", "Duplex", "Readable", "createDeferredPromise", "from", "Blob", "isBlob", "b", "AbortController", "FunctionPrototypeCall", "Duplexify", "options", "duplexify", "body", "name", "_duplexify", "value", "write", "final", "destroy", "fromAsyncGen", "then", "d", "promise", "val", "err", "cb", "readable", "writable", "fn", "resolve", "ac", "signal", "_promise", "chunk", "done", "encoding", "_resolve", "pair", "r", "w", "ondrain", "onfinish", "onreadable", "onclose", "onfinished", "callback", "buf", "require_duplex", "__commonJSMin", "exports", "module", "init_shim", "ObjectDefineProperties", "ObjectGetOwnPropertyDescriptor", "ObjectKeys", "ObjectSetPrototypeOf", "Duplex", "Readable", "Writable", "keys", "i", "method", "options", "value", "webStreamsAdapters", "lazyWebStreams", "pair", "duplex", "duplexify", "body", "require_transform", "__commonJSMin", "exports", "module", "init_shim", "ObjectSetPrototypeOf", "Symbol", "Transform", "ERR_METHOD_NOT_IMPLEMENTED", "Duplex", "getHighWaterMark", "kCallback", "options", "readableHighWaterMark", "prefinish", "final", "cb", "er", "data", "chunk", "encoding", "callback", "rState", "wState", "length", "err", "val", "require_passthrough", "__commonJSMin", "exports", "module", "init_shim", "ObjectSetPrototypeOf", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "init_shim", "process", "ArrayIsArray", "Promise", "SymbolAsyncIterator", "eos", "once", "destroyImpl", "Duplex", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "ERR_STREAM_PREMATURE_CLOSE", "AbortError", "validateFunction", "validateAbortSignal", "isIterable", "isReadable", "isReadableNodeStream", "isNodeStream", "isTransformStream", "isWebStream", "isReadableStream", "isReadableEnded", "AbortController", "PassThrough", "Readable", "destroyer", "stream", "reading", "writing", "finished", "cleanup", "err", "popCallback", "streams", "makeAsyncIterable", "val", "fromReadable", "pumpToNode", "iterable", "writable", "finish", "end", "error", "onresolve", "resume", "callback", "wait", "resolve", "reject", "chunk", "pumpToWeb", "readable", "writer", "pipeline", "pipelineImpl", "opts", "ac", "signal", "outerSignal", "lastStreamCleanup", "abort", "finishImpl", "value", "destroys", "finishCount", "final", "fn", "ret", "i", "isLastStream", "onError", "destroy", "_ret", "_ret2", "pt", "then", "toRead", "pipe", "src", "dst", "ended", "endFn", "rState", "require_compose", "__commonJSMin", "exports", "module", "init_shim", "pipeline", "Duplex", "destroyer", "isNodeStream", "isReadable", "isWritable", "isWebStream", "isTransformStream", "isWritableStream", "isReadableStream", "AbortError", "ERR_INVALID_ARG_VALUE", "ERR_MISSING_ARGS", "eos", "streams", "orgStreams", "idx", "n", "ondrain", "onfinish", "onreadable", "onclose", "d", "onfinished", "err", "cb", "readable", "writable", "head", "tail", "chunk", "encoding", "callback", "writer", "toRead", "buf", "reader", "value", "done", "require_operators", "__commonJSMin", "exports", "module", "init_shim", "AbortController", "ERR_INVALID_ARG_VALUE", "ERR_INVALID_ARG_TYPE", "ERR_MISSING_ARGS", "ERR_OUT_OF_RANGE", "AbortError", "validateAbortSignal", "validateInteger", "validateObject", "kWeakHandler", "finished", "staticCompose", "addAbortSignalNoValidate", "isWritable", "isNodeStream", "ArrayPrototypePush", "MathFloor", "Number", "NumberIsNaN", "Promise", "PromiseReject", "PromisePrototypeThen", "Symbol", "kEmpty", "kEof", "compose", "stream", "options", "composedStream", "map", "fn", "concurrency", "_options$signal", "_options$signal2", "ac", "queue", "signal", "signalOpt", "abort", "next", "resume", "done", "onDone", "pump", "val", "_val", "err", "resolve", "_options$signal3", "asIndexedPairs", "index", "_options$signal4", "some", "unused", "filter", "every", "args", "find", "result", "forEach", "forEachFn", "value", "filterFn", "ReduceAwareErrMissingArgs", "reduce", "reducer", "initialValue", "_options$signal5", "hasInitialValue", "opts", "gotAnyItemFromStream", "_options$signal6", "toArray", "_options$signal7", "flatMap", "values", "toIntegerOrInfinity", "number", "drop", "_options$signal8", "_options$signal9", "take", "_options$signal10", "_options$signal11", "require_promises", "__commonJSMin", "exports", "module", "init_shim", "ArrayPrototypePop", "Promise", "isIterable", "isNodeStream", "isWebStream", "pl", "finished", "pipeline", "streams", "resolve", "reject", "signal", "end", "lastArg", "options", "err", "value", "require_stream", "__commonJSMin", "exports", "module", "init_shim", "Buffer", "ObjectDefineProperty", "ObjectKeys", "ReflectApply", "customPromisify", "streamReturningOperators", "promiseReturningOperators", "ERR_ILLEGAL_CONSTRUCTOR", "compose", "pipeline", "destroyer", "eos", "promises", "utils", "Stream", "key", "fn", "args", "op", "addAbortSignal", "value", "chunk", "require_browser", "__commonJSMin", "exports", "module", "init_shim", "CustomStream", "promises", "originalDestroy", "require_browser", "__commonJSMin", "exports", "init_shim", "require_canonicalize", "__commonJSMin", "exports", "module", "init_shim", "serialize", "object", "t", "cv", "ci", "comma", "require_ms", "__commonJSMin", "exports", "module", "init_shim", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_eventemitter3", "__commonJSMin", "exports", "module", "init_shim", "has", "prefix", "Events", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "i", "length", "j", "require_lib", "__commonJSMin", "exports", "init_shim", "readable_stream_1", "ReadableWebToNodeStream", "stream", "data", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "import_isPlainObject", "init_shim", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "i", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "textEncoder", "textDecoder", "Encoder", "_Encoder", "base64urlString", "base64url", "payloadBytes", "bytes", "content", "contentString", "obj", "objectString", "init_shim", "init_shim", "P", "N", "Gx", "Gy", "CURVE", "err", "m", "str", "s", "au8", "a", "l", "u8n", "data", "toU8", "len", "h2b", "mod", "b", "isPoint", "p", "Point", "Gpows", "_Point", "ex", "ey", "ez", "et", "hex", "strict", "d", "normed", "y", "b2n_LE", "y2", "u", "v", "isValid", "x", "uvRatio", "isXOdd", "other", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "I", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "n", "safe", "wNAF", "f", "scalar", "z", "iz", "invert", "n2b_32LE", "b2h", "padh", "num", "pad", "arr", "i", "j", "h", "concatB", "arrs", "r", "sum", "md", "q", "pow2", "power", "pow_2_252_3", "b2", "b4", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "RM1", "v3", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "modL_LE", "hash", "_shaS", "sha512a", "etc", "sha512s", "hash2extK", "hashed", "head", "prefix", "point", "pointBytes", "getExtendedPublicKeyAsync", "priv", "getExtendedPublicKey", "getPublicKeyAsync", "hashFinish", "asynchronous", "res", "sha512a", "sha512s", "_sign", "e", "rBytes", "msg", "P", "s", "r", "modL_LE", "R", "G", "concatB", "hashed", "S", "mod", "N", "au8", "n2b_32LE", "signAsync", "privKey", "m", "toU8", "getExtendedPublicKeyAsync", "_verify", "sig", "msg", "pub", "toU8", "A", "Point", "R", "s", "b2n_LE", "SB", "G", "concatB", "hashed", "k", "modL_LE", "verifyAsync", "m", "p", "hashFinish", "cr", "etc", "b2h", "h2b", "concatB", "mod", "invert", "len", "crypto", "err", "u8n", "messages", "m", "_shaS", "f", "utils", "getExtendedPublicKeyAsync", "getExtendedPublicKey", "w", "p", "G", "W", "precompute", "points", "windows", "b", "i", "wNAF", "n", "comp", "Gpows", "neg", "cnd", "I", "wsize", "mask", "maxNum", "shiftBy", "off", "wbits", "off1", "off2", "cnd1", "cnd2", "init_shim", "DwnError", "code", "message", "DwnErrorCode", "validateKey", "jwk", "DwnError", "DwnErrorCode", "publicKeyToJwk", "publicKeyBytes", "Encoder", "ed25519", "content", "privateJwk", "__awaiter", "privateKeyBytes", "signAsync", "signature", "publicJwk", "verifyAsync", "utils", "getPublicKeyAsync", "d", "init_shim", "B256", "P", "N", "Gx", "Gy", "CURVE", "fLen", "crv", "x", "mod", "err", "m", "big", "n", "str", "s", "fe", "ge", "au8", "a", "l", "u8n", "data", "toU8", "len", "h2b", "b", "isPoint", "p", "Point", "Gpows", "_Point", "px", "py", "pz", "hex", "head", "tail", "slcNum", "y", "sqrt", "isYOdd", "k", "G", "toPriv", "other", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "X3", "Y3", "Z3", "b3", "t0", "t1", "t2", "t3", "t4", "t5", "safe", "I", "wNAF", "f", "d", "R", "u1", "u2", "z", "iz", "inv", "isCompressed", "n2h", "padh", "pad", "b2h", "arr", "i", "j", "h", "b2n", "from", "to", "n2b", "num", "concatB", "arrs", "r", "sum", "md", "u", "v", "q", "e", "moreThanHalfN", "getPublicKey", "privKey", "Signature", "_Signature", "recovery", "rec", "msgh", "bits2int_modN", "radj", "ir", "bits2int", "bytes", "delta", "i2o", "cr", "_hmacSync", "optS", "optV", "prepSig", "priv", "opts", "lowS", "h1i", "h1o", "seed", "ent", "etc", "k2sig", "kBytes", "ik", "normS", "hmacDrbg", "asynchronous", "reset", "_e", "reseed", "gen", "pred", "res", "signAsync", "verify", "sig", "msgh", "pub", "opts", "optV", "lowS", "err", "sig_", "h", "P", "rs", "toU8", "fLen", "Signature", "bits2int_modN", "Point", "r", "s", "moreThanHalfN", "R", "is", "inv", "N", "u1", "mod", "u2", "G", "hashToPrivateKey", "hash", "toU8", "minLen", "fLen", "err", "num", "mod", "b2n", "N", "n2b", "etc", "h2b", "b2h", "concatB", "inv", "key", "msgs", "crypto", "cr", "s", "k", "u8n", "_hmacSync", "len", "utils", "toPriv", "w", "p", "G", "f", "W", "precompute", "points", "windows", "b", "i", "wNAF", "n", "comp", "Gpows", "neg", "cnd", "I", "wsize", "mask", "maxNum", "shiftBy", "off", "wbits", "off1", "off2", "cnd1", "cnd2", "init_shim", "init_shim", "init_shim", "varint_exports", "__export", "decode", "encodeTo", "encodingLength", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "Secp256k1", "_Secp256k1", "jwk", "DwnError", "DwnErrorCode", "publicKeyBytes", "uncompressedPublicKeyBytes", "Point", "x", "Encoder", "y", "privateKeyBytes", "publicJwk", "etc", "privateJwk", "content", "hashedContent", "sha256", "signAsync", "signature", "verify", "utils", "getPublicKey", "d", "privateKey", "privateKeyJwk", "_d", "__rest", "init_shim", "init_shim", "init_shim", "init_shim", "number", "n", "isBytes", "a", "bytes", "b", "lengths", "hash", "h", "number", "exists", "instance", "checkFinished", "output", "out", "min", "init_shim", "init_shim", "crypto", "createView", "arr", "rotr", "word", "shift", "isLE", "utf8ToBytes", "str", "toBytes", "data", "bytes", "concatBytes", "arrays", "sum", "i", "a", "res", "pad", "Hash", "toStr", "wrapConstructor", "hashCons", "hashC", "msg", "toBytes", "tmp", "randomBytes", "bytesLength", "crypto", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "Chi", "a", "b", "c", "Maj", "HashMD", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "exists", "buffer", "toBytes", "len", "pos", "take", "dataView", "out", "output", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "SHA256_K", "SHA256_IV", "SHA256_W", "SHA256", "HashMD", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "Chi", "T2", "Maj", "sha256", "wrapConstructor", "SHA256", "init_shim", "init_shim", "HMAC", "Hash", "hash", "_key", "key", "toBytes", "blockLen", "pad", "i", "buf", "exists", "out", "bytes", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "hmac", "message", "init_shim", "init_shim", "init_shim", "utils_exports", "__export", "abytes", "bitGet", "bitLen", "bitMask", "bitSet", "bytesToHex", "bytesToNumberBE", "bytesToNumberLE", "concatBytes", "createHmacDrbg", "ensureBytes", "equalBytes", "hexToBytes", "hexToNumber", "isBytes", "numberToBytesBE", "numberToBytesLE", "numberToHexUnpadded", "numberToVarBytesBE", "utf8ToBytes", "validateObject", "init_shim", "_0n", "_1n", "_2n", "a", "item", "hexes", "_", "i", "bytes", "hex", "num", "asciis", "asciiToBase16", "char", "hl", "al", "array", "ai", "hi", "n1", "n2", "n", "len", "title", "expectedLength", "res", "e", "arrays", "sum", "pad", "b", "diff", "str", "pos", "value", "u8n", "data", "u8fr", "arr", "hashLen", "qByteLen", "hmacFn", "v", "k", "reset", "h", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "pow", "num", "power", "modulo", "res", "invert", "number", "modulo", "_0n", "a", "mod", "b", "x", "y", "_1n", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "_2n", "Q", "S", "Z", "pow", "p1div4", "_4n", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "_3n", "_8n", "_5n", "c1", "n2", "nv", "i", "_16n", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "validateObject", "FpPow", "f", "num", "power", "_0n", "_1n", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "i", "inverted", "nLength", "n", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "_0n", "BITS", "BYTES", "sqrtP", "FpSqrt", "f", "bitMask", "_1n", "num", "mod", "lhs", "rhs", "power", "FpPow", "invert", "lst", "FpInvertBatch", "a", "b", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "getFieldBytesLength", "fieldOrder", "bitLength", "getMinHashLength", "length", "mapHashToField", "key", "isLE", "len", "fieldLen", "minLen", "num", "bytesToNumberBE", "bytesToNumberLE", "reduced", "mod", "_1n", "numberToBytesLE", "numberToBytesBE", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "validateBasic", "curve", "validateField", "validateObject", "nLength", "validatePointOpts", "curve", "opts", "validateBasic", "validateObject", "endo", "Fp", "a", "b2n", "h2b", "utils_exports", "DER", "m", "data", "E", "len", "res", "hex", "abytes", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "_c", "point", "_isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "isBytes", "bytesToHex", "bytesToNumberBE", "ensureBytes", "mod", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "isCompressed", "_bits", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "invert", "cat", "head", "y2", "sqrtError", "suffix", "isYOdd", "numToNByteStr", "numberToBytesBE", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "length", "getMinHashLength", "mapHashToField", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "Fp", "Field", "CURVE_A", "CURVE_B", "p256", "createCurve", "sha256", "secp256r1", "init_shim", "init_shim", "equals", "a", "b", "i", "init_shim", "init_shim", "alloc", "size", "allocUnsafe", "init_shim", "init_shim", "init_shim", "concat", "arrays", "length", "acc", "curr", "output", "allocUnsafe", "offset", "arr", "init_shim", "init_shim", "init_shim", "base10_exports", "__export", "base10", "init_shim", "init_shim", "bytes_exports", "__export", "coerce", "empty", "equals", "fromHex", "fromString", "isBinary", "toHex", "toString", "init_shim", "d", "hex", "byte", "hexes", "b", "aa", "bb", "ii", "o", "str", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "i", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base10", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_shim", "base16", "rfc4648", "base16upper", "base2_exports", "__export", "base2", "init_shim", "base2", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "init_shim", "alphabet", "alphabetBytesToChars", "p", "c", "i", "alphabetCharsToBytes", "encode", "data", "decode", "str", "byts", "char", "byt", "base256emoji", "from", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base36_exports", "__export", "base36", "base36upper", "init_shim", "base36", "baseX", "base36upper", "base58_exports", "__export", "base58btc", "base58flickr", "init_shim", "base58btc", "baseX", "base58flickr", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_shim", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "base8_exports", "__export", "base8", "init_shim", "base8", "rfc4648", "identity_exports", "__export", "identity", "init_shim", "identity", "from", "buf", "toString", "str", "fromString", "init_shim", "textEncoder", "textDecoder", "init_shim", "identity_exports", "__export", "identity", "init_shim", "init_shim", "varint_exports", "__export", "decode", "encodeTo", "encodingLength", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "sha2_browser_exports", "__export", "sha256", "sha512", "init_shim", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "init_shim", "init_shim", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "bases", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "hashes", "sha2_browser_exports", "createCodec", "name", "prefix", "encode", "decode", "string", "buf", "str", "ascii", "i", "allocUnsafe", "BASES", "bases", "bases_default", "fromString", "string", "encoding", "base", "bases_default", "init_shim", "toString", "array", "encoding", "base", "bases_default", "u8a", "toString", "fromString", "Secp256r1", "_Secp256r1", "jwk", "DwnError", "DwnErrorCode", "publicKeyBytes", "uncompressedPublicKeyBytes", "p256", "x", "Encoder", "y", "privateJwk", "content", "hashedContent", "sha256", "privateKeyBytes", "signature", "publicJwk", "sig", "keyBytes", "secp256r1", "d", "b", "signatureAlgorithms", "ed25519", "Secp256k1", "Secp256r1", "PrivateKeySigner", "options", "DwnError", "DwnErrorCode", "_a", "_b", "signatureAlgorithms", "content", "Jws", "_Jws", "signatureEntry", "kid", "Encoder", "base64UrlPayload", "jwkPublic", "signatureAlgorithm", "signatureAlgorithms", "DwnError", "DwnErrorCode", "payload", "signatureBytes", "jws", "payloadJson", "isPlainObject", "did", "keyMaterials", "keyMaterial", "privateJwk", "keyId", "PrivateKeySigner", "init_shim", "perf", "warned", "PROCESS", "process", "emitWarning", "msg", "type", "code", "fn", "AC", "AS", "_", "warnACPolyfill", "reason", "printACPolyfillWarning", "shouldWarn", "TYPE", "isPosInt", "n", "getUintArray", "max", "ZeroArray", "size", "Stack", "_Stack", "#constructing", "HeapCls", "s", "LRUCache", "_LRUCache", "#max", "#maxSize", "#dispose", "#disposeAfter", "#fetchMethod", "#size", "#calculatedSize", "#keyMap", "#keyList", "#valList", "#next", "#prev", "#head", "#tail", "#free", "#disposed", "#sizes", "#starts", "#ttls", "#hasDispose", "#hasFetchMethod", "#hasDisposeAfter", "c", "p", "#isBackgroundFetch", "k", "index", "options", "context", "#backgroundFetch", "#moveToTail", "#indexes", "#rindexes", "#isStale", "ttl", "ttlResolution", "ttlAutopurge", "updateAgeOnGet", "updateAgeOnHas", "allowStale", "dispose", "disposeAfter", "noDisposeOnSet", "noUpdateTTL", "maxSize", "maxEntrySize", "sizeCalculation", "fetchMethod", "noDeleteOnFetchRejection", "noDeleteOnStaleGet", "allowStaleOnFetchRejection", "allowStaleOnFetchAbort", "ignoreFetchAbort", "UintArray", "#initializeSizeTracking", "#initializeTTLTracking", "key", "ttls", "starts", "#setItemTTL", "start", "t", "#updateItemAge", "#statusTTL", "status", "cachedNow", "getNow", "age", "sizes", "#removeItemSize", "#requireSize", "v", "#addItemSize", "#evict", "_i", "_s", "_st", "_k", "_v", "i", "#isValidIndex", "getOptions", "value", "thisp", "deleted", "arr", "entry", "setOptions", "oldVal", "oldValue", "dt", "task", "val", "free", "head", "hasOptions", "peekOptions", "ac", "signal", "fetchOpts", "cb", "updateCache", "aborted", "ignoreAbort", "fetchFail", "bf", "eb", "er", "allowStaleAborted", "noDelete", "pcall", "res", "rej", "fmp", "b", "fetchOptions", "forceRefresh", "stale", "isStale", "staleVal", "fetching", "#connect", "MemoryCache", "timeToLiveInSeconds", "LRUCache", "key", "value", "init_shim", "precompiled_validators_exports", "__export", "Authorization", "AuthorizationDelegatedGrant", "AuthorizationOwner", "Definitions", "GeneralJwk", "GeneralJws", "GenericSignaturePayload", "JwkVerificationMethod", "MessagesFilter", "MessagesQuery", "MessagesRead", "MessagesSubscribe", "NumberRangeFilter", "PaginationCursor", "PermissionGrantData", "PermissionRequestData", "PermissionRevocationData", "PermissionsDefinitions", "PermissionsScopes", "ProtocolDefinition", "ProtocolRuleSet", "ProtocolsConfigure", "ProtocolsQuery", "PublicJwk", "RecordsDelete", "RecordsFilter", "RecordsQuery", "RecordsRead", "RecordsSubscribe", "RecordsWrite", "RecordsWriteDataEncoded", "RecordsWriteSignaturePayload", "RecordsWriteUnidentified", "StringRangeFilter", "init_shim", "validate20", "pattern4", "validate21", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs1", "key0", "data0", "_errs2", "valid0", "data1", "_errs5", "valid2", "len0", "i0", "data2", "_errs7", "data3", "_errs9", "valid3", "data4", "_errs12", "validate20", "AuthorizationDelegatedGrant", "validate24", "schema39", "pattern7", "pattern12", "pattern13", "pattern14", "wrapper0", "validate26", "validate29", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs1", "key0", "missing0", "_errs2", "validate21", "valid1", "_errs3", "_errs4", "_errs5", "schema43", "validate33", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs0", "_errs2", "valid1", "passing0", "_errs3", "missing0", "err0", "_errs4", "err1", "valid2", "_errs5", "err2", "_errs7", "err3", "_errs9", "err4", "_errs11", "err5", "_valid0", "props0", "_errs13", "missing1", "err6", "_errs14", "err7", "valid3", "_errs15", "err8", "_errs17", "err9", "_errs19", "err10", "_errs21", "missing2", "err11", "_errs22", "err12", "valid4", "_errs23", "err13", "_errs25", "err14", "_errs27", "err15", "_errs29", "err16", "_errs31", "err17", "_errs33", "err18", "_errs35", "err19", "_errs37", "err20", "data18", "_errs39", "err21", "_errs41", "missing3", "err22", "_errs42", "err23", "valid5", "_errs43", "err24", "err25", "missing4", "_errs45", "valid6", "_errs47", "data23", "_errs49", "_errs50", "_errs52", "_errs54", "_errs56", "_errs58", "_errs60", "_errs62", "valid0", "_errs64", "_errs65", "_errs66", "valid8", "_errs67", "_errs69", "valid9", "_errs70", "missing5", "err26", "_valid2", "err27", "err28", "err29", "_valid1", "props1", "_errs72", "_errs74", "valid11", "_errs75", "missing6", "err30", "_valid3", "err31", "err32", "err33", "_errs77", "_errs79", "valid13", "_errs80", "missing7", "err34", "_valid4", "_errs81", "missing8", "err35", "_errs82", "missing9", "err36", "_errs83", "missing10", "err37", "_errs84", "missing11", "err38", "_errs85", "missing12", "err39", "_errs86", "missing13", "err40", "err41", "_errs87", "err42", "valid14", "data34", "_errs88", "err43", "err44", "err45", "valid7", "func1", "validate27", "data0", "_errs6", "_errs8", "_errs10", "data1", "data2", "_errs18", "_errs20", "data4", "pattern7", "_errs24", "validate21", "validate29", "data7", "_errs26", "_errs28", "key0", "data8", "schema39", "data9", "pattern4", "data10", "_errs34", "len0", "i0", "data11", "_errs36", "_errs38", "key1", "valid12", "data13", "data15", "_errs44", "data16", "_errs46", "data17", "data19", "_errs53", "data20", "valid17", "_errs61", "data21", "props3", "valid19", "data22", "_errs71", "valid22", "valid21", "_errs73", "valid23", "_errs76", "key2", "valid25", "data24", "data25", "pattern12", "data27", "pattern13", "data29", "_errs90", "key3", "data30", "_errs93", "_errs94", "valid28", "_errs95", "_errs97", "_errs99", "_errs101", "valid29", "len1", "i1", "_errs103", "items0", "_errs105", "valid30", "len2", "i2", "data32", "_errs107", "valid27", "_errs109", "_errs111", "data35", "_errs113", "data36", "_errs115", "pattern14", "data37", "_errs118", "_errs121", "data39", "_errs123", "_errs126", "validate26", "_errs1", "validate24", "AuthorizationOwner", "RecordsDelete", "validate38", "schema51", "data3", "RecordsQuery", "validate40", "schema53", "schema70", "schema55", "validate42", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs1", "key0", "func1", "schema55", "_errs2", "_errs3", "valid1", "passing0", "_errs4", "missing0", "err0", "err1", "_valid0", "props0", "_errs6", "_errs7", "_errs8", "missing1", "err2", "valid3", "err3", "err4", "valid0", "_errs9", "valid4", "_errs11", "data3", "_errs13", "_errs14", "valid5", "passing1", "_errs15", "pattern12", "err5", "err6", "_valid1", "_errs18", "valid7", "len0", "i0", "data4", "_errs20", "err7", "err8", "err9", "err10", "data5", "_errs23", "data6", "_errs26", "_errs27", "valid10", "passing2", "_errs28", "err11", "err12", "_valid2", "_errs31", "valid12", "len1", "i1", "data7", "_errs33", "err13", "err14", "err15", "err16", "_errs36", "_errs38", "data10", "_errs40", "key1", "data11", "_errs43", "_errs44", "valid15", "passing3", "_errs45", "err17", "_valid3", "_errs47", "err18", "_errs49", "err19", "_errs51", "err20", "_errs53", "key2", "err21", "err22", "err23", "props1", "_errs56", "err24", "_errs59", "key3", "err25", "_errs60", "_errs61", "_errs62", "missing2", "err26", "valid19", "err27", "valid18", "_errs63", "_errs64", "_errs65", "missing3", "err28", "valid20", "err29", "_errs66", "_errs67", "_errs68", "missing4", "err30", "valid21", "err31", "_errs69", "_errs70", "_errs71", "missing5", "err32", "valid22", "err33", "_errs72", "err34", "valid23", "_errs74", "err35", "_errs76", "err36", "_errs78", "err37", "err38", "_errs80", "err39", "_errs83", "key4", "err40", "_errs84", "_errs85", "_errs86", "missing6", "err41", "valid26", "err42", "valid25", "_errs87", "_errs88", "_errs89", "missing7", "err43", "valid27", "err44", "_errs90", "_errs91", "_errs92", "missing8", "err45", "valid28", "err46", "_errs93", "_errs94", "_errs95", "missing9", "err47", "valid29", "err48", "data17", "_errs96", "err49", "valid30", "data18", "_errs98", "err50", "data19", "_errs100", "err51", "data20", "_errs102", "err52", "err53", "err54", "valid14", "_errs104", "_errs106", "_errs108", "_errs110", "data25", "_errs112", "_errs115", "key5", "_errs116", "_errs117", "_errs118", "missing10", "err55", "valid33", "valid32", "_errs119", "_errs120", "_errs121", "missing11", "err56", "valid34", "_errs122", "_errs123", "_errs124", "missing12", "err57", "valid35", "_errs125", "_errs126", "_errs127", "missing13", "err58", "valid36", "data26", "_errs128", "valid37", "data27", "_errs130", "data28", "_errs132", "data29", "_errs134", "_errs136", "data31", "_errs138", "_errs140", "key6", "data32", "_errs141", "pattern14", "valid38", "data33", "_errs144", "data34", "_errs147", "_errs149", "key7", "data35", "_errs150", "valid41", "data36", "_errs153", "data37", "_errs156", "_errs158", "key8", "data38", "_errs159", "valid44", "data39", "_errs162", "validate40", "validate24", "data1", "_errs5", "data2", "schema53", "_errs10", "_errs16", "_errs17", "data8", "_errs19", "_errs22", "_errs25", "schema70", "RecordsSubscribe", "validate44", "schema71", "RecordsWrite", "validate47", "validate47", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "validate27", "props0", "missing0", "key0", "RecordsWriteDataEncoded", "validate26", "RecordsWriteUnidentified", "Definitions", "validate22", "validate22", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "GeneralJwk", "validate49", "_errs1", "valid0", "passing0", "_errs2", "missing0", "err0", "_errs3", "err1", "valid1", "_errs4", "err2", "_errs6", "err3", "_errs8", "err4", "_errs10", "err5", "_valid0", "props0", "_errs12", "missing1", "err6", "_errs13", "err7", "valid2", "_errs14", "err8", "_errs16", "err9", "_errs18", "err10", "_errs20", "missing2", "err11", "_errs21", "err12", "valid3", "_errs22", "err13", "_errs24", "err14", "_errs26", "err15", "_errs28", "err16", "_errs30", "err17", "_errs32", "err18", "_errs34", "err19", "_errs36", "err20", "data18", "_errs38", "err21", "_errs40", "missing3", "err22", "_errs41", "err23", "valid4", "_errs42", "err24", "err25", "missing4", "_errs44", "valid5", "_errs46", "data23", "_errs48", "schema43", "_errs49", "_errs51", "_errs53", "_errs55", "_errs57", "_errs59", "_errs61", "GeneralJws", "validate21", "JwkVerificationMethod", "validate50", "schema75", "key0", "data1", "data2", "_errs5", "pattern12", "validate33", "MessagesFilter", "validate52", "schema77", "data0", "data3", "key1", "data4", "_errs11", "pattern14", "data5", "MessagesQuery", "validate53", "schema80", "validate20", "len0", "i0", "_errs15", "data7", "_errs19", "key2", "data9", "schema70", "MessagesRead", "validate56", "schema83", "MessagesSubscribe", "validate58", "schema85", "NumberRangeFilter", "validate61", "_errs7", "_errs9", "PaginationCursor", "validate62", "PermissionGrantData", "validate63", "schema103", "validate65", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs0", "valid0", "passing0", "_errs1", "missing0", "err0", "_errs4", "key0", "err1", "_errs5", "err2", "valid2", "_errs6", "err3", "_errs7", "err4", "err5", "_valid0", "props0", "_errs9", "missing1", "err6", "_errs12", "key1", "err7", "_errs13", "err8", "valid4", "_errs14", "err9", "_errs15", "err10", "err11", "_errs17", "missing2", "err12", "_errs20", "key2", "err13", "_errs21", "err14", "valid6", "_errs22", "err15", "_errs23", "err16", "err17", "_errs25", "missing3", "err18", "_errs28", "key3", "err19", "_errs29", "err20", "valid8", "_errs30", "err21", "_errs31", "err22", "err23", "_errs33", "missing4", "err24", "_errs36", "key4", "err25", "_errs37", "err26", "valid10", "_errs38", "err27", "_errs39", "err28", "err29", "_errs41", "missing5", "err30", "_errs44", "key5", "err31", "_errs45", "err32", "valid12", "_errs46", "err33", "_errs47", "err34", "_errs49", "err35", "_errs51", "err36", "err37", "_errs53", "missing6", "err38", "_errs56", "key6", "err39", "_errs57", "err40", "valid14", "_errs58", "err41", "_errs59", "err42", "_errs61", "err43", "_errs63", "err44", "err45", "_errs65", "missing7", "err46", "_errs68", "key7", "err47", "_errs69", "err48", "valid16", "_errs70", "err49", "_errs71", "err50", "_errs73", "err51", "_errs75", "err52", "err53", "_errs77", "missing8", "err54", "_errs80", "key8", "err55", "_errs81", "err56", "valid18", "_errs82", "err57", "_errs83", "err58", "_errs85", "err59", "_errs87", "err60", "err61", "_errs89", "missing9", "err62", "_errs92", "key9", "err63", "_errs93", "err64", "valid20", "_errs94", "err65", "_errs95", "err66", "_errs97", "err67", "_errs99", "err68", "err69", "err70", "validate63", "_errs2", "data1", "pattern14", "_errs11", "data5", "data6", "schema103", "PermissionRequestData", "validate68", "validate69", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs0", "valid0", "passing0", "_errs1", "missing0", "err0", "_errs4", "key0", "err1", "_errs5", "err2", "valid2", "_errs6", "err3", "_errs7", "err4", "err5", "_valid0", "props0", "_errs9", "missing1", "err6", "_errs12", "key1", "err7", "_errs13", "err8", "valid4", "_errs14", "err9", "_errs15", "err10", "err11", "_errs17", "missing2", "err12", "_errs20", "key2", "err13", "_errs21", "err14", "valid6", "_errs22", "err15", "_errs23", "err16", "err17", "_errs25", "missing3", "err18", "_errs28", "key3", "err19", "_errs29", "err20", "valid8", "_errs30", "err21", "_errs31", "err22", "err23", "_errs33", "missing4", "err24", "_errs36", "key4", "err25", "_errs37", "err26", "valid10", "_errs38", "err27", "_errs39", "err28", "err29", "_errs41", "missing5", "err30", "_errs44", "key5", "err31", "_errs45", "err32", "valid12", "_errs46", "err33", "_errs47", "err34", "_errs49", "err35", "_errs51", "err36", "err37", "_errs53", "missing6", "err38", "_errs56", "key6", "err39", "_errs57", "err40", "valid14", "_errs58", "err41", "_errs59", "err42", "_errs61", "err43", "_errs63", "err44", "err45", "_errs65", "missing7", "err46", "_errs68", "key7", "err47", "_errs69", "err48", "valid16", "_errs70", "err49", "_errs71", "err50", "_errs73", "err51", "_errs75", "err52", "err53", "_errs77", "missing8", "err54", "_errs80", "key8", "err55", "_errs81", "err56", "valid18", "_errs82", "err57", "_errs83", "err58", "_errs85", "err59", "_errs87", "err60", "err61", "_errs89", "missing9", "err62", "_errs92", "key9", "err63", "_errs93", "err64", "valid20", "_errs94", "err65", "_errs95", "err66", "_errs97", "err67", "_errs99", "err68", "err69", "err70", "validate68", "_errs2", "data3", "_errs10", "data4", "schema103", "PermissionRevocationData", "validate71", "validate71", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs1", "key0", "PermissionsDefinitions", "validate64", "validate64", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "PermissionsScopes", "validate66", "validate66", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "ProtocolDefinition", "validate72", "pattern37", "schema119", "pattern39", "pattern40", "pattern41", "pattern42", "wrapper2", "validate73", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "_errs1", "key0", "data0", "_errs2", "missing0", "_errs4", "key1", "_errs5", "valid1", "_errs7", "validate33", "valid0", "data3", "_errs8", "valid2", "len0", "i0", "data4", "_errs10", "_errs12", "valid3", "passing0", "_errs13", "missing1", "err0", "_errs14", "key2", "err1", "data5", "_errs15", "err2", "err3", "valid4", "_errs17", "err4", "data7", "_errs19", "err5", "valid5", "len1", "i1", "data8", "_errs21", "err6", "err7", "err8", "_valid0", "props1", "_errs23", "missing2", "err9", "_errs24", "err10", "valid6", "data10", "_errs27", "err11", "valid7", "len2", "i2", "data11", "_errs29", "err12", "err13", "err14", "err15", "_errs31", "data13", "_errs34", "_errs36", "key3", "data14", "_errs37", "valid8", "data15", "_errs39", "data16", "_errs41", "data17", "_errs43", "valid10", "len3", "i3", "_errs45", "valid9", "_errs47", "props2", "key4", "data20", "_errs51", "key5", "data21", "_errs52", "valid12", "data22", "_errs53", "data23", "_errs55", "valid13", "props3", "key6", "data24", "_errs56", "data25", "_errs58", "valid15", "props4", "key7", "valid17", "key8", "_errs59", "validate72", "data2", "_errs6", "props0", "_errs11", "ProtocolRuleSet", "ProtocolsConfigure", "validate76", "schema120", "validate24", "data1", "_errs3", "pattern14", "ProtocolsQuery", "validate79", "schema122", "validate20", "_errs16", "_errs18", "pattern12", "RecordsRead", "validate81", "schema125", "validate42", "RecordsFilter", "PublicJwk", "GenericSignaturePayload", "validate84", "validate84", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "missing0", "_errs1", "key0", "_errs2", "valid0", "_errs4", "_errs6", "_errs8", "RecordsWriteSignaturePayload", "validate85", "validate85", "data", "instancePath", "parentData", "parentDataProperty", "rootData", "dynamicAnchors", "vErrors", "errors", "evaluated0", "missing0", "_errs1", "key0", "_errs2", "valid0", "_errs4", "_errs6", "_errs8", "_errs10", "_errs12", "_errs14", "_errs16", "StringRangeFilter", "validate86", "_errs3", "err0", "valid1", "_errs5", "_errs7", "missing1", "err1", "valid2", "_errs9", "missing2", "err2", "valid3", "_errs11", "_errs13", "missing3", "err3", "valid4", "valid5", "_errs18", "_errs20", "validateJsonSchema", "schemaName", "payload", "validateFn", "precompiled_validators_exports", "DwnError", "DwnErrorCode", "errorObj", "instancePath", "message", "keyword", "GeneralJwsVerifier", "_GeneralJwsVerifier", "cache", "MemoryCache", "jws", "didResolver", "signers", "signatureEntry", "isVerified", "kid", "Jws", "cacheKey", "cachedValue", "publicJwk", "did", "DwnError", "DwnErrorCode", "didDocument", "verificationMethods", "verificationMethod", "method", "validateJsonSchema", "src_exports", "__export", "code", "decode", "encode", "name", "init_shim", "init_shim", "init_shim", "init_shim", "typeofs", "objectTypeNames", "is", "value", "typeOf", "isBuffer", "objectType", "getObjectType", "objectTypeName", "init_shim", "Type", "major", "name", "terminal", "typ", "Token", "type", "value", "encodedLength", "init_shim", "init_shim", "useBuffer", "textDecoder", "textEncoder", "isBuffer", "buf", "asU8A", "toString", "bytes", "start", "end", "utf8Slice", "fromString", "string", "utf8ToBytes", "fromArray", "arr", "slice", "concat", "chunks", "length", "c", "out", "off", "b", "alloc", "size", "compare", "b1", "b2", "isBuffer", "i", "utf8ToBytes", "string", "units", "codePoint", "length", "leadSurrogate", "bytes", "utf8Slice", "buf", "offset", "end", "res", "firstByte", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "len", "defaultChunkSize", "Bl", "chunkSize", "bytes", "topChunk", "chunkPos", "alloc", "reset", "byts", "chunk", "slice", "concat", "init_shim", "decodeErrPrefix", "encodeErrPrefix", "uintMinorPrefixBytes", "assertEnoughData", "data", "pos", "need", "init_shim", "init_shim", "uintBoundaries", "readUint8", "data", "offset", "options", "assertEnoughData", "value", "decodeErrPrefix", "readUint16", "readUint32", "readUint64", "hi", "lo", "decodeUint8", "pos", "_minor", "Token", "Type", "decodeUint16", "decodeUint32", "decodeUint64", "encodeUint", "buf", "token", "encodeUintValue", "major", "uint", "nuint", "buint", "set", "tok1", "tok2", "init_shim", "decodeNegint8", "data", "pos", "_minor", "options", "Token", "Type", "readUint8", "decodeNegint16", "readUint16", "decodeNegint32", "readUint32", "neg1b", "pos1b", "decodeNegint64", "int", "readUint64", "value", "decodeErrPrefix", "encodeNegint", "buf", "token", "negint", "unsigned", "encodeUintValue", "uintBoundaries", "tok1", "tok2", "init_shim", "toToken", "data", "pos", "prefix", "length", "assertEnoughData", "buf", "slice", "Token", "Type", "decodeBytesCompact", "minor", "_options", "decodeBytes8", "_minor", "options", "readUint8", "decodeBytes16", "readUint16", "decodeBytes32", "readUint32", "decodeBytes64", "l", "readUint64", "decodeErrPrefix", "tokenBytes", "token", "fromString", "encodeBytes", "bytes", "encodeUintValue", "tok1", "tok2", "compareBytes", "b1", "b2", "compare", "init_shim", "toToken", "data", "pos", "prefix", "length", "options", "totLength", "assertEnoughData", "tok", "Token", "Type", "toString", "slice", "decodeStringCompact", "minor", "decodeString8", "_minor", "readUint8", "decodeString16", "readUint16", "decodeString32", "readUint32", "decodeString64", "l", "readUint64", "decodeErrPrefix", "encodeString", "encodeBytes", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeArrayCompact", "data", "pos", "minor", "_options", "decodeArray8", "_minor", "options", "readUint8", "decodeArray16", "readUint16", "decodeArray32", "readUint32", "decodeArray64", "l", "readUint64", "decodeErrPrefix", "decodeArrayIndefinite", "encodeArray", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeMapCompact", "data", "pos", "minor", "_options", "decodeMap8", "_minor", "options", "readUint8", "decodeMap16", "readUint16", "decodeMap32", "readUint32", "decodeMap64", "l", "readUint64", "decodeErrPrefix", "decodeMapIndefinite", "encodeMap", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "decodeTagCompact", "_data", "_pos", "minor", "_options", "Token", "Type", "decodeTag8", "data", "pos", "_minor", "options", "readUint8", "decodeTag16", "readUint16", "decodeTag32", "readUint32", "decodeTag64", "readUint64", "encodeTag", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "MINOR_FALSE", "MINOR_TRUE", "MINOR_NULL", "MINOR_UNDEFINED", "decodeUndefined", "_data", "_pos", "_minor", "options", "decodeErrPrefix", "Token", "Type", "decodeBreak", "createToken", "value", "bytes", "decodeFloat16", "data", "pos", "readFloat16", "decodeFloat32", "readFloat32", "decodeFloat64", "readFloat64", "encodeFloat", "buf", "token", "float", "decoded", "success", "encodeFloat16", "ui8a", "encodeFloat32", "encodeFloat64", "buffer", "dataView", "inp", "valu32", "exponent", "mantissa", "logicalExponent", "half", "exp", "mant", "val", "offset", "encodeUint", "invalidMinor", "data", "pos", "minor", "decodeErrPrefix", "errorer", "msg", "jump", "i", "decodeUint8", "decodeUint16", "decodeUint32", "decodeUint64", "decodeNegint8", "decodeNegint16", "decodeNegint32", "decodeNegint64", "decodeBytesCompact", "decodeBytes8", "decodeBytes16", "decodeBytes32", "decodeBytes64", "decodeStringCompact", "decodeString8", "decodeString16", "decodeString32", "decodeString64", "decodeArrayCompact", "decodeArray8", "decodeArray16", "decodeArray32", "decodeArray64", "decodeArrayIndefinite", "decodeMapCompact", "decodeMap8", "decodeMap16", "decodeMap32", "decodeMap64", "decodeMapIndefinite", "decodeTagCompact", "decodeTag8", "decodeTag16", "decodeTag32", "decodeTag64", "decodeUndefined", "decodeFloat16", "decodeFloat32", "decodeFloat64", "decodeBreak", "quick", "Token", "Type", "quickEncodeToken", "token", "fromArray", "defaultEncodeOptions", "mapSorter", "quickEncodeToken", "makeCborEncoders", "encoders", "Type", "encodeUint", "encodeNegint", "encodeBytes", "encodeString", "encodeArray", "encodeMap", "encodeTag", "encodeFloat", "cborEncoders", "buf", "Bl", "Ref", "_Ref", "obj", "parent", "p", "stack", "encodeErrPrefix", "simpleTokens", "Token", "typeEncoders", "_typ", "_options", "_refStack", "_obj", "options", "refStack", "entries", "i", "e", "objectToTokens", "typ", "isMap", "keys", "length", "key", "sortMapEntries", "is", "customTypeEncoder", "tokens", "typeEncoder", "e1", "e2", "keyToken1", "keyToken2", "major", "tcmp", "tokensToEncoded", "token", "encodeCustom", "data", "quickBytes", "encoder", "size", "asU8A", "encode", "init_shim", "defaultDecodeOptions", "Tokeniser", "data", "options", "byt", "token", "quick", "decoder", "jump", "decodeErrPrefix", "minor", "DONE", "BREAK", "tokenToArray", "tokeniser", "arr", "value", "tokensToObject", "tokenToMap", "useMaps", "obj", "m", "i", "key", "Type", "tagged", "decode", "decoded", "init_shim", "base32_exports", "__export", "base32", "base32hex", "base32hexpad", "base32hexpadupper", "base32hexupper", "base32pad", "base32padupper", "base32upper", "base32z", "init_shim", "init_shim", "init_shim", "base", "ALPHABET", "name", "BASE_MAP", "j", "x", "xc", "BASE", "LEADER", "FACTOR", "iFACTOR", "encode", "source", "zeroes", "length", "pbegin", "pend", "size", "b58", "carry", "i", "it1", "it2", "str", "decodeUnsafe", "psz", "b256", "it3", "it4", "vch", "decode", "string", "buffer", "src", "_brrp__multiformats_scope_baseX", "base_x_default", "init_shim", "empty", "equals", "aa", "bb", "ii", "coerce", "o", "fromString", "str", "toString", "b", "init_shim", "Encoder", "name", "prefix", "baseEncode", "bytes", "Decoder", "baseDecode", "text", "decoder", "or", "ComposedDecoder", "decoders", "input", "left", "right", "Codec", "from", "encode", "decode", "baseX", "alphabet", "base_x_default", "coerce", "string", "bitsPerChar", "codes", "i", "end", "out", "bits", "buffer", "written", "value", "data", "pad", "mask", "rfc4648", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "base58_exports", "__export", "base58btc", "base58flickr", "init_shim", "base58btc", "baseX", "base58flickr", "init_shim", "init_shim", "init_shim", "encode_1", "encode", "MSB", "REST", "MSBALL", "INT", "num", "out", "offset", "oldOffset", "decode", "read", "MSB$1", "REST$1", "buf", "res", "shift", "counter", "b", "l", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "N8", "N9", "length", "value", "varint", "_brrp_varint", "varint_default", "decode", "data", "offset", "varint_default", "encodeTo", "int", "target", "encodingLength", "create", "code", "digest", "size", "sizeOffset", "encodingLength", "digestOffset", "bytes", "encodeTo", "Digest", "decode", "multihash", "coerce", "equals", "a", "b", "data", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "CID_CBOR_TAG", "cidEncoder", "obj", "cid", "CID", "bytes", "Token", "Type", "undefinedEncoder", "numberEncoder", "num", "encodeOptions", "cidDecoder", "decodeOptions", "name", "code", "encode", "node", "decode", "data", "init_shim", "init_shim", "init_shim", "base58btc", "baseX", "base58flickr", "init_shim", "base32", "rfc4648", "base32upper", "base32pad", "base32padupper", "base32hex", "base32hexupper", "base32hexpad", "base32hexpadupper", "base32z", "init_shim", "format", "link", "base", "bytes", "version", "toStringV0", "baseCache", "base58btc", "toStringV1", "base32", "cache", "baseCache", "cid", "CID", "_CID", "version", "code", "multihash", "bytes", "DAG_PB_CODE", "SHA_256_CODE", "digest", "create", "other", "self", "unknown", "equals", "base", "format", "input", "value", "encodeCID", "cidSymbol", "decode", "remainder", "specs", "prefixSize", "multihashBytes", "coerce", "digestBytes", "Digest", "initialBytes", "offset", "next", "i", "length", "codec", "multihashCode", "digestSize", "size", "multihashSize", "source", "prefix", "parseCIDtoBytes", "decoder", "base58btc", "base32", "toStringV0", "toStringV1", "codeOffset", "encodingLength", "hashOffset", "encodeTo", "init_shim", "BlockstoreMock", "key", "_val", "_options", "_key", "source", "options", "_d", "source_1", "__asyncValues", "source_1_1", "__await", "_a", "_c", "entry", "source_2", "source_2_1", "li", "li_1", "li_1_1", "value", "CID", "source_3", "source_3_1", "init_shim", "import_err_code", "init_shim", "init_shim", "init_shim", "isAsyncIterable", "thing", "batch", "source", "size", "things", "src_default", "parallelBatch", "source", "size", "tasks", "src_default", "things", "p", "value", "err", "result", "init_shim", "init_shim", "symbol", "findBufAndOffset", "bufs", "index", "offset", "buf", "bufEnd", "isUint8ArrayList", "value", "Uint8ArrayList", "_Uint8ArrayList", "data", "length", "res", "i", "bytes", "beginInclusive", "endExclusive", "concat", "list", "bufStart", "sliceStartInBuf", "sliceEndsInBuf", "start", "search", "needle", "M", "radix", "rightmostPositions", "c", "j", "right", "lastIndex", "lastPatIndex", "skip", "char", "byteOffset", "allocUnsafe", "littleEndian", "alloc", "other", "equals", "acc", "curr", "DEFAULT_CHUNK_SIZE", "fixedSize", "options", "chunkSize", "source", "list", "Uint8ArrayList", "currentLength", "emitted", "buffer", "newBl", "init_shim", "src_exports", "__export", "code", "createLink", "createNode", "decode", "encode", "name", "prepare", "validate", "init_shim", "init_shim", "textDecoder", "decodeVarint", "bytes", "offset", "v", "shift", "b", "decodeBytes", "byteLen", "postOffset", "decodeKey", "index", "wire", "decodeLink", "link", "l", "wireType", "fieldNum", "byts", "decodeNode", "links", "linksBeforeData", "data", "node", "init_shim", "textEncoder", "maxInt32", "maxUInt32", "encodeLink", "link", "bytes", "i", "encodeVarint", "nameBytes", "encodeNode", "node", "size", "sizeNode", "index", "sizeLink", "n", "l", "sov", "offset", "v", "base", "x", "len64", "len8tab", "init_shim", "pbNodeProperties", "pbLinkProperties", "textEncoder", "linkComparator", "a", "b", "abuf", "bbuf", "x", "y", "i", "len", "hasOnlyProperties", "node", "properties", "p", "asLink", "link", "Hash", "CID", "pbl", "cid", "e", "prepare", "pbn", "validate", "createNode", "data", "links", "createLink", "name", "size", "toByteView", "buf", "name", "code", "encode", "node", "validate", "pbn", "l", "link", "encodeNode", "decode", "bytes", "buf", "toByteView", "decodeNode", "CID", "init_shim", "import_err_code", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "N1", "N2", "N3", "N4", "N5", "N6", "N7", "MSB", "REST", "encodingLength", "value", "encodeUint8Array", "buf", "offset", "decodeUint8Array", "buf", "offset", "b", "res", "REST", "MSB", "N4", "N5", "N6", "N7", "init_shim", "f32", "f8b", "writeFloatLE", "val", "buf", "pos", "readFloatLE", "buf", "pos", "f8b", "f32", "f64", "d8b", "writeDoubleLE", "val", "buf", "pos", "readDoubleLE", "buf", "pos", "d8b", "f64", "init_shim", "MAX_SAFE_NUMBER_INTEGER", "MIN_SAFE_NUMBER_INTEGER", "LongBits", "_LongBits", "lo", "hi", "unsigned", "mask", "part0", "part1", "part2", "value", "zero", "negative", "TWO_32", "sign", "init_shim", "length", "string", "len", "c", "i", "read", "buffer", "start", "end", "parts", "chunk", "t", "write", "offset", "c1", "c2", "indexOutOfRange", "reader", "writeLength", "readFixed32End", "buf", "end", "Uint8ArrayReader", "buffer", "value", "readFloatLE", "readDoubleLE", "length", "start", "bytes", "read", "wireType", "bits", "LongBits", "i", "lo", "hi", "decodeUint8Array", "encodingLength", "createReader", "decodeMessage", "buf", "codec", "opts", "reader", "createReader", "init_shim", "init_shim", "init_shim", "pool", "size", "SIZE", "MAX", "slab", "offset", "allocUnsafe", "buf", "Op", "fn", "len", "val", "noop", "State", "writer", "bufferPool", "pool", "alloc", "size", "allocUnsafe", "Uint8ArrayWriter", "value", "VarintOp", "writeVarint64", "LongBits", "bits", "encodeUint8Array", "encodingLength", "writeByte", "writeFixed32", "writeFloatLE", "writeDoubleLE", "writeBytes", "length", "write", "head", "tail", "buf", "pos", "writeVarint32", "writeBytesBuffer", "writeStringBuffer", "fromString", "createWriter", "encodeMessage", "message", "codec", "w", "createWriter", "init_shim", "init_shim", "CODEC_TYPES", "createCodec", "name", "type", "encode", "decode", "enumeration", "v", "findValue", "val", "encode", "writer", "enumValue", "decode", "reader", "createCodec", "CODEC_TYPES", "init_shim", "message", "encode", "decode", "createCodec", "CODEC_TYPES", "Data", "DataType", "__DataTypeValues", "enumeration", "_codec", "message", "obj", "w", "opts", "value", "UnixTime", "reader", "length", "end", "tag", "encodeMessage", "buf", "decodeMessage", "Metadata", "types", "dirTypes", "DEFAULT_FILE_MODE", "DEFAULT_DIRECTORY_MODE", "UnixFS", "_UnixFS", "marshaled", "message", "Data", "data", "options", "type", "blockSizes", "hashType", "fanout", "mtime", "mode", "errcode", "size", "index", "sum", "raw_exports", "__export", "code", "decode", "encode", "name", "init_shim", "name", "code", "encode", "node", "coerce", "decode", "data", "init_shim", "CustomProgressEvent", "type", "detail", "init_shim", "persist", "buffer", "blockstore", "options", "src_exports", "multihash", "sha256", "cid", "CID", "defaultBufferImporter", "options", "file", "blockstore", "bytesWritten", "block", "unixfs", "opts", "src_exports", "raw_exports", "UnixFS", "encode", "cid", "persist", "CustomProgressEvent", "init_shim", "import_err_code", "init_shim", "dirBuilder", "dir", "blockstore", "options", "unixfs", "UnixFS", "block", "encode", "prepare", "cid", "persist", "path", "init_shim", "buildFileBatch", "file", "blockstore", "options", "count", "previous", "entry", "parallelBatch", "isSingleBlockImport", "result", "reduce", "leaves", "leaf", "node", "UnixFS", "encode", "prepare", "persist", "CustomProgressEvent", "f", "links", "code", "block", "cid", "acc", "curr", "fileBuilder", "isIterable", "thing", "isAsyncIterable", "contentAsAsyncIterable", "content", "errCode", "defaultDagBuilder", "options", "source", "blockstore", "entry", "originalPath", "path", "isFileCandidate", "file", "bytesRead", "chunk", "currentChunkSize", "CustomProgressEvent", "fileBuilder", "dir", "dirBuilder", "init_shim", "import_err_code", "init_shim", "init_shim", "asUint8Array", "buf", "init_shim", "init_shim", "base10_exports", "__export", "base10", "init_shim", "base10", "baseX", "base16_exports", "__export", "base16", "base16upper", "init_shim", "base16", "rfc4648", "base16upper", "base2_exports", "__export", "base2", "init_shim", "base2", "rfc4648", "base256emoji_exports", "__export", "base256emoji", "init_shim", "alphabet", "alphabetBytesToChars", "p", "c", "i", "alphabetCharsToBytes", "encode", "data", "decode", "str", "byts", "char", "byt", "base256emoji", "from", "base36_exports", "__export", "base36", "base36upper", "init_shim", "base36", "baseX", "base36upper", "base64_exports", "__export", "base64", "base64pad", "base64url", "base64urlpad", "init_shim", "base64", "rfc4648", "base64pad", "base64url", "base64urlpad", "base8_exports", "__export", "base8", "init_shim", "base8", "rfc4648", "identity_exports", "__export", "identity", "init_shim", "identity", "from", "buf", "toString", "str", "fromString", "init_shim", "textEncoder", "textDecoder", "init_shim", "identity_exports", "__export", "identity", "init_shim", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "sha2_browser_exports", "__export", "sha256", "sha512", "init_shim", "init_shim", "from", "name", "code", "encode", "Hasher", "input", "result", "create", "digest", "sha", "name", "data", "sha256", "from", "sha512", "init_shim", "init_shim", "bases", "identity_exports", "base2_exports", "base8_exports", "base10_exports", "base16_exports", "base32_exports", "base36_exports", "base58_exports", "base64_exports", "base256emoji_exports", "hashes", "sha2_browser_exports", "init_shim", "allocUnsafe", "size", "asUint8Array", "createCodec", "name", "prefix", "encode", "decode", "string", "buf", "str", "ascii", "i", "allocUnsafe", "BASES", "bases", "bases_default", "fromString", "string", "encoding", "base", "bases_default", "asUint8Array", "defaultChunkValidator", "source", "content", "errCode", "fromString", "init_shim", "init_shim", "DEFAULT_MAX_CHILDREN_PER_NODE", "balanced", "options", "maxChildrenPerNode", "balancedLayout", "source", "reduce", "roots", "chunked", "src_default", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "Dir", "props", "options", "CID_V0", "CID", "CID_V1", "DirFlat", "Dir", "props", "options", "name", "value", "key", "child", "CID_V1", "CID_V0", "block", "links", "result", "entry", "unixfs", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "size", "acc", "curr", "init_shim", "init_shim", "init_shim", "import_murmurhash3js_revisited", "fromNumberTo32BitBuf", "number", "bytes", "i", "murmur332", "from", "input", "mur", "murmur3128", "bytes_exports", "murmur364", "init_shim", "init_shim", "import_sparse_array", "Bucket", "_Bucket", "options", "parent", "posAtParent", "SparseArray", "key", "value", "place", "child", "acc", "children", "map", "reduce", "index", "asyncMap", "asyncReduce", "asyncTransformBucket", "mapNode", "reduceNodes", "result", "hashValue", "fromString", "bucket", "newPlace", "pos", "object", "onlyChild", "exists", "hash", "o", "node", "_", "nodes", "output", "mappedChildren", "init_shim", "init_shim", "START_MASKS", "STOP_MASKS", "ConsumableBuffer", "value", "bits", "pendingBits", "result", "byte", "availableBits", "taking", "byteBitsToInt", "start", "length", "mask", "maskFor", "wrapHash", "hashFn", "hashing", "value", "InfiniteHash", "bits", "pendingBits", "result", "hash", "available", "took", "availableForUntake", "concat", "hashValue", "buffer", "ConsumableBuffer", "createHAMT", "options", "bucketOptions", "wrapHash", "Bucket", "hamtHashFn", "buf", "murmur3128", "HAMT_HASH_CODE", "DirSharded", "Dir", "props", "options", "createHAMT", "name", "value", "key", "calculateSize", "blockstore", "entry", "flush", "dir_sharded_default", "bucket", "shardRoot", "children", "links", "childrenSize", "i", "child", "labelPrefix", "Bucket", "shard", "subShard", "isDir", "dir", "flushedDir", "label", "size", "data", "UnixFS", "node", "buffer", "encode", "prepare", "cid", "persist", "obj", "CID_V0", "CID_V1", "flatToShard", "child", "dir", "threshold", "options", "newDir", "DirFlat", "convertToShard", "parent", "oldDir", "dir_sharded_default", "key", "init_shim", "toPathComponents", "path", "addToTree", "elem", "tree", "options", "pathElems", "toPathComponents", "lastIndex", "parent", "currentPath", "i", "pathElem", "last", "flatToShard", "dir", "Dir", "DirFlat", "flushAndYield", "blockstore", "defaultTreeBuilder", "source", "block", "rootDir", "singleRoot", "entry", "unwrapped", "importer", "source", "blockstore", "options", "candidates", "wrapWithDirectory", "shardSplitThresholdBytes", "cidVersion", "rawLeaves", "leafType", "fileImportConcurrency", "blockWriteConcurrency", "reduceSingleLeafToSelf", "chunker", "fixedSize", "chunkValidator", "defaultChunkValidator", "buildDag", "defaultDagBuilder", "balanced", "defaultBufferImporter", "buildTree", "defaultTreeBuilder", "entry", "parallelBatch", "hashers", "sha256", "codecs", "code", "src_exports", "Cid", "payload", "codecCode", "multihashCode", "codec", "DwnError", "DwnErrorCode", "hasher", "payloadBytes", "payloadHash", "CID", "str", "cid", "content", "asyncDataBlocks", "importer", "BlockstoreMock", "block", "_d", "asyncDataBlocks_1", "__asyncValues", "asyncDataBlocks_1_1", "_a", "_c", "dataStream", "asyncDataBlocks_2", "asyncDataBlocks_2_1", "crypto", "eciesjs", "import_readable_stream", "Encryption", "_Encryption", "key", "initializationVector", "plaintextStream", "cipher", "cipherStream", "chunk", "encryptedChunk", "finalChunk", "err", "decipher", "decryptedChunk", "publicKeyBytes", "plaintext", "publicKey", "plaintextBuffer", "cryptogram", "start", "end", "ephemeralPublicKey", "messageAuthenticationCode", "input", "privateKeyBuffer", "eciesEncryptionOutput", "EncryptionAlgorithm", "GeneralJwsBuilder", "_GeneralJwsBuilder", "jws", "payload", "signers", "Encoder", "builder", "signer", "protectedHeader", "protectedHeaderString", "protectedHeaderBase64UrlString", "signingInputString", "signingInputBytes", "signatureBytes", "signature", "init_shim", "init_shim", "cr", "getWebcryptoSubtle", "cr", "init_shim", "isBytes", "a", "bytes", "b", "lengths", "utils", "key", "keyParams", "cryptParams", "plaintext", "cr", "getWebcryptoSubtle", "iKey", "ciphertext", "mode", "getCryptParams", "algo", "nonce", "AAD", "generate", "bytes", "cbc", "ctr", "gcm", "KeyDerivationScheme", "HdKey", "_HdKey", "ancestorKey", "subDerivationPath", "ancestorPrivateKey", "Secp256k1", "ancestorPrivateKeyDerivationPath", "_a", "derivedPrivateKeyBytes", "derivedPrivateJwk", "derivedDescendantPrivateKey", "privateKey", "relativePath", "currentPrivateKey", "segment", "segmentBytes", "Encoder", "params", "hashAlgorithm", "initialKeyMaterial", "info", "keyLengthInBytes", "webCryptoKey", "getWebcryptoSubtle", "derivedKeyBuffer", "pathSegments", "DwnError", "DwnErrorCode", "init_shim", "lexicographicalCompare", "a", "b", "init_shim", "isEmptyObject", "obj", "_", "removeUndefinedProperties", "obj", "key", "Message", "_Message", "message", "author", "rawMessage", "dwnInterface", "dwnMethod", "schemaLookupKey", "validateJsonSchema", "Jws", "Cid", "a", "b", "cidA", "cidB", "lexicographicalCompare", "input", "descriptor", "signer", "delegatedGrant", "permissionGrantId", "protocolRole", "delegatedGrantId", "authorization", "additionalPayloadProperties", "descriptorCid", "signaturePayload", "removeUndefinedProperties", "signaturePayloadBytes", "Encoder", "GeneralJwsBuilder", "messages", "currentNewestMessage", "currentOldestMessage", "_a", "messageSignature", "messageDescriptor", "payloadJsonSchemaKey", "DwnError", "DwnErrorCode", "payloadJson", "expectedDescriptorCid", "PermissionGrant", "_PermissionGrant", "message", "Message", "permissionGrantEncoded", "permissionGrant", "Encoder", "init_shim", "DateSort", "FilterUtility", "keyValues", "orFilters", "filter", "indexedValues", "filterProperty", "filterValue", "indexValue", "indexValues", "indexedValue", "orFilterValue", "rangeFilter", "inputFilter", "prefix", "FilterSelector", "recordId", "attester", "parentId", "recipient", "contextId", "author", "protocolPath", "schema", "protocol", "remainingProperties", "__rest", "firstRemainingProperty", "singlePropertyFilter", "init_shim", "DwnInterfaceName", "DwnMethodName", "init_shim", "validateProtocolUrlNormalized", "url", "normalized", "normalizeProtocolUrl", "DwnError", "DwnErrorCode", "normalizeUrl", "validateSchemaUrlNormalized", "normalizeSchemaUrl", "fullUrl", "result", "removeTrailingSlash", "str", "Records", "_Records", "message", "DwnInterfaceName", "DwnMethodName", "recordsWrite", "ancestorPrivateKey", "cipherStream", "encryption", "matchingEncryptedKey", "key", "DwnError", "DwnErrorCode", "fullDerivationPath", "leafPrivateKey", "encryptedKeyBytes", "Encoder", "ephemeralPublicKey", "Secp256k1", "keyEncryptionInitializationVector", "messageAuthenticationCode", "dataEncryptionKey", "Encryption", "dataEncryptionInitializationVector", "keyDerivationScheme", "recordsWriteMessage", "descriptor", "contextId", "KeyDerivationScheme", "schema", "dataFormat", "protocolPathSegments", "firstContextSegment", "fullDescendantDerivationPath", "ancestorPrivateKeyDerivationPath", "_a", "subDerivationPath", "ancestorPrivateKeyBytes", "HdKey", "ancestorKeyDerivationPath", "descendantKeyDerivationPath", "i", "ancestorSegment", "descendantSegment", "lastIndex", "filter", "protocol", "normalizeProtocolUrl", "normalizeSchemaUrl", "filterCopy", "removeUndefinedProperties", "tags", "tagValues", "property", "value", "FilterUtility", "dateSort", "remainingFilter", "__rest", "tagsFilter", "dateCreated", "datePublished", "dateUpdated", "dateCreatedFilter", "datePublishedFilter", "DateSort", "messageTimestampFilter", "contextIdPrefixFilter", "authorSignaturePayload", "ownerSignaturePayload", "authorDelegatedGrantIdDefined", "authorDelegatedGrantDefined", "delegatedGrant", "PermissionGrant", "grantedTo", "signer", "Message", "delegateGrantCid", "ownerDelegatedGrantIdDefined", "ownerDelegatedGrantDefined", "_b", "Jws", "signaturePayload", "deleteToBePerformed", "newestExistingMessage", "recipient", "recipientFilter", "author", "authorFilter", "GrantAuthorization", "_GrantAuthorization", "input", "incomingMessage", "expectedGrantor", "expectedGrantee", "permissionGrant", "messageStore", "incomingMessageDescriptor", "grantedFor", "actualGrantee", "DwnError", "DwnErrorCode", "actualGrantor", "incomingMessageTimestamp", "query", "revokes", "oldestExistingRevoke", "Message", "dwnInterface", "dwnMethod", "init_shim", "PermissionConditionPublication", "RecordsGrantAuthorization", "_RecordsGrantAuthorization", "input", "recordsWriteMessage", "expectedGrantor", "expectedGrantee", "permissionGrant", "messageStore", "GrantAuthorization", "recordsReadMessage", "recordsWriteMessageToBeRead", "incomingMessage", "protocolInGrant", "protocolInMessage", "DwnError", "DwnErrorCode", "recordsDeleteMessage", "recordsWriteToDelete", "protocolOfRecordToDelete", "grantScope", "conditions", "PermissionConditionPublication", "INTRINSICS", "MakeIntrinsicClass", "Class", "name", "Object", "defineProperty", "prototype", "Symbol", "toStringTag", "value", "writable", "enumerable", "configurable", "prop", "getOwnPropertyNames", "desc", "getOwnPropertyDescriptor", "DefineIntrinsic", "key", "Error", "GetIntrinsic", "intrinsic", "r", "o", "EPOCHNANOSECONDS", "TIMEZONE_ID", "ISO_YEAR", "ISO_MONTH", "ISO_DAY", "ISO_HOUR", "ISO_MINUTE", "ISO_SECOND", "ISO_MILLISECOND", "ISO_MICROSECOND", "ISO_NANOSECOND", "CALENDAR", "DATE_BRAND", "YEAR_MONTH_BRAND", "MONTH_DAY_BRAND", "INSTANT", "TIME_ZONE", "YEARS", "MONTHS", "WEEKS", "DAYS", "HOURS", "MINUTES", "SECONDS", "MILLISECONDS", "MICROSECONDS", "NANOSECONDS", "CALENDAR_ID", "globalSlots", "WeakMap", "GetSlotsSymbol", "for", "_a", "globalThis", "container", "get", "GetSlots", "CreateSlotsSymbol", "_b", "set", "create", "CreateSlots", "HasSlot", "ids", "myslots", "every", "id", "GetSlot", "TypeError", "SetSlot", "slots", "tzComponent", "timeZoneID", "RegExp", "source", "join", "yearpart", "monthpart", "daypart", "datesplit", "timesplit", "offset", "offsetpart", "annotation", "zoneddatetime", "time", "yearmonth", "monthday", "fraction", "durationTime", "duration", "ArrayIncludes", "Array", "includes", "ArrayPrototypePush", "push", "IntlDateTimeFormat", "Intl", "DateTimeFormat", "MathMin", "Math", "min", "MathMax", "max", "MathAbs", "abs", "MathFloor", "floor", "MathSign", "sign", "MathTrunc", "trunc", "NumberIsNaN", "Number", "isNaN", "NumberIsFinite", "isFinite", "NumberCtor", "StringCtor", "String", "NumberMaxSafeInteger", "MAX_SAFE_INTEGER", "ObjectCreate", "ObjectGetOwnPropertyDescriptor", "ReflectApply", "Reflect", "apply", "ReflectOwnKeys", "ownKeys", "ZERO", "JSBI", "BigInt", "ONE", "SIXTY", "TWENTY_FOUR", "THOUSAND", "MILLION", "BILLION", "NEGATIVE_ONE", "HOUR_NANOS", "multiply", "MINUTE_NANOS", "DAY_NANOS", "NS_MIN", "NS_MAX", "YEAR_MIN", "YEAR_MAX", "BEFORE_FIRST_OFFSET_TRANSITION", "ABOUT_TEN_YEARS_NANOS", "ABOUT_ONE_YEAR_NANOS", "TWO_WEEKS_NANOS", "BUILTIN_CALENDAR_IDS", "isZero", "equal", "GetMethod", "obj", "methodName", "result", "Call", "target", "thisArgument", "argumentsList", "args", "arguments", "length", "IsObject", "ToNumber", "ToIntegerOrInfinity", "number", "integer", "IsIntegralNumber", "argument", "absValue", "ToString", "ToIntegerWithTruncation", "RangeError", "ToPositiveIntegerWithTruncation", "valueParam", "property", "ToIntegerIfIntegral", "divmod", "x", "y", "quotient", "divide", "remainder", "isNegativeJSBI", "lessThan", "signJSBI", "BUILTIN_CASTS", "Map", "BUILTIN_DEFAULTS", "SINGULAR_PLURAL_UNITS", "SINGULAR_FOR", "map", "e", "PLURAL_FOR", "p", "s", "UNITS_DESCENDING", "DURATION_FIELDS", "from", "keys", "sort", "IntlDateTimeFormatEnUsCache", "getIntlDateTimeFormatEnUsForTimeZone", "timeZoneIdentifier", "instance", "timeZone", "hour12", "era", "year", "month", "day", "hour", "minute", "second", "ToObject", "CopyDataProperties", "excludedKeys", "excludedValues", "nextKey", "some", "is", "propertyIsEnumerable", "call", "propValue", "IsTemporalInstant", "item", "IsTemporalTimeZone", "IsTemporalCalendar", "IsTemporalDuration", "IsTemporalDate", "IsTemporalTime", "IsTemporalDateTime", "IsTemporalYearMonth", "IsTemporalMonthDay", "IsTemporalZonedDateTime", "RejectTemporalLikeObject", "calendar", "ParseTemporalTimeZone", "stringIdent", "ianaName", "z", "PARSE.timeZoneID", "test", "ParseISODateTime", "GetCanonicalTimeZoneIdentifier", "FormatTimeZoneOffsetString", "ParseTimeZoneOffsetString", "MaybeFormatCalendarAnnotation", "showCalendar", "FormatCalendarAnnotation", "ToTemporalCalendarIdentifier", "isoString", "match", "PARSE.zoneddatetime", "exec", "yearString", "slice", "hasTime", "millisecond", "microsecond", "nanosecond", "offsetSign", "offsetHours", "offsetMinutes", "offsetSeconds", "offsetFraction", "endsWith", "annotations", "critical", "matchAll", "PARSE.annotation", "RejectDateTime", "ParseTemporalYearMonthString", "PARSE.yearmonth", "referenceISODay", "ParseTemporalMonthDayString", "PARSE.monthday", "referenceISOYear", "ParseTemporalInstant", "offsetNs", "BalanceISODateTime", "epochNs", "GetUTCEpochNanoseconds", "RegulateISODate", "yearParam", "monthParam", "dayParam", "overflow", "RejectISODate", "ConstrainISODate", "RegulateTime", "hourParam", "minuteParam", "secondParam", "millisecondParam", "microsecondParam", "nanosecondParam", "RejectTime", "ConstrainToRange", "ToTemporalDurationRecord", "PARSE.duration", "element", "years", "months", "weeks", "days", "hours", "fHours", "minutesStr", "fMinutes", "secondsStr", "fSeconds", "minutes", "seconds", "excessNanoseconds", "nanoseconds", "microseconds", "milliseconds", "RejectDuration", "partial", "temporalDurationLike", "undefined", "any", "ToTemporalOverflow", "options", "GetOption", "ToTemporalDisambiguation", "ToTemporalRoundingMode", "fallback", "ToTemporalOffset", "ToCalendarNameOption", "ToTemporalRoundingIncrement", "increment", "roundingIncrement", "integerIncrement", "ValidateTemporalRoundingIncrement", "dividend", "inclusive", "maximum", "ToFractionalSecondDigits", "normalizedOptions", "digitsValue", "fractionalSecondDigits", "digitCount", "ToSecondsStringPrecisionRecord", "smallestUnit", "precision", "unit", "REQUIRED", "GetTemporalUnit", "unitGroup", "requiredOrDefault", "extraValues", "allowedSingular", "singular", "category", "defaultVal", "allowedValues", "plural", "retval", "has", "ToRelativeTemporalObject", "relativeTo", "offsetBehaviour", "matchMinutes", "TemporalDateTimeToDate", "GetTemporalCalendarSlotValueWithISODefault", "fieldNames", "CalendarFields", "fields", "PrepareTemporalFields", "dateOptions", "InterpretTemporalDateTimeFields", "ToTemporalTimeZoneSlotValue", "IsBuiltinCalendar", "ASCIILowercase", "CreateTemporalDate", "CreateTemporalZonedDateTime", "InterpretISODateTimeOffset", "DefaultTemporalLargestUnit", "v", "LargerOfTwoTemporalUnits", "unit1", "unit2", "indexOf", "bag", "requiredFields", "emptySourceErrorMessage", "ToTemporalTimeRecord", "completeness", "field", "valueDesc", "ToTemporalDate", "itemParam", "GetPlainDateTimeFor", "CalendarDateFromFields", "date", "ToTemporalDateTime", "CreateTemporalDateTime", "ToTemporalDuration", "ToTemporalInstant", "ns", "ToTemporalMonthDay", "calendarAbsent", "calendarFromItem", "ToTemporalCalendarSlotValue", "monthCode", "CalendarMonthDayFromFields", "CreateTemporalMonthDay", "ToTemporalTime", "PARSE.time", "ToTemporalYearMonth", "CalendarYearMonthFromFields", "CreateTemporalYearMonth", "disambiguation", "offsetOpt", "matchMinute", "dt", "GetInstantFor", "subtract", "possibleInstants", "GetPossibleInstantsFor", "candidate", "candidateOffset", "GetOffsetNanosecondsFor", "roundedCandidateOffset", "toNumber", "RoundNumberToIncrement", "offsetStr", "timeZoneString", "toString", "DisambiguatePossibleInstants", "ToTemporalZonedDateTime", "CreateTemporalDateSlots", "isoYear", "isoMonth", "isoDay", "RejectDateRange", "TemporalPlainDate", "CreateTemporalDateTimeSlots", "h", "ms", "I", "RejectDateTimeRange", "TemporalPlainDateTime", "CreateTemporalMonthDaySlots", "TemporalPlainMonthDay", "CreateTemporalYearMonthSlots", "RejectToRange", "TemporalPlainYearMonth", "CreateTemporalZonedDateTimeSlots", "epochNanoseconds", "ValidateEpochNanoseconds", "instant", "TemporalZonedDateTime", "fieldNamesParam", "calendarObj", "CalendarMergeFields", "additionalFields", "CalendarDateAdd", "dateAddParam", "dateAdd", "CalendarDateUntil", "otherDate", "dateUntilParam", "dateUntil", "CalendarYear", "dateLike", "CalendarMonth", "CalendarMonthCode", "CalendarDay", "CalendarEra", "CalendarEraYear", "CalendarDayOfWeek", "CalendarDayOfYear", "CalendarWeekOfYear", "CalendarYearOfWeek", "CalendarDaysInWeek", "CalendarDaysInMonth", "CalendarDaysInYear", "CalendarMonthsInYear", "CalendarInLeapYear", "calendarLike", "object", "identifier", "slotValue", "ToTemporalCalendarObject", "CalendarEquals", "one", "two", "ThrowIfCalendarsNotEqual", "errorMessageAction", "cal1", "cal2", "ConsolidateCalendars", "sOne", "sTwo", "dateFromFieldsParam", "temporalTimeZoneLike", "ToTemporalTimeZoneIdentifier", "ToTemporalTimeZoneObject", "TimeZoneEquals", "dateTime", "TemporalDateTimeToTime", "getOffsetNanosecondsForParam", "timeZoneObject", "GetOffsetStringFor", "GetISOPartsFromEpoch", "Instant", "numInstants", "utcns", "dayBefore", "dayAfter", "add", "offsetBefore", "PlainDateTime", "earlier", "AddDateTime", "later", "possible", "getPossibleInstantsForParam", "ISOYearString", "ISODateTimePartString", "part", "FormatSecondsStringPart", "secs", "fractionNumber", "padStart", "TemporalInstantToString", "outputTimeZone", "FormatISOTimeZoneOffsetString", "TemporalDurationToString", "formatNumber", "num", "DurationSign", "roundingMode", "RoundDuration", "dateParts", "timeParts", "secondParts", "nsBigInt", "S", "msBigInt", "secondsBigInt", "total", "TotalDurationNanoseconds", "decimalPart", "unshift", "TemporalDateToString", "TemporalDateTimeToString", "RoundISODateTime", "TemporalMonthDayToString", "monthDay", "resultString", "calendarID", "calendarString", "TemporalYearMonthToString", "yearMonth", "TemporalZonedDateTimeToString", "zdt", "showTimeZone", "showOffset", "RoundInstant", "tz", "IsTimeZoneOffsetString", "string", "OFFSET", "resolvedOptions", "GetNamedTimeZoneOffsetNanoseconds", "GetNamedTimeZoneDateTimeParts", "reducedYear", "yearCycles", "nsIn400YearCycle", "reducedUTC", "utc", "offsetNanosecondsParam", "offsetNanoseconds", "hourString", "minuteString", "secondString", "post", "legacyDate", "Date", "setUTCHours", "setUTCFullYear", "getTime", "greaterThan", "epochMilliseconds", "nanos", "getUTCFullYear", "getUTCMonth", "getUTCDate", "getUTCHours", "getUTCMinutes", "getUTCSeconds", "getUTCMilliseconds", "datetime", "format", "parts", "split", "toUpperCase", "maxJSBI", "afterLatestPossibleTzdbRuleChange", "SystemUTCEpochNanoSeconds", "GetNamedTimeZoneNextTransition", "oneYearLater", "uppercap", "leftNanos", "leftOffsetNs", "rightNanos", "rightOffsetNs", "bisect", "GetNamedTimeZonePreviousTransition", "afterLatestRule", "isFarFuture", "lowercap", "lastPrecomputed", "newTimeToCheck", "LeapYear", "ISODaysInMonth", "standard", "leapyear", "DayOfWeek", "m", "Y", "c", "dow", "DayOfYear", "WeekOfYear", "doy", "doj", "week", "mon", "w", "d", "l", "BalanceISOYearMonth", "BalanceISODate", "daysIn400YearCycle", "nCycles", "daysInYear", "testYear", "deltaDays", "BalanceTime", "NonNegativeBigIntDivmod", "daysParam", "hoursParam", "minutesParam", "secondsParam", "millisecondsParam", "microsecondsParam", "nanosecondsParam", "offsetShift", "NanosecondsToDays", "TemporalInstant", "dayLengthNs", "startNs", "start", "endNs", "end", "dtStart", "dtEnd", "daysNumber", "DifferenceISODateTime", "intermediateNs", "AddZonedDateTime", "daysBigInt", "isOverflow", "relativeInstant", "oneDayFartherNs", "relativeNs", "greaterThanOrEqual", "BalanceDuration", "largestUnit", "BalancePossiblyInfiniteDuration", "nanosecondsBigInt", "microsecondsBigInt", "millisecondsBigInt", "minutesBigInt", "hoursBigInt", "UnbalanceDurationRelative", "yearsParam", "monthsParam", "weeksParam", "relativeToParam", "TemporalDuration", "signBI", "oneYear", "oneMonth", "oneWeek", "newRelativeTo", "untilOptions", "untilResult", "oneYearMonths", "oneYearDays", "MoveRelativeDate", "oneMonthDays", "oneWeekDays", "CalculateOffsetShift", "after", "CreateNegatedTemporalDuration", "propSign", "DifferenceISODate", "y1", "m1", "d1", "y2", "m2", "d2", "CompareISODate", "mid", "AddISODate", "midSign", "larger", "smaller", "DifferenceTime", "h1", "min1", "s1", "ms1", "n", "ns1", "h2", "min2", "s2", "ms2", "ns2", "DifferenceInstant", "diff", "y1Param", "mon1Param", "d1Param", "mon2", "f", "mon1", "timeSign", "date1", "date2", "dateLargestUnit", "CopyOptions", "DifferenceZonedDateTime", "nsDiff", "timeRemainderNs", "intermediate", "GetDifferenceSettings", "op", "group", "disallowed", "fallbackSmallest", "smallestLargestDefaultUnit", "ALLOWED_UNITS", "reduce", "allowed", "unitInfo", "defaultLargestUnit", "DifferenceTemporalInstant", "operation", "otherParam", "other", "settings", "onens", "twons", "DifferenceTemporalPlainDate", "plainDate", "DifferenceTemporalPlainDateTime", "plainDateTime", "DifferenceTemporalPlainTime", "plainTime", "DifferenceTemporalPlainYearMonth", "thisFields", "thisDate", "otherFields", "DifferenceTemporalZonedDateTime", "zonedDateTime", "AdjustRoundedDurationDays", "AddTime", "AddDuration", "w1", "w2", "G", "dateDuration1", "dateDuration2", "differenceOptions", "AddInstant", "i", "sum", "addedDate", "dtIntermediate", "AddDurationToOrSubtractDurationFromDuration", "optionsParam", "GetOptionsObject", "AddDurationToOrSubtractDurationFromInstant", "durationLike", "disallowedProperties", "record", "AddDurationToOrSubtractDurationFromPlainDateTime", "AddDurationToOrSubtractDurationFromPlainTime", "temporalTime", "AddDurationToOrSubtractDurationFromPlainYearMonth", "fieldsCopy", "startDate", "Duration", "nextMonth", "endOfMonth", "durationToAdd", "optionsCopy", "AddDurationToOrSubtractDurationFromZonedDateTime", "quantity", "mode", "tiebreaker", "tie", "expandIsNearer", "wholeDays", "roundedRemainder", "nsPerTimeUnit", "RoundTime", "nsPerUnit", "rounded", "DaysUntil", "MoveRelativeZonedDateTime", "direction", "dayStart", "dayEnd", "zdtRelative", "dayLength", "yearsDuration", "yearsLater", "yearsMonthsWeeksLater", "wholeDaysLater", "yearsPassed", "oldRelativeTo", "divisor", "BigIntDivideToNumber", "yearsMonths", "yearsMonthsLater", "allNanoseconds", "ComparisonResult", "BigIntFloorDiv", "left", "right", "ToBigIntExternal", "arg", "jsbiBI", "ToBigInt", "prim", "toPrimFn", "toPrimitive", "now", "DefaultTimeZone", "CreateOnePropObject", "propName", "str", "replace", "code", "charCodeAt", "fromCharCode", "PARSE.offset", "getState", "leftParam", "rightParam", "lstateParam", "rstateParam", "lstate", "rstate", "middle", "mstate", "DATE", "YM", "MD", "TIME", "DATETIME", "INST", "ORIGINAL", "TZ_RESOLVED", "CAL_ID", "LOCALE", "OPTIONS", "descriptor", "ObjectAssign", "assign", "ObjectHasOwnProperty", "hasOwnProperty", "getPropLazy", "val", "DateTimeFormatImpl", "locale", "this", "hasOptions", "original", "ro", "clonedResolved", "dateAmend", "yearMonthAmend", "monthDayAmend", "timeAmend", "datetimeAmend", "instantAmend", "supportedLocalesOf", "locales", "propertyDescriptors", "rest", "formatter", "extractOverrides", "formatRange", "a", "b", "isTemporalObject", "sameTemporalType", "aa", "aformatter", "bb", "bformatter", "formatToParts", "formatRangeToParts", "amend", "amended", "opt", "weekday", "timeZoneName", "dateStyle", "hasTimeOptions", "dayPeriod", "timeStyle", "hasDateOptions", "ES.IsTemporalDate", "ES.IsTemporalTime", "ES.IsTemporalDateTime", "ES.IsTemporalZonedDateTime", "ES.IsTemporalYearMonth", "ES.IsTemporalMonthDay", "ES.IsTemporalInstant", "temporalObj", "main", "DateTime", "ES.GetInstantFor", "ES.ToTemporalCalendarIdentifier", "ut", "ht", "constructor", "ES.ToBigInt", "ES.ValidateEpochNanoseconds", "epochSeconds", "ES.BigIntFloorDiv", "epochMicroseconds", "ES.ToBigIntExternal", "ES.AddDurationToOrSubtractDurationFromInstant", "until", "ES.DifferenceTemporalInstant", "since", "round", "roundToParam", "roundTo", "ES.CreateOnePropObject", "ES.GetOptionsObject", "ES.ToTemporalRoundingIncrement", "ES.ToTemporalRoundingMode", "ES.GetTemporalUnit", "ES.REQUIRED", "ES.ValidateTemporalRoundingIncrement", "roundedNs", "ES.RoundInstant", "equals", "ES.ToTemporalInstant", "digits", "ES.ToFractionalSecondDigits", "ES.ToTemporalTimeZoneSlotValue", "ES.ToSecondsStringPrecisionRecord", "ES.TemporalInstantToString", "toJSON", "toLocaleString", "valueOf", "toZonedDateTime", "ES.IsObject", "ES.ToTemporalCalendarSlotValue", "ES.CreateTemporalZonedDateTime", "toZonedDateTimeISO", "timeZoneParam", "static", "epochSecondsParam", "ES.ToNumber", "epochMillisecondsParam", "epochMicrosecondsParam", "epochNanosecondsParam", "oneParam", "twoParam", "oneNs", "twoNs", "ArraySort", "ObjectEntries", "entries", "OriginalSet", "Set", "SetPrototypeAdd", "SetPrototypeValues", "values", "impl", "Calendar", "idParam", "ES.ToString", "ES.IsBuiltinCalendar", "ES.ASCIILowercase", "ES.IsTemporalCalendar", "dateFromFields", "yearMonthFromFields", "monthDayFromFields", "fieldsArray", "delete", "mergeFields", "fieldsParam", "additionalFieldsParam", "ES.ToObject", "ES.CopyDataProperties", "additionalFieldsCopy", "additionalKeys", "overriddenKeys", "fieldKeysToIgnore", "merged", "fieldsKeys", "ES.Call", "dateParam", "durationParam", "ES.ToTemporalDate", "ES.ToTemporalDuration", "ES.ToTemporalOverflow", "ES.BalanceDuration", "eraYear", "dayOfWeek", "dayOfYear", "weekOfYear", "yearOfWeek", "daysInWeek", "daysInMonth", "monthsInYear", "inLeapYear", "ES.ToTemporalCalendarObject", "monthCodeNumberPart", "startsWith", "buildMonthCode", "leap", "resolveNonLunisolarMonth", "calendarDate", "monthsPerYear", "ES.RejectToRange", "ES.ConstrainToRange", "numberPart", "calendarSlotValue", "ES.PrepareTemporalFields", "ES.RegulateISODate", "ES.CreateTemporalDate", "ES.CreateTemporalYearMonth", "useYear", "ES.CreateTemporalMonthDay", "ix", "ES.AddISODate", "ES.DifferenceISODate", "ES.DayOfWeek", "ES.DayOfYear", "ES.WeekOfYear", "ES.ISODaysInMonth", "ES.LeapYear", "OneObjectCache", "cacheToClone", "calls", "hits", "misses", "performance", "entry", "MAX_CACHE_ENTRIES", "report", "setObject", "objectMap", "cache", "toUtcIsoDateString", "ES.ISOYearString", "ES.ISODateTimePartString", "simpleDateDiff", "HelperBase", "eraLength", "hasEra", "erasBeginMidYear", "getFormatter", "isoToCalendarDate", "isoDate", "JSON", "stringify", "func", "cached", "dateTimeFormat", "type", "matches", "monthExtra", "normalize", "toLowerCase", "reviseIntlEra", "checkIcuBugs", "adjustCalendarDate", "forEach", "keyReverse", "validateCalendarDate", "constantEra", "calendarDateParam", "fromLegacyDate", "calendarType", "largestMonth", "regulateMonthDayNaive", "maximumMonthLength", "calendarToIsoDate", "originalDate", "keyOriginal", "isoEstimate", "estimateIsoDate", "calculateSameMonthResult", "diffDays", "testIsoEstimate", "addDaysIso", "minimumMonthLength", "testCalendarDate", "roundtripEstimate", "diffTotalDaysEstimate", "compareCalendarDates", "oldRoundtripEstimate", "oldSign", "temporalToCalendarDate", "date1Param", "date2Param", "ES.ComparisonResult", "regulateDate", "addDaysCalendar", "addedIso", "addMonthsCalendar", "absMonths", "oldCalendarDate", "daysInPreviousMonth", "monthsInOldYear", "addCalendar", "addedYears", "addedMonths", "initialDays", "untilCalendar", "calendarOne", "calendarTwo", "calendarDaysUntil", "totalDays", "diffYears", "diffInYearSign", "current", "next", "addedIsoDate", "addedCalendarDate", "endOfMonthIso", "previousMonthDate", "previousMonth", "lastDayOfPreviousMonthIso", "startOfCalendarYear", "startOfCalendarMonth", "oneIso", "twoIso", "isoDaysUntil", "closestCalendar", "closestIso", "calendarOfStartDateIso", "calendarYear", "roundTripCalendarDate", "HebrewHelper", "Tishri", "regular", "Heshvan", "Kislev", "Tevet", "Shevat", "Adar", "Nisan", "Iyar", "Sivan", "Tamuz", "Av", "Elul", "minMaxMonthLength", "minOrMax", "getMonthCode", "monthInfo", "find", "IslamicBaseHelper", "DAYS_PER_ISLAMIC_YEAR", "DAYS_PER_ISO_YEAR", "IslamicHelper", "IslamicUmalquraHelper", "IslamicTblaHelper", "IslamicCivilHelper", "IslamicRgsaHelper", "IslamicCcHelper", "PersianHelper", "IndianHelper", "nextYear", "vulnerableToBceBug", "toLocaleDateString", "isGregorianLeapYear", "getMonthInfo", "GregorianBaseHelper", "originalEras", "super", "v8IsVulnerableToJulianBug", "calendarIsVulnerableToJulianBug", "eras", "anchorEra", "erasParam", "reverseOf", "filter", "isAnchor", "anchorEpoch", "hasYearZero", "reversedEra", "isoEpoch", "e1", "e2", "lastEraReversed", "genericName", "completeEraYear", "checkField", "currentValue", "eraFromYear", "adjustedCalendarDate", "matchingEra", "ES.CompareISODate", "OrthodoxBaseHelper", "EthioaaHelper", "CopticHelper", "EthiopicHelper", "RocHelper", "BuddhistHelper", "GregoryHelper", "JapaneseHelper", "ChineseBaseHelper", "getMonthList", "getCalendarDate", "daysPastFeb1", "isoStringFeb1", "setUTCDate", "newYearGuess", "calendarMonthString", "tv", "calendarDay", "calendarYearToVerify", "isoDaysDelta", "oldCalendarDay", "oldMonthString", "monthIndex", "done", "monthString", "withoutML", "monthEntries", "matchingMonthEntry", "ChineseHelper", "DangiHelper", "NonIsoCalendar", "helper", "getCacheForObject", "added", "isoAdded", "newTemporalObject", "cacheOne", "cacheTwo", "startOfYear", "startOfMonthCalendar", "startOfNextMonthCalendar", "startOfYearCalendar", "startOfNextYearCalendar", "Helper", "PlainDate", "isoYearParam", "isoMonthParam", "isoDayParam", "calendarParam", "ES.CreateTemporalDateSlots", "ES.ToIntegerWithTruncation", "calendarId", "ES.CalendarEra", "ES.CalendarEraYear", "ES.CalendarYear", "ES.CalendarMonth", "ES.CalendarMonthCode", "ES.CalendarDay", "ES.CalendarDayOfWeek", "ES.CalendarDayOfYear", "ES.CalendarWeekOfYear", "ES.CalendarYearOfWeek", "ES.CalendarDaysInWeek", "ES.CalendarDaysInMonth", "ES.CalendarDaysInYear", "ES.CalendarMonthsInYear", "ES.CalendarInLeapYear", "with", "temporalDateLike", "ES.RejectTemporalLikeObject", "ES.CalendarFields", "ES.CalendarMergeFields", "ES.CalendarDateFromFields", "withCalendar", "ES.CalendarDateAdd", "ES.CreateNegatedTemporalDuration", "ES.DifferenceTemporalPlainDate", "slot", "ES.CalendarEquals", "ES.TemporalDateToString", "ES.ToCalendarNameOption", "toPlainDateTime", "temporalTimeParam", "ES.CreateTemporalDateTime", "ES.ToTemporalTime", "ES.IsTemporalTimeZone", "timeZoneLike", "toPlainYearMonth", "ES.CalendarYearMonthFromFields", "toPlainMonthDay", "ES.CalendarMonthDayFromFields", "getISOFields", "getCalendar", "ES.CreateTemporalDateTimeSlots", "temporalDateTimeLike", "ES.InterpretTemporalDateTimeFields", "withPlainTime", "withPlainDate", "temporalDateParam", "temporalDate", "ES.ConsolidateCalendars", "ES.AddDurationToOrSubtractDurationFromPlainDateTime", "ES.DifferenceTemporalPlainDateTime", "ES.RoundISODateTime", "ES.ToTemporalDateTime", "ES.TemporalDateTimeToString", "ES.ToTemporalDisambiguation", "toPlainDate", "ES.TemporalDateTimeToDate", "toPlainTime", "ES.TemporalDateTimeToTime", "isoHour", "isoMicrosecond", "isoMillisecond", "isoMinute", "isoNanosecond", "isoSecond", "val1", "val2", "ES.ToIntegerIfIntegral", "ES.RejectDuration", "ES.IsTemporalDuration", "ES.DurationSign", "blank", "partialDuration", "negated", "ES.AddDurationToOrSubtractDurationFromDuration", "ES.DefaultTemporalLargestUnit", "ES.ToRelativeTemporalObject", "smallestUnitPresent", "ES.LargerOfTwoTemporalUnits", "largestUnitPresent", "ES.UnbalanceDurationRelative", "ES.RoundDuration", "ES.AdjustRoundedDurationDays", "ES.MoveRelativeZonedDateTime", "balanceResult", "ES.BalancePossiblyInfiniteDuration", "Infinity", "ES.TemporalDurationToString", "DurationFormat", "console", "warn", "B", "shift1", "ES.CalculateOffsetShift", "shift2", "totalNs1", "ES.TotalDurationNanoseconds", "totalNs2", "PlainMonthDay", "referenceISOYearParam", "ES.CreateTemporalMonthDaySlots", "temporalMonthDayLike", "ES.ToTemporalMonthDay", "ES.TemporalMonthDayToString", "receiverFieldNames", "inputFieldNames", "mergedFields", "ES.SystemUTCEpochNanoSeconds", "ES.DefaultTimeZone", "tZ", "ES.GetPlainDateTimeFor", "plainDateTimeISO", "Now", "plainDateISO", "plainTimeISO", "timeZoneId", "zonedDateTimeISO", "TemporalTimeToString", "ES.RoundTime", "ES.FormatSecondsStringPart", "PlainTime", "isoHourParam", "isoMinuteParam", "isoSecondParam", "isoMillisecondParam", "isoMicrosecondParam", "isoNanosecondParam", "ES.RejectTime", "temporalTimeLike", "partialTime", "ES.ToTemporalTimeRecord", "ES.RegulateTime", "ES.AddDurationToOrSubtractDurationFromPlainTime", "ES.DifferenceTemporalPlainTime", "TimeZone", "timeZoneIdentifierParam", "ES.GetCanonicalTimeZoneIdentifier", "getOffsetNanosecondsFor", "instantParam", "ES.IsTimeZoneOffsetString", "ES.ParseTimeZoneOffsetString", "ES.GetNamedTimeZoneOffsetNanoseconds", "getOffsetStringFor", "ES.GetOffsetStringFor", "getPlainDateTimeFor", "getInstantFor", "dateTimeParam", "getPossibleInstantsFor", "ES.GetUTCEpochNanoseconds", "nsEarlier", "nsLater", "earliest", "latest", "getNextTransition", "startingPointParam", "startingPoint", "ES.GetNamedTimeZoneNextTransition", "getPreviousTransition", "ES.GetNamedTimeZonePreviousTransition", "ES.ToTemporalTimeZoneObject", "PlainYearMonth", "referenceISODayParam", "ES.CreateTemporalYearMonthSlots", "temporalYearMonthLike", "ES.AddDurationToOrSubtractDurationFromPlainYearMonth", "ES.DifferenceTemporalPlainYearMonth", "ES.ToTemporalYearMonth", "ES.TemporalYearMonthToString", "customResolvedOptions", "ZonedDateTime", "ES.CreateTemporalZonedDateTimeSlots", "ES.ToTemporalTimeZoneIdentifier", "hoursInDay", "today", "tomorrowFields", "tomorrow", "todayNs", "tomorrowNs", "ES.BigIntDivideToNumber", "ES.GetOffsetNanosecondsFor", "temporalZonedDateTimeLike", "ES.ToTemporalOffset", "ES.InterpretISODateTimeOffset", "thisDt", "withTimeZone", "ES.AddDurationToOrSubtractDurationFromZonedDateTime", "ES.DifferenceTemporalZonedDateTime", "instantStart", "ES.AddZonedDateTime", "lessThanOrEqual", "ES.ToTemporalZonedDateTime", "ES.TimeZoneEquals", "ES.TemporalZonedDateTimeToString", "localeCalendarIdentifier", "calendarIdentifier", "startOfDay", "toInstant", "getTimeZone", "Pt", "Et", "types", "Temporal.Instant", "Temporal.Calendar", "Temporal.PlainDate", "Temporal.PlainDateTime", "Temporal.Duration", "Temporal.PlainMonthDay", "Temporal.PlainTime", "Temporal.TimeZone", "Temporal.PlainYearMonth", "Temporal.ZonedDateTime", "type", "descriptor", "Object", "getOwnPropertyDescriptor", "configurable", "enumerable", "writable", "defineProperty", "Time", "_Time", "durationInMillisecond", "resolve", "Pt", "options", "year", "month", "day", "hour", "minute", "second", "millisecond", "microsecond", "offset", "timestamp", "timestampInstant", "offsetDuration", "DwnError", "DwnErrorCode", "RecordsWrite", "_RecordsWrite", "DwnError", "DwnErrorCode", "Message", "_a", "Jws", "message", "parentContextId", "recordsWriteMessage", "recordsWrite", "options", "dataCid", "Cid", "dataSize", "_b", "currentTime", "Time", "descriptor", "DwnInterfaceName", "DwnMethodName", "normalizeProtocolUrl", "normalizeSchemaUrl", "_c", "_d", "removeUndefinedProperties", "recordId", "descriptorCid", "attestation", "encryption", "contextId", "segment", "sourceMessage", "sourceRecordsWrite", "published", "datePublished", "createOptions", "Records", "encryptionInput", "signer", "delegatedGrant", "permissionGrantId", "protocolRole", "delegatedGrantId", "authorDid", "signature", "ownerSignature", "dateRecordCreated", "messageTimestamp", "expectedContextId", "signaturePayload", "expectedAttestationCid", "actualAttestationCid", "expectedEncryptionCid", "actualEncryptionCid", "validateProtocolUrlNormalized", "validateSchemaUrlNormalized", "payloadJson", "expectedDescriptorCid", "propertyCount", "author", "entryIdInput", "isLatestBaseState", "tags", "__rest", "indexes", "flattenedTags", "messageStore", "PermissionGrant", "RecordsGrantAuthorization", "keyEncryption", "keyEncryptionInput", "KeyDerivationScheme", "publicKeyBytes", "Secp256k1", "keyEncryptionOutput", "Encryption", "encryptedKey", "Encoder", "ephemeralPublicKey", "keyEncryptionInitializationVector", "messageAuthenticationCode", "encryptedKeyData", "EncryptionAlgorithm", "signers", "attestationPayload", "attestationPayloadBytes", "GeneralJwsBuilder", "input", "attestationCid", "encryptionCid", "signaturePayloadBytes", "messages", "existingWriteMessage", "newMessage", "mutableDescriptorProperties", "descriptorPropertyNames", "descriptorPropertyName", "valueInExistingWrite", "valueInNewMessage", "tenant", "query", "existingMessages", "newestWrite", "initialRecordsWriteMessage", "authenticate", "authorizationModel", "didResolver", "DwnError", "DwnErrorCode", "GeneralJwsVerifier", "authorDelegatedGrant", "RecordsWrite", "ownerDelegatedGrant", "AllowAllTenantGate", "_did", "init_shim", "AbstractMessage", "Message", "message", "Jws", "RecordsQuery", "_RecordsQuery", "AbstractMessage", "message", "DateSort", "DwnError", "DwnErrorCode", "signaturePayload", "Message", "Records", "validateProtocolUrlNormalized", "validateSchemaUrlNormalized", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "signer", "authorization", "messageStore", "delegatedGrant", "PermissionGrant", "RecordsGrantAuthorization", "import_readable_stream", "DataStream", "_DataStream", "readableStream", "resolve", "reject", "chunks", "chunk", "uint8Array", "contentBytes", "Encoder", "arrayOfBytes", "totalLength", "accumulatedValue", "currentValue", "result", "length", "bytes", "currentIndex", "_size", "object", "dataStream", "count", "streams", "passThrough", "init_shim", "messageReplyFromError", "e", "code", "detail", "init_shim", "PermissionRequest", "_PermissionRequest", "message", "Message", "permissionRequestEncodedData", "permissionRequestData", "Encoder", "PermissionsProtocol", "_PermissionsProtocol", "base64UrlEncodedRequest", "Encoder", "options", "DwnError", "DwnErrorCode", "scope", "permissionRequestData", "permissionTags", "permissionRequestBytes", "recordsWrite", "RecordsWrite", "dataEncodedMessage", "permissionGrantData", "permissionGrantBytes", "permissionRevocationData", "grantId", "normalizeProtocolUrl", "permissionRevocationBytes", "recordsWriteMessage", "dataBytes", "dataString", "dataObject", "validateJsonSchema", "Time", "tenant", "messageStore", "permissionGrantId", "grantQuery", "messages", "possibleGrantMessage", "dwnInterface", "dwnMethod", "DwnInterfaceName", "DwnMethodName", "permissionGrantMessage", "PermissionGrant", "incomingMessage", "PermissionRequest", "permissionScope", "requestOrGrant", "scopedProtocol", "taggedProtocol", "validateProtocolUrlNormalized", "Messages", "filters", "messagesQueryFilters", "filter", "protocol", "normalizeProtocolUrl", "messagesFilter", "removeUndefinedProperties", "isEmptyObject", "permissionRecordsFilter", "messageTimestamp", "taggedFilter", "PermissionsProtocol", "Records", "messageTimestampFilter", "FilterUtility", "filterCopy", "MessagesGrantAuthorization", "_MessagesGrantAuthorization", "input", "messagesReadMessage", "messageToRead", "expectedGrantor", "expectedGrantee", "permissionGrant", "messageStore", "GrantAuthorization", "scope", "incomingMessage", "PermissionsProtocol", "scopedProtocol", "filter", "DwnError", "DwnErrorCode", "tenant", "messageToGet", "incomingScope", "DwnInterfaceName", "recordsMessage", "recordsWriteMessage", "Records", "RecordsWrite", "permissionScope", "MessagesQuery", "_MessagesQuery", "AbstractMessage", "message", "Message", "filter", "validateProtocolUrlNormalized", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "Messages", "_a", "Time", "removeUndefinedProperties", "permissionGrantId", "signer", "authorization", "MessagesQueryHandler", "_MessagesQueryHandler", "didResolver", "messageStore", "eventLog", "tenant", "message", "messagesQuery", "MessagesQuery", "e", "messageReplyFromError", "authenticate", "eventFilters", "Messages", "events", "cursor", "permissionGrant", "PermissionsProtocol", "MessagesGrantAuthorization", "DwnError", "DwnErrorCode", "MessagesRead", "_MessagesRead", "AbstractMessage", "message", "Message", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "signer", "permissionGrantId", "authorization", "messageCid", "Cid", "DwnError", "DwnErrorCode", "MessagesReadHandler", "_MessagesReadHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "messagesRead", "MessagesRead", "e", "messageReplyFromError", "authenticate", "messageResult", "error", "entry", "Records", "recordsWrite", "dataBytes", "Encoder", "DataStream", "result", "matchedMessage", "permissionGrant", "PermissionsProtocol", "MessagesGrantAuthorization", "DwnError", "DwnErrorCode", "MessagesSubscribe", "_MessagesSubscribe", "AbstractMessage", "message", "Message", "filter", "validateProtocolUrlNormalized", "Time", "options", "currentTime", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "_b", "removeUndefinedProperties", "permissionGrantId", "signer", "authorization", "MessagesSubscribeHandler", "_MessagesSubscribeHandler", "didResolver", "messageStore", "eventStream", "tenant", "message", "subscriptionHandler", "messageReplyFromError", "DwnError", "DwnErrorCode", "messagesSubscribe", "MessagesSubscribe", "e", "authenticate", "error", "filters", "messagesFilters", "Messages", "messageCid", "Message", "listener", "eventTenant", "event", "eventIndexes", "FilterUtility", "subscription", "permissionGrant", "PermissionsProtocol", "MessagesGrantAuthorization", "import__", "ProtocolsGrantAuthorization", "_ProtocolsGrantAuthorization", "input", "protocolsConfigureMessage", "expectedGrantor", "expectedGrantee", "permissionGrant", "messageStore", "GrantAuthorization", "incomingMessage", "protocolInGrant", "protocolInMessage", "_a", "DwnError", "DwnErrorCode", "grantScope", "init_shim", "ProtocolActor", "ProtocolAction", "ProtocolsConfigure", "_ProtocolsConfigure", "AbstractMessage", "message", "Message", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "authorization", "messageStore", "delegatedGrant", "PermissionGrant", "ProtocolsGrantAuthorization", "definition", "protocol", "types", "validateProtocolUrlNormalized", "typeName", "schema", "validateSchemaUrlNormalized", "recordTypes", "roles", "ruleSetProtocolPath", "ruleSet", "DwnError", "DwnErrorCode", "recordType", "childRuleSet", "childRuleSetProtocolPath", "input", "min", "max", "ajv", "Ajv", "_b", "$allowUndefinedTags", "$requiredTags", "tagProperties", "__rest", "tag", "tagSchemaDefinition", "schemaError", "actionRules", "i", "actionRule", "readActions", "ProtocolAction", "action", "ProtocolActor", "j", "otherActionRule", "typesCopy", "normalizeSchemaUrl", "normalizeProtocolUrl", "ProtocolsConfigureHandler", "_ProtocolsConfigureHandler", "didResolver", "messageStore", "eventLog", "eventStream", "tenant", "message", "protocolsConfigure", "ProtocolsConfigure", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "DwnMethodName", "existingMessages", "newestMessage", "Message", "incomingMessageIsNewest", "messageReply", "indexes", "messageCid", "deletedMessageCids", "_a", "definition", "propertiesToIndex", "__rest", "author", "protocolConfigure", "permissionGrant", "PermissionsProtocol", "ProtocolsGrantAuthorization", "DwnError", "DwnErrorCode", "ProtocolsQuery", "_ProtocolsQuery", "AbstractMessage", "message", "Message", "validateProtocolUrlNormalized", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "authorization", "filter", "normalizeProtocolUrl", "tenant", "messageStore", "permissionGrant", "PermissionsProtocol", "ProtocolsGrantAuthorization", "DwnError", "DwnErrorCode", "ProtocolsQueryHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "protocolsQuery", "ProtocolsQuery", "e", "messageReplyFromError", "authenticate", "error", "DwnErrorCode", "entries", "query", "DwnInterfaceName", "DwnMethodName", "removeUndefinedProperties", "messages", "filter", "publishedProtocolsConfigure", "import__", "ProtocolAuthorization", "_ProtocolAuthorization", "tenant", "incomingMessage", "messageStore", "protocolDefinition", "ruleSet", "existingInitialWrite", "recordChain", "newestRecordsWrite", "protocol", "protocolPath", "contextId", "recordsWrite", "protocolUri", "PermissionsProtocol", "query", "DwnInterfaceName", "DwnMethodName", "protocols", "DwnError", "DwnErrorCode", "descendantRecordId", "currentRecordId", "initialWrite", "recordId", "messages", "RecordsWrite", "inboundMessage", "declaredProtocolPath", "declaredTypeName", "parentId", "parentMessages", "parentMessage", "_a", "expectedContextId", "actualContextId", "protocolTypes", "typeNames", "typeName", "protocolType", "schema", "dataFormat", "protocolRole", "roleRuleSet", "roleRecordFilter", "ancestorSegmentCountOfRolePath", "contextIdPrefix", "contextIdPrefixFilter", "FilterUtility", "matchingMessages", "recordsDelete", "actionsThatWouldAuthorizeDelete", "ProtocolAction", "incomingMessageMethod", "actionsSeekingARuleMatch", "author", "actionRules", "invokedRole", "actionRule", "allowedAction", "ProtocolActor", "recordsWriteMessage", "min", "max", "dataSize", "tags", "$allowUndefinedTags", "$requiredTags", "properties", "__rest", "additionalProperties", "required", "ajv", "Ajv", "compiledTags", "schemaError", "incomingRecordsWrite", "recipient", "filter", "parentContextId", "Records", "prefixFilter", "protocolPathArray", "currentRuleSet", "i", "currentTypeName", "nextRuleSet", "ancestorRecordsWrite", "ancestorAuthor", "RecordsDelete", "_RecordsDelete", "AbstractMessage", "message", "signaturePayload", "Message", "Records", "Time", "options", "recordId", "currentTime", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "_b", "authorization", "initialWrite", "protocol", "protocolPath", "recipient", "schema", "parentId", "dateCreated", "indexes", "removeUndefinedProperties", "recordsWriteToDelete", "messageStore", "delegatedGrant", "PermissionGrant", "RecordsGrantAuthorization", "ResumableTaskName", "ResumableTaskManager", "_ResumableTaskManager", "resumableTaskStore", "storageController", "task", "__awaiter", "timeoutInSeconds", "managedResumableTask", "managedTask", "timer", "handler", "resumableTasks", "managedTasks", "managedTasksCopy", "allTaskPromises", "error", "RecordsDeleteHandler", "_RecordsDeleteHandler", "didResolver", "messageStore", "resumableTaskManager", "tenant", "message", "recordsDelete", "RecordsDelete", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "existingMessages", "newestExistingMessage", "Message", "Records", "initialWrite", "RecordsWrite", "ResumableTaskName", "recordsWrite", "ProtocolAuthorization", "DwnError", "DwnErrorCode", "init_shim", "SortDirection", "RecordsQueryHandler", "_RecordsQueryHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "recordsQuery", "RecordsQuery", "e", "messageReplyFromError", "recordsWrites", "cursor", "Records", "results", "authenticate", "recordsWrite", "RecordsWrite", "initialWrite", "DwnMethodName", "dateSort", "DateSort", "SortDirection", "filter", "pagination", "queryFilter", "DwnInterfaceName", "messageSort", "filters", "Message", "ProtocolAuthorization", "RecordsRead", "_RecordsRead", "AbstractMessage", "message", "signaturePayload", "Message", "Records", "Time", "options", "filter", "signer", "permissionGrantId", "protocolRole", "currentTime", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "authorization", "matchedRecordsWrite", "messageStore", "delegatedGrant", "PermissionGrant", "RecordsGrantAuthorization", "RecordsReadHandler", "_RecordsReadHandler", "didResolver", "messageStore", "dataStore", "tenant", "message", "recordsRead", "RecordsRead", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "Records", "existingMessages", "DwnError", "DwnErrorCode", "matchedMessage", "DwnMethodName", "recordsDeleteMessage", "initialWrite", "RecordsWrite", "matchedRecordsWrite", "error", "data", "dataBytes", "Encoder", "DataStream", "result", "recordsReadReply", "Message", "descriptor", "permissionGrant", "PermissionsProtocol", "RecordsGrantAuthorization", "ProtocolAuthorization", "RecordsSubscribe", "_RecordsSubscribe", "AbstractMessage", "message", "signaturePayload", "Message", "Records", "DwnError", "DwnErrorCode", "validateProtocolUrlNormalized", "validateSchemaUrlNormalized", "Time", "options", "descriptor", "DwnInterfaceName", "DwnMethodName", "_a", "removeUndefinedProperties", "signer", "authorization", "messageStore", "delegatedGrant", "PermissionGrant", "RecordsGrantAuthorization", "RecordsSubscribeHandler", "_RecordsSubscribeHandler", "didResolver", "messageStore", "eventStream", "tenant", "message", "subscriptionHandler", "messageReplyFromError", "DwnError", "DwnErrorCode", "recordsSubscribe", "RecordsSubscribe", "e", "filters", "Records", "authenticate", "error", "listener", "eventTenant", "event", "eventIndexes", "FilterUtility", "messageCid", "Message", "subscription", "filter", "DwnInterfaceName", "DwnMethodName", "ProtocolAuthorization", "init_shim", "DwnConstant", "StorageController", "_StorageController", "messageStore", "dataStore", "eventLog", "eventStream", "tenant", "message", "query", "DwnInterfaceName", "existingMessages", "newestExistingMessage", "Message", "Records", "recordsDelete", "RecordsDelete", "initialWrite", "RecordsWrite", "indexes", "messageCid", "newestMessage", "DwnMethodName", "recordsWriteMessage", "DwnConstant", "recordId", "filter", "childMessages", "recordIdToMessagesMap", "childRecordId", "recordMessages", "recordsWrites", "newestRecordsWrite", "messageCids", "deletedMessageCids", "existingRecordsWrite", "isLatestBaseState", "writeMessage", "RecordsWriteHandler", "_RecordsWriteHandler", "didResolver", "messageStore", "dataStore", "eventLog", "eventStream", "tenant", "message", "dataStream", "recordsWrite", "RecordsWrite", "ProtocolAuthorization", "e", "messageReplyFromError", "authenticate", "query", "DwnInterfaceName", "existingMessages", "newMessageIsInitialWrite", "initialWrite", "newestExistingMessage", "Message", "incomingMessageIsNewest", "newestMessage", "DwnMethodName", "DwnError", "DwnErrorCode", "isLatestBaseState", "messageWithOptionalEncodedData", "newestExistingWrite", "indexes", "error", "messageReply", "StorageController", "recordsWriteMessage", "PermissionsProtocol", "permissionGrantId", "grant", "revokeTagProtocol", "_a", "grantProtocol", "dataBytes", "grantAuthorizedMessagesQuery", "grantAuthorizedMessagesAfterRevoke", "grantAuthorizedMessageCidsAfterRevoke", "grantAuthorizedMessage", "messageCid", "Encoder", "DwnConstant", "DataStream", "dataCid", "Cid", "dataStreamCopy1", "dataStreamCopy2", "DataStorePutResult", "dataSize", "expectedDataCid", "expectedDataSize", "actualDataCid", "actualDataSize", "permissionGrant", "RecordsGrantAuthorization", "init_shim", "init_shim", "DidVerificationRelationship", "init_shim", "EMPTY_DID_RESOLUTION_RESULT", "init_shim", "Did", "_Did", "method", "id", "path", "query", "fragment", "params", "didUri", "match", "did", "parsedParams", "paramPairs", "pair", "key", "value", "init_shim", "DidError", "_DidError", "code", "message", "DidErrorCode", "init_shim", "init_shim", "init_shim", "import_ttlcache", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "base32z", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "i", "hex", "text", "str", "dataType", "byteValue", "arrayBuffer", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "removeUndefinedProperties", "obj", "key", "import_level", "MemoryStore", "id", "key", "import_readable_stream", "import_readable_stream", "Sha256", "_a", "data", "sha256", "init_shim", "CryptoAlgorithm", "Sha2Algorithm", "CryptoAlgorithm", "_a", "algorithm", "data", "Sha256", "init_shim", "init_shim", "init_shim", "init_shim", "number", "n", "isBytes", "a", "bytes", "b", "lengths", "hash", "number", "exists", "instance", "checkFinished", "output", "out", "min", "init_shim", "init_shim", "crypto", "isBytes", "a", "createView", "arr", "rotr", "word", "shift", "isLE", "hexes", "_", "i", "bytesToHex", "bytes", "hex", "asciis", "asciiToBase16", "char", "hexToBytes", "hl", "al", "array", "ai", "hi", "n1", "n2", "nextTick", "asyncLoop", "iters", "tick", "cb", "ts", "diff", "utf8ToBytes", "str", "toBytes", "data", "concatBytes", "arrays", "sum", "res", "pad", "Hash", "toStr", "checkOpts", "defaults", "opts", "wrapConstructor", "hashCons", "hashC", "msg", "tmp", "randomBytes", "bytesLength", "crypto", "setBigUint64", "view", "byteOffset", "value", "isLE", "_32n", "_u32_max", "wh", "wl", "h", "l", "SHA2", "Hash", "blockLen", "outputLen", "padOffset", "createView", "data", "exists", "buffer", "toBytes", "len", "pos", "take", "dataView", "out", "output", "i", "oview", "outLen", "state", "res", "to", "length", "finished", "destroyed", "Chi", "a", "b", "c", "Maj", "SHA256_K", "IV", "SHA256_W", "SHA256", "SHA2", "A", "B", "C", "D", "E", "F", "G", "H", "view", "offset", "i", "W15", "W2", "s0", "rotr", "s1", "sigma1", "T1", "T2", "sha256", "wrapConstructor", "SHA256", "init_shim", "utils_exports", "__export", "bitGet", "bitLen", "bitMask", "bitSet", "bytesToHex", "bytesToNumberBE", "bytesToNumberLE", "concatBytes", "createHmacDrbg", "ensureBytes", "equalBytes", "hexToBytes", "hexToNumber", "isBytes", "numberToBytesBE", "numberToBytesLE", "numberToHexUnpadded", "numberToVarBytesBE", "utf8ToBytes", "validateObject", "init_shim", "_0n", "_1n", "_2n", "a", "hexes", "_", "i", "bytes", "hex", "num", "asciis", "asciiToBase16", "char", "hl", "al", "array", "ai", "hi", "n1", "n2", "n", "len", "title", "expectedLength", "res", "e", "arrays", "sum", "pad", "b", "diff", "str", "pos", "value", "u8n", "data", "u8fr", "arr", "hashLen", "qByteLen", "hmacFn", "v", "k", "reset", "h", "reseed", "seed", "gen", "out", "sl", "pred", "validatorFns", "val", "object", "validators", "optValidators", "checkField", "fieldName", "type", "isOptional", "checkVal", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "a", "b", "result", "pow", "num", "power", "modulo", "res", "pow2", "x", "invert", "number", "y", "u", "v", "q", "r", "m", "n", "tonelliShanks", "P", "legendreC", "Q", "S", "Z", "p1div4", "Fp", "root", "Q1div2", "g", "t2", "ge", "FpSqrt", "c1", "n2", "nv", "i", "isNegativeLE", "FIELD_FIELDS", "validateField", "field", "initial", "opts", "map", "val", "validateObject", "FpPow", "f", "p", "d", "FpInvertBatch", "nums", "tmp", "lastMultiplied", "acc", "inverted", "nLength", "n", "nBitLength", "_nBitLength", "nByteLength", "Field", "ORDER", "bitLen", "isLE", "redef", "_0n", "BITS", "BYTES", "sqrtP", "FpSqrt", "f", "bitMask", "_1n", "num", "mod", "lhs", "rhs", "power", "FpPow", "invert", "lst", "FpInvertBatch", "a", "b", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "FpSqrtEven", "Fp", "elm", "root", "getFieldBytesLength", "fieldOrder", "bitLength", "getMinHashLength", "length", "mapHashToField", "key", "isLE", "len", "fieldLen", "minLen", "num", "bytesToNumberBE", "bytesToNumberLE", "reduced", "mod", "_1n", "numberToBytesLE", "numberToBytesBE", "init_shim", "init_shim", "_0n", "_1n", "wNAF", "c", "bits", "constTimeNegate", "condition", "item", "neg", "opts", "W", "windows", "windowSize", "elm", "n", "p", "d", "points", "base", "window", "i", "precomputes", "f", "mask", "maxNumber", "shiftBy", "offset", "wbits", "offset1", "offset2", "cond1", "cond2", "P", "precomputesMap", "transform", "comp", "validateBasic", "curve", "validateField", "validateObject", "nLength", "validatePointOpts", "curve", "opts", "validateBasic", "validateObject", "endo", "Fp", "a", "b2n", "h2b", "utils_exports", "DER", "m", "data", "E", "len", "res", "hex", "isBytes", "l", "r", "sBytes", "rBytesLeft", "sig", "slice", "s", "h", "num", "shl", "rhl", "sl", "rl", "_0n", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "CURVE", "toBytes", "_c", "point", "_isCompressed", "concatBytes", "fromBytes", "bytes", "tail", "x", "y", "weierstrassEquation", "b", "x2", "x3", "isWithinCurveOrder", "assertGE", "normPrivateKeyToScalar", "key", "lengths", "nByteLength", "wrapPrivateKey", "n", "bytesToHex", "bytesToNumberBE", "ensureBytes", "mod", "pointPrecomputes", "assertPrjPoint", "other", "Point", "px", "py", "pz", "p", "is0", "i", "points", "toInv", "P", "privateKey", "windowSize", "left", "right", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "U1", "U2", "b3", "X3", "Y3", "Z3", "t0", "t1", "t2", "t3", "t4", "t5", "wnaf", "comp", "I", "k1neg", "k1", "k2neg", "k2", "k1p", "k2p", "d", "scalar", "fake", "f1p", "f2p", "f", "Q", "G", "mul", "sum", "iz", "z", "ax", "ay", "zz", "cofactor", "isTorsionFree", "clearCofactor", "isCompressed", "_bits", "wNAF", "validateOpts", "weierstrass", "curveDef", "CURVE_ORDER", "compressedLen", "uncompressedLen", "isValidFieldElement", "modN", "invN", "invert", "cat", "head", "y2", "isYOdd", "numToNByteStr", "numberToBytesBE", "isBiggerThanHalfOrder", "number", "HALF", "normalizeS", "slcNum", "from", "to", "Signature", "recovery", "msgHash", "rec", "bits2int_modN", "radj", "prefix", "R", "ir", "u1", "u2", "hexToBytes", "utils", "length", "getMinHashLength", "mapHashToField", "getPublicKey", "isProbPub", "item", "arr", "str", "getSharedSecret", "privateA", "publicB", "bits2int", "delta", "ORDER_MASK", "bitMask", "int2octets", "prepSig", "defaultSigOpts", "k", "hash", "randomBytes", "lowS", "prehash", "ent", "h1int", "seedArgs", "e", "seed", "k2sig", "kBytes", "ik", "q", "normS", "defaultVerOpts", "sign", "privKey", "createHmacDrbg", "verify", "signature", "publicKey", "sg", "_sig", "derError", "error", "is", "init_shim", "init_shim", "HMAC", "Hash", "hash", "_key", "key", "toBytes", "blockLen", "pad", "i", "buf", "exists", "out", "bytes", "to", "oHash", "iHash", "finished", "destroyed", "outputLen", "hmac", "message", "getHash", "hash", "key", "msgs", "hmac", "concatBytes", "randomBytes", "createCurve", "curveDef", "defHash", "create", "weierstrass", "secp256k1P", "secp256k1N", "_1n", "_2n", "divNearest", "a", "b", "sqrtMod", "y", "P", "_3n", "_6n", "_11n", "_22n", "_23n", "_44n", "_88n", "b2", "b3", "b6", "pow2", "b9", "b11", "b22", "b44", "b88", "b176", "b220", "b223", "t1", "t2", "root", "Fp", "Field", "secp256k1", "createCurve", "k", "n", "a1", "b1", "a2", "POW_2_128", "c1", "c2", "k1", "mod", "k2", "k1neg", "k2neg", "sha256", "_0n", "Point", "secp256k1", "init_shim", "canonicalize", "obj", "sortObjKeys", "sortedKeys", "sortedObj", "key", "KEY_URI_PREFIX_JWK", "computeJwkThumbprint", "_a", "jwk", "keyType", "normalizedJwk", "removeUndefinedProperties", "serializedJwk", "canonicalize", "utf8Bytes", "Convert", "digest", "Sha256", "isEcPrivateJwk", "obj", "isEcPublicJwk", "isOkpPrivateJwk", "obj", "isOkpPublicJwk", "isPrivateJwk", "Secp256k1", "_Secp256k1", "_a", "signature", "signatureObject", "secp256k1", "privateKeyBytes", "point", "privateKey", "Convert", "computeJwkThumbprint", "publicKeyBytes", "publicKey", "key", "derSignature", "isEcPrivateJwk", "d", "__rest", "_b", "isEcPublicJwk", "prefix", "x", "y", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "data", "digest", "sha256", "keyBytes", "numberToBytesBE", "init_shim", "Fp", "Field", "CURVE_A", "CURVE_B", "p256", "createCurve", "sha256", "secp256r1", "Secp256r1", "_Secp256r1", "_a", "signature", "signatureObject", "secp256r1", "privateKeyBytes", "point", "privateKey", "Convert", "computeJwkThumbprint", "publicKeyBytes", "publicKey", "key", "derSignature", "isEcPrivateJwk", "d", "__rest", "_b", "isEcPublicJwk", "prefix", "x", "y", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "data", "digest", "sha256", "keyBytes", "numberToBytesBE", "EcdsaAlgorithm", "CryptoAlgorithm", "_a", "key", "isEcPrivateJwk", "publicKey", "Secp256k1", "Secp256r1", "algorithm", "privateKey", "data", "signature", "isEcPublicJwk", "init_shim", "init_shim", "init_shim", "U32_MASK64", "_32n", "fromBig", "n", "le", "split", "lst", "Ah", "Al", "h", "l", "toBig", "shrSH", "_l", "s", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "_h", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "Bh", "Bl", "add3L", "Cl", "add3H", "low", "Ch", "add4L", "Dl", "add4H", "Dh", "add5L", "El", "add5H", "Eh", "u64", "fromBig", "split", "toBig", "shrSH", "shrSL", "rotrSH", "rotrSL", "rotrBH", "rotrBL", "rotr32H", "rotr32L", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "add", "add3L", "add3H", "add4L", "add4H", "add5H", "add5L", "u64_default", "SHA512_Kh", "SHA512_Kl", "u64_default", "n", "SHA512_W_H", "SHA512_W_L", "SHA512", "SHA2", "Ah", "Al", "Bh", "Bl", "Ch", "Cl", "Dh", "Dl", "Eh", "El", "Fh", "Fl", "Gh", "Gl", "Hh", "Hl", "view", "offset", "i", "W15h", "W15l", "s0h", "s0l", "W2h", "W2l", "s1h", "s1l", "SUMl", "SUMh", "sigma1h", "sigma1l", "CHIh", "CHIl", "T1ll", "T1h", "T1l", "sigma0h", "sigma0l", "MAJh", "MAJl", "All", "sha512", "wrapConstructor", "SHA512", "init_shim", "_0n", "_1n", "_2n", "_8n", "VERIFY_DEFAULT", "validateOpts", "curve", "opts", "validateBasic", "validateObject", "twistedEdwards", "curveDef", "CURVE", "Fp", "CURVE_ORDER", "prehash", "cHash", "randomBytes", "nByteLength", "cofactor", "MASK", "modP", "uvRatio", "u", "v", "adjustScalarBytes", "bytes", "domain", "data", "ctx", "phflag", "inBig", "n", "inRange", "max", "in0MaskRange", "assertInRange", "assertGE0", "pointPrecomputes", "isPoint", "other", "Point", "ex", "ey", "ez", "et", "p", "x", "y", "points", "toInv", "i", "windowSize", "a", "d", "X", "Y", "Z", "T", "X2", "Y2", "Z2", "Z4", "aX2", "left", "right", "XY", "ZT", "X1", "Y1", "Z1", "X1Z2", "X2Z1", "Y1Z2", "Y2Z1", "A", "B", "C", "D", "x1y1", "E", "G", "F", "H", "X3", "Y3", "T3", "Z3", "T1", "T2", "wnaf", "scalar", "f", "I", "iz", "z", "is0", "ax", "ay", "zz", "hex", "zip215", "len", "ensureBytes", "normed", "lastByte", "bytesToNumberLE", "y2", "isValid", "isXOdd", "isLastByteOdd", "privKey", "getExtendedPublicKey", "numberToBytesLE", "bytesToHex", "wNAF", "modN", "mod", "modN_LE", "hash", "key", "hashed", "head", "prefix", "point", "pointBytes", "getPublicKey", "hashDomainToScalar", "context", "msgs", "msg", "concatBytes", "sign", "options", "r", "R", "k", "s", "res", "verifyOpts", "verify", "sig", "publicKey", "SB", "init_shim", "_0n", "_1n", "validateOpts", "curve", "validateObject", "montgomery", "curveDef", "CURVE", "P", "modP", "n", "mod", "montgomeryBits", "montgomeryBytes", "fieldLen", "adjustScalarBytes", "bytes", "powPminus2", "x", "pow", "cswap", "swap", "x_2", "x_3", "dummy", "assertFieldElement", "a24", "montgomeryLadder", "pointU", "scalar", "u", "k", "x_1", "z_2", "z_3", "sw", "t", "k_t", "A", "AA", "B", "BB", "E", "C", "D", "DA", "CB", "dacb", "da_cb", "z2", "encodeUCoordinate", "numberToBytesLE", "decodeUCoordinate", "uEnc", "ensureBytes", "bytesToNumberLE", "decodeScalar", "len", "scalarMult", "_scalar", "pu", "GuBytes", "scalarMultBase", "privateKey", "publicKey", "ED25519_P", "ED25519_SQRT_M1", "_0n", "_1n", "_2n", "_5n", "_10n", "_20n", "_40n", "_80n", "ed25519_pow_2_252_3", "x", "P", "b2", "b4", "pow2", "b5", "b10", "b20", "b40", "b80", "b160", "b240", "b250", "adjustScalarBytes", "bytes", "uvRatio", "u", "v", "v3", "mod", "v7", "pow", "vx2", "root1", "root2", "useRoot1", "useRoot2", "noRoot", "isNegativeLE", "Fp", "Field", "ED25519_P", "ed25519Defaults", "sha512", "randomBytes", "adjustScalarBytes", "uvRatio", "ed25519", "twistedEdwards", "ed25519_domain", "data", "ctx", "phflag", "concatBytes", "utf8ToBytes", "ed25519ctx", "ed25519ph", "x25519", "montgomery", "x", "P", "pow_p_5_8", "b2", "ed25519_pow_2_252_3", "mod", "pow2", "edwardsToMontgomeryPub", "edwardsPub", "y", "_1n", "edwardsToMontgomeryPriv", "edwardsPriv", "hashed", "ed25519Defaults", "ELL2_C1", "Fp", "ELL2_C2", "_2n", "ELL2_C3", "ELL2_C4", "ELL2_J", "ELL2_C1_EDWARDS", "FpSqrtEven", "Fp", "SQRT_AD_MINUS_ONE", "INVSQRT_A_MINUS_D", "ONE_MINUS_D_SQ", "D_MINUS_ONE_SQ", "MAX_255B", "Ed25519", "_Ed25519", "_a", "privateKeyBytes", "publicKeyBytes", "ed25519", "privateKey", "Convert", "computeJwkThumbprint", "publicKey", "key", "ed25519PrivateKeyBytes", "x25519PrivateKeyBytes", "edwardsToMontgomeryPriv", "x25519PublicKeyBytes", "x25519", "x25519PrivateKey", "ed25519PublicKeyBytes", "edwardsToMontgomeryPub", "x25519PublicKey", "isOkpPrivateJwk", "d", "__rest", "_b", "isOkpPublicJwk", "data", "signature", "EdDsaAlgorithm", "CryptoAlgorithm", "_a", "key", "isOkpPrivateJwk", "publicKey", "Ed25519", "algorithm", "privateKey", "data", "signature", "isOkpPublicJwk", "supportedAlgorithms", "EdDsaAlgorithm", "EcdsaAlgorithm", "Sha2Algorithm", "LocalKeyManager", "params", "_a", "MemoryStore", "algorithm", "data", "keyUri", "key", "KEY_URI_PREFIX_JWK", "jwkThumbprint", "computeJwkThumbprint", "privateKey", "isPrivateJwk", "_b", "signature", "AlgorithmImplementation", "algProperty", "crvProperty", "algName", "algorithmInfo", "utils_exports", "__export", "CryptoUtils", "checkRequiredProperty", "checkValidProperty", "getJoseSignatureAlgorithmFromPublicKey", "isWebCryptoSupported", "randomBytes", "randomPin", "randomUuid", "init_shim", "checkRequiredProperty", "params", "property", "inObject", "checkValidProperty", "allowedProperties", "validProperties", "getJoseSignatureAlgorithmFromPublicKey", "publicKey", "curveToJoseAlgorithm", "isWebCryptoSupported", "randomBytes", "bytesLength", "randomUuid", "crypto", "randomPin", "length", "max", "pin", "rejectionRange", "randomBuffer", "CryptoUtils", "init_shim", "init_shim", "init_shim", "X25519", "_X25519", "_a", "privateKeyBytes", "publicKeyBytes", "x25519", "privateKey", "Convert", "computeJwkThumbprint", "publicKey", "key", "isOkpPrivateJwk", "d", "__rest", "_b", "isOkpPublicJwk", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "init_shim", "init_shim", "import_ttlcache", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "base32z", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "i", "hex", "text", "str", "dataType", "byteValue", "arrayBuffer", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "import_level", "import_readable_stream", "import_readable_stream", "extractDidFragment", "input", "getVerificationMethods", "didDocument", "verificationMethods", "_b", "_a", "isDidVerificationMethod", "DidVerificationRelationship", "relationship", "getVerificationMethodTypes", "types", "method", "getVerificationRelationshipsById", "methodId", "relationships", "relationshipMethods", "methodIdFragment", "extractDidFragment", "isByReferenceMatch", "isEmbeddedMethodMatch", "isDidVerificationMethod", "obj", "keyBytesToMultibaseId", "keyBytes", "multicodecCode", "multicodecName", "prefixedKey", "Multicodec", "prefixedKeyB58", "Convert", "multibaseIdToKeyBytes", "multibaseKeyId", "code", "data", "name", "DidError", "DidErrorCode", "BearerDid", "_BearerDid", "uri", "document", "metadata", "keyManager", "portableDid", "privateKeys", "vm", "keyUri", "privateKey", "params", "verificationMethod", "_a", "_b", "extractDidFragment", "DidError", "DidErrorCode", "publicKey", "utils_exports", "data", "signature", "LocalKeyManager", "verificationMethods", "getVerificationMethods", "key", "init_shim", "init_shim", "init_shim", "init_shim", "alphabet", "encodeLookup", "decodeLookup", "i", "arr2hex", "data", "length", "string", "concat", "chunks", "size", "length", "i", "b", "offset", "chars", "lookup", "i", "decoder", "arr2text", "data", "enc", "encoder", "text2arr", "str", "scope", "crypto", "subtle", "init_shim", "digitCount", "value", "sign", "getType", "encode", "data", "buffer", "offset", "buffers", "result", "concat", "getType", "buffE", "buffD", "buffL", "text2arr", "maxLo", "hi", "lo", "val", "j", "k", "keys", "kl", "key", "i", "c", "item", "encode_default", "init_shim", "INTEGER_START", "STRING_DELIM", "DICTIONARY_START", "LIST_START", "END_OF_TYPE", "getIntFromBuffer", "buffer", "start", "end", "sum", "sign", "i", "num", "decode", "data", "encoding", "text2arr", "chr", "c", "d", "dict", "key", "arr2text", "arr2hex", "lst", "number", "sep", "length", "decode_default", "init_shim", "listLength", "list", "length", "value", "encodingLength", "mapLength", "map", "key", "keyLength", "text2arr", "digitCount", "objectLength", "keys", "i", "stringLength", "arrayBufferLength", "type", "getType", "encoding_length_default", "encodingLength", "encoding_length_default", "bencode_default", "encode_default", "decode_default", "init_shim", "init_shim", "v4Regex", "v6Regex", "v4", "ip", "v4Regex", "buff", "offset", "max", "n", "i", "c", "v6", "v6Regex", "end", "fill", "hexN", "decN", "prevColon", "useDec", "result", "sizeOf", "ip", "v4", "v6", "familyOf", "string", "encode", "buff", "offset", "size", "decode", "length", "init_shim", "toString", "type", "toType", "name", "init_shim", "toString", "rcode", "init_shim", "toString", "opcode", "init_shim", "toString", "klass", "toClass", "name", "init_shim", "toString", "type", "toCode", "name", "m", "init_shim", "init_shim", "encodingLength", "str", "len", "strLen", "i", "code", "next", "encode", "buf", "offset", "off", "nextCode", "decode", "start", "end", "result", "num", "numA", "isU8Arr", "input", "bytelength", "encodingLength", "from", "encode", "write", "arr", "str", "start", "hexNum", "numHex", "b0", "b0L", "b0U", "b1", "b1L", "b1U", "num", "hex", "toHex", "buf", "end", "result", "offset", "hexLength", "string", "writeHex", "P_24", "P_16", "P_8", "readUInt32BE", "readUInt16BE", "writeUInt32BE", "value", "writeUInt16BE", "copy", "source", "target", "targetStart", "sourceStart", "sourceEnd", "_copyActual", "nb", "sourceLen", "QUERY_FLAG", "RESPONSE_FLAG", "FLUSH_MASK", "NOT_FLUSH_MASK", "QU_MASK", "NOT_QU_MASK", "codec", "bytes", "encode", "decode", "encodingLength", "name", "str", "buf", "offset", "oldOffset", "n", "list", "i", "len", "write", "totalLength", "consumedBytes", "jumped", "jumpOffset", "readUInt16BE", "bytelength", "string", "s", "header", "h", "flags", "type", "writeUInt16BE", "toString", "runknown", "data", "dLen", "copy", "rns", "dd", "rsoa", "writeUInt32BE", "readUInt32BE", "rtxt", "from", "isU8Arr", "d", "remaining", "length", "rnull", "rhinfo", "rptr", "rsrv", "rcaa", "rmx", "ra", "host", "v4", "raaaa", "v6", "alloc", "size", "roption", "option", "code", "toCode", "spl", "fam", "familyOf", "ipBuf", "ipLen", "tagsLen", "tag", "padded", "ropt", "options", "rdlen", "encodingLengthList", "encodeList", "rdnskey", "key", "keydata", "rrrsig", "sig", "signature", "toType", "rrp", "typebitmap", "typelist", "typesByWindow", "typeid", "windowBuf", "window", "windowLength", "b", "j", "extents", "rnsec", "record", "rnsec3", "salt", "nextDomain", "saltLength", "hashLength", "rds", "digest", "digestdata", "rsshfp", "fingerprintLength", "hexLength", "expectedLength", "getFingerprintLengthForHashType", "writeHex", "toHex", "hashType", "renc", "answer", "a", "klass", "toClass", "enc", "question", "q", "AUTHORITATIVE_ANSWER", "packet", "result", "buf", "offset", "allocing", "encodingLength", "oldOffset", "header", "encodeList", "question", "answer", "encode", "decodeList", "encodingLengthList", "sanitizeSingle", "input", "type", "sanitized", "query", "res", "response", "decode", "streamEncode", "combine", "writeUInt16BE", "copy", "streamDecode", "sbuf", "len", "readUInt16BE", "list", "enc", "i", "DidMethod", "_params", "_didUri", "_options", "DEFAULT_GATEWAY_URI", "DID_DHT_SPECIFICATION_VERSION", "DNS_RECORD_TTL", "PROPERTY_SEPARATOR", "VALUE_SEPARATOR", "DidDhtRegisteredDidType", "DidDhtRegisteredKeyType", "DidDhtVerificationRelationship", "AlgorithmToKeyTypeMap", "KeyTypeToDefaultAlgorithmMap", "DidDht", "_DidDht", "DidMethod", "keyManager", "LocalKeyManager", "options", "_a", "vm", "methodIds", "_b", "_c", "s", "identityKeyUri", "identityKey", "didUri", "DidDhtUtils", "document", "verificationMethodsToAdd", "_d", "verificationMethod", "keyUri", "publicKey", "methodId", "_f", "_e", "computeJwkThumbprint", "extractDidFragment", "_g", "_h", "purpose", "_j", "_k", "service", "did", "BearerDid", "_l", "registrationResult", "portableDid", "parsedDid", "Did", "DidError", "DidErrorCode", "didDocument", "gatewayUri", "DidDhtDocument", "didUri_1", "didDocumentMetadata", "EMPTY_DID_RESOLUTION_RESULT", "error", "_DidDhtDocument", "publicKeyBytes", "bep44Message", "dnsPacket", "resolutionResult", "putResult", "identifier", "Convert", "url", "response", "messageBytes", "body", "idLookup", "answer", "dnsRecordId", "data", "id", "t", "k", "c", "parsedAlg", "namedCurve", "vmId", "se", "customProperties", "__rest", "serviceEndpoint", "serviceProperties", "v", "types", "typeInteger", "recordIdsToMethodIds", "auth", "asm", "del", "inv", "agm", "didMetadata", "authoritativeGatewayUris", "previousDidProof", "txtRecords", "nsRecords", "serviceIds", "verificationMethodIds", "signature", "previousDid", "controller", "index", "keyType", "publicKeyBase64Url", "txtData", "txtDataString", "key", "value", "rootRecord", "DidVerificationRelationship", "relationship", "dnsRecordIds", "recordName", "typeIntegers", "type", "AUTHORITATIVE_ANSWER", "_DidDhtUtils", "signer", "sequenceNumber", "encodedDnsPacket", "encode", "bencodedData", "bencode_default", "identityKeyBytes", "Ed25519", "curve", "converter", "__awaiter", "Secp256r1", "Secp256k1", "X25519", "decode", "acc", "pair", "item", "newDid", "chunks", "i", "init_shim", "init_shim", "init_shim", "ErrorCode_default", "init_shim", "IonError", "code", "message", "Encoder", "_Encoder", "content", "base64url", "encodedContent", "inputContextForErrorLogging", "IonError", "ErrorCode_default", "rawBytes", "input", "URI", "init_shim", "init_shim", "OperationKeyType", "OperationKeyType_default", "InputValidator", "operationKeyJwk", "operationKeyType", "allowedProperties", "OperationKeyType_default", "property", "IonError", "ErrorCode_default", "id", "Encoder", "purposes", "processedPurposes", "purpose", "init_shim", "IonSdkConfig", "init_shim", "canonicalize", "JsonCanonicalizer", "_JsonCanonicalizer", "content", "contentWithoutUndefinedProperties", "canonicalizedString", "Encoder", "key", "Multihash", "_Multihash", "content", "hashAlgorithmInMultihashCode", "multihash", "sha256", "IonError", "ErrorCode_default", "hash", "canonicalizedStringBytes", "JsonCanonicalizer", "contentBytes", "intermediateHashBytes", "multihashBytes", "Encoder", "encodedMultihash", "inputContextForErrorLogging", "decode", "IonSdkConfig_default", "init_shim", "OperationType", "OperationType_default", "init_shim", "PatchAction", "PatchAction_default", "IonRequest", "_IonRequest", "input", "recoveryKey", "updateKey", "didDocumentKeys", "services", "InputValidator", "OperationKeyType_default", "hashAlgorithmInMultihashCode", "IonSdkConfig_default", "patches", "PatchAction_default", "delta", "Multihash", "suffixData", "OperationType_default", "revealValue", "dataToBeSigned", "compactJws", "nextUpdateCommitmentHash", "deltaHash", "id", "servicesToAdd", "patch", "idsOfServicesToRemove", "publicKeysToAdd", "idsOfPublicKeysToRemove", "didSuffix", "publicKeys", "publicKeyIdSet", "publicKey", "IonError", "ErrorCode_default", "serviceIdSet", "service", "maxTypeLength", "errorMessage", "deltaBytes", "JsonCanonicalizer", "IonDid", "_IonDid", "input", "createRequest", "IonRequest", "didUniqueSuffix", "shortFormDid", "IonSdkConfig_default", "initialState", "canonicalizedInitialStateBytes", "JsonCanonicalizer", "encodedCanonicalizedInitialStateString", "Encoder", "suffixData", "canonicalizedStringBytes", "multihash", "Multihash", "init_shim", "IonNetwork", "init_shim", "IonPublicKeyPurpose", "DidIonRegisteredKeyType", "AlgorithmToKeyTypeMap", "DEFAULT_GATEWAY_URI", "DidIon", "_DidIon", "DidMethod", "keyManager", "LocalKeyManager", "options", "_a", "vm", "methodIds", "_b", "_c", "s", "defaultVerificationMethod", "verificationMethodsToAdd", "_d", "keyUri", "publicKey", "_e", "recoveryKeyUri", "recoveryKey", "updateKeyUri", "updateKey", "longFormDidUri", "DidIonUtils", "_f", "didDocument", "didResolutionMetadata", "did", "BearerDid", "_g", "registrationResult", "methodId", "parsedDid", "Did", "DidError", "DidErrorCode", "verificationMethod", "portableDid", "gatewayUri", "verificationMethods", "getVerificationRelationshipsById", "ionDocument", "createOperation", "operationsUrl", "response", "didUri_1", "didUri", "EMPTY_DID_RESOLUTION_RESULT", "resolutionUrl", "didDocumentMetadata", "error", "_DidIonUtils", "baseUrl", "path", "url", "services", "normalizedRecoveryKey", "normalizedUpdateKey", "IonDid", "IonRequest", "ionPublicKeys", "computeJwkThumbprint", "ionServices", "service", "jwk", "keyType", "normalizedJwk", "DidJwk", "_DidJwk", "DidMethod", "keyManager", "LocalKeyManager", "options", "algorithm", "_d", "_a", "_c", "_b", "keyUri", "publicKey", "identifier", "Convert", "didUri", "document", "BearerDid", "didDocument", "parsedDid", "Did", "DidError", "DidErrorCode", "verificationMethod", "portableDid", "did", "_options", "EMPTY_DID_RESOLUTION_RESULT", "DidKeyRegisteredKeyType", "DidKeyVerificationMethodType", "AlgorithmToKeyTypeMap", "DidKey", "_DidKey", "DidMethod", "keyManager", "LocalKeyManager", "options", "algorithm", "_d", "_a", "_c", "_b", "keyUri", "publicKey", "identifier", "DidKeyUtils", "didUri", "document", "BearerDid", "didDocument", "parsedDid", "Did", "DidError", "DidErrorCode", "methodId", "verificationMethod", "vm", "portableDid", "did", "EMPTY_DID_RESOLUTION_RESULT", "error", "defaultContext", "enableEncryptionKeyDerivation", "enableExperimentalPublicKeyTypes", "publicKeyFormat", "multibaseValue", "signatureVerificationMethod", "encryptionPublicKeyFormat", "encryptionVerificationMethod", "contextArray", "getVerificationMethodTypes", "typeName", "typeUrl", "publicKeyBytes", "multicodecValue", "actualLength", "expectedLength", "kemMultibaseValue", "keyBytesToMultibaseId", "crv", "multicodecName", "multibaseIdToKeyBytes", "isValid", "Secp256k1", "Ed25519", "publicEncryptionKey", "ed25519PublicKey", "generatedPublicEncryptionKey", "method", "scheme", "universalTypeOf", "_DidKeyUtils", "jwk", "params", "lookupKey", "name", "Multicodec", "curve", "compressor", "Secp256r1", "converter", "X25519", "code", "jose", "DidWeb", "_DidWeb", "DidMethod", "didUri", "_options", "parsedDid", "Did", "EMPTY_DID_RESOLUTION_RESULT", "baseUrl", "didDocumentUrl", "response", "didDocument", "import_ms", "import_level", "DidResolverCacheLevel", "db", "location", "ttl", "ms", "did", "str", "cachedDidResolutionResult", "error", "value", "init_shim", "DidResolverCacheNoop", "_key", "_value", "UniversalResolver", "cache", "didResolvers", "DidResolverCacheNoop", "resolver", "didUri", "options", "parsedDid", "Did", "EMPTY_DID_RESOLUTION_RESULT", "DidErrorCode", "cachedResolutionResult", "resolutionResult", "didUrl", "_options", "parsedDidUrl", "didDocument", "didResolutionMetadata", "didDocumentMetadata", "service", "verificationMethod", "idSet", "didResource", "vm", "svc", "Dwn", "_Dwn", "config", "StorageController", "ResumableTaskManager", "DwnInterfaceName", "DwnMethodName", "MessagesQueryHandler", "MessagesReadHandler", "MessagesSubscribeHandler", "ProtocolsConfigureHandler", "ProtocolsQueryHandler", "RecordsDeleteHandler", "RecordsQueryHandler", "RecordsReadHandler", "RecordsSubscribeHandler", "RecordsWriteHandler", "_a", "UniversalResolver", "DidDht", "DidJwk", "DidKey", "DidResolverCacheLevel", "_b", "AllowAllTenantGate", "dwn", "tenant", "rawMessage", "options", "errorMessageReply", "dataStream", "subscriptionHandler", "handlerKey", "result", "dwnInterface", "dwnMethod", "Message", "error", "messageReplyFromError", "promisifySignal", "signal", "resolve", "reject", "executeUnlessAborted", "promise", "import_level", "createLevelDatabase", "location", "options", "LevelWrapper", "_LevelWrapper", "config", "db", "resolve", "reject", "onClosed", "onOpen", "name", "key", "_a", "executeUnlessAborted", "error", "__await", "_f", "_g", "__asyncValues", "_h", "_c", "_e", "_b", "iteratorOptions", "entry", "value", "_d", "_key", "operations", "partitionName", "operation", "range", "root", "prefix", "maxKey", "parent", "BlockstoreLevel", "_BlockstoreLevel", "config", "db", "createLevelDatabase", "LevelWrapper", "name", "key", "val", "options", "CID", "source", "_d", "source_1", "__asyncValues", "source_1_1", "__await", "_a", "_c", "entry", "source_2", "source_2_1", "li", "li_1", "li_1_1", "value", "source_3", "source_3_1", "init_shim", "import_err_code", "init_shim", "isAsyncIterable", "thing", "last", "source", "res", "entry", "src_default", "init_shim", "init_shim", "init_shim", "init_shim", "init_shim", "typeofs", "objectTypeNames", "is", "value", "typeOf", "isBuffer", "objectType", "getObjectType", "objectTypeName", "init_shim", "Type", "major", "name", "terminal", "typ", "Token", "type", "value", "encodedLength", "init_shim", "init_shim", "useBuffer", "textDecoder", "textEncoder", "isBuffer", "buf", "asU8A", "toString", "bytes", "start", "end", "utf8Slice", "fromString", "string", "utf8ToBytes", "slice", "useBuffer", "bytes", "start", "end", "isBuffer", "concat", "chunks", "length", "c", "asU8A", "out", "off", "b", "alloc", "size", "compare", "b1", "b2", "isBuffer", "i", "utf8ToBytes", "str", "out", "p", "c", "utf8Slice", "buf", "offset", "end", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "len", "defaultChunkSize", "Bl", "chunkSize", "bytes", "topChunk", "chunkPos", "alloc", "reset", "byts", "chunk", "slice", "concat", "init_shim", "decodeErrPrefix", "encodeErrPrefix", "uintMinorPrefixBytes", "assertEnoughData", "data", "pos", "need", "init_shim", "init_shim", "uintBoundaries", "readUint8", "data", "offset", "options", "assertEnoughData", "value", "decodeErrPrefix", "readUint16", "readUint32", "readUint64", "hi", "lo", "decodeUint8", "pos", "_minor", "Token", "Type", "decodeUint16", "decodeUint32", "decodeUint64", "encodeUint", "buf", "token", "encodeUintValue", "major", "uint", "nuint", "buint", "set", "tok1", "tok2", "init_shim", "decodeNegint8", "data", "pos", "_minor", "options", "Token", "Type", "readUint8", "decodeNegint16", "readUint16", "decodeNegint32", "readUint32", "neg1b", "pos1b", "decodeNegint64", "int", "readUint64", "value", "decodeErrPrefix", "encodeNegint", "buf", "token", "negint", "unsigned", "encodeUintValue", "uintBoundaries", "tok1", "tok2", "init_shim", "toToken", "data", "pos", "prefix", "length", "assertEnoughData", "buf", "slice", "Token", "Type", "decodeBytesCompact", "minor", "_options", "decodeBytes8", "_minor", "options", "readUint8", "decodeBytes16", "readUint16", "decodeBytes32", "readUint32", "decodeBytes64", "l", "readUint64", "decodeErrPrefix", "tokenBytes", "token", "fromString", "encodeBytes", "bytes", "encodeUintValue", "tok1", "tok2", "compareBytes", "b1", "b2", "compare", "init_shim", "toToken", "data", "pos", "prefix", "length", "options", "totLength", "assertEnoughData", "tok", "Token", "Type", "toString", "slice", "decodeStringCompact", "minor", "decodeString8", "_minor", "readUint8", "decodeString16", "readUint16", "decodeString32", "readUint32", "decodeString64", "l", "readUint64", "decodeErrPrefix", "encodeString", "encodeBytes", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeArrayCompact", "data", "pos", "minor", "_options", "decodeArray8", "_minor", "options", "readUint8", "decodeArray16", "readUint16", "decodeArray32", "readUint32", "decodeArray64", "l", "readUint64", "decodeErrPrefix", "decodeArrayIndefinite", "encodeArray", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "toToken", "_data", "_pos", "prefix", "length", "Token", "Type", "decodeMapCompact", "data", "pos", "minor", "_options", "decodeMap8", "_minor", "options", "readUint8", "decodeMap16", "readUint16", "decodeMap32", "readUint32", "decodeMap64", "l", "readUint64", "decodeErrPrefix", "decodeMapIndefinite", "encodeMap", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "decodeTagCompact", "_data", "_pos", "minor", "_options", "Token", "Type", "decodeTag8", "data", "pos", "_minor", "options", "readUint8", "decodeTag16", "readUint16", "decodeTag32", "readUint32", "decodeTag64", "readUint64", "encodeTag", "buf", "token", "encodeUintValue", "encodeUint", "init_shim", "MINOR_FALSE", "MINOR_TRUE", "MINOR_NULL", "MINOR_UNDEFINED", "decodeUndefined", "_data", "_pos", "_minor", "options", "decodeErrPrefix", "Token", "Type", "decodeBreak", "createToken", "value", "bytes", "decodeFloat16", "data", "pos", "readFloat16", "decodeFloat32", "readFloat32", "decodeFloat64", "readFloat64", "encodeFloat", "buf", "token", "float", "decoded", "success", "encodeFloat16", "ui8a", "encodeFloat32", "encodeFloat64", "buffer", "dataView", "inp", "valu32", "exponent", "mantissa", "logicalExponent", "half", "exp", "mant", "val", "offset", "encodeUint", "invalidMinor", "data", "pos", "minor", "decodeErrPrefix", "errorer", "msg", "jump", "i", "decodeUint8", "decodeUint16", "decodeUint32", "decodeUint64", "decodeNegint8", "decodeNegint16", "decodeNegint32", "decodeNegint64", "decodeBytesCompact", "decodeBytes8", "decodeBytes16", "decodeBytes32", "decodeBytes64", "decodeStringCompact", "decodeString8", "decodeString16", "decodeString32", "decodeString64", "decodeArrayCompact", "decodeArray8", "decodeArray16", "decodeArray32", "decodeArray64", "decodeArrayIndefinite", "decodeMapCompact", "decodeMap8", "decodeMap16", "decodeMap32", "decodeMap64", "decodeMapIndefinite", "decodeTagCompact", "decodeTag8", "decodeTag16", "decodeTag32", "decodeTag64", "decodeUndefined", "decodeFloat16", "decodeFloat32", "decodeFloat64", "decodeBreak", "quick", "Token", "Type", "makeCborEncoders", "encoders", "Type", "encodeUint", "encodeNegint", "encodeBytes", "encodeString", "encodeArray", "encodeMap", "encodeTag", "encodeFloat", "cborEncoders", "buf", "Bl", "Ref", "_Ref", "obj", "parent", "p", "stack", "encodeErrPrefix", "simpleTokens", "Token", "typeEncoders", "_typ", "_options", "_refStack", "_obj", "options", "refStack", "entries", "i", "e", "objectToTokens", "typ", "isMap", "keys", "length", "key", "sortMapEntries", "is", "customTypeEncoder", "tokens", "typeEncoder", "init_shim", "defaultDecodeOptions", "Tokeniser", "data", "options", "byt", "token", "quick", "decoder", "jump", "decodeErrPrefix", "minor", "DONE", "BREAK", "tokenToArray", "tokeniser", "arr", "value", "tokensToObject", "tokenToMap", "useMaps", "obj", "m", "i", "key", "Type", "tagged", "decodeFirst", "decoded", "decode", "remainder", "CID_CBOR_TAG", "cidDecoder", "bytes", "CID", "decodeOptions", "CID_CBOR_TAG", "code", "decode", "data", "decodeOptions", "import_err_code", "init_shim", "code", "name", "encode", "coerce", "digest", "input", "create", "identity", "init_shim", "import_err_code", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "options", "block", "object", "decode", "subObject", "subPath", "prop", "subObjectCid", "CID", "errCode", "dag_cbor_default", "init_shim", "import_err_code", "init_shim", "extractDataFromBlock", "block", "blockStart", "requestedStart", "requestedEnd", "blockLength", "blockEnd", "extract_data_from_block_default", "init_shim", "import_err_code", "validateOffsetAndLength", "size", "offset", "length", "fileSize", "start", "end", "errCode", "validate_offset_and_length_default", "rawContent", "node", "contentGenerator", "options", "start", "end", "validate_offset_and_length_default", "buf", "extract_data_from_block_default", "CustomProgressEvent", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "errCode", "decode", "identity_default", "init_shim", "import_err_code", "rawContent", "node", "contentGenerator", "options", "start", "end", "validate_offset_and_length_default", "buf", "extract_data_from_block_default", "CustomProgressEvent", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "errCode", "block", "raw_default", "init_shim", "import_err_code", "init_shim", "hashFn", "buf", "murmur3128", "addLinksToHamtBucket", "links", "bucket", "rootBucket", "link", "pos", "Bucket", "toPrefix", "position", "toBucketPath", "path", "findShardCid", "node", "name", "blockstore", "context", "options", "createHAMT", "prefix", "bucketPath", "entryPrefix", "entryName", "block", "decode", "find_cid_in_shard_default", "init_shim", "init_shim", "init_shim", "peekable", "iterable", "iterator", "symbol", "queue", "value", "src_default", "isAsyncIterable", "thing", "filter", "source", "fn", "index", "entry", "peekable", "src_default", "value", "done", "res", "func", "init_shim", "isAsyncIterable", "thing", "map", "source", "func", "index", "val", "peekable", "src_default", "value", "done", "res", "fn", "init_shim", "init_shim", "pDefer", "deferred", "resolve", "reject", "CustomEvent", "parallel", "source", "options", "concurrency", "ordered", "emitter", "ops", "slotAvailable", "pDefer", "resultAvailable", "sourceFinished", "sourceErr", "opErred", "task", "op", "result", "err", "valuesAvailable", "yieldOrderedValues", "yieldUnOrderedValues", "i", "init_shim", "init_shim", "init_shim", "FixedFIFO", "hwm", "data", "last", "FIFO", "options", "obj", "val", "prev", "next", "AbortError", "message", "code", "pushable", "options", "_pushable", "buffer", "next", "_pushable", "getNext", "options", "onEnd", "buffer", "FIFO", "pushable", "onNext", "ended", "drain", "pDefer", "waitNext", "resolve", "reject", "next", "err", "bufferNext", "bufferError", "push", "value", "end", "_return", "_throw", "signal", "cancel", "listener", "AbortError", "opts", "init_shim", "isAsyncIterable", "thing", "merge", "sources", "syncSources", "source", "output", "pushable", "item", "err", "src_default", "pipe", "first", "rest", "isDuplex", "duplex", "isIterable", "isAsyncIterable", "source", "fns", "i", "duplexPipelineFn", "rawPipe", "res", "obj", "p", "stream", "pushable", "err", "sourceWrap", "src_default", "directoryContent", "cid", "node", "unixfs", "path", "resolve", "depth", "blockstore", "yieldDirectoryContent", "options", "offset", "length", "links", "CustomProgressEvent", "pipe", "source", "src_default", "link", "linkName", "linkPath", "parallel", "entry", "directory_default", "init_shim", "import_err_code", "init_shim", "init_shim", "import_index", "init_shim", "TimeoutError", "message", "AbortError", "getDOMException", "errorMessage", "getAbortedReason", "signal", "reason", "pTimeout", "promise", "milliseconds", "fallback", "options", "timer", "cancelablePromise", "resolve", "reject", "error", "timeoutError", "init_shim", "init_shim", "lowerBound", "array", "value", "comparator", "first", "count", "step", "it", "__classPrivateFieldGet", "receiver", "state", "kind", "f", "_PriorityQueue_queue", "PriorityQueue", "run", "options", "element", "index", "lowerBound", "a", "b", "item", "priority_queue_default", "__classPrivateFieldSet", "receiver", "state", "value", "kind", "f", "__classPrivateFieldGet", "_PQueue_instances", "_PQueue_carryoverConcurrencyCount", "_PQueue_isIntervalIgnored", "_PQueue_intervalCount", "_PQueue_intervalCap", "_PQueue_interval", "_PQueue_intervalEnd", "_PQueue_intervalId", "_PQueue_timeoutId", "_PQueue_queue", "_PQueue_queueClass", "_PQueue_pending", "_PQueue_concurrency", "_PQueue_isPaused", "_PQueue_throwOnTimeout", "_PQueue_doesIntervalAllowAnother_get", "_PQueue_doesConcurrentAllowAnother_get", "_PQueue_next", "_PQueue_onResumeInterval", "_PQueue_isIntervalPaused_get", "_PQueue_tryToStartAnother", "_PQueue_initializeIntervalIfNeeded", "_PQueue_onInterval", "_PQueue_processQueue", "_PQueue_throwOnAbort", "_PQueue_onEvent", "AbortError", "PQueue", "EventEmitter", "options", "_a", "_b", "_c", "_d", "priority_queue_default", "newConcurrency", "function_", "resolve", "reject", "operation", "pTimeout", "result", "error", "TimeoutError", "functions", "limit", "now", "delay", "canInitializeInterval", "job", "signal", "_resolve", "event", "filter", "listener", "dist_default", "walkDAG", "blockstore", "node", "queue", "streamPosition", "start", "end", "options", "buf", "extract_data_from_block_default", "errCode", "file", "UnixFS", "err", "data", "childOps", "i", "childLink", "childStart", "childEnd", "pipe", "source", "src_default", "op", "block", "parallel", "link", "blockStart", "child", "code", "decode", "childQueue", "dist_default", "error", "CustomProgressEvent", "fileContent", "cid", "unixfs", "path", "resolve", "depth", "yieldFileContent", "fileSize", "validate_offset_and_length_default", "read", "wanted", "pushable", "file_default", "init_shim", "hamtShardedDirectoryContent", "cid", "node", "unixfs", "path", "resolve", "depth", "blockstore", "yieldHamtDirectoryContent", "options", "CustomProgressEvent", "listDirectory", "links", "results", "pipe", "source", "src_default", "link", "name", "result", "block", "decode", "parallel", "entries", "hamt_sharded_directory_default", "findLinkCid", "node", "name", "link", "contentExporters", "file_default", "directory_default", "hamt_sharded_directory_default", "cid", "unixfs", "path", "resolve", "depth", "blockstore", "unixFsResolver", "toResolve", "options", "block", "decode", "next", "errCode", "UnixFS", "err", "linkCid", "find_cid_in_shard_default", "nextName", "nextPath", "content", "unixfs_v1_default", "resolvers", "code", "unixfs_v1_default", "raw_default", "dag_cbor_default", "identity", "identity_default", "resolve", "cid", "name", "path", "toResolve", "depth", "blockstore", "options", "resolver", "errCode", "resolvers_default", "toPathComponents", "path", "cidAndRest", "CID", "cid", "output", "errCode", "walkPath", "blockstore", "options", "toResolve", "name", "entryPath", "startingDepth", "result", "resolvers_default", "exporter", "src_default", "import_readable_stream", "DataStoreLevel", "config", "createLevelDatabase", "BlockstoreLevel", "tenant", "recordId", "dataCid", "dataStream", "blockstoreForData", "asyncDataBlocks", "importer", "dataDagRoot", "_f", "asyncDataBlocks_1", "__asyncValues", "asyncDataBlocks_1_1", "_a", "_c", "_e", "_d", "exporter", "contentIterator", "result", "dataSize", "dataPartitionName", "INDEX_SUBLEVEL_NAME", "IndexLevel", "_IndexLevel", "config", "createLevelDatabase", "LevelWrapper", "tenant", "messageCid", "indexes", "options", "isEmptyObject", "DwnError", "DwnErrorCode", "item", "opCreationPromises", "indexName", "indexValue", "indexValueItem", "partitionOperationPromise", "indexOps", "key", "operation", "tenantPartition", "indexPartitionName", "filters", "queryOptions", "queryCursor", "limit", "startKey", "matches", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "FilterUtility", "sortProperty", "sortDirection", "SortDirection", "cursor", "iteratorOptions", "sortPartition", "__await", "_", "val", "value", "items", "cursorStartingKey", "filter", "error", "sortedValues", "a", "b", "start", "end", "levelOptions", "filterPromises", "getAllItemsPromise", "searchFilter", "FilterSelector", "propertyName", "propertyFilter", "exactMatchesPromise", "propertyValue", "rangeMatchesPromise", "promise", "indexItems", "indexedItem", "filterPartition", "_key", "matchPrefix", "rangeFilter", "comparator", "comparatorName", "itemA", "itemB", "direction", "itemAValue", "itemBValue", "aCompareValue", "bCompareValue", "lexicographicalCompare", "firstItemAfterCursor", "sortValue", "itemCompareValue", "serializedIndexes", "values", "NEGATIVE_OFFSET", "NEGATIVE_PREFIX", "PADDING_LENGTH", "prefix", "offset", "init_shim", "init_shim", "init_shim", "init_shim", "assertError", "err", "isError", "objectToString", "obj", "init_shim", "parseArguments", "args", "options", "shortMessage", "isError", "Layerr", "_Layerr", "errorOptionsOrMessage", "messageText", "args", "options", "shortMessage", "parseArguments", "message", "ctor", "err", "assertError", "isError", "cause", "output", "init_shim", "ENCODING", "ENCODING_LEN", "TIME_MAX", "TIME_LEN", "RANDOM_LEN", "ERROR_INFO", "detectPRNG", "root", "rootLookup", "detectRoot", "globalCrypto", "buffer", "Layerr", "ERROR_INFO", "inWebWorker", "encodeRandom", "len", "prng", "str", "randomChar", "encodeTime", "now", "TIME_MAX", "mod", "currentLen", "ENCODING_LEN", "ENCODING", "incrementBase32", "str", "done", "index", "char", "charIndex", "output", "maxCharIndex", "ENCODING_LEN", "ENCODING", "Layerr", "ERROR_INFO", "replaceCharAt", "inWebWorker", "monotonicFactory", "prng", "currentPRNG", "detectPRNG", "lastTime", "lastRandom", "seedTime", "seed", "incrementedRandom", "incrementBase32", "encodeTime", "TIME_LEN", "newRandom", "encodeRandom", "RANDOM_LEN", "randomChar", "rand", "ENCODING_LEN", "ENCODING", "replaceCharAt", "str", "index", "char", "EventLogLevel", "config", "IndexLevel", "createLevelDatabase", "monotonicFactory", "tenant", "messageCid", "indexes", "watermark", "filters", "cursor", "results", "messageCids", "indexDeletePromises", "init_shim", "readonly", "enumerable", "configurable", "linksWithin", "path", "value", "index", "element", "elementPath", "cid", "CID", "links", "source", "base", "key", "treeWithin", "tree", "get", "node", "part", "Block", "bytes", "encode", "codec", "hasher", "hash", "decode", "MessageStoreLevel", "_MessageStoreLevel", "config", "createLevelDatabase", "BlockstoreLevel", "IndexLevel", "tenant", "cidString", "options", "_a", "partition", "executeUnlessAborted", "cid", "CID", "bytes", "decode", "src_exports", "sha256", "filters", "messageSort", "pagination", "queryOptions", "results", "cursor", "messages", "i", "messageCid", "message", "limit", "dateCreated", "datePublished", "messageTimestamp", "sortDirection", "SortDirection", "sortProperty", "indexes", "encodedMessageBlock", "encode", "Cid", "Message", "messageCidString", "ResumableTaskStoreLevel", "_ResumableTaskStoreLevel", "config", "createLevelDatabase", "LevelWrapper", "task", "timeoutInSeconds", "taskId", "Cid", "managedResumableTask", "count", "tasks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "_", "value", "import_events", "EVENTS_LISTENER_CHANNEL", "EventEmitterStream", "config", "error", "tenant", "id", "listener", "__awaiter", "event", "indexes", "DwnError", "DwnErrorCode", "Poller", "_Poller", "delegate", "retrySleep", "timeout", "startTime", "Time", "DwnInterface", "dwnMessageConstructors", "MessagesQuery", "MessagesRead", "MessagesSubscribe", "ProtocolsConfigure", "ProtocolsQuery", "RecordsDelete", "RecordsQuery", "RecordsRead", "RecordsSubscribe", "RecordsWrite", "init_shim", "init_shim", "DidVerificationRelationship", "init_shim", "EMPTY_DID_RESOLUTION_RESULT", "init_shim", "Did", "_Did", "method", "id", "path", "query", "fragment", "params", "didUri", "match", "did", "parsedParams", "paramPairs", "pair", "key", "value", "init_shim", "DidError", "_DidError", "code", "message", "DidErrorCode", "init_shim", "init_shim", "init_shim", "import_ttlcache", "init_shim", "isArrayBufferSlice", "arrayBufferView", "isAsyncIterable", "obj", "universalTypeOf", "value", "match", "_", "type", "textEncoder", "textDecoder", "Convert", "_Convert", "data", "format", "isAsyncIterable", "base58btc", "base64url", "universalTypeOf", "isArrayBufferSlice", "base32z", "u8a", "string", "chunks", "_d", "_e", "__asyncValues", "_f", "_a", "_c", "chunk", "hexes", "v", "i", "hex", "text", "str", "dataType", "byteValue", "arrayBuffer", "init_shim", "Web5LogLevel", "Web5Logger", "logLevel", "message", "logger", "init_shim", "Multicodec", "_Multicodec", "options", "code", "data", "name", "_a", "prefixLength", "varint_exports", "dataWithPrefix", "prefixedData", "_", "codec", "codeByteLength", "init_shim", "removeUndefinedProperties", "obj", "key", "import_level", "LevelStore", "db", "location", "key", "error", "value", "MemoryStore", "id", "Stream", "_Stream", "readableStream", "reader", "done", "value", "__await", "_a", "iterableStream", "Convert", "streamLength", "chunkLength", "fillValue", "bytesRemaining", "controller", "enqueueChunk", "currentChunkLength", "chunk", "min", "max", "range", "i", "c", "obj", "import_readable_stream", "import_readable_stream", "NodeStream", "_NodeStream", "_a", "readable", "Convert", "readableStream", "readableOptions", "Stream", "reader", "closed", "nodeReadable", "done", "value", "error", "callback", "stream", "writableState", "readableState", "state", "obj", "controller", "chunk", "err", "Sha256", "_a", "data", "sha256", "init_shim", "CryptoAlgorithm", "Sha2Algorithm", "CryptoAlgorithm", "_a", "algorithm", "data", "Sha256", "init_shim", "canonicalize", "obj", "sortObjKeys", "sortedKeys", "sortedObj", "key", "KEY_URI_PREFIX_JWK", "computeJwkThumbprint", "_a", "jwk", "keyType", "normalizedJwk", "removeUndefinedProperties", "serializedJwk", "canonicalize", "utf8Bytes", "Convert", "digest", "Sha256", "isEcPrivateJwk", "obj", "isEcPublicJwk", "isOctPrivateJwk", "isOkpPrivateJwk", "isOkpPublicJwk", "isPrivateJwk", "Secp256k1", "_Secp256k1", "_a", "signature", "signatureObject", "secp256k1", "privateKeyBytes", "point", "privateKey", "Convert", "computeJwkThumbprint", "publicKeyBytes", "publicKey", "key", "derSignature", "isEcPrivateJwk", "d", "__rest", "_b", "isEcPublicJwk", "prefix", "x", "y", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "data", "digest", "sha256", "keyBytes", "numberToBytesBE", "Secp256r1", "_Secp256r1", "_a", "signature", "signatureObject", "secp256r1", "privateKeyBytes", "point", "privateKey", "Convert", "computeJwkThumbprint", "publicKeyBytes", "publicKey", "key", "derSignature", "isEcPrivateJwk", "d", "__rest", "_b", "isEcPublicJwk", "prefix", "x", "y", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "data", "digest", "sha256", "keyBytes", "numberToBytesBE", "EcdsaAlgorithm", "CryptoAlgorithm", "_a", "key", "isEcPrivateJwk", "publicKey", "Secp256k1", "Secp256r1", "algorithm", "privateKey", "data", "signature", "isEcPublicJwk", "Ed25519", "_Ed25519", "_a", "privateKeyBytes", "publicKeyBytes", "ed25519", "privateKey", "Convert", "computeJwkThumbprint", "publicKey", "key", "ed25519PrivateKeyBytes", "x25519PrivateKeyBytes", "edwardsToMontgomeryPriv", "x25519PublicKeyBytes", "x25519", "x25519PrivateKey", "ed25519PublicKeyBytes", "edwardsToMontgomeryPub", "x25519PublicKey", "isOkpPrivateJwk", "d", "__rest", "_b", "isOkpPublicJwk", "data", "signature", "EdDsaAlgorithm", "CryptoAlgorithm", "_a", "key", "isOkpPrivateJwk", "publicKey", "Ed25519", "algorithm", "privateKey", "data", "signature", "isOkpPublicJwk", "supportedAlgorithms", "EdDsaAlgorithm", "EcdsaAlgorithm", "Sha2Algorithm", "LocalKeyManager", "params", "_a", "MemoryStore", "algorithm", "data", "keyUri", "key", "KEY_URI_PREFIX_JWK", "jwkThumbprint", "computeJwkThumbprint", "privateKey", "isPrivateJwk", "_b", "signature", "AlgorithmImplementation", "algProperty", "crvProperty", "algName", "algorithmInfo", "init_shim", "CryptoUtils", "_CryptoUtils", "publicKey", "curveToJoseAlgorithm", "bytesLength", "randomBytes", "crypto", "length", "max", "pin", "rejectionRange", "randomBuffer", "AES_GCM_IV_LENGTH", "AES_KEY_LENGTHS", "AES_GCM_TAG_LENGTHS", "AesGcm", "_a", "privateKeyBytes", "privateKey", "Convert", "computeJwkThumbprint", "key", "data", "iv", "additionalData", "tagLength", "webCrypto", "getWebcryptoSubtle", "webCryptoKey", "algorithm", "plaintextBuffer", "ciphertextBuffer", "length", "_b", "ext", "key_ops", "__rest", "isOctPrivateJwk", "AesGcmAlgorithm", "CryptoAlgorithm", "params", "AesGcm", "_a", "algorithm", "length", "privateKey", "init_shim", "init_shim", "init_shim", "X25519", "_X25519", "_a", "privateKeyBytes", "publicKeyBytes", "x25519", "privateKey", "Convert", "computeJwkThumbprint", "publicKey", "key", "isOkpPrivateJwk", "d", "__rest", "_b", "isOkpPublicJwk", "privateKeyA", "publicKeyB", "privateKeyABytes", "publicKeyBBytes", "extractDidFragment", "input", "getServices", "didDocument", "id", "type", "_b", "_a", "service", "getVerificationMethodByKey", "publicKeyJwk", "publicKeyMultibase", "verificationMethods", "getVerificationMethods", "method", "computeJwkThumbprint", "isDidVerificationMethod", "DidVerificationRelationship", "relationship", "getVerificationMethodTypes", "types", "getVerificationRelationshipsById", "methodId", "relationships", "relationshipMethods", "methodIdFragment", "isByReferenceMatch", "isEmbeddedMethodMatch", "isDidService", "obj", "isDwnDidService", "isStringOrStringArray", "prop", "item", "keyBytesToMultibaseId", "keyBytes", "multicodecCode", "multicodecName", "prefixedKey", "Multicodec", "prefixedKeyB58", "Convert", "multibaseIdToKeyBytes", "multibaseKeyId", "code", "data", "name", "DidError", "DidErrorCode", "BearerDid", "_BearerDid", "uri", "document", "metadata", "keyManager", "portableDid", "privateKeys", "vm", "keyUri", "privateKey", "params", "verificationMethod", "_a", "_b", "extractDidFragment", "DidError", "DidErrorCode", "publicKey", "CryptoUtils", "data", "signature", "LocalKeyManager", "verificationMethods", "getVerificationMethods", "key", "DidMethod", "_params", "_didUri", "_options", "DEFAULT_GATEWAY_URI", "DID_DHT_SPECIFICATION_VERSION", "DNS_RECORD_TTL", "PROPERTY_SEPARATOR", "VALUE_SEPARATOR", "DidDhtRegisteredDidType", "DidDhtRegisteredKeyType", "DidDhtVerificationRelationship", "AlgorithmToKeyTypeMap", "KeyTypeToDefaultAlgorithmMap", "DidDht", "_DidDht", "DidMethod", "keyManager", "LocalKeyManager", "options", "_a", "vm", "methodIds", "_b", "_c", "s", "identityKeyUri", "identityKey", "didUri", "DidDhtUtils", "document", "verificationMethodsToAdd", "_d", "verificationMethod", "keyUri", "publicKey", "methodId", "_f", "_e", "computeJwkThumbprint", "extractDidFragment", "_g", "_h", "purpose", "_j", "_k", "service", "did", "BearerDid", "_l", "registrationResult", "portableDid", "parsedDid", "Did", "DidError", "DidErrorCode", "didDocument", "gatewayUri", "DidDhtDocument", "didUri_1", "didDocumentMetadata", "EMPTY_DID_RESOLUTION_RESULT", "error", "_DidDhtDocument", "publicKeyBytes", "bep44Message", "dnsPacket", "resolutionResult", "putResult", "identifier", "Convert", "url", "response", "messageBytes", "body", "idLookup", "answer", "dnsRecordId", "data", "id", "t", "k", "c", "parsedAlg", "namedCurve", "vmId", "se", "customProperties", "__rest", "serviceEndpoint", "serviceProperties", "v", "types", "typeInteger", "recordIdsToMethodIds", "auth", "asm", "del", "inv", "agm", "didMetadata", "authoritativeGatewayUris", "previousDidProof", "txtRecords", "nsRecords", "serviceIds", "verificationMethodIds", "signature", "previousDid", "controller", "index", "keyType", "publicKeyBase64Url", "txtData", "txtDataString", "key", "value", "rootRecord", "DidVerificationRelationship", "relationship", "dnsRecordIds", "recordName", "typeIntegers", "type", "AUTHORITATIVE_ANSWER", "_DidDhtUtils", "signer", "sequenceNumber", "encodedDnsPacket", "encode", "bencodedData", "bencode_default", "identityKeyBytes", "Ed25519", "curve", "converter", "__awaiter", "Secp256r1", "Secp256k1", "X25519", "decode", "acc", "pair", "item", "newDid", "chunks", "i", "DidIonRegisteredKeyType", "AlgorithmToKeyTypeMap", "DEFAULT_GATEWAY_URI", "DidIon", "_DidIon", "DidMethod", "keyManager", "LocalKeyManager", "options", "_a", "vm", "methodIds", "_b", "_c", "s", "defaultVerificationMethod", "verificationMethodsToAdd", "_d", "keyUri", "publicKey", "_e", "recoveryKeyUri", "recoveryKey", "updateKeyUri", "updateKey", "longFormDidUri", "DidIonUtils", "_f", "didDocument", "didResolutionMetadata", "did", "BearerDid", "_g", "registrationResult", "methodId", "parsedDid", "Did", "DidError", "DidErrorCode", "verificationMethod", "portableDid", "gatewayUri", "verificationMethods", "getVerificationRelationshipsById", "ionDocument", "createOperation", "operationsUrl", "response", "didUri_1", "didUri", "EMPTY_DID_RESOLUTION_RESULT", "resolutionUrl", "didDocumentMetadata", "error", "_DidIonUtils", "baseUrl", "path", "url", "services", "normalizedRecoveryKey", "normalizedUpdateKey", "IonDid", "IonRequest", "ionPublicKeys", "computeJwkThumbprint", "ionServices", "service", "jwk", "keyType", "normalizedJwk", "DidJwk", "_DidJwk", "DidMethod", "keyManager", "LocalKeyManager", "options", "algorithm", "_d", "_a", "_c", "_b", "keyUri", "publicKey", "identifier", "Convert", "didUri", "document", "BearerDid", "didDocument", "parsedDid", "Did", "DidError", "DidErrorCode", "verificationMethod", "portableDid", "did", "_options", "EMPTY_DID_RESOLUTION_RESULT", "DidKeyRegisteredKeyType", "DidKeyVerificationMethodType", "AlgorithmToKeyTypeMap", "DidKey", "_DidKey", "DidMethod", "keyManager", "LocalKeyManager", "options", "algorithm", "_d", "_a", "_c", "_b", "keyUri", "publicKey", "identifier", "DidKeyUtils", "didUri", "document", "BearerDid", "didDocument", "parsedDid", "Did", "DidError", "DidErrorCode", "methodId", "verificationMethod", "vm", "portableDid", "did", "EMPTY_DID_RESOLUTION_RESULT", "error", "defaultContext", "enableEncryptionKeyDerivation", "enableExperimentalPublicKeyTypes", "publicKeyFormat", "multibaseValue", "signatureVerificationMethod", "encryptionPublicKeyFormat", "encryptionVerificationMethod", "contextArray", "getVerificationMethodTypes", "typeName", "typeUrl", "publicKeyBytes", "multicodecValue", "actualLength", "expectedLength", "kemMultibaseValue", "keyBytesToMultibaseId", "crv", "multicodecName", "multibaseIdToKeyBytes", "isValid", "Secp256k1", "Ed25519", "publicEncryptionKey", "ed25519PublicKey", "generatedPublicEncryptionKey", "method", "scheme", "universalTypeOf", "_DidKeyUtils", "jwk", "params", "lookupKey", "name", "Multicodec", "curve", "compressor", "Secp256r1", "converter", "X25519", "code", "jose", "DidWeb", "_DidWeb", "DidMethod", "didUri", "_options", "parsedDid", "Did", "EMPTY_DID_RESOLUTION_RESULT", "baseUrl", "didDocumentUrl", "response", "didDocument", "import_ms", "import_level", "DidResolverCacheLevel", "db", "location", "ttl", "ms", "did", "str", "cachedDidResolutionResult", "error", "value", "init_shim", "DidResolverCacheNoop", "_key", "_value", "UniversalResolver", "cache", "didResolvers", "DidResolverCacheNoop", "resolver", "didUri", "options", "parsedDid", "Did", "EMPTY_DID_RESOLUTION_RESULT", "DidErrorCode", "cachedResolutionResult", "resolutionResult", "didUrl", "_options", "parsedDidUrl", "didDocument", "didResolutionMetadata", "didDocumentMetadata", "service", "verificationMethod", "idSet", "didResource", "vm", "svc", "AgentDidResolverCache", "DidResolverCacheLevel", "agent", "db", "location", "ttl", "did", "str", "cachedResult", "storedDid", "result", "portableDid", "error", "logger", "BearerIdentity", "did", "metadata", "Hkdf", "baseKeyBytes", "length", "hash", "salt", "info", "webCryptoKey", "getWebcryptoSubtle", "Convert", "derivedKeyBuffer", "HkdfAlgorithm", "CryptoAlgorithm", "_a", "algorithm", "params", "__rest", "hash", "Hkdf", "init_shim", "CryptoError", "_CryptoError", "code", "message", "CryptoErrorCode", "EcdsaAlgorithm", "CryptoAlgorithm", "algorithm", "privateKeyBytes", "privateKey", "Secp256k1", "Secp256r1", "CryptoError", "CryptoErrorCode", "publicKeyBytes", "publicKey", "key", "isEcPrivateJwk", "data", "signature", "isEcPublicJwk", "EdDsaAlgorithm", "CryptoAlgorithm", "algorithm", "privateKeyBytes", "privateKey", "Ed25519", "CryptoError", "CryptoErrorCode", "publicKeyBytes", "publicKey", "key", "isOkpPrivateJwk", "data", "signature", "isOkpPublicJwk", "AES_KEY_LENGTHS", "AesKw", "privateKeyBytes", "privateKey", "Convert", "computeJwkThumbprint", "lengthInBits", "length", "webCrypto", "getWebcryptoSubtle", "webCryptoKey", "_a", "ext", "key_ops", "__rest", "isOctPrivateJwk", "wrappedKeyBytes", "wrappedKeyAlgorithm", "decryptionKey", "CryptoError", "CryptoErrorCode", "decryptionCryptoKey", "webCryptoAlgorithm", "unwrappedCryptoKey", "unwrappedKey", "encryptionKey", "encryptionCryptoKey", "wrappedKeyBuffer", "AesKwAlgorithm", "CryptoAlgorithm", "privateKeyBytes", "privateKey", "AesKw", "algorithm", "length", "params", "Pbkdf2", "baseKeyBytes", "hash", "salt", "iterations", "length", "webCrypto", "getWebcryptoSubtle", "webCryptoKey", "derivedKeyBuffer", "Pbkdf2Algorithm", "CryptoAlgorithm", "_a", "algorithm", "params", "__rest", "hashFunction", "hash", "Pbkdf2", "AesGcmAlgorithm", "CryptoAlgorithm", "privateKeyBytes", "privateKey", "AesGcm", "params", "algorithm", "length", "supportedAlgorithms", "AesGcmAlgorithm", "AesKwAlgorithm", "EdDsaAlgorithm", "HkdfAlgorithm", "Pbkdf2Algorithm", "EcdsaAlgorithm", "Sha2Algorithm", "AgentCryptoApi", "algorithmIdentifier", "privateKeyBytes", "algorithm", "publicKeyBytes", "params", "kdf", "derivedKeyAlgorithm", "CryptoError", "CryptoErrorCode", "length", "_b", "_a", "data", "privateKey", "computeJwkThumbprint", "_params", "key", "publicKey", "signature", "AlgorithmImplementation", "algProperty", "crvProperty", "algorithmNames", "init_shim", "IdentityProtocolDefinition", "JwkProtocolDefinition", "init_shim", "isPortableDid", "obj", "TENANT_SEPARATOR", "DeterministicKeyGenerator", "LocalKeyManager", "privateKeys", "predefinedKeys", "key", "_a", "computeJwkThumbprint", "keyUri", "privateKey", "_params", "done", "d", "__rest", "data", "Ed25519", "getDataStoreTenant", "agent", "tenant", "didUri", "import_ms", "DwnDataStore", "TTLCache", "ms", "id", "agent", "tenant", "tenantDid", "getDataStoreTenant", "matchingRecordId", "status", "DwnInterface", "TENANT_SEPARATOR", "useCache", "data", "preventDuplicates", "updateExisting", "messageParams", "matchingRecordEntry", "dataBytes", "Convert", "message", "entries", "_params", "recordId", "record", "readReply", "_a", "storeObject", "NodeStream", "InMemoryDataStore", "result", "key", "storedRecord", "clonedData", "DwnDidStore", "DwnDataStore", "IdentityProtocolDefinition", "params", "_super", "agent", "tenantDid", "queryReply", "DwnInterface", "storedDids", "record", "_a", "storedDid", "Convert", "isPortableDid", "indexKey", "TENANT_SEPARATOR", "InMemoryDidStore", "InMemoryDataStore", "DidInterface", "isDidRequest", "didRequest", "messageType", "AgentDidApi", "UniversalResolver", "agent", "didMethods", "resolverCache", "store", "AgentDidResolverCache", "InMemoryDidStore", "didMethod", "method", "tenant", "options", "bearerDid", "uri", "document", "metadata", "portableDid", "didUri", "BearerDid", "methodId", "parsedDid", "Did", "didDocument", "didResolutionMetadata", "publish", "existingDid", "canonicalize", "portableDidWithoutKeys", "DidDht", "deleteKey", "verificationMethod", "keyUri", "request", "error", "_a", "methodName", "didMethodApi", "import_readable_web_to_node_stream", "blobToIsomorphicNodeReadable", "blob", "webReadableToIsomorphicNodeReadable", "getDwnServiceEndpointUrls", "didUri", "dereferencer", "dereferencingResult", "utils_exports", "serviceEndpoint", "serviceEndpointUrls", "endpoint", "isRecordsWrite", "obj", "DwnInterfaceName", "DwnMethodName", "webReadableToIsomorphicNodeReadable", "webReadable", "isDwnRequest", "dwnRequest", "messageType", "isRecordsType", "messageType", "DwnInterface", "AgentDwnApi", "agent", "dwn", "dataPath", "dataStore", "didResolver", "eventLog", "eventStream", "messageStore", "tenantGate", "resumableTaskStore", "DataStoreLevel", "UniversalResolver", "DidDht", "DidJwk", "DidResolverCacheLevel", "EventLogLevel", "MessageStoreLevel", "ResumableTaskStoreLevel", "EventEmitterStream", "Dwn", "request", "message", "dataStream", "subscriptionHandler", "Message", "dwnEndpointUrls", "getDwnServiceEndpointUrls", "messageCid", "data", "reply", "targetDid", "errorMessages", "DwnMethodName", "dwnUrl", "parsedUrl", "error", "rawMessage", "readableStream", "isDwnRequest", "DwnInterface", "messageParams", "isomorphicNodeReadable", "blobToIsomorphicNodeReadable", "forCid", "forProcessMessage", "webReadableToIsomorphicNodeReadable", "Cid", "_a", "dwnMessage", "dwnMessageConstructor", "dwnMessageConstructors", "isRecordsWrite", "signer", "params", "author", "__awaiter", "signingMethod", "keyUri", "publicKey", "keyManager", "CryptoUtils", "messagesRead", "result", "messageEntry", "dwnMessageWithBlob", "dataBytes", "NodeStream", "init_shim", "init_shim", "Rho", "Id", "_", "i", "Pi", "idxL", "idxR", "j", "k", "shifts", "shiftsL", "idx", "shiftsR", "Kl", "Kr", "rotl", "word", "shift", "f", "group", "x", "y", "z", "BUF", "RIPEMD160", "SHA2", "h0", "h1", "h2", "h3", "h4", "view", "offset", "al", "ar", "bl", "br", "cl", "cr", "dl", "dr", "el", "er", "rGroup", "hbl", "hbr", "rl", "rr", "sl", "sr", "tl", "tr", "ripemd160", "wrapConstructor", "MASTER_SECRET", "utf8ToBytes", "HARDENED_OFFSET", "ZERO", "ensureBytes", "b", "lengths", "hexToBytes", "bytes", "hash160", "data", "ripemd160", "sha256", "fromU32", "createView", "toU32", "n", "buf", "HDKey", "_HDKey", "ed25519", "concatBytes", "bytesToHex", "seed", "I", "hmac", "sha512", "opt", "path", "forceHardened", "parts", "child", "c", "m", "idx", "index", "message", "signature", "init_shim", "wordlist", "init_shim", "init_shim", "pbkdf2Init", "hash", "_password", "_salt", "_opts", "opts", "checkOpts", "c", "dkLen", "asyncTick", "number", "password", "toBytes", "salt", "DK", "PRF", "hmac", "PRFSalt", "pbkdf2Output", "prfW", "u", "pbkdf2Async", "hash", "password", "salt", "opts", "c", "dkLen", "asyncTick", "DK", "PRF", "PRFSalt", "pbkdf2Init", "prfW", "arr", "view", "createView", "u", "ti", "pos", "Ti", "asyncLoop", "i", "pbkdf2Output", "init_shim", "assertNumber", "n", "isBytes", "a", "chain", "args", "id", "wrap", "b", "c", "encode", "x", "decode", "alphabet", "digits", "i", "input", "letter", "index", "join", "separator", "from", "to", "padding", "bits", "chr", "data", "end", "convertRadix", "data", "from", "to", "pos", "res", "digits", "d", "carry", "done", "i", "digit", "digitBase", "rounded", "gcd", "a", "b", "radix2carry", "convertRadix2", "padding", "mask", "n", "radix", "num", "bytes", "isBytes", "radix2", "bits", "revPadding", "checksum", "len", "fn", "data", "isBytes", "res", "payload", "newChecksum", "oldChecksum", "i", "utils", "alphabet", "chain", "convertRadix", "convertRadix2", "radix", "radix2", "join", "padding", "isJapanese", "wordlist", "nfkd", "str", "normalize", "norm", "words", "assertEntropy", "entropy", "bytes", "generateMnemonic", "strength", "number", "entropyToMnemonic", "randomBytes", "calcChecksum", "bitsLeft", "sha256", "getCoder", "i", "utils", "mnemonicToEntropy", "mnemonic", "validateMnemonic", "salt", "passphrase", "mnemonicToSeed", "pbkdf2Async", "sha512", "DwnKeyStore", "DwnDataStore", "JwkProtocolDefinition", "params", "_super", "agent", "tenantDid", "queryReply", "DwnInterface", "storedKeys", "record", "_a", "storedKey", "Convert", "isPrivateJwk", "indexKey", "TENANT_SEPARATOR", "KEY_URI_PREFIX_JWK", "InMemoryKeyStore", "InMemoryDataStore", "supportedAlgorithms", "AesGcmAlgorithm", "AesKwAlgorithm", "EdDsaAlgorithm", "EcdsaAlgorithm", "Sha2Algorithm", "LocalKeyManager", "agent", "keyStore", "InMemoryKeyStore", "_a", "keyUri", "params", "__rest", "privateKey", "algorithm", "_params", "algorithmIdentifier", "computeJwkThumbprint", "key", "jwkThumbprint", "KEY_URI_PREFIX_JWK", "isPrivateJwk", "data", "wrappedKeyBytes", "wrappedKeyAlgorithm", "decryptionKeyUri", "decryptionKey", "signature", "unwrappedKey", "encryptionKeyUri", "encryptionKey", "AlgorithmImplementation", "CryptoError", "CryptoErrorCode", "algProperty", "crvProperty", "algorithmNames", "isValidJweHeader", "obj", "JweKeyManagement", "key", "encryptedKey", "joseHeader", "crypto", "CryptoError", "CryptoErrorCode", "salt", "Convert", "kek", "cek", "init_shim", "isCipher", "obj", "init_shim", "hasDuplicateProperties", "objects", "propertySet", "objectsWithoutUndefined", "obj", "key", "decodeHeaderParam", "param", "value", "Convert", "CryptoError", "CryptoErrorCode", "FlattenedJwe", "_FlattenedJwe", "params", "jwe", "key", "keyManager", "LocalKeyManager", "crypto", "AgentCryptoApi", "options", "isCipher", "parsedProtectedHeader", "hasDuplicateProperties", "joseHeader", "isValidJweHeader", "cek", "encryptedKey", "JweKeyManagement", "error", "iv", "tag", "ciphertext", "additionalData", "_a", "_b", "plaintext", "additionalAuthenticatedData", "protectedHeader", "sharedUnprotectedHeader", "unprotectedHeader", "CryptoUtils", "encodedProtectedHeader", "encodedAad", "ciphertextWithTag", "authenticationTag", "CompactJwe", "jwe", "key", "keyManager", "LocalKeyManager", "crypto", "AgentCryptoApi", "options", "CryptoError", "CryptoErrorCode", "protectedHeader", "encryptedKey", "initializationVector", "ciphertext", "authenticationTag", "length", "flattenedJwe", "FlattenedJwe", "isValidJweHeader", "plaintext", "isEmptyString", "obj", "isIdentityVaultBackup", "isIdentityVaultStatus", "HdIdentityVault", "keyDerivationWorkFactor", "store", "AgentCryptoApi", "MemoryStore", "backupData", "backupDataString", "Convert", "backup", "oldPassword", "newPassword", "cekJwe", "protectedHeader", "contentEncryptionKey", "contentEncryptionKeyBytes", "CompactJwe", "LocalKeyManager", "newCekJwe", "didJwe", "portableDidBytes", "portableDid", "isPortableDid", "BearerDid", "storedStatus", "vaultStatus", "password", "recoveryPhrase", "dwnEndpoints", "generateMnemonic", "wordlist", "validateMnemonic", "rootSeed", "mnemonicToSeed", "rootHdKey", "HDKey", "vaultHdKey", "saltInput", "cekJweProtectedHeader", "identityHdKey", "identityPrivateKey", "signingHdKey", "signingPrivateKey", "deterministicKeyGenerator", "DeterministicKeyGenerator", "options", "DidDht", "didJweProtectedHeader", "initialized", "previousStatus", "previousContentEncryptionKey", "previousDid", "lastBackup", "lastRestore", "isIdentityMetadata", "obj", "DwnIdentityStore", "DwnDataStore", "IdentityProtocolDefinition", "params", "_super", "agent", "tenantDid", "queryReply", "DwnInterface", "storedIdentities", "record", "_a", "storedIdentity", "Convert", "indexKey", "TENANT_SEPARATOR", "InMemoryIdentityStore", "InMemoryDataStore", "AgentIdentityApi", "agent", "store", "InMemoryIdentityStore", "metadata", "didMethod", "didOptions", "bearerDid", "identity", "BearerIdentity", "didUri", "bearerIdentity", "storedIdentity", "storedDid", "portableIdentity", "tenant", "storedIdentities", "getDwnServiceEndpointUrls", "endpoints", "portableDid", "dwnService", "_a", "service", "newDwnService", "name", "connectedDid", "identities", "AgentPermissionsApi", "_AgentPermissionsApi", "agent", "TTLCache", "connectedDid", "delegateDid", "delegate", "messageType", "protocol", "cached", "cacheKey", "cachedGrant", "permissionGrants", "grant", "author", "target", "grantee", "grantor", "remote", "tags", "params", "DwnInterface", "PermissionsProtocol", "reply", "grants", "entry", "PermissionGrant", "requests", "request", "PermissionRequest", "grantRecordId", "revocationReply", "store", "delegated", "createGrantParams", "__rest", "permissionGrantData", "permissionsGrantBytes", "Convert", "messageParams", "message", "dataEncodedMessage", "permissionRequestData", "permissionRequestBytes", "description", "revokeData", "permissionRevocationBytes", "protocolPath", "contextId", "scope", "isRecordsType", "recordScope", "messagesScope", "init_shim", "JsonRpcErrorCodes", "createJsonRpcRequest", "id", "method", "params", "createJsonRpcSubscriptionRequest", "subscriptionId", "parseJson", "text", "import_ms", "DwnServerInfoCacheMemory", "ttl", "TTLCache", "ms", "dwnUrl", "value", "HttpDwnRpcClient", "serverInfoCache", "DwnServerInfoCacheMemory", "request", "requestId", "CryptoUtils", "jsonRpcRequest", "createJsonRpcRequest", "fetchOpts", "resp", "dwnRpcResponse", "dataStream", "headers", "jsonRpcResponse", "parseJson", "responseBody", "code", "message", "reply", "dwnUrl", "serverInfo", "url", "response", "results", "error", "init_shim", "ws", "browser_default", "CONNECT_TIMEOUT", "RESPONSE_TIMEOUT", "JsonRpcSocket", "_JsonRpcSocket", "socket", "responseTimeout", "url", "options", "connectTimeout", "onclose", "onerror", "browser_default", "error", "resolve", "reject", "jsonRpcSocket", "event", "jsonRpcResponse", "parseJson", "handler", "request", "_a", "CryptoUtils", "handleResponse", "jsonRpsResponse", "listener", "subscriptionId", "socketEventListener", "response", "__awaiter", "id", "requestId", "createJsonRpcSubscriptionRequest", "WebSocketDwnRpcClient", "_WebSocketDwnRpcClient", "request", "jsonRpcSocketOptions", "url", "socket", "JsonRpcSocket", "subscriptions", "error", "connection", "targetDid", "message", "subscriptionHandler", "target", "requestId", "CryptoUtils", "createJsonRpcRequest", "response", "result", "messageHandler", "subscriptionId", "createJsonRpcSubscriptionRequest", "close", "subscription", "event", "reply", "DidRpcMethod", "Web5RpcClient", "clients", "HttpWeb5RpcClient", "WebSocketWeb5RpcClient", "client", "transportScheme", "request", "url", "transportClient", "error", "dwnUrl", "HttpDwnRpcClient", "requestId", "CryptoUtils", "jsonRpcRequest", "createJsonRpcRequest", "httpRequest", "jsonRpcResponse", "response", "code", "message", "WebSocketDwnRpcClient", "_request", "_dwnUrl", "AgentSyncApi", "agent", "syncEngine", "params", "did", "direction", "timeout", "import_ms", "import_level", "SyncEngineLevel", "_SyncEngineLevel", "agent", "dataPath", "db", "AgentPermissionsApi", "monotonicFactory", "syncPeerState", "pullQueue", "pullJobs", "deleteOperations", "errored", "job", "key", "did", "dwnUrl", "messageCid", "delegateDid", "protocol", "permissionGrantId", "granteeDid", "DwnInterface", "error", "messagesRead", "reply", "_a", "replyEntry", "message", "dataStream", "isRecordsWrite", "NodeStream", "pullReply", "pushQueue", "pushJobs", "dwnMessage", "options", "registeredIdentities", "e", "direction", "interval", "intervalMilliseconds", "ms", "intervalSync", "__awaiter", "timeout", "elapsedTimeout", "resolve", "DwnInterfaceName", "_b", "DwnMethodName", "syncDirection", "syncState", "eventLog", "syncOperations", "watermark", "operationKey", "result", "index", "peerState", "delegateDidString", "protocolString", "cursor", "messagesReply", "filters", "messagesQueryMessage", "author", "messageEntry", "dwnMessageWithBlob", "dataBytes", "_d", "_e", "__asyncValues", "_f", "_c", "protocols", "dwnEndpointUrls", "getDwnServiceEndpointUrls", "cursorKey", "cursorsStore", "cursorValue", "messageStore", "import_level", "import_ms", "Web5IdentityAgent", "_Web5IdentityAgent", "params", "did", "dataPath", "agentDid", "agentVault", "cryptoApi", "didApi", "dwnApi", "identityApi", "keyManager", "permissionsApi", "rpcClient", "syncApi", "HdIdentityVault", "LevelStore", "AgentCryptoApi", "AgentDidApi", "DidDht", "DidJwk", "DidResolverCacheLevel", "DwnDidStore", "AgentDwnApi", "AgentIdentityApi", "DwnIdentityStore", "LocalKeyManager", "DwnKeyStore", "AgentPermissionsApi", "Web5RpcClient", "AgentSyncApi", "SyncEngineLevel", "password", "recoveryPhrase", "request", "_request"]
}
