ns-auth-sdk 1.14.0 → 1.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cjs-CSUAVztq.cjs → browser-index.cjs} +5476 -296
- package/dist/browser-index.cjs.map +1 -0
- package/dist/browser-index.d.cts +1998 -0
- package/dist/browser-index.d.cts.map +1 -0
- package/dist/browser-index.d.mts +1998 -0
- package/dist/browser-index.d.mts.map +1 -0
- package/dist/{cjs-sm5h7qxv.mjs → browser-index.mjs} +5169 -69
- package/dist/browser-index.mjs.map +1 -0
- package/dist/{group-coordination-BlFpBVpn.mjs → group-coordination-BV6PKlKp.mjs} +1 -1
- package/dist/{group-coordination-BlFpBVpn.mjs.map → group-coordination-BV6PKlKp.mjs.map} +1 -1
- package/dist/{group-coordination-ImuoJEoy.mjs → group-coordination-BytkmY9j.mjs} +1 -1
- package/dist/{group-coordination-LGIyipaX.cjs → group-coordination-DL39hJ3R.cjs} +1 -1
- package/dist/{group-coordination-LGIyipaX.cjs.map → group-coordination-DL39hJ3R.cjs.map} +1 -1
- package/dist/{group-coordination-Cf18OjZt.cjs → group-coordination-DLban6a7.cjs} +1 -1
- package/dist/index.cjs +8899 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.mjs +9072 -213
- package/dist/index.mjs.map +1 -1
- package/dist/{prf-handler-D3EqUNWe.cjs → prf-handler-BNd7gmXJ.cjs} +1 -1
- package/dist/{prf-handler-D3EqUNWe.cjs.map → prf-handler-BNd7gmXJ.cjs.map} +1 -1
- package/dist/prf-handler-CRMgzJG2.cjs +3 -0
- package/dist/{prf-handler-Dly_WZGn.mjs → prf-handler-DG99ZkS2.mjs} +1 -1
- package/dist/{prf-handler-Db8CsoIP.mjs → prf-handler-Dj2WTO9i.mjs} +1 -1
- package/dist/{prf-handler-Db8CsoIP.mjs.map → prf-handler-Dj2WTO9i.mjs.map} +1 -1
- package/dist/zkm.service-Bv88tVS5.mjs +3 -0
- package/dist/zkm.service-D2BZ_aqA.cjs +3 -0
- package/dist/{zkm.service-DfSPbuOl.cjs → zkm.service-DX06sSfB.cjs} +1 -1
- package/dist/{zkm.service-DfSPbuOl.cjs.map → zkm.service-DX06sSfB.cjs.map} +1 -1
- package/dist/{zkm.service-B24N_0FB.mjs → zkm.service-j0HlN7Oq.mjs} +1 -1
- package/dist/{zkm.service-B24N_0FB.mjs.map → zkm.service-j0HlN7Oq.mjs.map} +1 -1
- package/package.json +19 -6
- package/dist/_esm-C7FRLTj2.cjs +0 -9030
- package/dist/_esm-C7FRLTj2.cjs.map +0 -1
- package/dist/_esm-D_oMW5T5.mjs +0 -9028
- package/dist/_esm-D_oMW5T5.mjs.map +0 -1
- package/dist/base64-js-B8y7dH5k.mjs +0 -93
- package/dist/base64-js-B8y7dH5k.mjs.map +0 -1
- package/dist/base64-js-Tm-kCeud.cjs +0 -98
- package/dist/base64-js-Tm-kCeud.cjs.map +0 -1
- package/dist/ccip-157tdxqP.cjs +0 -7947
- package/dist/ccip-157tdxqP.cjs.map +0 -1
- package/dist/ccip-BEMMdVyd.cjs +0 -4
- package/dist/ccip-BSmCdJ3K.mjs +0 -3
- package/dist/ccip-okqXkslP.mjs +0 -6567
- package/dist/ccip-okqXkslP.mjs.map +0 -1
- package/dist/chains-CTeD2UcS.mjs +0 -33
- package/dist/chains-CTeD2UcS.mjs.map +0 -1
- package/dist/chains-Du-lv_5i.cjs +0 -33
- package/dist/chains-Du-lv_5i.cjs.map +0 -1
- package/dist/chunk-Bnu9O96Y.cjs +0 -60
- package/dist/chunk-CVYhg9ik.mjs +0 -45
- package/dist/cjs-CSUAVztq.cjs.map +0 -1
- package/dist/cjs-sm5h7qxv.mjs.map +0 -1
- package/dist/defineChain-7QG67hYU.cjs +0 -30
- package/dist/defineChain-7QG67hYU.cjs.map +0 -1
- package/dist/defineChain-DBem8ZQY.mjs +0 -24
- package/dist/defineChain-DBem8ZQY.mjs.map +0 -1
- package/dist/dist-BPmSxkxc.cjs +0 -10676
- package/dist/dist-BPmSxkxc.cjs.map +0 -1
- package/dist/dist-BSjH4t6s.cjs +0 -12932
- package/dist/dist-BSjH4t6s.cjs.map +0 -1
- package/dist/dist-C-KjTK4Q.cjs +0 -447
- package/dist/dist-C-KjTK4Q.cjs.map +0 -1
- package/dist/dist-C2h97xM-.mjs +0 -355
- package/dist/dist-C2h97xM-.mjs.map +0 -1
- package/dist/dist-CT7grDWb.mjs +0 -12920
- package/dist/dist-CT7grDWb.mjs.map +0 -1
- package/dist/dist-D7fRmK6G.mjs +0 -10632
- package/dist/dist-D7fRmK6G.mjs.map +0 -1
- package/dist/dist-DlmcyFmM.mjs +0 -16951
- package/dist/dist-DlmcyFmM.mjs.map +0 -1
- package/dist/dist-O0uZr5OF.cjs +0 -17122
- package/dist/dist-O0uZr5OF.cjs.map +0 -1
- package/dist/echo-BB-JgAYZ.cjs +0 -339
- package/dist/echo-BB-JgAYZ.cjs.map +0 -1
- package/dist/echo-Bwy4_Cvh.mjs +0 -316
- package/dist/echo-Bwy4_Cvh.mjs.map +0 -1
- package/dist/echo-D6X2IuNW.cjs +0 -9
- package/dist/echo-DvfG_heb.mjs +0 -8
- package/dist/esm-BcHKCX5i.mjs +0 -569
- package/dist/esm-BcHKCX5i.mjs.map +0 -1
- package/dist/esm-Bh_YwFIz.cjs +0 -599
- package/dist/esm-Bh_YwFIz.cjs.map +0 -1
- package/dist/esm-C0XO9TQm.cjs +0 -30449
- package/dist/esm-C0XO9TQm.cjs.map +0 -1
- package/dist/esm-vMUVj9k4.mjs +0 -30440
- package/dist/esm-vMUVj9k4.mjs.map +0 -1
- package/dist/keyset-CKMQXvsb.mjs +0 -172
- package/dist/keyset-CKMQXvsb.mjs.map +0 -1
- package/dist/keyset-Cxdgu110.cjs +0 -237
- package/dist/keyset-Cxdgu110.cjs.map +0 -1
- package/dist/keyset-DLxpGhdu.cjs +0 -6
- package/dist/keyset-IKjlhvqF.mjs +0 -4
- package/dist/node-3EUJ4ga9.cjs +0 -9
- package/dist/node-C2UpE11T.cjs +0 -444
- package/dist/node-C2UpE11T.cjs.map +0 -1
- package/dist/node-CHdpTQdN.mjs +0 -8679
- package/dist/node-CHdpTQdN.mjs.map +0 -1
- package/dist/node-DQt1CVGl.mjs +0 -6
- package/dist/node-Dy8ww1LG.cjs +0 -8680
- package/dist/node-Dy8ww1LG.cjs.map +0 -1
- package/dist/node-IX55IH6z.mjs +0 -397
- package/dist/node-IX55IH6z.mjs.map +0 -1
- package/dist/nostr-BTOpBN_5.cjs +0 -11
- package/dist/nostr-D4E52XRU.mjs +0 -224
- package/dist/nostr-D4E52XRU.mjs.map +0 -1
- package/dist/nostr-Hv2tsnuI.cjs +0 -272
- package/dist/nostr-Hv2tsnuI.cjs.map +0 -1
- package/dist/nostr-ZwJe_DlZ.mjs +0 -4
- package/dist/pako.esm-DTVnlCJh.cjs +0 -3856
- package/dist/pako.esm-DTVnlCJh.cjs.map +0 -1
- package/dist/pako.esm-ORhkEHM2.mjs +0 -3838
- package/dist/pako.esm-ORhkEHM2.mjs.map +0 -1
- package/dist/peer-B9g3OQ5D.cjs +0 -18
- package/dist/peer-CptDj7zu.mjs +0 -745
- package/dist/peer-CptDj7zu.mjs.map +0 -1
- package/dist/peer-CtqL0yiE.mjs +0 -9
- package/dist/peer-XrPL0O6z.cjs +0 -822
- package/dist/peer-XrPL0O6z.cjs.map +0 -1
- package/dist/ping-BXKREIdI.mjs +0 -7
- package/dist/ping-BtVhKocl.cjs +0 -379
- package/dist/ping-BtVhKocl.cjs.map +0 -1
- package/dist/ping-D5fpMhGC.cjs +0 -11
- package/dist/ping-DOD50kW_.mjs +0 -332
- package/dist/ping-DOD50kW_.mjs.map +0 -1
- package/dist/policy-8HcjulLD.cjs +0 -293
- package/dist/policy-8HcjulLD.cjs.map +0 -1
- package/dist/policy-BA6MEOBY.mjs +0 -5
- package/dist/policy-BFNdXvmM.cjs +0 -11
- package/dist/policy-D_nFHHjo.mjs +0 -228
- package/dist/policy-D_nFHHjo.mjs.map +0 -1
- package/dist/prf-handler-BNiyCQMt.cjs +0 -3
- package/dist/src-CVfTUJQl.mjs +0 -822
- package/dist/src-CVfTUJQl.mjs.map +0 -1
- package/dist/src-D5S86Xpf.cjs +0 -827
- package/dist/src-D5S86Xpf.cjs.map +0 -1
- package/dist/types-B-TLIS13.cjs +0 -212
- package/dist/types-B-TLIS13.cjs.map +0 -1
- package/dist/types-CTm_FHYD.mjs +0 -111
- package/dist/types-CTm_FHYD.mjs.map +0 -1
- package/dist/validation-1xwWVXqE.mjs +0 -3
- package/dist/validation-DnpurN79.cjs +0 -405
- package/dist/validation-DnpurN79.cjs.map +0 -1
- package/dist/validation-IsAUvsvy.mjs +0 -334
- package/dist/validation-IsAUvsvy.mjs.map +0 -1
- package/dist/validation-yCvZCqIs.cjs +0 -6
- package/dist/wrapper-C5NpyacC.cjs +0 -3552
- package/dist/wrapper-C5NpyacC.cjs.map +0 -1
- package/dist/wrapper-CHq_CV4J.mjs +0 -3552
- package/dist/wrapper-CHq_CV4J.mjs.map +0 -1
- package/dist/zkm.service-BrXyI4BS.mjs +0 -3
- package/dist/zkm.service-BvQ01wSH.cjs +0 -3
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node-Dy8ww1LG.cjs","names":["retry","err","err","path","path","cloned","path","target","fs","EventEmitter","path","assert","err","n","releasedBufObj","buffer","Worker","join","stream","EventEmitter","stream","target","join","fixTarget","createRequire","stream","defaultOptions","_","stream","defaultLevel","stream","position","value","join","tmp","key","res","stream","streamLevels","os","stream","defaultOptions","pino","path","logger","Readable","buffer","stream","global","wrap","path","obj","proxy","returnValue","target","buffer","dataView","buffer","buffer","buffer","buffer","getCurrentDir","Worker","getCurrentDir","Worker","logger","module","buffer","pako","logger","module","position","bundledStrings","readStruct","onLoadedStructures","saveState","readString","decode","target","buffer","textEncoder","hasNodeBuffer","referenceMap","encodeUtf8","position","pack","prepareStructures","maxBytes","key","writeStruct","newPosition","buffer","target","target","position","targetView","safeEnd","pack","src","srcEnd","dataView","fs","path","buffer","path","fs","path","url","os","dir","module"],"sources":["../node_modules/@aztec/bb.js/dest/node/retry/index.js","../node_modules/@aztec/bb.js/dest/node/crs/net_crs.js","../node_modules/pino-std-serializers/lib/err-helpers.js","../node_modules/pino-std-serializers/lib/err-proto.js","../node_modules/pino-std-serializers/lib/err.js","../node_modules/pino-std-serializers/lib/err-with-cause.js","../node_modules/pino-std-serializers/lib/req.js","../node_modules/pino-std-serializers/lib/res.js","../node_modules/pino-std-serializers/index.js","../node_modules/pino/lib/caller.js","../node_modules/@pinojs/redact/index.js","../node_modules/pino/lib/symbols.js","../node_modules/pino/lib/redaction.js","../node_modules/pino/lib/time.js","../node_modules/quick-format-unescaped/index.js","../node_modules/atomic-sleep/index.js","../node_modules/sonic-boom/index.js","../node_modules/on-exit-leak-free/index.js","../node_modules/thread-stream/package.json","../node_modules/thread-stream/lib/wait.js","../node_modules/thread-stream/lib/indexes.js","../node_modules/thread-stream/index.js","../node_modules/pino/lib/transport.js","../node_modules/pino/lib/tools.js","../node_modules/pino/lib/constants.js","../node_modules/pino/lib/levels.js","../node_modules/pino/lib/meta.js","../node_modules/pino/lib/proto.js","../node_modules/safe-stable-stringify/index.js","../node_modules/pino/lib/multistream.js","../node_modules/pino/pino.js","../node_modules/@aztec/bb.js/dest/node/log/node/index.js","../node_modules/@aztec/bb.js/dest/node/crs/node/index.js","../node_modules/comlink/dist/umd/comlink.js","../node_modules/@aztec/bb.js/dest/node/serialize/buffer_reader.js","../node_modules/@aztec/bb.js/dest/node/serialize/output_type.js","../node_modules/@aztec/bb.js/dest/node/types/raw_buffer.js","../node_modules/@aztec/bb.js/dest/node/serialize/serialize.js","../node_modules/@aztec/bb.js/dest/node/types/ptr.js","../node_modules/@aztec/bb.js/dest/node/random/node/index.js","../node_modules/@aztec/bb.js/dest/node/bigint-array/index.js","../node_modules/@aztec/bb.js/dest/node/types/fields.js","../node_modules/@aztec/bb.js/dest/node/types/point.js","../node_modules/@aztec/bb.js/dest/node/types/fixed_size_buffer.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_api/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/helpers/node/node_endpoint.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/helpers/node/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/barretenberg_wasm_thread/factory/node/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/barretenberg_wasm_base/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/barretenberg_wasm_main/heap_allocator.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/barretenberg_wasm_main/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/fetch_code/node/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg_wasm/index.js","../node_modules/msgpackr/unpack.js","../node_modules/msgpackr/pack.js","../node_modules/msgpackr/struct.js","../node_modules/detect-libc/lib/process.js","../node_modules/detect-libc/lib/filesystem.js","../node_modules/detect-libc/lib/elf.js","../node_modules/detect-libc/lib/detect-libc.js","../node_modules/node-gyp-build-optional-packages/node-gyp-build.js","../node_modules/node-gyp-build-optional-packages/index.js","../node_modules/msgpackr-extract/index.js","../node_modules/msgpackr/node-index.js","../node_modules/@aztec/bb.js/dest/node/cbind/generated/api_types.js","../node_modules/@aztec/bb.js/dest/node/cbind/generated/async.js","../node_modules/@aztec/bb.js/dest/node/proof/index.js","../node_modules/@aztec/bb.js/dest/node/barretenberg/backend.js","../node_modules/@aztec/bb.js/dest/node/barretenberg/index.js"],"sourcesContent":["/**\n * Generates a backoff sequence for retrying operations with an increasing delay.\n * The backoff sequence follows this pattern: 1, 1, 1, 2, 4, 8, 16, 32, 64, ...\n * This generator can be used in combination with the `retry` function to perform\n * retries with exponential backoff and capped at 64 seconds between attempts.\n *\n * @returns A generator that yields the next backoff value in seconds as an integer.\n */\nexport function* backoffGenerator() {\n const v = [1, 1, 1, 2, 4, 8, 16, 32, 64];\n let i = 0;\n while (true) {\n yield v[Math.min(i++, v.length - 1)];\n }\n}\n/**\n * Generates a backoff sequence based on the array of retry intervals to use with the `retry` function.\n * @param retries - Intervals to retry (in seconds).\n * @returns A generator sequence.\n */\nexport function* makeBackoff(retries) {\n for (const retry of retries) {\n yield retry;\n }\n}\n/**\n * Retry a given asynchronous function with a specific backoff strategy, until it succeeds or backoff generator ends.\n * It logs the error and retry interval in case an error is caught. The function can be named for better log output.\n *\n * @param fn - The asynchronous function to be retried.\n * @param backoff - The optional backoff generator providing the intervals in seconds between retries. Defaults to a predefined series.\n * @returns A Promise that resolves with the successful result of the provided function, or rejects if backoff generator ends.\n * @throws If `NoRetryError` is thrown by the `fn`, it is rethrown.\n */\nexport async function retry(fn, backoff = backoffGenerator()) {\n while (true) {\n try {\n return await fn();\n }\n catch (err) {\n const s = backoff.next().value;\n if (s === undefined) {\n throw err;\n }\n await new Promise(resolve => setTimeout(resolve, s * 1000));\n continue;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmV0cnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsZ0JBQWdCO0lBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBaUI7SUFDNUMsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLEtBQUssQ0FBUyxFQUF5QixFQUFFLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRTtJQUN6RixPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQztZQUNELE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVELFNBQVM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==","import { retry, makeBackoff } from '../retry/index.js';\n/**\n * Downloader for CRS from the web or local.\n */\nexport class NetCrs {\n constructor(\n /**\n * The number of circuit gates.\n */\n numPoints) {\n this.numPoints = numPoints;\n }\n /**\n * Download the data.\n */\n async init() {\n await this.downloadG1Data();\n await this.downloadG2Data();\n }\n /**\n * Opens up a ReadableStream to the points data\n */\n async streamG1Data() {\n const response = await this.fetchG1Data();\n return response.body;\n }\n /**\n * Opens up a ReadableStream to the points data\n */\n async streamG2Data() {\n const response = await this.fetchG2Data();\n return response.body;\n }\n async downloadG1Data() {\n const response = await this.fetchG1Data();\n return (this.data = new Uint8Array(await response.arrayBuffer()));\n }\n /**\n * Download the G2 points data.\n */\n async downloadG2Data() {\n const response2 = await this.fetchG2Data();\n return (this.g2Data = new Uint8Array(await response2.arrayBuffer()));\n }\n /**\n * G1 points data for prover key.\n * @returns The points data.\n */\n getG1Data() {\n return this.data;\n }\n /**\n * G2 points data for verification key.\n * @returns The points data.\n */\n getG2Data() {\n return this.g2Data;\n }\n /**\n * Fetches the appropriate range of points from a remote source\n */\n async fetchG1Data() {\n // Skip the download if numPoints is 0 (would download the entire file due to bad range header otherwise)\n if (this.numPoints === 0) {\n return new Response(new Uint8Array([]));\n }\n const g1End = this.numPoints * 64 - 1;\n return await retry(() => fetch('https://crs.aztec.network/g1.dat', {\n headers: {\n Range: `bytes=0-${g1End}`,\n },\n cache: 'force-cache',\n }), makeBackoff([5, 5, 5]));\n }\n /**\n * Fetches the appropriate range of points from a remote source\n */\n async fetchG2Data() {\n return await retry(() => fetch('https://crs.aztec.network/g2.dat', {\n cache: 'force-cache',\n }), makeBackoff([5, 5, 5]));\n }\n}\n/**\n * Downloader for CRS from the web or local.\n */\nexport class NetGrumpkinCrs {\n constructor(\n /**\n * The number of circuit gates.\n */\n numPoints) {\n this.numPoints = numPoints;\n }\n /**\n * Download the data.\n */\n async init() {\n await this.downloadG1Data();\n }\n async downloadG1Data() {\n const response = await this.fetchG1Data();\n return (this.data = new Uint8Array(await response.arrayBuffer()));\n }\n /**\n * Opens up a ReadableStream to the points data\n */\n async streamG1Data() {\n const response = await this.fetchG1Data();\n return response.body;\n }\n /**\n * G1 points data for prover key.\n * @returns The points data.\n */\n getG1Data() {\n return this.data;\n }\n /**\n * Fetches the appropriate range of points from a remote source\n */\n async fetchG1Data() {\n // Skip the download if numPoints is 0 (would download the entire file due to bad range header otherwise)\n if (this.numPoints === 0) {\n return new Response(new Uint8Array([]));\n }\n const g1End = this.numPoints * 64 - 1;\n return await fetch('https://crs.aztec.network/grumpkin_g1.dat', {\n headers: {\n Range: `bytes=0-${g1End}`,\n },\n cache: 'force-cache',\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2Nycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jcnMvbmV0X2Nycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLE1BQU07SUFJakI7SUFDRTs7T0FFRztJQUNhLFNBQWlCO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDaEMsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFFBQVEsQ0FBQyxJQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDaEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsT0FBTyxRQUFRLENBQUMsSUFBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGNBQWM7UUFDbEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLHlHQUF5RztRQUN6RyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsT0FBTyxNQUFNLEtBQUssQ0FDaEIsR0FBRyxFQUFFLENBQ0gsS0FBSyxDQUFDLGtDQUFrQyxFQUFFO1lBQ3hDLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsV0FBVyxLQUFLLEVBQUU7YUFDMUI7WUFDRCxLQUFLLEVBQUUsYUFBYTtTQUNyQixDQUFDLEVBQ0osV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFdBQVc7UUFDdkIsT0FBTyxNQUFNLEtBQUssQ0FDaEIsR0FBRyxFQUFFLENBQ0gsS0FBSyxDQUFDLGtDQUFrQyxFQUFFO1lBQ3hDLEtBQUssRUFBRSxhQUFhO1NBQ3JCLENBQUMsRUFDSixXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3ZCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBR3pCO0lBQ0U7O09BRUc7SUFDYSxTQUFpQjtRQUFqQixjQUFTLEdBQVQsU0FBUyxDQUFRO0lBQ2hDLENBQUM7SUFFSjs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFFBQVEsQ0FBQyxJQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFdBQVc7UUFDdkIseUdBQXlHO1FBQ3pHLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUksUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0QyxPQUFPLE1BQU0sS0FBSyxDQUFDLDJDQUEyQyxFQUFFO1lBQzlELE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsV0FBVyxLQUFLLEVBQUU7YUFDMUI7WUFDRCxLQUFLLEVBQUUsYUFBYTtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==","'use strict'\n\n// **************************************************************\n// * Code initially copied/adapted from \"pony-cause\" npm module *\n// * Please upstream improvements there *\n// **************************************************************\n\nconst isErrorLike = (err) => {\n return err && typeof err.message === 'string'\n}\n\n/**\n * @param {Error|{ cause?: unknown|(()=>err)}} err\n * @returns {Error|Object|undefined}\n */\nconst getErrorCause = (err) => {\n if (!err) return\n\n /** @type {unknown} */\n // @ts-ignore\n const cause = err.cause\n\n // VError / NError style causes\n if (typeof cause === 'function') {\n // @ts-ignore\n const causeResult = err.cause()\n\n return isErrorLike(causeResult)\n ? causeResult\n : undefined\n } else {\n return isErrorLike(cause)\n ? cause\n : undefined\n }\n}\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @returns {string}\n */\nconst _stackWithCauses = (err, seen) => {\n if (!isErrorLike(err)) return ''\n\n const stack = err.stack || ''\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return stack + '\\ncauses have become circular...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n return (stack + '\\ncaused by: ' + _stackWithCauses(cause, seen))\n } else {\n return stack\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst stackWithCauses = (err) => _stackWithCauses(err, new Set())\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @param {boolean} [skip]\n * @returns {string}\n */\nconst _messageWithCauses = (err, seen, skip) => {\n if (!isErrorLike(err)) return ''\n\n const message = skip ? '' : (err.message || '')\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return message + ': ...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n\n // @ts-ignore\n const skipIfVErrorStyleCause = typeof err.cause === 'function'\n\n return (message +\n (skipIfVErrorStyleCause ? '' : ': ') +\n _messageWithCauses(cause, seen, skipIfVErrorStyleCause))\n } else {\n return message\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst messageWithCauses = (err) => _messageWithCauses(err, new Set())\n\nmodule.exports = {\n isErrorLike,\n getErrorCause,\n stackWithCauses,\n messageWithCauses\n}\n","'use strict'\n\nconst seen = Symbol('circular-ref-tag')\nconst rawSymbol = Symbol('pino-raw-err-ref')\n\nconst pinoErrProto = Object.create({}, {\n type: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n message: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n stack: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n aggregateErrors: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoErrProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nmodule.exports = {\n pinoErrProto,\n pinoErrorSymbols: {\n seen,\n rawSymbol\n }\n}\n","'use strict'\n\nmodule.exports = errSerializer\n\nconst { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = messageWithCauses(err)\n _err.stack = stackWithCauses(err)\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errSerializer(err))\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n // We append cause messages and stacks to _err, therefore skipping causes here\n if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n","'use strict'\n\nmodule.exports = errWithCauseSerializer\n\nconst { isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errWithCauseSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = err.message\n _err.stack = err.stack\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))\n }\n\n if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {\n _err.cause = errWithCauseSerializer(err.cause)\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n if (!Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errWithCauseSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n","'use strict'\n\nmodule.exports = {\n mapHttpRequest,\n reqSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-req-ref')\nconst pinoReqProto = Object.create({}, {\n id: {\n enumerable: true,\n writable: true,\n value: ''\n },\n method: {\n enumerable: true,\n writable: true,\n value: ''\n },\n url: {\n enumerable: true,\n writable: true,\n value: ''\n },\n query: {\n enumerable: true,\n writable: true,\n value: ''\n },\n params: {\n enumerable: true,\n writable: true,\n value: ''\n },\n headers: {\n enumerable: true,\n writable: true,\n value: {}\n },\n remoteAddress: {\n enumerable: true,\n writable: true,\n value: ''\n },\n remotePort: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoReqProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction reqSerializer (req) {\n // req.info is for hapi compat.\n const connection = req.info || req.socket\n const _req = Object.create(pinoReqProto)\n _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))\n _req.method = req.method\n // req.originalUrl is for expressjs compat.\n if (req.originalUrl) {\n _req.url = req.originalUrl\n } else {\n const path = req.path\n // path for safe hapi compat.\n _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)\n }\n\n if (req.query) {\n _req.query = req.query\n }\n\n if (req.params) {\n _req.params = req.params\n }\n\n _req.headers = req.headers\n _req.remoteAddress = connection && connection.remoteAddress\n _req.remotePort = connection && connection.remotePort\n // req.raw is for hapi compat/equivalence\n _req.raw = req.raw || req\n return _req\n}\n\nfunction mapHttpRequest (req) {\n return {\n req: reqSerializer(req)\n }\n}\n","'use strict'\n\nmodule.exports = {\n mapHttpResponse,\n resSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-res-ref')\nconst pinoResProto = Object.create({}, {\n statusCode: {\n enumerable: true,\n writable: true,\n value: 0\n },\n headers: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoResProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction resSerializer (res) {\n const _res = Object.create(pinoResProto)\n _res.statusCode = res.headersSent ? res.statusCode : null\n _res.headers = res.getHeaders ? res.getHeaders() : res._headers\n _res.raw = res\n return _res\n}\n\nfunction mapHttpResponse (res) {\n return {\n res: resSerializer(res)\n }\n}\n","'use strict'\n\nconst errSerializer = require('./lib/err')\nconst errWithCauseSerializer = require('./lib/err-with-cause')\nconst reqSerializers = require('./lib/req')\nconst resSerializers = require('./lib/res')\n\nmodule.exports = {\n err: errSerializer,\n errWithCause: errWithCauseSerializer,\n mapHttpRequest: reqSerializers.mapHttpRequest,\n mapHttpResponse: resSerializers.mapHttpResponse,\n req: reqSerializers.reqSerializer,\n res: resSerializers.resSerializer,\n\n wrapErrorSerializer: function wrapErrorSerializer (customSerializer) {\n if (customSerializer === errSerializer) return customSerializer\n return function wrapErrSerializer (err) {\n return customSerializer(errSerializer(err))\n }\n },\n\n wrapRequestSerializer: function wrapRequestSerializer (customSerializer) {\n if (customSerializer === reqSerializers.reqSerializer) return customSerializer\n return function wrappedReqSerializer (req) {\n return customSerializer(reqSerializers.reqSerializer(req))\n }\n },\n\n wrapResponseSerializer: function wrapResponseSerializer (customSerializer) {\n if (customSerializer === resSerializers.resSerializer) return customSerializer\n return function wrappedResSerializer (res) {\n return customSerializer(resSerializers.resSerializer(res))\n }\n }\n}\n","'use strict'\n\nfunction noOpPrepareStackTrace (_, stack) {\n return stack\n}\n\nmodule.exports = function getCallers () {\n const originalPrepare = Error.prepareStackTrace\n Error.prepareStackTrace = noOpPrepareStackTrace\n const stack = new Error().stack\n Error.prepareStackTrace = originalPrepare\n\n if (!Array.isArray(stack)) {\n return undefined\n }\n\n const entries = stack.slice(2)\n\n const fileNames = []\n\n for (const entry of entries) {\n if (!entry) {\n continue\n }\n\n fileNames.push(entry.getFileName())\n }\n\n return fileNames\n}\n","'use strict'\n\nfunction deepClone (obj) {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime())\n }\n\n if (obj instanceof Array) {\n const cloned = []\n for (let i = 0; i < obj.length; i++) {\n cloned[i] = deepClone(obj[i])\n }\n return cloned\n }\n\n if (typeof obj === 'object') {\n const cloned = Object.create(Object.getPrototypeOf(obj))\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone(obj[key])\n }\n }\n return cloned\n }\n\n return obj\n}\n\nfunction parsePath (path) {\n const parts = []\n let current = ''\n let inBrackets = false\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if (!inBrackets && char === '.') {\n if (current) {\n parts.push(current)\n current = ''\n }\n } else if (char === '[') {\n if (current) {\n parts.push(current)\n current = ''\n }\n inBrackets = true\n } else if (char === ']' && inBrackets) {\n // Always push the current value when closing brackets, even if it's an empty string\n parts.push(current)\n current = ''\n inBrackets = false\n inQuotes = false\n } else if ((char === '\"' || char === \"'\") && inBrackets) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n } else {\n current += char\n }\n } else {\n current += char\n }\n }\n\n if (current) {\n parts.push(current)\n }\n\n return parts\n}\n\nfunction setValue (obj, parts, value) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n current[i] = value\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n current[key] = value\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n current[lastKey] = value\n }\n }\n return true\n}\n\nfunction removeKey (obj, parts) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n // For arrays, we can't really \"remove\" all items as that would change indices\n // Instead, we set them to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n delete current[key]\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n delete current[lastKey]\n }\n }\n return true\n}\n\n// Sentinel object to distinguish between undefined value and non-existent path\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND')\n\nfunction getValueIfExists (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return PATH_NOT_FOUND\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return PATH_NOT_FOUND\n }\n // Check if the property exists before accessing it\n if (!(part in current)) {\n return PATH_NOT_FOUND\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction getValue (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return undefined\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction redactPaths (obj, paths, censor, remove = false) {\n for (const path of paths) {\n const parts = parsePath(path)\n\n if (parts.includes('*')) {\n redactWildcardPath(obj, parts, censor, path, remove)\n } else {\n if (remove) {\n removeKey(obj, parts)\n } else {\n // Get value only if path exists - single traversal\n const value = getValueIfExists(obj, parts)\n if (value === PATH_NOT_FOUND) {\n continue\n }\n\n const actualCensor = typeof censor === 'function'\n ? censor(value, parts)\n : censor\n setValue(obj, parts, actualCensor)\n }\n }\n }\n}\n\nfunction redactWildcardPath (obj, parts, censor, originalPath, remove = false) {\n const wildcardIndex = parts.indexOf('*')\n\n if (wildcardIndex === parts.length - 1) {\n const parentParts = parts.slice(0, -1)\n let current = obj\n\n for (const part of parentParts) {\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n }\n\n if (Array.isArray(current)) {\n if (remove) {\n // For arrays, set all items to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else {\n for (let i = 0; i < current.length; i++) {\n const indexPath = [...parentParts, i.toString()]\n const actualCensor = typeof censor === 'function'\n ? censor(current[i], indexPath)\n : censor\n current[i] = actualCensor\n }\n }\n } else if (typeof current === 'object' && current !== null) {\n if (remove) {\n // Collect keys to delete to avoid issues with deleting during iteration\n const keysToDelete = []\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n keysToDelete.push(key)\n }\n }\n for (const key of keysToDelete) {\n delete current[key]\n }\n } else {\n for (const key in current) {\n const keyPath = [...parentParts, key]\n const actualCensor = typeof censor === 'function'\n ? censor(current[key], keyPath)\n : censor\n current[key] = actualCensor\n }\n }\n }\n } else {\n redactIntermediateWildcard(obj, parts, censor, wildcardIndex, originalPath, remove)\n }\n}\n\nfunction redactIntermediateWildcard (obj, parts, censor, wildcardIndex, originalPath, remove = false) {\n const beforeWildcard = parts.slice(0, wildcardIndex)\n const afterWildcard = parts.slice(wildcardIndex + 1)\n const pathArray = [] // Cached array to avoid allocations\n\n function traverse (current, pathLength) {\n if (pathLength === beforeWildcard.length) {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n pathArray[pathLength] = i.toString()\n traverse(current[i], pathLength + 1)\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n pathArray[pathLength] = key\n traverse(current[key], pathLength + 1)\n }\n }\n } else if (pathLength < beforeWildcard.length) {\n const nextKey = beforeWildcard[pathLength]\n // Type safety: Check if current is an object before using 'in' operator\n if (current && typeof current === 'object' && current !== null && nextKey in current) {\n pathArray[pathLength] = nextKey\n traverse(current[nextKey], pathLength + 1)\n }\n } else {\n // Check if afterWildcard contains more wildcards\n if (afterWildcard.includes('*')) {\n // Recursively handle remaining wildcards\n // Wrap censor to prepend current path context\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n const fullPath = [...pathArray.slice(0, pathLength), ...path]\n return censor(value, fullPath)\n }\n : censor\n redactWildcardPath(current, afterWildcard, wrappedCensor, originalPath, remove)\n } else {\n // No more wildcards, apply the redaction directly\n if (remove) {\n removeKey(current, afterWildcard)\n } else {\n const actualCensor = typeof censor === 'function'\n ? censor(getValue(current, afterWildcard), [...pathArray.slice(0, pathLength), ...afterWildcard])\n : censor\n setValue(current, afterWildcard, actualCensor)\n }\n }\n }\n }\n\n if (beforeWildcard.length === 0) {\n traverse(obj, 0)\n } else {\n let current = obj\n for (let i = 0; i < beforeWildcard.length; i++) {\n const part = beforeWildcard[i]\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n pathArray[i] = part\n }\n if (current !== null && current !== undefined) {\n traverse(current, beforeWildcard.length)\n }\n }\n}\n\nfunction buildPathStructure (pathsToClone) {\n if (pathsToClone.length === 0) {\n return null // No paths to redact\n }\n\n // Parse all paths and organize by depth\n const pathStructure = new Map()\n for (const path of pathsToClone) {\n const parts = parsePath(path)\n let current = pathStructure\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (!current.has(part)) {\n current.set(part, new Map())\n }\n current = current.get(part)\n }\n }\n return pathStructure\n}\n\nfunction selectiveClone (obj, pathStructure) {\n if (!pathStructure) {\n return obj // No paths to redact, return original\n }\n\n function cloneSelectively (source, pathMap, depth = 0) {\n if (!pathMap || pathMap.size === 0) {\n return source // No more paths to clone, return reference\n }\n\n if (source === null || typeof source !== 'object') {\n return source\n }\n\n if (source instanceof Date) {\n return new Date(source.getTime())\n }\n\n if (Array.isArray(source)) {\n const cloned = []\n for (let i = 0; i < source.length; i++) {\n const indexStr = i.toString()\n if (pathMap.has(indexStr) || pathMap.has('*')) {\n cloned[i] = cloneSelectively(source[i], pathMap.get(indexStr) || pathMap.get('*'))\n } else {\n cloned[i] = source[i] // Share reference for non-redacted items\n }\n }\n return cloned\n }\n\n // Handle objects\n const cloned = Object.create(Object.getPrototypeOf(source))\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (pathMap.has(key) || pathMap.has('*')) {\n cloned[key] = cloneSelectively(source[key], pathMap.get(key) || pathMap.get('*'))\n } else {\n cloned[key] = source[key] // Share reference for non-redacted properties\n }\n }\n }\n return cloned\n }\n\n return cloneSelectively(obj, pathStructure)\n}\n\nfunction validatePath (path) {\n if (typeof path !== 'string') {\n throw new Error('Paths must be (non-empty) strings')\n }\n\n if (path === '') {\n throw new Error('Invalid redaction path ()')\n }\n\n // Check for double dots\n if (path.includes('..')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for comma-separated paths (invalid syntax)\n if (path.includes(',')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for unmatched brackets\n let bracketCount = 0\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if ((char === '\"' || char === \"'\") && bracketCount > 0) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n }\n } else if (char === '[' && !inQuotes) {\n bracketCount++\n } else if (char === ']' && !inQuotes) {\n bracketCount--\n if (bracketCount < 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n }\n }\n\n if (bracketCount !== 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n}\n\nfunction validatePaths (paths) {\n if (!Array.isArray(paths)) {\n throw new TypeError('paths must be an array')\n }\n\n for (const path of paths) {\n validatePath(path)\n }\n}\n\nfunction slowRedact (options = {}) {\n const {\n paths = [],\n censor = '[REDACTED]',\n serialize = JSON.stringify,\n strict = true,\n remove = false\n } = options\n\n // Validate paths upfront to match fast-redact behavior\n validatePaths(paths)\n\n // Build path structure once during setup, not on every call\n const pathStructure = buildPathStructure(paths)\n\n return function redact (obj) {\n if (strict && (obj === null || typeof obj !== 'object')) {\n if (obj === null || obj === undefined) {\n return serialize ? serialize(obj) : obj\n }\n if (typeof obj !== 'object') {\n return serialize ? serialize(obj) : obj\n }\n }\n\n // Only clone paths that need redaction\n const cloned = selectiveClone(obj, pathStructure)\n const original = obj // Keep reference to original for restore\n\n let actualCensor = censor\n if (typeof censor === 'function') {\n actualCensor = censor\n }\n\n redactPaths(cloned, paths, actualCensor, remove)\n\n if (serialize === false) {\n cloned.restore = function () {\n return deepClone(original) // Full clone only when restore is called\n }\n return cloned\n }\n\n if (typeof serialize === 'function') {\n return serialize(cloned)\n }\n\n return JSON.stringify(cloned)\n }\n}\n\nmodule.exports = slowRedact\n","'use strict'\n\nconst setLevelSym = Symbol('pino.setLevel')\nconst getLevelSym = Symbol('pino.getLevel')\nconst levelValSym = Symbol('pino.levelVal')\nconst levelCompSym = Symbol('pino.levelComp')\nconst useLevelLabelsSym = Symbol('pino.useLevelLabels')\nconst useOnlyCustomLevelsSym = Symbol('pino.useOnlyCustomLevels')\nconst mixinSym = Symbol('pino.mixin')\n\nconst lsCacheSym = Symbol('pino.lsCache')\nconst chindingsSym = Symbol('pino.chindings')\n\nconst asJsonSym = Symbol('pino.asJson')\nconst writeSym = Symbol('pino.write')\nconst redactFmtSym = Symbol('pino.redactFmt')\n\nconst timeSym = Symbol('pino.time')\nconst timeSliceIndexSym = Symbol('pino.timeSliceIndex')\nconst streamSym = Symbol('pino.stream')\nconst stringifySym = Symbol('pino.stringify')\nconst stringifySafeSym = Symbol('pino.stringifySafe')\nconst stringifiersSym = Symbol('pino.stringifiers')\nconst endSym = Symbol('pino.end')\nconst formatOptsSym = Symbol('pino.formatOpts')\nconst messageKeySym = Symbol('pino.messageKey')\nconst errorKeySym = Symbol('pino.errorKey')\nconst nestedKeySym = Symbol('pino.nestedKey')\nconst nestedKeyStrSym = Symbol('pino.nestedKeyStr')\nconst mixinMergeStrategySym = Symbol('pino.mixinMergeStrategy')\nconst msgPrefixSym = Symbol('pino.msgPrefix')\n\nconst wildcardFirstSym = Symbol('pino.wildcardFirst')\n\n// public symbols, no need to use the same pino\n// version for these\nconst serializersSym = Symbol.for('pino.serializers')\nconst formattersSym = Symbol.for('pino.formatters')\nconst hooksSym = Symbol.for('pino.hooks')\nconst needsMetadataGsym = Symbol.for('pino.metadata')\n\nmodule.exports = {\n setLevelSym,\n getLevelSym,\n levelValSym,\n levelCompSym,\n useLevelLabelsSym,\n mixinSym,\n lsCacheSym,\n chindingsSym,\n asJsonSym,\n writeSym,\n serializersSym,\n redactFmtSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n wildcardFirstSym,\n needsMetadataGsym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n}\n","'use strict'\n\nconst Redact = require('@pinojs/redact')\nconst { redactFmtSym, wildcardFirstSym } = require('./symbols')\n\n// Custom rx regex equivalent to fast-redact's rx\nconst rx = /[^.[\\]]+|\\[([^[\\]]*?)\\]/g\n\nconst CENSOR = '[Redacted]'\nconst strict = false // TODO should this be configurable?\n\nfunction redaction (opts, serialize) {\n const { paths, censor, remove } = handle(opts)\n\n const shape = paths.reduce((o, str) => {\n rx.lastIndex = 0\n const first = rx.exec(str)\n const next = rx.exec(str)\n\n // ns is the top-level path segment, brackets + quoting removed.\n let ns = first[1] !== undefined\n ? first[1].replace(/^(?:\"|'|`)(.*)(?:\"|'|`)$/, '$1')\n : first[0]\n\n if (ns === '*') {\n ns = wildcardFirstSym\n }\n\n // top level key:\n if (next === null) {\n o[ns] = null\n return o\n }\n\n // path with at least two segments:\n // if ns is already redacted at the top level, ignore lower level redactions\n if (o[ns] === null) {\n return o\n }\n\n const { index } = next\n const nextPath = `${str.substr(index, str.length - 1)}`\n\n o[ns] = o[ns] || []\n\n // shape is a mix of paths beginning with literal values and wildcard\n // paths [ \"a.b.c\", \"*.b.z\" ] should reduce to a shape of\n // { \"a\": [ \"b.c\", \"b.z\" ], *: [ \"b.z\" ] }\n // note: \"b.z\" is in both \"a\" and * arrays because \"a\" matches the wildcard.\n // (* entry has wildcardFirstSym as key)\n if (ns !== wildcardFirstSym && o[ns].length === 0) {\n // first time ns's get all '*' redactions so far\n o[ns].push(...(o[wildcardFirstSym] || []))\n }\n\n if (ns === wildcardFirstSym) {\n // new * path gets added to all previously registered literal ns's.\n Object.keys(o).forEach(function (k) {\n if (o[k]) {\n o[k].push(nextPath)\n }\n })\n }\n\n o[ns].push(nextPath)\n return o\n }, {})\n\n // the redactor assigned to the format symbol key\n // provides top level redaction for instances where\n // an object is interpolated into the msg string\n const result = {\n [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })\n }\n\n const topCensor = (...args) => {\n return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)\n }\n\n return [...Object.keys(shape), ...Object.getOwnPropertySymbols(shape)].reduce((o, k) => {\n // top level key:\n if (shape[k] === null) {\n o[k] = (value) => topCensor(value, [k])\n } else {\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n return censor(value, [k, ...path])\n }\n : censor\n o[k] = Redact({\n paths: shape[k],\n censor: wrappedCensor,\n serialize,\n strict,\n remove\n })\n }\n return o\n }, result)\n}\n\nfunction handle (opts) {\n if (Array.isArray(opts)) {\n opts = { paths: opts, censor: CENSOR }\n return opts\n }\n let { paths, censor = CENSOR, remove } = opts\n if (Array.isArray(paths) === false) { throw Error('pino – redact must contain an array of strings') }\n if (remove === true) censor = undefined\n\n return { paths, censor, remove }\n}\n\nmodule.exports = redaction\n","'use strict'\n\nconst nullTime = () => ''\n\nconst epochTime = () => `,\"time\":${Date.now()}`\n\nconst unixTime = () => `,\"time\":${Math.round(Date.now() / 1000.0)}`\n\nconst isoTime = () => `,\"time\":\"${new Date(Date.now()).toISOString()}\"` // using Date.now() for testability\n\nconst NS_PER_MS = 1_000_000n\nconst NS_PER_SEC = 1_000_000_000n\n\nconst startWallTimeNs = BigInt(Date.now()) * NS_PER_MS\nconst startHrTime = process.hrtime.bigint()\n\nconst isoTimeNano = () => {\n const elapsedNs = process.hrtime.bigint() - startHrTime\n const currentTimeNs = startWallTimeNs + elapsedNs\n\n const secondsSinceEpoch = currentTimeNs / NS_PER_SEC\n const nanosWithinSecond = currentTimeNs % NS_PER_SEC\n\n const msSinceEpoch = Number(secondsSinceEpoch * 1000n + nanosWithinSecond / 1_000_000n)\n const date = new Date(msSinceEpoch)\n\n const year = date.getUTCFullYear()\n const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')\n const day = date.getUTCDate().toString().padStart(2, '0')\n const hours = date.getUTCHours().toString().padStart(2, '0')\n const minutes = date.getUTCMinutes().toString().padStart(2, '0')\n const seconds = date.getUTCSeconds().toString().padStart(2, '0')\n\n return `,\"time\":\"${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${nanosWithinSecond\n .toString()\n .padStart(9, '0')}Z\"`\n}\n\nmodule.exports = { nullTime, epochTime, unixTime, isoTime, isoTimeNano }\n","'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n","'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n const nil = new Int32Array(new SharedArrayBuffer(4))\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n\n Atomics.wait(nil, 0, 0, Number(ms))\n }\n module.exports = sleep\n} else {\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n const target = Date.now() + Number(ms)\n while (target > Date.now()){}\n }\n\n module.exports = sleep\n\n}\n","'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\nconst assert = require('assert')\n\nconst BUSY_WRITE_TIMEOUT = 100\nconst kEmptyBuffer = Buffer.allocUnsafe(0)\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nconst kContentModeBuffer = 'buffer'\nconst kContentModeUtf8 = 'utf8'\n\nconst [major, minor] = (process.versions.node || '0.0').split('.').map(Number)\nconst kCopyBuffer = major >= 22 && minor >= 7\n\nfunction openFile (file, sonic) {\n sonic._opening = true\n sonic._writing = true\n sonic._asyncDrainScheduled = false\n\n // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n // for sync mode, there is no way to add a listener that will receive these\n\n function fileOpened (err, fd) {\n if (err) {\n sonic._reopening = false\n sonic._writing = false\n sonic._opening = false\n\n if (sonic.sync) {\n process.nextTick(() => {\n if (sonic.listenerCount('error') > 0) {\n sonic.emit('error', err)\n }\n })\n } else {\n sonic.emit('error', err)\n }\n return\n }\n\n const reopening = sonic._reopening\n\n sonic.fd = fd\n sonic.file = file\n sonic._reopening = false\n sonic._opening = false\n sonic._writing = false\n\n if (sonic.sync) {\n process.nextTick(() => sonic.emit('ready'))\n } else {\n sonic.emit('ready')\n }\n\n if (sonic.destroyed) {\n return\n }\n\n // start\n if ((!sonic._writing && sonic._len > sonic.minLength) || sonic._flushPending) {\n sonic._actualWrite()\n } else if (reopening) {\n process.nextTick(() => sonic.emit('drain'))\n }\n }\n\n const flags = sonic.append ? 'a' : 'w'\n const mode = sonic.mode\n\n if (sonic.sync) {\n try {\n if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n const fd = fs.openSync(file, flags, mode)\n fileOpened(null, fd)\n } catch (err) {\n fileOpened(err)\n throw err\n }\n } else if (sonic.mkdir) {\n fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n if (err) return fileOpened(err)\n fs.open(file, flags, mode, fileOpened)\n })\n } else {\n fs.open(file, flags, mode, fileOpened)\n }\n}\n\nfunction SonicBoom (opts) {\n if (!(this instanceof SonicBoom)) {\n return new SonicBoom(opts)\n }\n\n let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {}\n\n fd = fd || dest\n\n this._len = 0\n this.fd = -1\n this._bufs = []\n this._lens = []\n this._writing = false\n this._ending = false\n this._reopening = false\n this._asyncDrainScheduled = false\n this._flushPending = false\n this._hwm = Math.max(minLength || 0, 16387)\n this.file = null\n this.destroyed = false\n this.minLength = minLength || 0\n this.maxLength = maxLength || 0\n this.maxWrite = maxWrite || MAX_WRITE\n this._periodicFlush = periodicFlush || 0\n this._periodicFlushTimer = undefined\n this.sync = sync || false\n this.writable = true\n this._fsync = fsync || false\n this.append = append || false\n this.mode = mode\n this.retryEAGAIN = retryEAGAIN || (() => true)\n this.mkdir = mkdir || false\n\n let fsWriteSync\n let fsWrite\n if (contentMode === kContentModeBuffer) {\n this._writingBuf = kEmptyBuffer\n this.write = writeBuffer\n this.flush = flushBuffer\n this.flushSync = flushBufferSync\n this._actualWrite = actualWriteBuffer\n fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf)\n fsWrite = () => fs.write(this.fd, this._writingBuf, this.release)\n } else if (contentMode === undefined || contentMode === kContentModeUtf8) {\n this._writingBuf = ''\n this.write = write\n this.flush = flush\n this.flushSync = flushSync\n this._actualWrite = actualWrite\n fsWriteSync = () => {\n if (Buffer.isBuffer(this._writingBuf)) {\n return fs.writeSync(this.fd, this._writingBuf)\n }\n return fs.writeSync(this.fd, this._writingBuf, 'utf8')\n }\n fsWrite = () => {\n if (Buffer.isBuffer(this._writingBuf)) {\n return fs.write(this.fd, this._writingBuf, this.release)\n }\n return fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n }\n } else {\n throw new Error(`SonicBoom supports \"${kContentModeUtf8}\" and \"${kContentModeBuffer}\", but passed ${contentMode}`)\n }\n\n if (typeof fd === 'number') {\n this.fd = fd\n process.nextTick(() => this.emit('ready'))\n } else if (typeof fd === 'string') {\n openFile(fd, this)\n } else {\n throw new Error('SonicBoom supports only file descriptors and files')\n }\n if (this.minLength >= this.maxWrite) {\n throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n }\n\n this.release = (err, n) => {\n if (err) {\n if ((err.code === 'EAGAIN' || err.code === 'EBUSY') && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n if (this.sync) {\n // This error code should not happen in sync mode, because it is\n // not using the underlining operating system asynchronous functions.\n // However it happens, and so we handle it.\n // Ref: https://github.com/pinojs/pino/issues/783\n try {\n sleep(BUSY_WRITE_TIMEOUT)\n this.release(undefined, 0)\n } catch (err) {\n this.release(err)\n }\n } else {\n // Let's give the destination some time to process the chunk.\n setTimeout(fsWrite, BUSY_WRITE_TIMEOUT)\n }\n } else {\n this._writing = false\n\n this.emit('error', err)\n }\n return\n }\n\n this.emit('write', n)\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n\n if (this._writingBuf.length) {\n if (!this.sync) {\n fsWrite()\n return\n }\n\n try {\n do {\n const n = fsWriteSync()\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n } while (this._writingBuf.length)\n } catch (err) {\n this.release(err)\n return\n }\n }\n\n if (this._fsync) {\n fs.fsyncSync(this.fd)\n }\n\n const len = this._len\n if (this._reopening) {\n this._writing = false\n this._reopening = false\n this.reopen()\n } else if (len > this.minLength) {\n this._actualWrite()\n } else if (this._ending) {\n if (len > 0) {\n this._actualWrite()\n } else {\n this._writing = false\n actualClose(this)\n }\n } else {\n this._writing = false\n if (this.sync) {\n if (!this._asyncDrainScheduled) {\n this._asyncDrainScheduled = true\n process.nextTick(emitDrain, this)\n }\n } else {\n this.emit('drain')\n }\n }\n }\n\n this.on('newListener', function (name) {\n if (name === 'drain') {\n this._asyncDrainScheduled = false\n }\n })\n\n if (this._periodicFlush !== 0) {\n this._periodicFlushTimer = setInterval(() => this.flush(null), this._periodicFlush)\n this._periodicFlushTimer.unref()\n }\n}\n\n/**\n * Release the writingBuf after fs.write n bytes data\n * @param {string | Buffer} writingBuf - currently writing buffer, usually be instance._writingBuf.\n * @param {number} len - currently buffer length, usually be instance._len.\n * @param {number} n - number of bytes fs already written\n * @returns {{writingBuf: string | Buffer, len: number}} released writingBuf and length\n */\nfunction releaseWritingBuf (writingBuf, len, n) {\n if (typeof writingBuf === 'string') {\n writingBuf = Buffer.from(writingBuf)\n }\n\n len = Math.max(len - n, 0)\n writingBuf = writingBuf.subarray(n)\n return { writingBuf, len }\n}\n\nfunction emitDrain (sonic) {\n const hasListeners = sonic.listenerCount('drain') > 0\n if (!hasListeners) return\n sonic._asyncDrainScheduled = false\n sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nfunction mergeBuf (bufs, len) {\n if (bufs.length === 0) {\n return kEmptyBuffer\n }\n\n if (bufs.length === 1) {\n return bufs[0]\n }\n\n return Buffer.concat(bufs, len)\n}\n\nfunction write (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n data = '' + data\n const dataLen = Buffer.byteLength(data)\n const len = this._len + dataLen\n const bufs = this._bufs\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n Buffer.byteLength(bufs[bufs.length - 1]) + dataLen > this.maxWrite\n ) {\n bufs.push(data)\n } else {\n bufs[bufs.length - 1] += data\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction writeBuffer (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n const len = this._len + data.length\n const bufs = this._bufs\n const lens = this._lens\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n lens[lens.length - 1] + data.length > this.maxWrite\n ) {\n bufs.push([data])\n lens.push(data.length)\n } else {\n bufs[bufs.length - 1].push(data)\n lens[lens.length - 1] += data.length\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction callFlushCallbackOnDrain (cb) {\n this._flushPending = true\n const onDrain = () => {\n // only if _fsync is false to avoid double fsync\n if (!this._fsync) {\n try {\n fs.fsync(this.fd, (err) => {\n this._flushPending = false\n cb(err)\n })\n } catch (err) {\n cb(err)\n }\n } else {\n this._flushPending = false\n cb()\n }\n this.off('error', onError)\n }\n const onError = (err) => {\n this._flushPending = false\n cb(err)\n this.off('drain', onDrain)\n }\n\n this.once('drain', onDrain)\n this.once('error', onError)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push('')\n }\n\n this._actualWrite()\n}\n\nfunction flushBuffer (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push([])\n this._lens.push(0)\n }\n\n this._actualWrite()\n}\n\nSonicBoom.prototype.reopen = function (file) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.reopen(file)\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n if (!this.file) {\n throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n }\n\n if (file) {\n this.file = file\n }\n this._reopening = true\n\n if (this._writing) {\n return\n }\n\n const fd = this.fd\n this.once('ready', () => {\n if (fd !== this.fd) {\n fs.close(fd, (err) => {\n if (err) {\n return this.emit('error', err)\n }\n })\n }\n })\n\n openFile(this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.end()\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n this._ending = true\n\n if (this._writing) {\n return\n }\n\n if (this._len > 0 && this.fd >= 0) {\n this._actualWrite()\n } else {\n actualClose(this)\n }\n}\n\nfunction flushSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift(this._writingBuf)\n this._writingBuf = ''\n }\n\n let buf = ''\n while (this._bufs.length || buf.length) {\n if (buf.length <= 0) {\n buf = this._bufs[0]\n }\n try {\n const n = Buffer.isBuffer(buf)\n ? fs.writeSync(this.fd, buf)\n : fs.writeSync(this.fd, buf, 'utf8')\n const releasedBufObj = releaseWritingBuf(buf, this._len, n)\n buf = releasedBufObj.writingBuf\n this._len = releasedBufObj.len\n if (buf.length <= 0) {\n this._bufs.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n\n try {\n fs.fsyncSync(this.fd)\n } catch {\n // Skip the error. The fd might not support fsync.\n }\n}\n\nfunction flushBufferSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift([this._writingBuf])\n this._writingBuf = kEmptyBuffer\n }\n\n let buf = kEmptyBuffer\n while (this._bufs.length || buf.length) {\n if (buf.length <= 0) {\n buf = mergeBuf(this._bufs[0], this._lens[0])\n }\n try {\n const n = fs.writeSync(this.fd, buf)\n buf = buf.subarray(n)\n this._len = Math.max(this._len - n, 0)\n if (buf.length <= 0) {\n this._bufs.shift()\n this._lens.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n}\n\nSonicBoom.prototype.destroy = function () {\n if (this.destroyed) {\n return\n }\n actualClose(this)\n}\n\nfunction actualWrite () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf.length ? this._writingBuf : this._bufs.shift() || ''\n\n if (this.sync) {\n try {\n const written = Buffer.isBuffer(this._writingBuf)\n ? fs.writeSync(this.fd, this._writingBuf)\n : fs.writeSync(this.fd, this._writingBuf, 'utf8')\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n fs.write(this.fd, this._writingBuf, release)\n }\n}\n\nfunction actualWriteBuffer () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf.length ? this._writingBuf : mergeBuf(this._bufs.shift(), this._lens.shift())\n\n if (this.sync) {\n try {\n const written = fs.writeSync(this.fd, this._writingBuf)\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n // fs.write will need to copy string to buffer anyway so\n // we do it here to avoid the overhead of calculating the buffer size\n // in releaseWritingBuf.\n if (kCopyBuffer) {\n this._writingBuf = Buffer.from(this._writingBuf)\n }\n fs.write(this.fd, this._writingBuf, release)\n }\n}\n\nfunction actualClose (sonic) {\n if (sonic.fd === -1) {\n sonic.once('ready', actualClose.bind(null, sonic))\n return\n }\n\n if (sonic._periodicFlushTimer !== undefined) {\n clearInterval(sonic._periodicFlushTimer)\n }\n\n sonic.destroyed = true\n sonic._bufs = []\n sonic._lens = []\n\n assert(typeof sonic.fd === 'number', `sonic.fd must be a number, got ${typeof sonic.fd}`)\n try {\n fs.fsync(sonic.fd, closeWrapped)\n } catch {\n }\n\n function closeWrapped () {\n // We skip errors in fsync\n\n if (sonic.fd !== 1 && sonic.fd !== 2) {\n fs.close(sonic.fd, done)\n } else {\n done()\n }\n }\n\n function done (err) {\n if (err) {\n sonic.emit('error', err)\n return\n }\n\n if (sonic._ending && !sonic._writing) {\n sonic.emit('finish')\n }\n sonic.emit('close')\n }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n","'use strict'\n\nconst refs = {\n exit: [],\n beforeExit: []\n}\nconst functions = {\n exit: onExit,\n beforeExit: onBeforeExit\n}\n\nlet registry\n\nfunction ensureRegistry () {\n if (registry === undefined) {\n registry = new FinalizationRegistry(clear)\n }\n}\n\nfunction install (event) {\n if (refs[event].length > 0) {\n return\n }\n\n process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n if (refs[event].length > 0) {\n return\n }\n process.removeListener(event, functions[event])\n if (refs.exit.length === 0 && refs.beforeExit.length === 0) {\n registry = undefined\n }\n}\n\nfunction onExit () {\n callRefs('exit')\n}\n\nfunction onBeforeExit () {\n callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n for (const ref of refs[event]) {\n const obj = ref.deref()\n const fn = ref.fn\n\n // This should always happen, however GC is\n // undeterministic so it might not happen.\n /* istanbul ignore else */\n if (obj !== undefined) {\n fn(obj, event)\n }\n }\n refs[event] = []\n}\n\nfunction clear (ref) {\n for (const event of ['exit', 'beforeExit']) {\n const index = refs[event].indexOf(ref)\n refs[event].splice(index, index + 1)\n uninstall(event)\n }\n}\n\nfunction _register (event, obj, fn) {\n if (obj === undefined) {\n throw new Error('the object can\\'t be undefined')\n }\n install(event)\n const ref = new WeakRef(obj)\n ref.fn = fn\n\n ensureRegistry()\n registry.register(obj, ref)\n refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n if (registry === undefined) {\n return\n }\n registry.unregister(obj)\n for (const event of ['exit', 'beforeExit']) {\n refs[event] = refs[event].filter((ref) => {\n const _obj = ref.deref()\n return _obj && _obj !== obj\n })\n uninstall(event)\n }\n}\n\nmodule.exports = {\n register,\n registerBeforeExit,\n unregister\n}\n","","'use strict'\n\nconst MAX_TIMEOUT = 1000\n\nfunction wait (state, index, expected, timeout, done) {\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current === expected) {\n done(null, 'ok')\n return\n }\n let prior = current\n const check = (backoff) => {\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n prior = current\n current = Atomics.load(state, index)\n if (current === prior) {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n } else {\n if (current === expected) done(null, 'ok')\n else done(null, 'not-equal')\n }\n }, backoff)\n }\n }\n check(1)\n}\n\n// let waitDiffCount = 0\nfunction waitDiff (state, index, expected, timeout, done) {\n // const id = waitDiffCount++\n // process._rawDebug(`>>> waitDiff ${id}`)\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n return\n }\n const check = (backoff) => {\n // process._rawDebug(`${id} ${index} current ${current} expected ${expected}`)\n // process._rawDebug('' + backoff)\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n } else {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n }\n }, backoff)\n }\n }\n check(1)\n}\n\nmodule.exports = { wait, waitDiff }\n","'use strict'\n\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n WRITE_INDEX,\n READ_INDEX\n}\n","'use strict'\n\nconst { version } = require('./package.json')\nconst { EventEmitter } = require('events')\nconst { Worker } = require('worker_threads')\nconst { join } = require('path')\nconst { pathToFileURL } = require('url')\nconst { wait } = require('./lib/wait')\nconst {\n WRITE_INDEX,\n READ_INDEX\n} = require('./lib/indexes')\nconst buffer = require('buffer')\nconst assert = require('assert')\n\nconst kImpl = Symbol('kImpl')\n\n// V8 limit for string size\nconst MAX_STRING = buffer.constants.MAX_STRING_LENGTH\n\nclass FakeWeakRef {\n constructor (value) {\n this._value = value\n }\n\n deref () {\n return this._value\n }\n}\n\nclass FakeFinalizationRegistry {\n register () {}\n\n unregister () {}\n}\n\n// Currently using FinalizationRegistry with code coverage breaks the world\n// Ref: https://github.com/nodejs/node/issues/49344\nconst FinalizationRegistry = process.env.NODE_V8_COVERAGE ? FakeFinalizationRegistry : global.FinalizationRegistry || FakeFinalizationRegistry\nconst WeakRef = process.env.NODE_V8_COVERAGE ? FakeWeakRef : global.WeakRef || FakeWeakRef\n\nconst registry = new FinalizationRegistry((worker) => {\n if (worker.exited) {\n return\n }\n worker.terminate()\n})\n\nfunction createWorker (stream, opts) {\n const { filename, workerData } = opts\n\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n const toExecute = bundlerOverrides['thread-stream-worker'] || join(__dirname, 'lib', 'worker.js')\n\n const worker = new Worker(toExecute, {\n ...opts.workerOpts,\n trackUnmanagedFds: false,\n workerData: {\n filename: filename.indexOf('file://') === 0\n ? filename\n : pathToFileURL(filename).href,\n dataBuf: stream[kImpl].dataBuf,\n stateBuf: stream[kImpl].stateBuf,\n workerData: {\n $context: {\n threadStreamVersion: version\n },\n ...workerData\n }\n }\n })\n\n // We keep a strong reference for now,\n // we need to start writing first\n worker.stream = new FakeWeakRef(stream)\n\n worker.on('message', onWorkerMessage)\n worker.on('exit', onWorkerExit)\n registry.register(stream, worker)\n\n return worker\n}\n\nfunction drain (stream) {\n assert(!stream[kImpl].sync)\n if (stream[kImpl].needDrain) {\n stream[kImpl].needDrain = false\n stream.emit('drain')\n }\n}\n\nfunction nextFlush (stream) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n\n if (leftover > 0) {\n if (stream[kImpl].buf.length === 0) {\n stream[kImpl].flushing = false\n\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n\n return\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, nextFlush.bind(null, stream))\n } else {\n // multi-byte utf-8\n stream.flush(() => {\n // err is already handled in flush()\n if (stream.destroyed) {\n return\n }\n\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].data.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, nextFlush.bind(null, stream))\n })\n }\n } else if (leftover === 0) {\n if (writeIndex === 0 && stream[kImpl].buf.length === 0) {\n // we had a flushSync in the meanwhile\n return\n }\n stream.flush(() => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n nextFlush(stream)\n })\n } else {\n // This should never happen\n destroy(stream, new Error('overwritten'))\n }\n}\n\nfunction onWorkerMessage (msg) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n this.exited = true\n // Terminate the worker.\n this.terminate()\n return\n }\n\n switch (msg.code) {\n case 'READY':\n // Replace the FakeWeakRef with a\n // proper one.\n this.stream = new WeakRef(stream)\n\n stream.flush(() => {\n stream[kImpl].ready = true\n stream.emit('ready')\n })\n break\n case 'ERROR':\n destroy(stream, msg.err)\n break\n case 'EVENT':\n if (Array.isArray(msg.args)) {\n stream.emit(msg.name, ...msg.args)\n } else {\n stream.emit(msg.name, msg.args)\n }\n break\n case 'WARNING':\n process.emitWarning(msg.err)\n break\n default:\n destroy(stream, new Error('this should not happen: ' + msg.code))\n }\n}\n\nfunction onWorkerExit (code) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n // Nothing to do, the worker already exit\n return\n }\n registry.unregister(stream)\n stream.worker.exited = true\n stream.worker.off('exit', onWorkerExit)\n destroy(stream, code !== 0 ? new Error('the worker thread exited') : null)\n}\n\nclass ThreadStream extends EventEmitter {\n constructor (opts = {}) {\n super()\n\n if (opts.bufferSize < 4) {\n throw new Error('bufferSize must at least fit a 4-byte utf-8 char')\n }\n\n this[kImpl] = {}\n this[kImpl].stateBuf = new SharedArrayBuffer(128)\n this[kImpl].state = new Int32Array(this[kImpl].stateBuf)\n this[kImpl].dataBuf = new SharedArrayBuffer(opts.bufferSize || 4 * 1024 * 1024)\n this[kImpl].data = Buffer.from(this[kImpl].dataBuf)\n this[kImpl].sync = opts.sync || false\n this[kImpl].ending = false\n this[kImpl].ended = false\n this[kImpl].needDrain = false\n this[kImpl].destroyed = false\n this[kImpl].flushing = false\n this[kImpl].ready = false\n this[kImpl].finished = false\n this[kImpl].errored = null\n this[kImpl].closed = false\n this[kImpl].buf = ''\n\n // TODO (fix): Make private?\n this.worker = createWorker(this, opts) // TODO (fix): make private\n this.on('message', (message, transferList) => {\n this.worker.postMessage(message, transferList)\n })\n }\n\n write (data) {\n if (this[kImpl].destroyed) {\n error(this, new Error('the worker has exited'))\n return false\n }\n\n if (this[kImpl].ending) {\n error(this, new Error('the worker is ending'))\n return false\n }\n\n if (this[kImpl].flushing && this[kImpl].buf.length + data.length >= MAX_STRING) {\n try {\n writeSync(this)\n this[kImpl].flushing = true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n this[kImpl].buf += data\n\n if (this[kImpl].sync) {\n try {\n writeSync(this)\n return true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n if (!this[kImpl].flushing) {\n this[kImpl].flushing = true\n setImmediate(nextFlush, this)\n }\n\n this[kImpl].needDrain = this[kImpl].data.length - this[kImpl].buf.length - Atomics.load(this[kImpl].state, WRITE_INDEX) <= 0\n return !this[kImpl].needDrain\n }\n\n end () {\n if (this[kImpl].destroyed) {\n return\n }\n\n this[kImpl].ending = true\n end(this)\n }\n\n flush (cb) {\n if (this[kImpl].destroyed) {\n if (typeof cb === 'function') {\n process.nextTick(cb, new Error('the worker has exited'))\n }\n return\n }\n\n // TODO write all .buf\n const writeIndex = Atomics.load(this[kImpl].state, WRITE_INDEX)\n // process._rawDebug(`(flush) readIndex (${Atomics.load(this.state, READ_INDEX)}) writeIndex (${Atomics.load(this.state, WRITE_INDEX)})`)\n wait(this[kImpl].state, READ_INDEX, writeIndex, Infinity, (err, res) => {\n if (err) {\n destroy(this, err)\n process.nextTick(cb, err)\n return\n }\n if (res === 'not-equal') {\n // TODO handle deadlock\n this.flush(cb)\n return\n }\n process.nextTick(cb)\n })\n }\n\n flushSync () {\n if (this[kImpl].destroyed) {\n return\n }\n\n writeSync(this)\n flushSync(this)\n }\n\n unref () {\n this.worker.unref()\n }\n\n ref () {\n this.worker.ref()\n }\n\n get ready () {\n return this[kImpl].ready\n }\n\n get destroyed () {\n return this[kImpl].destroyed\n }\n\n get closed () {\n return this[kImpl].closed\n }\n\n get writable () {\n return !this[kImpl].destroyed && !this[kImpl].ending\n }\n\n get writableEnded () {\n return this[kImpl].ending\n }\n\n get writableFinished () {\n return this[kImpl].finished\n }\n\n get writableNeedDrain () {\n return this[kImpl].needDrain\n }\n\n get writableObjectMode () {\n return false\n }\n\n get writableErrored () {\n return this[kImpl].errored\n }\n}\n\nfunction error (stream, err) {\n setImmediate(() => {\n stream.emit('error', err)\n })\n}\n\nfunction destroy (stream, err) {\n if (stream[kImpl].destroyed) {\n return\n }\n stream[kImpl].destroyed = true\n\n if (err) {\n stream[kImpl].errored = err\n error(stream, err)\n }\n\n if (!stream.worker.exited) {\n stream.worker.terminate()\n .catch(() => {})\n .then(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n } else {\n setImmediate(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n }\n}\n\nfunction write (stream, data, cb) {\n // data is smaller than the shared buffer length\n const current = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n const length = Buffer.byteLength(data)\n stream[kImpl].data.write(data, current)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, current + length)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n cb()\n return true\n}\n\nfunction end (stream) {\n if (stream[kImpl].ended || !stream[kImpl].ending || stream[kImpl].flushing) {\n return\n }\n stream[kImpl].ended = true\n\n try {\n stream.flushSync()\n\n let readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n // process._rawDebug('writing index')\n Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.state, WRITE_INDEX)})`)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n\n // Wait for the process to complete\n let spins = 0\n while (readIndex !== -1) {\n // process._rawDebug(`read = ${read}`)\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n destroy(stream, new Error('end() failed'))\n return\n }\n\n if (++spins === 10) {\n destroy(stream, new Error('end() took too long (10s)'))\n return\n }\n }\n\n process.nextTick(() => {\n stream[kImpl].finished = true\n stream.emit('finish')\n })\n } catch (err) {\n destroy(stream, err)\n }\n // process._rawDebug('end finished...')\n}\n\nfunction writeSync (stream) {\n const cb = () => {\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n }\n stream[kImpl].flushing = false\n\n while (stream[kImpl].buf.length !== 0) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n if (leftover === 0) {\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n continue\n } else if (leftover < 0) {\n // stream should never happen\n throw new Error('overwritten')\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, cb)\n } else {\n // multi-byte utf-8\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].buf.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, cb)\n }\n }\n}\n\nfunction flushSync (stream) {\n if (stream[kImpl].flushing) {\n throw new Error('unable to flush while flushing')\n }\n\n // process._rawDebug('flushSync started')\n\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n\n let spins = 0\n\n // TODO handle deadlock\n while (true) {\n const readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n throw Error('_flushSync failed')\n }\n\n // process._rawDebug(`(flushSync) readIndex (${readIndex}) writeIndex (${writeIndex})`)\n if (readIndex !== writeIndex) {\n // TODO stream timeouts for some reason.\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n } else {\n break\n }\n\n if (++spins === 10) {\n throw new Error('_flushSync took too long (10s)')\n }\n }\n // process._rawDebug('flushSync finished')\n}\n\nmodule.exports = ThreadStream\n","'use strict'\n\nconst { createRequire } = require('module')\nconst getCallers = require('./caller')\nconst { join, isAbsolute, sep } = require('node:path')\nconst sleep = require('atomic-sleep')\nconst onExit = require('on-exit-leak-free')\nconst ThreadStream = require('thread-stream')\n\nfunction setupOnExit (stream) {\n // This is leak free, it does not leave event handlers\n onExit.register(stream, autoEnd)\n onExit.registerBeforeExit(stream, flush)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n}\n\nfunction buildStream (filename, workerData, workerOpts, sync) {\n const stream = new ThreadStream({\n filename,\n workerData,\n workerOpts,\n sync\n })\n\n stream.on('ready', onReady)\n stream.on('close', function () {\n process.removeListener('exit', onExit)\n })\n\n process.on('exit', onExit)\n\n function onReady () {\n process.removeListener('exit', onExit)\n stream.unref()\n\n if (workerOpts.autoEnd !== false) {\n setupOnExit(stream)\n }\n }\n\n function onExit () {\n /* istanbul ignore next */\n if (stream.closed) {\n return\n }\n stream.flushSync()\n // Apparently there is a very sporadic race condition\n // that in certain OS would prevent the messages to be flushed\n // because the thread might not have been created still.\n // Unfortunately we need to sleep(100) in this case.\n sleep(100)\n stream.end()\n }\n\n return stream\n}\n\nfunction autoEnd (stream) {\n stream.ref()\n stream.flushSync()\n stream.end()\n stream.once('close', function () {\n stream.unref()\n })\n}\n\nfunction flush (stream) {\n stream.flushSync()\n}\n\nfunction transport (fullOptions) {\n const { pipeline, targets, levels, dedupe, worker = {}, caller = getCallers(), sync = false } = fullOptions\n\n const options = {\n ...fullOptions.options\n }\n\n // Backwards compatibility\n const callers = typeof caller === 'string' ? [caller] : caller\n\n // This will be eventually modified by bundlers\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n\n let target = fullOptions.target\n\n if (target && targets) {\n throw new Error('only one of target or targets can be specified')\n }\n\n if (targets) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.targets = targets.filter(dest => dest.target).map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })\n options.pipelines = targets.filter(dest => dest.pipeline).map((dest) => {\n return dest.pipeline.map((t) => {\n return {\n ...t,\n level: dest.level, // duplicate the pipeline `level` property defined in the upper level\n target: fixTarget(t.target)\n }\n })\n })\n } else if (pipeline) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.pipelines = [pipeline.map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })]\n }\n\n if (levels) {\n options.levels = levels\n }\n\n if (dedupe) {\n options.dedupe = dedupe\n }\n\n options.pinoWillSendConfig = true\n\n return buildStream(fixTarget(target), options, worker, sync)\n\n function fixTarget (origin) {\n origin = bundlerOverrides[origin] || origin\n\n if (isAbsolute(origin) || origin.indexOf('file://') === 0) {\n return origin\n }\n\n if (origin === 'pino/file') {\n return join(__dirname, '..', 'file.js')\n }\n\n let fixTarget\n\n for (const filePath of callers) {\n try {\n const context = filePath === 'node:repl'\n ? process.cwd() + sep\n : filePath\n\n fixTarget = createRequire(context).resolve(origin)\n break\n } catch (err) {\n // Silent catch\n continue\n }\n }\n\n if (!fixTarget) {\n throw new Error(`unable to determine transport target for \"${origin}\"`)\n }\n\n return fixTarget\n }\n}\n\nmodule.exports = transport\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst diagChan = require('node:diagnostics_channel')\nconst format = require('quick-format-unescaped')\nconst { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers')\nconst SonicBoom = require('sonic-boom')\nconst onExit = require('on-exit-leak-free')\nconst {\n lsCacheSym,\n chindingsSym,\n writeSym,\n serializersSym,\n formatOptsSym,\n endSym,\n stringifiersSym,\n stringifySym,\n stringifySafeSym,\n wildcardFirstSym,\n nestedKeySym,\n formattersSym,\n messageKeySym,\n errorKeySym,\n nestedKeyStrSym,\n msgPrefixSym\n} = require('./symbols')\nconst { isMainThread } = require('worker_threads')\nconst transport = require('./transport')\n\nlet asJsonChan\n// Node >= 18.19 supports diagnostics_channel.tracingChannel\nif (typeof diagChan.tracingChannel === 'function') {\n asJsonChan = diagChan.tracingChannel('pino_asJson')\n} else {\n // Older Node 18.x (e.g. 18.18), provided a no-op fallback\n asJsonChan = {\n hasSubscribers: false,\n traceSync (fn, store, thisArg, ...args) {\n return fn.call(thisArg, ...args)\n }\n }\n}\n\nfunction noop () {\n}\n\nfunction genLog (level, hook) {\n if (!hook) return LOG\n\n return function hookWrappedLog (...args) {\n hook.call(this, args, LOG, level)\n }\n\n function LOG (o, ...n) {\n if (typeof o === 'object') {\n let msg = o\n if (o !== null) {\n if (o.method && o.headers && o.socket) {\n o = mapHttpRequest(o)\n } else if (typeof o.setHeader === 'function') {\n o = mapHttpResponse(o)\n }\n }\n let formatParams\n if (msg === null && n.length === 0) {\n formatParams = [null]\n } else {\n msg = n.shift()\n formatParams = n\n }\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](o, format(msg, formatParams, this[formatOptsSym]), level)\n } else {\n let msg = o === undefined ? n.shift() : o\n\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](null, format(msg, n, this[formatOptsSym]), level)\n }\n }\n}\n\n// magically escape strings for json\n// relying on their charCodeAt\n// everything below 32 needs JSON.stringify()\n// 34 and 92 happens all the time, so we\n// have a fast case for them\nfunction asString (str) {\n let result = ''\n let last = 0\n let found = false\n let point = 255\n const l = str.length\n if (l > 100) {\n return JSON.stringify(str)\n }\n for (var i = 0; i < l && point >= 32; i++) {\n point = str.charCodeAt(i)\n if (point === 34 || point === 92) {\n result += str.slice(last, i) + '\\\\'\n last = i\n found = true\n }\n }\n if (!found) {\n result = str\n } else {\n result += str.slice(last)\n }\n return point < 32 ? JSON.stringify(str) : '\"' + result + '\"'\n}\n\n/**\n * `asJson` wraps `_asJson` in order to facilitate generating diagnostics.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string}\n */\nfunction asJson (obj, msg, num, time) {\n if (asJsonChan.hasSubscribers === false) {\n return _asJson.call(this, obj, msg, num, time)\n }\n\n const store = { instance: this, arguments }\n return asJsonChan.traceSync(_asJson, store, this, obj, msg, num, time)\n}\n\n/**\n * `_asJson` parses all collected data and generates the finalized newline\n * delimited JSON string.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string} The finalized log string terminated with a newline.\n * @private\n */\nfunction _asJson (obj, msg, num, time) {\n const stringify = this[stringifySym]\n const stringifySafe = this[stringifySafeSym]\n const stringifiers = this[stringifiersSym]\n const end = this[endSym]\n const chindings = this[chindingsSym]\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const messageKey = this[messageKeySym]\n const errorKey = this[errorKeySym]\n let data = this[lsCacheSym][num] + time\n\n // we need the child bindings added to the output first so instance logged\n // objects can take precedence when JSON.parse-ing the resulting log line\n data = data + chindings\n\n let value\n if (formatters.log) {\n obj = formatters.log(obj)\n }\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n let propStr = ''\n for (const key in obj) {\n value = obj[key]\n if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) {\n if (serializers[key]) {\n value = serializers[key](value)\n } else if (key === errorKey && serializers.err) {\n value = serializers.err(value)\n }\n\n const stringifier = stringifiers[key] || wildcardStringifier\n\n switch (typeof value) {\n case 'undefined':\n case 'function':\n continue\n case 'number':\n /* eslint no-fallthrough: \"off\" */\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n break\n case 'string':\n value = (stringifier || asString)(value)\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n }\n if (value === undefined) continue\n const strKey = asString(key)\n propStr += ',' + strKey + ':' + value\n }\n }\n\n let msgStr = ''\n if (msg !== undefined) {\n value = serializers[messageKey] ? serializers[messageKey](msg) : msg\n const stringifier = stringifiers[messageKey] || wildcardStringifier\n\n switch (typeof value) {\n case 'function':\n break\n case 'number':\n /* eslint no-fallthrough: \"off\" */\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n case 'string':\n value = (stringifier || asString)(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n msgStr = ',\"' + messageKey + '\":' + value\n }\n }\n\n if (this[nestedKeySym] && propStr) {\n // place all the obj properties under the specified key\n // the nested key is already formatted from the constructor\n return data + this[nestedKeyStrSym] + propStr.slice(1) + '}' + msgStr + end\n } else {\n return data + propStr + msgStr + end\n }\n}\n\nfunction asChindings (instance, bindings) {\n let value\n let data = instance[chindingsSym]\n const stringify = instance[stringifySym]\n const stringifySafe = instance[stringifySafeSym]\n const stringifiers = instance[stringifiersSym]\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n const serializers = instance[serializersSym]\n const formatter = instance[formattersSym].bindings\n bindings = formatter(bindings)\n\n for (const key in bindings) {\n value = bindings[key]\n const valid = (key.length < 5 || (key !== 'level' &&\n key !== 'serializers' &&\n key !== 'formatters' &&\n key !== 'customLevels')) &&\n bindings.hasOwnProperty(key) &&\n value !== undefined\n if (valid === true) {\n value = serializers[key] ? serializers[key](value) : value\n value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)\n if (value === undefined) continue\n data += ',\"' + key + '\":' + value\n }\n }\n return data\n}\n\nfunction hasBeenTampered (stream) {\n return stream.write !== stream.constructor.prototype.write\n}\n\nfunction buildSafeSonicBoom (opts) {\n const stream = new SonicBoom(opts)\n stream.on('error', filterBrokenPipe)\n // If we are sync: false, we must flush on exit\n if (!opts.sync && isMainThread) {\n onExit.register(stream, autoEnd)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n }\n return stream\n\n function filterBrokenPipe (err) {\n // Impossible to replicate across all operating systems\n /* istanbul ignore next */\n if (err.code === 'EPIPE') {\n // If we get EPIPE, we should stop logging here\n // however we have no control to the consumer of\n // SonicBoom, so we just overwrite the write method\n stream.write = noop\n stream.end = noop\n stream.flushSync = noop\n stream.destroy = noop\n return\n }\n stream.removeListener('error', filterBrokenPipe)\n stream.emit('error', err)\n }\n}\n\nfunction autoEnd (stream, eventName) {\n // This check is needed only on some platforms\n /* istanbul ignore next */\n if (stream.destroyed) {\n return\n }\n\n if (eventName === 'beforeExit') {\n // We still have an event loop, let's use it\n stream.flush()\n stream.on('drain', function () {\n stream.end()\n })\n } else {\n // For some reason istanbul is not detecting this, but it's there\n /* istanbul ignore next */\n // We do not have an event loop, so flush synchronously\n stream.flushSync()\n }\n}\n\nfunction createArgsNormalizer (defaultOptions) {\n return function normalizeArgs (instance, caller, opts = {}, stream) {\n // support stream as a string\n if (typeof opts === 'string') {\n stream = buildSafeSonicBoom({ dest: opts })\n opts = {}\n } else if (typeof stream === 'string') {\n if (opts && opts.transport) {\n throw Error('only one of option.transport or stream can be specified')\n }\n stream = buildSafeSonicBoom({ dest: stream })\n } else if (opts instanceof SonicBoom || opts.writable || opts._writableState) {\n stream = opts\n opts = {}\n } else if (opts.transport) {\n if (opts.transport instanceof SonicBoom || opts.transport.writable || opts.transport._writableState) {\n throw Error('option.transport do not allow stream, please pass to option directly. e.g. pino(transport)')\n }\n if (opts.transport.targets && opts.transport.targets.length && opts.formatters && typeof opts.formatters.level === 'function') {\n throw Error('option.transport.targets do not allow custom level formatters')\n }\n\n let customLevels\n if (opts.customLevels) {\n customLevels = opts.useOnlyCustomLevels ? opts.customLevels : Object.assign({}, opts.levels, opts.customLevels)\n }\n stream = transport({ caller, ...opts.transport, levels: customLevels })\n }\n opts = Object.assign({}, defaultOptions, opts)\n opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)\n opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)\n\n if (opts.prettyPrint) {\n throw new Error('prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)')\n }\n\n const { enabled, onChild } = opts\n if (enabled === false) opts.level = 'silent'\n if (!onChild) opts.onChild = noop\n if (!stream) {\n if (!hasBeenTampered(process.stdout)) {\n // If process.stdout.fd is undefined, it means that we are running\n // in a worker thread. Let's assume we are logging to file descriptor 1.\n stream = buildSafeSonicBoom({ fd: process.stdout.fd || 1 })\n } else {\n stream = process.stdout\n }\n }\n return { opts, stream }\n }\n}\n\nfunction stringify (obj, stringifySafeFn) {\n try {\n return JSON.stringify(obj)\n } catch (_) {\n try {\n const stringify = stringifySafeFn || this[stringifySafeSym]\n return stringify(obj)\n } catch (_) {\n return '\"[unable to serialize, circular reference is too complex to analyze]\"'\n }\n }\n}\n\nfunction buildFormatters (level, bindings, log) {\n return {\n level,\n bindings,\n log\n }\n}\n\n/**\n * Convert a string integer file descriptor to a proper native integer\n * file descriptor.\n *\n * @param {string} destination The file descriptor string to attempt to convert.\n *\n * @returns {Number}\n */\nfunction normalizeDestFileDescriptor (destination) {\n const fd = Number(destination)\n if (typeof destination === 'string' && Number.isFinite(fd)) {\n return fd\n }\n // destination could be undefined if we are in a worker\n if (destination === undefined) {\n // This is stdout in UNIX systems\n return 1\n }\n return destination\n}\n\nmodule.exports = {\n noop,\n buildSafeSonicBoom,\n asChindings,\n asJson,\n genLog,\n createArgsNormalizer,\n stringify,\n buildFormatters,\n normalizeDestFileDescriptor\n}\n","/**\n * Represents default log level values\n *\n * @enum {number}\n */\nconst DEFAULT_LEVELS = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60\n}\n\n/**\n * Represents sort order direction: `ascending` or `descending`\n *\n * @enum {string}\n */\nconst SORTING_ORDER = {\n ASC: 'ASC',\n DESC: 'DESC'\n}\n\nmodule.exports = {\n DEFAULT_LEVELS,\n SORTING_ORDER\n}\n","'use strict'\n/* eslint no-prototype-builtins: 0 */\nconst {\n lsCacheSym,\n levelValSym,\n useOnlyCustomLevelsSym,\n streamSym,\n formattersSym,\n hooksSym,\n levelCompSym\n} = require('./symbols')\nconst { noop, genLog } = require('./tools')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./constants')\n\nconst levelMethods = {\n fatal: (hook) => {\n const logFatal = genLog(DEFAULT_LEVELS.fatal, hook)\n return function (...args) {\n const stream = this[streamSym]\n logFatal.call(this, ...args)\n if (typeof stream.flushSync === 'function') {\n try {\n stream.flushSync()\n } catch (e) {\n // https://github.com/pinojs/pino/pull/740#discussion_r346788313\n }\n }\n }\n },\n error: (hook) => genLog(DEFAULT_LEVELS.error, hook),\n warn: (hook) => genLog(DEFAULT_LEVELS.warn, hook),\n info: (hook) => genLog(DEFAULT_LEVELS.info, hook),\n debug: (hook) => genLog(DEFAULT_LEVELS.debug, hook),\n trace: (hook) => genLog(DEFAULT_LEVELS.trace, hook)\n}\n\nconst nums = Object.keys(DEFAULT_LEVELS).reduce((o, k) => {\n o[DEFAULT_LEVELS[k]] = k\n return o\n}, {})\n\nconst initialLsCache = Object.keys(nums).reduce((o, k) => {\n o[k] = '{\"level\":' + Number(k)\n return o\n}, {})\n\nfunction genLsCache (instance) {\n const formatter = instance[formattersSym].level\n const { labels } = instance.levels\n const cache = {}\n for (const label in labels) {\n const level = formatter(labels[label], Number(label))\n cache[label] = JSON.stringify(level).slice(0, -1)\n }\n instance[lsCacheSym] = cache\n return instance\n}\n\nfunction isStandardLevel (level, useOnlyCustomLevels) {\n if (useOnlyCustomLevels) {\n return false\n }\n\n switch (level) {\n case 'fatal':\n case 'error':\n case 'warn':\n case 'info':\n case 'debug':\n case 'trace':\n return true\n default:\n return false\n }\n}\n\nfunction setLevel (level) {\n const { labels, values } = this.levels\n if (typeof level === 'number') {\n if (labels[level] === undefined) throw Error('unknown level value' + level)\n level = labels[level]\n }\n if (values[level] === undefined) throw Error('unknown level ' + level)\n const preLevelVal = this[levelValSym]\n const levelVal = this[levelValSym] = values[level]\n const useOnlyCustomLevelsVal = this[useOnlyCustomLevelsSym]\n const levelComparison = this[levelCompSym]\n const hook = this[hooksSym].logMethod\n\n for (const key in values) {\n if (levelComparison(values[key], levelVal) === false) {\n this[key] = noop\n continue\n }\n this[key] = isStandardLevel(key, useOnlyCustomLevelsVal) ? levelMethods[key](hook) : genLog(values[key], hook)\n }\n\n this.emit(\n 'level-change',\n level,\n levelVal,\n labels[preLevelVal],\n preLevelVal,\n this\n )\n}\n\nfunction getLevel (level) {\n const { levels, levelVal } = this\n // protection against potential loss of Pino scope from serializers (edge case with circular refs - https://github.com/pinojs/pino/issues/833)\n return (levels && levels.labels) ? levels.labels[levelVal] : ''\n}\n\nfunction isLevelEnabled (logLevel) {\n const { values } = this.levels\n const logLevelVal = values[logLevel]\n return logLevelVal !== undefined && this[levelCompSym](logLevelVal, this[levelValSym])\n}\n\n/**\n * Determine if the given `current` level is enabled by comparing it\n * against the current threshold (`expected`).\n *\n * @param {SORTING_ORDER} direction comparison direction \"ASC\" or \"DESC\"\n * @param {number} current current log level number representation\n * @param {number} expected threshold value to compare with\n * @returns {boolean}\n */\nfunction compareLevel (direction, current, expected) {\n if (direction === SORTING_ORDER.DESC) {\n return current <= expected\n }\n\n return current >= expected\n}\n\n/**\n * Create a level comparison function based on `levelComparison`\n * it could a default function which compares levels either in \"ascending\" or \"descending\" order or custom comparison function\n *\n * @param {SORTING_ORDER | Function} levelComparison sort levels order direction or custom comparison function\n * @returns Function\n */\nfunction genLevelComparison (levelComparison) {\n if (typeof levelComparison === 'string') {\n return compareLevel.bind(null, levelComparison)\n }\n\n return levelComparison\n}\n\nfunction mappings (customLevels = null, useOnlyCustomLevels = false) {\n const customNums = customLevels\n /* eslint-disable */\n ? Object.keys(customLevels).reduce((o, k) => {\n o[customLevels[k]] = k\n return o\n }, {})\n : null\n /* eslint-enable */\n\n const labels = Object.assign(\n Object.create(Object.prototype, { Infinity: { value: 'silent' } }),\n useOnlyCustomLevels ? null : nums,\n customNums\n )\n const values = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n return { labels, values }\n}\n\nfunction assertDefaultLevelFound (defaultLevel, customLevels, useOnlyCustomLevels) {\n if (typeof defaultLevel === 'number') {\n const values = [].concat(\n Object.keys(customLevels || {}).map(key => customLevels[key]),\n useOnlyCustomLevels ? [] : Object.keys(nums).map(level => +level),\n Infinity\n )\n if (!values.includes(defaultLevel)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n return\n }\n\n const labels = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n if (!(defaultLevel in labels)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n}\n\nfunction assertNoLevelCollisions (levels, customLevels) {\n const { labels, values } = levels\n for (const k in customLevels) {\n if (k in values) {\n throw Error('levels cannot be overridden')\n }\n if (customLevels[k] in labels) {\n throw Error('pre-existing level values cannot be used for new levels')\n }\n }\n}\n\n/**\n * Validates whether `levelComparison` is correct\n *\n * @throws Error\n * @param {SORTING_ORDER | Function} levelComparison - value to validate\n * @returns\n */\nfunction assertLevelComparison (levelComparison) {\n if (typeof levelComparison === 'function') {\n return\n }\n\n if (typeof levelComparison === 'string' && Object.values(SORTING_ORDER).includes(levelComparison)) {\n return\n }\n\n throw new Error('Levels comparison should be one of \"ASC\", \"DESC\" or \"function\" type')\n}\n\nmodule.exports = {\n initialLsCache,\n genLsCache,\n levelMethods,\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n assertNoLevelCollisions,\n assertDefaultLevelFound,\n genLevelComparison,\n assertLevelComparison\n}\n","'use strict'\n\nmodule.exports = { version: '9.14.0' }\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst { EventEmitter } = require('node:events')\nconst {\n lsCacheSym,\n levelValSym,\n setLevelSym,\n getLevelSym,\n chindingsSym,\n parsedChindingsSym,\n mixinSym,\n asJsonSym,\n writeSym,\n mixinMergeStrategySym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n serializersSym,\n formattersSym,\n errorKeySym,\n messageKeySym,\n useOnlyCustomLevelsSym,\n needsMetadataGsym,\n redactFmtSym,\n stringifySym,\n formatOptsSym,\n stringifiersSym,\n msgPrefixSym,\n hooksSym\n} = require('./symbols')\nconst {\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n initialLsCache,\n genLsCache,\n assertNoLevelCollisions\n} = require('./levels')\nconst {\n asChindings,\n asJson,\n buildFormatters,\n stringify,\n noop\n} = require('./tools')\nconst {\n version\n} = require('./meta')\nconst redaction = require('./redaction')\n\n// note: use of class is satirical\n// https://github.com/pinojs/pino/pull/433#pullrequestreview-127703127\nconst constructor = class Pino {}\nconst prototype = {\n constructor,\n child,\n bindings,\n setBindings,\n flush,\n isLevelEnabled,\n version,\n get level () { return this[getLevelSym]() },\n set level (lvl) { this[setLevelSym](lvl) },\n get levelVal () { return this[levelValSym] },\n set levelVal (n) { throw Error('levelVal is read-only') },\n get msgPrefix () { return this[msgPrefixSym] },\n get [Symbol.toStringTag] () { return 'Pino' },\n [lsCacheSym]: initialLsCache,\n [writeSym]: write,\n [asJsonSym]: asJson,\n [getLevelSym]: getLevel,\n [setLevelSym]: setLevel\n}\n\nObject.setPrototypeOf(prototype, EventEmitter.prototype)\n\n// exporting and consuming the prototype object using factory pattern fixes scoping issues with getters when serializing\nmodule.exports = function () {\n return Object.create(prototype)\n}\n\nconst resetChildingsFormatter = bindings => bindings\nfunction child (bindings, options) {\n if (!bindings) {\n throw Error('missing bindings for child Pino')\n }\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const instance = Object.create(this)\n\n // If an `options` object was not supplied, we can improve\n // the performance of child creation by skipping\n // the checks for set options and simply return\n // a baseline instance.\n if (options == null) {\n if (instance[formattersSym].bindings !== resetChildingsFormatter) {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n\n // Always call setLevel to ensure child gets own method references\n // This prevents issues when parent methods are wrapped (e.g., by Sinon)\n instance[setLevelSym](this.level)\n\n if (this.onChild !== noop) {\n this.onChild(instance)\n }\n\n return instance\n }\n\n if (options.hasOwnProperty('serializers') === true) {\n instance[serializersSym] = Object.create(null)\n\n for (const k in serializers) {\n instance[serializersSym][k] = serializers[k]\n }\n const parentSymbols = Object.getOwnPropertySymbols(serializers)\n /* eslint no-var: off */\n for (var i = 0; i < parentSymbols.length; i++) {\n const ks = parentSymbols[i]\n instance[serializersSym][ks] = serializers[ks]\n }\n\n for (const bk in options.serializers) {\n instance[serializersSym][bk] = options.serializers[bk]\n }\n const bindingsSymbols = Object.getOwnPropertySymbols(options.serializers)\n for (var bi = 0; bi < bindingsSymbols.length; bi++) {\n const bks = bindingsSymbols[bi]\n instance[serializersSym][bks] = options.serializers[bks]\n }\n } else instance[serializersSym] = serializers\n if (options.hasOwnProperty('formatters')) {\n const { level, bindings: chindings, log } = options.formatters\n instance[formattersSym] = buildFormatters(\n level || formatters.level,\n chindings || resetChildingsFormatter,\n log || formatters.log\n )\n } else {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n if (options.hasOwnProperty('customLevels') === true) {\n assertNoLevelCollisions(this.levels, options.customLevels)\n instance.levels = mappings(options.customLevels, instance[useOnlyCustomLevelsSym])\n genLsCache(instance)\n }\n\n // redact must place before asChindings and only replace if exist\n if ((typeof options.redact === 'object' && options.redact !== null) || Array.isArray(options.redact)) {\n instance.redact = options.redact // replace redact directly\n const stringifiers = redaction(instance.redact, stringify)\n const formatOpts = { stringify: stringifiers[redactFmtSym] }\n instance[stringifySym] = stringify\n instance[stringifiersSym] = stringifiers\n instance[formatOptsSym] = formatOpts\n }\n\n if (typeof options.msgPrefix === 'string') {\n instance[msgPrefixSym] = (this[msgPrefixSym] || '') + options.msgPrefix\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n const childLevel = options.level || this.level\n instance[setLevelSym](childLevel)\n this.onChild(instance)\n return instance\n}\n\nfunction bindings () {\n const chindings = this[chindingsSym]\n const chindingsJson = `{${chindings.substr(1)}}` // at least contains ,\"pid\":7068,\"hostname\":\"myMac\"\n const bindingsFromJson = JSON.parse(chindingsJson)\n delete bindingsFromJson.pid\n delete bindingsFromJson.hostname\n return bindingsFromJson\n}\n\nfunction setBindings (newBindings) {\n const chindings = asChindings(this, newBindings)\n this[chindingsSym] = chindings\n delete this[parsedChindingsSym]\n}\n\n/**\n * Default strategy for creating `mergeObject` from arguments and the result from `mixin()`.\n * Fields from `mergeObject` have higher priority in this strategy.\n *\n * @param {Object} mergeObject The object a user has supplied to the logging function.\n * @param {Object} mixinObject The result of the `mixin` method.\n * @return {Object}\n */\nfunction defaultMixinMergeStrategy (mergeObject, mixinObject) {\n return Object.assign(mixinObject, mergeObject)\n}\n\nfunction write (_obj, msg, num) {\n const t = this[timeSym]()\n const mixin = this[mixinSym]\n const errorKey = this[errorKeySym]\n const messageKey = this[messageKeySym]\n const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy\n let obj\n const streamWriteHook = this[hooksSym].streamWrite\n\n if (_obj === undefined || _obj === null) {\n obj = {}\n } else if (_obj instanceof Error) {\n obj = { [errorKey]: _obj }\n if (msg === undefined) {\n msg = _obj.message\n }\n } else {\n obj = _obj\n if (msg === undefined && _obj[messageKey] === undefined && _obj[errorKey]) {\n msg = _obj[errorKey].message\n }\n }\n\n if (mixin) {\n obj = mixinMergeStrategy(obj, mixin(obj, num, this))\n }\n\n const s = this[asJsonSym](obj, msg, num, t)\n\n const stream = this[streamSym]\n if (stream[needsMetadataGsym] === true) {\n stream.lastLevel = num\n stream.lastObj = obj\n stream.lastMsg = msg\n stream.lastTime = t.slice(this[timeSliceIndexSym])\n stream.lastLogger = this // for child loggers\n }\n stream.write(streamWriteHook ? streamWriteHook(s) : s)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw Error('callback must be a function')\n }\n\n const stream = this[streamSym]\n\n if (typeof stream.flush === 'function') {\n stream.flush(cb || noop)\n } else if (cb) cb()\n}\n","'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n // Some magic numbers that worked out fine while benchmarking with v8 8.0\n if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n return `\"${str}\"`\n }\n return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n // Insertion sort is very efficient for small input sizes, but it has a bad\n // worst case complexity. Thus, use native array sort for bigger values.\n if (array.length > 2e2 || comparator) {\n return array.sort(comparator)\n }\n for (let i = 1; i < array.length; i++) {\n const currentValue = array[i]\n let position = i\n while (position !== 0 && array[position - 1] > currentValue) {\n array[position] = array[position - 1]\n position--\n }\n array[position] = currentValue\n }\n return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(\n Object.getPrototypeOf(\n new Int8Array()\n )\n ),\n Symbol.toStringTag\n ).get\n\nfunction isTypedArrayWithEntries (value) {\n return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n if (array.length < maximumBreadth) {\n maximumBreadth = array.length\n }\n const whitespace = separator === ',' ? '' : ' '\n let res = `\"0\":${whitespace}${array[0]}`\n for (let i = 1; i < maximumBreadth; i++) {\n res += `${separator}\"${i}\":${whitespace}${array[i]}`\n }\n return res\n}\n\nfunction getCircularValueOption (options) {\n if (hasOwnProperty.call(options, 'circularValue')) {\n const circularValue = options.circularValue\n if (typeof circularValue === 'string') {\n return `\"${circularValue}\"`\n }\n if (circularValue == null) {\n return circularValue\n }\n if (circularValue === Error || circularValue === TypeError) {\n return {\n toString () {\n throw new TypeError('Converting circular structure to JSON')\n }\n }\n }\n throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n }\n return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n let value\n if (hasOwnProperty.call(options, 'deterministic')) {\n value = options.deterministic\n if (typeof value !== 'boolean' && typeof value !== 'function') {\n throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'boolean') {\n throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'number') {\n throw new TypeError(`The \"${key}\" argument must be of type number`)\n }\n if (!Number.isInteger(value)) {\n throw new TypeError(`The \"${key}\" argument must be an integer`)\n }\n if (value < 1) {\n throw new RangeError(`The \"${key}\" argument must be >= 1`)\n }\n }\n return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n if (number === 1) {\n return '1 item'\n }\n return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n const replacerSet = new Set()\n for (const value of replacerArray) {\n if (typeof value === 'string' || typeof value === 'number') {\n replacerSet.add(String(value))\n }\n }\n return replacerSet\n}\n\nfunction getStrictOption (options) {\n if (hasOwnProperty.call(options, 'strict')) {\n const value = options.strict\n if (typeof value !== 'boolean') {\n throw new TypeError('The \"strict\" argument must be of type boolean')\n }\n if (value) {\n return (value) => {\n let message = `Object can not safely be stringified. Received type ${typeof value}`\n if (typeof value !== 'function') message += ` (${value.toString()})`\n throw new Error(message)\n }\n }\n }\n}\n\nfunction configure (options) {\n options = { ...options }\n const fail = getStrictOption(options)\n if (fail) {\n if (options.bigint === undefined) {\n options.bigint = false\n }\n if (!('circularValue' in options)) {\n options.circularValue = Error\n }\n }\n const circularValue = getCircularValueOption(options)\n const bigint = getBooleanOption(options, 'bigint')\n const deterministic = getDeterministicOption(options)\n const comparator = typeof deterministic === 'function' ? deterministic : undefined\n const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n let value = parent[key]\n\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n value = replacer.call(parent, key, value)\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n let join = ','\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let whitespace = ''\n let separator = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (deterministic && !isTypedArrayWithEntries(value)) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n const originalIndentation = indentation\n let res = ''\n let join = ','\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n stack.push(value)\n let whitespace = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n let separator = ''\n for (const key of replacer) {\n const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyIndent (key, value, stack, spacer, indentation) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again.\n if (typeof value !== 'object') {\n return stringifyIndent(key, value, stack, spacer, indentation)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n indentation += spacer\n let res = `\\n${indentation}`\n const join = `,\\n${indentation}`\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n res += `\\n${originalIndentation}`\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n indentation += spacer\n const join = `,\\n${indentation}`\n let res = ''\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, join, maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = join\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}: ${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (separator !== '') {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifySimple (key, value, stack) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again\n if (typeof value !== 'object') {\n return stringifySimple(key, value, stack)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n\n const hasLength = value.length !== undefined\n if (hasLength && Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n res += ','\n }\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (hasLength && isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, ',', maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = ','\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifySimple(key, value[key], stack)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${tmp}`\n separator = ','\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringify (value, replacer, space) {\n if (arguments.length > 1) {\n let spacer = ''\n if (typeof space === 'number') {\n spacer = ' '.repeat(Math.min(space, 10))\n } else if (typeof space === 'string') {\n spacer = space.slice(0, 10)\n }\n if (replacer != null) {\n if (typeof replacer === 'function') {\n return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n }\n if (Array.isArray(replacer)) {\n return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n }\n }\n if (spacer.length !== 0) {\n return stringifyIndent('', value, [], spacer, '')\n }\n }\n return stringifySimple('', value, [])\n }\n\n return stringify\n}\n","'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst { DEFAULT_LEVELS } = require('./constants')\n\nconst DEFAULT_INFO_LEVEL = DEFAULT_LEVELS.info\n\nfunction multistream (streamsArray, opts) {\n streamsArray = streamsArray || []\n opts = opts || { dedupe: false }\n\n const streamLevels = Object.create(DEFAULT_LEVELS)\n streamLevels.silent = Infinity\n if (opts.levels && typeof opts.levels === 'object') {\n Object.keys(opts.levels).forEach(i => {\n streamLevels[i] = opts.levels[i]\n })\n }\n\n const res = {\n write,\n add,\n remove,\n emit,\n flushSync,\n end,\n minLevel: 0,\n lastId: 0,\n streams: [],\n clone,\n [metadata]: true,\n streamLevels\n }\n\n if (Array.isArray(streamsArray)) {\n streamsArray.forEach(add, res)\n } else {\n add.call(res, streamsArray)\n }\n\n // clean this object up\n // or it will stay allocated forever\n // as it is closed on the following closures\n streamsArray = null\n\n return res\n\n // we can exit early because the streams are ordered by level\n function write (data) {\n let dest\n const level = this.lastLevel\n const { streams } = this\n // for handling situation when several streams has the same level\n let recordedLevel = 0\n let stream\n\n // if dedupe set to true we send logs to the stream with the highest level\n // therefore, we have to change sorting order\n for (let i = initLoopVar(streams.length, opts.dedupe); checkLoopVar(i, streams.length, opts.dedupe); i = adjustLoopVar(i, opts.dedupe)) {\n dest = streams[i]\n if (dest.level <= level) {\n if (recordedLevel !== 0 && recordedLevel !== dest.level) {\n break\n }\n stream = dest.stream\n if (stream[metadata]) {\n const { lastTime, lastMsg, lastObj, lastLogger } = this\n stream.lastLevel = level\n stream.lastTime = lastTime\n stream.lastMsg = lastMsg\n stream.lastObj = lastObj\n stream.lastLogger = lastLogger\n }\n stream.write(data)\n if (opts.dedupe) {\n recordedLevel = dest.level\n }\n } else if (!opts.dedupe) {\n break\n }\n }\n }\n\n function emit (...args) {\n for (const { stream } of this.streams) {\n if (typeof stream.emit === 'function') {\n stream.emit(...args)\n }\n }\n }\n\n function flushSync () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n }\n }\n\n function add (dest) {\n if (!dest) {\n return res\n }\n\n // Check that dest implements either StreamEntry or DestinationStream\n const isStream = typeof dest.write === 'function' || dest.stream\n const stream_ = dest.write ? dest : dest.stream\n // This is necessary to provide a meaningful error message, otherwise it throws somewhere inside write()\n if (!isStream) {\n throw Error('stream object needs to implement either StreamEntry or DestinationStream interface')\n }\n\n const { streams, streamLevels } = this\n\n let level\n if (typeof dest.levelVal === 'number') {\n level = dest.levelVal\n } else if (typeof dest.level === 'string') {\n level = streamLevels[dest.level]\n } else if (typeof dest.level === 'number') {\n level = dest.level\n } else {\n level = DEFAULT_INFO_LEVEL\n }\n\n const dest_ = {\n stream: stream_,\n level,\n levelVal: undefined,\n id: ++res.lastId\n }\n\n streams.unshift(dest_)\n streams.sort(compareByLevel)\n\n this.minLevel = streams[0].level\n\n return res\n }\n\n function remove (id) {\n const { streams } = this\n const index = streams.findIndex(s => s.id === id)\n\n if (index >= 0) {\n streams.splice(index, 1)\n streams.sort(compareByLevel)\n this.minLevel = streams.length > 0 ? streams[0].level : -1\n }\n\n return res\n }\n\n function end () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n stream.end()\n }\n }\n\n function clone (level) {\n const streams = new Array(this.streams.length)\n\n for (let i = 0; i < streams.length; i++) {\n streams[i] = {\n level,\n stream: this.streams[i].stream\n }\n }\n\n return {\n write,\n add,\n remove,\n minLevel: level,\n streams,\n clone,\n emit,\n flushSync,\n [metadata]: true\n }\n }\n}\n\nfunction compareByLevel (a, b) {\n return a.level - b.level\n}\n\nfunction initLoopVar (length, dedupe) {\n return dedupe ? length - 1 : 0\n}\n\nfunction adjustLoopVar (i, dedupe) {\n return dedupe ? i - 1 : i + 1\n}\n\nfunction checkLoopVar (i, length, dedupe) {\n return dedupe ? i >= 0 : i < length\n}\n\nmodule.exports = multistream\n","'use strict'\n\nconst os = require('node:os')\nconst stdSerializers = require('pino-std-serializers')\nconst caller = require('./lib/caller')\nconst redaction = require('./lib/redaction')\nconst time = require('./lib/time')\nconst proto = require('./lib/proto')\nconst symbols = require('./lib/symbols')\nconst { configure } = require('safe-stable-stringify')\nconst { assertDefaultLevelFound, mappings, genLsCache, genLevelComparison, assertLevelComparison } = require('./lib/levels')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./lib/constants')\nconst {\n createArgsNormalizer,\n asChindings,\n buildSafeSonicBoom,\n buildFormatters,\n stringify,\n normalizeDestFileDescriptor,\n noop\n} = require('./lib/tools')\nconst { version } = require('./lib/meta')\nconst {\n chindingsSym,\n redactFmtSym,\n serializersSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n setLevelSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n mixinSym,\n levelCompSym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n} = symbols\nconst { epochTime, nullTime } = time\nconst { pid } = process\nconst hostname = os.hostname()\nconst defaultErrorSerializer = stdSerializers.err\nconst defaultOptions = {\n level: 'info',\n levelComparison: SORTING_ORDER.ASC,\n levels: DEFAULT_LEVELS,\n messageKey: 'msg',\n errorKey: 'err',\n nestedKey: null,\n enabled: true,\n base: { pid, hostname },\n serializers: Object.assign(Object.create(null), {\n err: defaultErrorSerializer\n }),\n formatters: Object.assign(Object.create(null), {\n bindings (bindings) {\n return bindings\n },\n level (label, number) {\n return { level: number }\n }\n }),\n hooks: {\n logMethod: undefined,\n streamWrite: undefined\n },\n timestamp: epochTime,\n name: undefined,\n redact: null,\n customLevels: null,\n useOnlyCustomLevels: false,\n depthLimit: 5,\n edgeLimit: 100\n}\n\nconst normalize = createArgsNormalizer(defaultOptions)\n\nconst serializers = Object.assign(Object.create(null), stdSerializers)\n\nfunction pino (...args) {\n const instance = {}\n const { opts, stream } = normalize(instance, caller(), ...args)\n\n if (opts.level && typeof opts.level === 'string' && DEFAULT_LEVELS[opts.level.toLowerCase()] !== undefined) opts.level = opts.level.toLowerCase()\n\n const {\n redact,\n crlf,\n serializers,\n timestamp,\n messageKey,\n errorKey,\n nestedKey,\n base,\n name,\n level,\n customLevels,\n levelComparison,\n mixin,\n mixinMergeStrategy,\n useOnlyCustomLevels,\n formatters,\n hooks,\n depthLimit,\n edgeLimit,\n onChild,\n msgPrefix\n } = opts\n\n const stringifySafe = configure({\n maximumDepth: depthLimit,\n maximumBreadth: edgeLimit\n })\n\n const allFormatters = buildFormatters(\n formatters.level,\n formatters.bindings,\n formatters.log\n )\n\n const stringifyFn = stringify.bind({\n [stringifySafeSym]: stringifySafe\n })\n const stringifiers = redact ? redaction(redact, stringifyFn) : {}\n const formatOpts = redact\n ? { stringify: stringifiers[redactFmtSym] }\n : { stringify: stringifyFn }\n const end = '}' + (crlf ? '\\r\\n' : '\\n')\n const coreChindings = asChindings.bind(null, {\n [chindingsSym]: '',\n [serializersSym]: serializers,\n [stringifiersSym]: stringifiers,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [formattersSym]: allFormatters\n })\n\n let chindings = ''\n if (base !== null) {\n if (name === undefined) {\n chindings = coreChindings(base)\n } else {\n chindings = coreChindings(Object.assign({}, base, { name }))\n }\n }\n\n const time = (timestamp instanceof Function)\n ? timestamp\n : (timestamp ? epochTime : nullTime)\n const timeSliceIndex = time().indexOf(':') + 1\n\n if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')\n if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type \"${typeof mixin}\" - expected \"function\"`)\n if (msgPrefix && typeof msgPrefix !== 'string') throw Error(`Unknown msgPrefix type \"${typeof msgPrefix}\" - expected \"string\"`)\n\n assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)\n const levels = mappings(customLevels, useOnlyCustomLevels)\n\n if (typeof stream.emit === 'function') {\n stream.emit('message', { code: 'PINO_CONFIG', config: { levels, messageKey, errorKey } })\n }\n\n assertLevelComparison(levelComparison)\n const levelCompFunc = genLevelComparison(levelComparison)\n\n Object.assign(instance, {\n levels,\n [levelCompSym]: levelCompFunc,\n [useOnlyCustomLevelsSym]: useOnlyCustomLevels,\n [streamSym]: stream,\n [timeSym]: time,\n [timeSliceIndexSym]: timeSliceIndex,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [stringifiersSym]: stringifiers,\n [endSym]: end,\n [formatOptsSym]: formatOpts,\n [messageKeySym]: messageKey,\n [errorKeySym]: errorKey,\n [nestedKeySym]: nestedKey,\n // protect against injection\n [nestedKeyStrSym]: nestedKey ? `,${JSON.stringify(nestedKey)}:{` : '',\n [serializersSym]: serializers,\n [mixinSym]: mixin,\n [mixinMergeStrategySym]: mixinMergeStrategy,\n [chindingsSym]: chindings,\n [formattersSym]: allFormatters,\n [hooksSym]: hooks,\n silent: noop,\n onChild,\n [msgPrefixSym]: msgPrefix\n })\n\n Object.setPrototypeOf(instance, proto())\n\n genLsCache(instance)\n\n instance[setLevelSym](level)\n\n return instance\n}\n\nmodule.exports = pino\n\nmodule.exports.destination = (dest = process.stdout.fd) => {\n if (typeof dest === 'object') {\n dest.dest = normalizeDestFileDescriptor(dest.dest || process.stdout.fd)\n return buildSafeSonicBoom(dest)\n } else {\n return buildSafeSonicBoom({ dest: normalizeDestFileDescriptor(dest), minLength: 0 })\n }\n}\n\nmodule.exports.transport = require('./lib/transport')\nmodule.exports.multistream = require('./lib/multistream')\n\nmodule.exports.levels = mappings()\nmodule.exports.stdSerializers = serializers\nmodule.exports.stdTimeFunctions = Object.assign({}, time)\nmodule.exports.symbols = symbols\nmodule.exports.version = version\n\n// Enables default and name export with TypeScript and Babel\nmodule.exports.default = pino\nmodule.exports.pino = pino\n","import { pino } from 'pino';\nconst defaultOptions = {\n name: 'bb.js',\n useOnlyCustomLevels: false,\n customLevels: { verbose: 25 },\n};\nconst defaultLevel = parseLogLevel(process.env.LOG_LEVEL);\n// Options must be exposed so they can be provided to threads upon creation\n// This way we ensure all loggers are spawned with the same options\nexport let logOptions;\nlet logger;\nexport function initLogger({ level = defaultLevel, useStdErr = false } = { level: defaultLevel, useStdErr: false }) {\n if (logger) {\n return logger;\n }\n logOptions = { level, useStdErr };\n const transport = pino.transport({\n target: 'pino/file',\n options: { destination: useStdErr ? 2 : 1 },\n });\n logger = pino({ ...defaultOptions, level }, transport);\n}\nexport function createDebugLogger(name) {\n initLogger();\n const sublogger = logger.child({\n name,\n });\n return (msg) => {\n sublogger.debug(msg);\n };\n}\nfunction parseLogLevel(logLevel) {\n if (!logLevel) {\n return 'info';\n }\n const knownLogLevels = ['info', 'debug', 'warn', 'error', 'trace', 'silent', 'verbose'];\n const [defaultLogLevel] = logLevel.split(';');\n return knownLogLevels.indexOf(defaultLogLevel) !== -1 ? defaultLogLevel : 'info';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbG9nL25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwQyxNQUFNLGNBQWMsR0FBRztJQUNyQixJQUFJLEVBQUUsT0FBTztJQUNiLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtDQUM5QixDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFMUQsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsSUFBSSxVQUFrQyxDQUFDO0FBRTlDLElBQUksTUFBcUMsQ0FBQztBQUUxQyxNQUFNLFVBQVUsVUFBVSxDQUN4QixFQUFFLEtBQUssR0FBRyxZQUFZLEVBQUUsU0FBUyxHQUFHLEtBQUssS0FBaUIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7SUFFbkcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixNQUFNLEVBQUUsV0FBVztRQUNuQixPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtLQUM1QyxDQUFDLENBQUM7SUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxjQUFjLEVBQUUsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFZO0lBQzVDLFVBQVUsRUFBRSxDQUFDO0lBRWIsTUFBTSxTQUFTLEdBQUcsTUFBTyxDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJO0tBQ0wsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLEdBQVcsRUFBRSxFQUFFO1FBQ3JCLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLFFBQWlCO0lBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRyxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5QyxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUMsZUFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRSxlQUE2QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDL0csQ0FBQyJ9","import { NetCrs, NetGrumpkinCrs } from '../net_crs.js';\nimport { closeSync, mkdirSync, openSync, readFileSync, readSync, writeFileSync, createWriteStream } from 'fs';\nimport { stat } from 'fs/promises';\nimport { Readable } from 'stream';\nimport { homedir } from 'os';\nimport { finished } from 'stream/promises';\nimport { createDebugLogger } from '../../log/index.js';\nimport { join } from 'path';\n/**\n * Generic CRS finder utility class.\n */\nexport class Crs {\n constructor(numPoints, path, logger = createDebugLogger('crs')) {\n this.numPoints = numPoints;\n this.path = path;\n this.logger = logger;\n }\n static async new(numPoints, crsPath = process.env.CRS_PATH ?? join(homedir(), '.bb-crs'), logger = createDebugLogger('crs')) {\n const crs = new Crs(numPoints, crsPath, logger);\n await crs.init();\n return crs;\n }\n async init() {\n mkdirSync(this.path, { recursive: true });\n const g1FileSize = await stat(this.path + '/bn254_g1.dat')\n .then(stats => stats.size)\n .catch(() => 0);\n const g2FileSize = await stat(this.path + '/bn254_g2.dat')\n .then(stats => stats.size)\n .catch(() => 0);\n if (g1FileSize >= this.numPoints * 64 && g1FileSize % 64 == 0 && g2FileSize == 128) {\n this.logger(`Using cached CRS of size ${g1FileSize / 64}`);\n return;\n }\n this.logger(`Downloading CRS of size ${this.numPoints} into ${this.path}`);\n const crs = new NetCrs(this.numPoints);\n const [g1, g2] = await Promise.all([crs.streamG1Data(), crs.streamG2Data()]);\n await Promise.all([\n finished(Readable.fromWeb(g1).pipe(createWriteStream(this.path + '/bn254_g1.dat'))),\n finished(Readable.fromWeb(g2).pipe(createWriteStream(this.path + '/bn254_g2.dat'))),\n ]);\n }\n /**\n * G1 points data for prover key.\n * @returns The points data.\n */\n getG1Data() {\n // Ensure length > 0, otherwise we might read a huge file.\n // This is a backup.\n const length = Math.max(this.numPoints, 1) * 64;\n const fd = openSync(this.path + '/bn254_g1.dat', 'r');\n const buffer = new Uint8Array(length);\n readSync(fd, buffer, 0, length, 0);\n closeSync(fd);\n return buffer;\n }\n /**\n * G2 points data for verification key.\n * @returns The points data.\n */\n getG2Data() {\n return readFileSync(this.path + '/bn254_g2.dat');\n }\n}\n/**\n * Generic Grumpkin CRS finder utility class.\n */\nexport class GrumpkinCrs {\n constructor(numPoints, path, logger = createDebugLogger('crs')) {\n this.numPoints = numPoints;\n this.path = path;\n this.logger = logger;\n }\n static async new(numPoints, crsPath = process.env.CRS_PATH ?? join(homedir(), '.bb-crs'), logger = createDebugLogger('crs')) {\n const crs = new GrumpkinCrs(numPoints, crsPath, logger);\n await crs.init();\n return crs;\n }\n async init() {\n mkdirSync(this.path, { recursive: true });\n const g1FileSize = await stat(this.path + '/grumpkin_g1.flat.dat')\n .then(stats => stats.size)\n .catch(() => 0);\n if (g1FileSize >= this.numPoints * 64 && g1FileSize % 64 == 0) {\n this.logger(`Using cached Grumpkin CRS of size ${g1FileSize / 64}`);\n return;\n }\n this.logger(`Downloading Grumpkin CRS of size ${this.numPoints} into ${this.path}`);\n const crs = new NetGrumpkinCrs(this.numPoints);\n const stream = await crs.streamG1Data();\n await finished(Readable.fromWeb(stream).pipe(createWriteStream(this.path + '/grumpkin_g1.flat.dat')));\n writeFileSync(this.path + '/grumpkin_size', String(crs.numPoints));\n }\n /**\n * G1 points data for prover key.\n * @returns The points data.\n */\n getG1Data() {\n return readFileSync(this.path + '/grumpkin_g1.flat.dat');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY3JzL25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEdBQUc7SUFDZCxZQUNrQixTQUFpQixFQUNqQixJQUFZLEVBQ1gsU0FBZ0MsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBRnpELGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNYLFdBQU0sR0FBTixNQUFNLENBQWtEO0lBQ3hFLENBQUM7SUFFSixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FDZCxTQUFpQixFQUNqQixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUM1RCxTQUFnQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFFeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FB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","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Comlink = {}));\n})(this, (function (exports) { 'use strict';\n\n /**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n const proxyMarker = Symbol(\"Comlink.proxy\");\n const createEndpoint = Symbol(\"Comlink.endpoint\");\n const releaseProxy = Symbol(\"Comlink.releaseProxy\");\n const finalizer = Symbol(\"Comlink.finalizer\");\n const throwMarker = Symbol(\"Comlink.thrown\");\n const isObject = (val) => (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n /**\n * Internal transfer handle to handle objects marked to proxy.\n */\n const proxyTransferHandler = {\n canHandle: (val) => isObject(val) && val[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n };\n /**\n * Internal transfer handler to handle thrown exceptions.\n */\n const throwTransferHandler = {\n canHandle: (value) => isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n }\n else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(new Error(serialized.value.message), serialized.value);\n }\n throw serialized.value;\n },\n };\n /**\n * Allows customizing the serialization of certain values.\n */\n const transferHandlers = new Map([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n ]);\n function isAllowedOrigin(allowedOrigins, origin) {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n }\n function expose(obj, ep = globalThis, allowedOrigins = [\"*\"]) {\n ep.addEventListener(\"message\", function callback(ev) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = Object.assign({ path: [] }, ev.data);\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case \"GET\" /* MessageType.GET */:\n {\n returnValue = rawValue;\n }\n break;\n case \"SET\" /* MessageType.SET */:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case \"APPLY\" /* MessageType.APPLY */:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case \"CONSTRUCT\" /* MessageType.CONSTRUCT */:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case \"ENDPOINT\" /* MessageType.ENDPOINT */:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case \"RELEASE\" /* MessageType.RELEASE */:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n }\n catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n if (type === \"RELEASE\" /* MessageType.RELEASE */) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n });\n });\n if (ep.start) {\n ep.start();\n }\n }\n function isMessagePort(endpoint) {\n return endpoint.constructor.name === \"MessagePort\";\n }\n function closeEndPoint(endpoint) {\n if (isMessagePort(endpoint))\n endpoint.close();\n }\n function wrap(ep, target) {\n const pendingListeners = new Map();\n ep.addEventListener(\"message\", function handleMessage(ev) {\n const { data } = ev;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n try {\n resolver(data);\n }\n finally {\n pendingListeners.delete(data.id);\n }\n });\n return createProxy(ep, pendingListeners, [], target);\n }\n function throwIfProxyReleased(isReleased) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n }\n function releaseEndpoint(ep) {\n return requestResponseMessage(ep, new Map(), {\n type: \"RELEASE\" /* MessageType.RELEASE */,\n }).then(() => {\n closeEndPoint(ep);\n });\n }\n const proxyCounter = new WeakMap();\n const proxyFinalizers = \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\n function registerProxy(proxy, ep) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n }\n function unregisterProxy(proxy) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n }\n function createProxy(ep, pendingListeners, path = [], target = function () { }) {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n pendingListeners.clear();\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, pendingListeners, {\n type: \"GET\" /* MessageType.GET */,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, pendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"SET\" /* MessageType.SET */,\n path: [...path, prop].map((p) => p.toString()),\n value,\n }, transferables).then(fromWireValue);\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if (last === createEndpoint) {\n return requestResponseMessage(ep, pendingListeners, {\n type: \"ENDPOINT\" /* MessageType.ENDPOINT */,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, pendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"APPLY\" /* MessageType.APPLY */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(ep, pendingListeners, {\n type: \"CONSTRUCT\" /* MessageType.CONSTRUCT */,\n path: path.map((p) => p.toString()),\n argumentList,\n }, transferables).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy;\n }\n function myFlat(arr) {\n return Array.prototype.concat.apply([], arr);\n }\n function processArguments(argumentList) {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n }\n const transferCache = new WeakMap();\n function transfer(obj, transfers) {\n transferCache.set(obj, transfers);\n return obj;\n }\n function proxy(obj) {\n return Object.assign(obj, { [proxyMarker]: true });\n }\n function windowEndpoint(w, context = globalThis, targetOrigin = \"*\") {\n return {\n postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n }\n function toWireValue(value) {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: \"HANDLER\" /* WireValueType.HANDLER */,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: \"RAW\" /* WireValueType.RAW */,\n value,\n },\n transferCache.get(value) || [],\n ];\n }\n function fromWireValue(value) {\n switch (value.type) {\n case \"HANDLER\" /* WireValueType.HANDLER */:\n return transferHandlers.get(value.name).deserialize(value.value);\n case \"RAW\" /* WireValueType.RAW */:\n return value.value;\n }\n }\n function requestResponseMessage(ep, pendingListeners, msg, transfers) {\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n if (ep.start) {\n ep.start();\n }\n ep.postMessage(Object.assign({ id }, msg), transfers);\n });\n }\n function generateUUID() {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n }\n\n exports.createEndpoint = createEndpoint;\n exports.expose = expose;\n exports.finalizer = finalizer;\n exports.proxy = proxy;\n exports.proxyMarker = proxyMarker;\n exports.releaseProxy = releaseProxy;\n exports.transfer = transfer;\n exports.transferHandlers = transferHandlers;\n exports.windowEndpoint = windowEndpoint;\n exports.wrap = wrap;\n\n}));\n//# sourceMappingURL=comlink.js.map\n","export class BufferReader {\n constructor(buffer, offset = 0) {\n this.buffer = buffer;\n this.index = offset;\n }\n static asReader(bufferOrReader) {\n return bufferOrReader instanceof BufferReader ? bufferOrReader : new BufferReader(bufferOrReader);\n }\n readNumber() {\n const dataView = new DataView(this.buffer.buffer, this.buffer.byteOffset + this.index, 4);\n this.index += 4;\n return dataView.getUint32(0, false);\n }\n readBoolean() {\n this.index += 1;\n return Boolean(this.buffer.at(this.index - 1));\n }\n readBytes(n) {\n this.index += n;\n return this.buffer.slice(this.index - n, this.index);\n }\n readNumberVector() {\n return this.readVector({\n fromBuffer: (reader) => reader.readNumber(),\n });\n }\n readVector(itemDeserializer) {\n const size = this.readNumber();\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = itemDeserializer.fromBuffer(this);\n }\n return result;\n }\n readArray(size, itemDeserializer) {\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = itemDeserializer.fromBuffer(this);\n }\n return result;\n }\n readObject(deserializer) {\n return deserializer.fromBuffer(this);\n }\n peekBytes(n) {\n return this.buffer.subarray(this.index, n ? this.index + n : undefined);\n }\n readString() {\n return new TextDecoder().decode(this.readBuffer());\n }\n readBuffer() {\n const size = this.readNumber();\n return this.readBytes(size);\n }\n readMap(deserializer) {\n const numEntries = this.readNumber();\n const map = {};\n for (let i = 0; i < numEntries; i++) {\n const key = this.readString();\n const value = this.readObject(deserializer);\n map[key] = value;\n }\n return map;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyX3JlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJpYWxpemUvYnVmZmVyX3JlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sWUFBWTtJQUV2QixZQUNVLE1BQWtCLEVBQzFCLE1BQU0sR0FBRyxDQUFDO1FBREYsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUcxQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztJQUN0QixDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUF5QztRQUM5RCxPQUFPLGNBQWMsWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVNLFVBQVU7UUFDZixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDaEIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxTQUFTLENBQUMsQ0FBUztRQUN4QixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdB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","import { BufferReader } from './buffer_reader.js';\nexport function BoolDeserializer() {\n return {\n SIZE_IN_BYTES: 1,\n fromBuffer: (buf) => {\n const reader = BufferReader.asReader(buf);\n return reader.readBoolean();\n },\n };\n}\nexport function NumberDeserializer() {\n return {\n SIZE_IN_BYTES: 4,\n fromBuffer: (buf) => {\n const reader = BufferReader.asReader(buf);\n return reader.readNumber();\n },\n };\n}\nexport function VectorDeserializer(t) {\n return {\n fromBuffer: (buf) => {\n const reader = BufferReader.asReader(buf);\n return reader.readVector(t);\n },\n };\n}\nexport function BufferDeserializer() {\n return {\n fromBuffer: (buf) => {\n const reader = BufferReader.asReader(buf);\n return reader.readBuffer();\n },\n };\n}\nexport function StringDeserializer() {\n return {\n fromBuffer: (buf) => {\n const reader = BufferReader.asReader(buf);\n return reader.readString();\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0X3R5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VyaWFsaXplL291dHB1dF90eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9sRCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE9BQU87UUFDTCxhQUFhLEVBQUUsQ0FBQztRQUNoQixVQUFVLEVBQUUsQ0FBQyxHQUE4QixFQUFFLEVBQUU7WUFDN0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE9BQU87UUFDTCxhQUFhLEVBQUUsQ0FBQztRQUNoQixVQUFVLEVBQUUsQ0FBQyxHQUE4QixFQUFFLEVBQUU7WUFDN0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUksQ0FBZ0I7SUFDcEQsT0FBTztRQUNMLFVBQVUsRUFBRSxDQUFDLEdBQThCLEVBQUUsRUFBRTtZQUM3QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE9BQU87UUFDTCxVQUFVLEVBQUUsQ0FBQyxHQUE4QixFQUFFLEVBQUU7WUFDN0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE9BQU87UUFDTCxVQUFVLEVBQUUsQ0FBQyxHQUE4QixFQUFFLEVBQUU7WUFDN0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMifQ==","// Used when the data is to be sent exactly as is. i.e. no length prefix will be added.\n// This is useful for sending structured data that can be parsed-as-you-go, as opposed to just an array of bytes.\nexport class RawBuffer extends Uint8Array {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3X2J1ZmZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90eXBlcy9yYXdfYnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVGQUF1RjtBQUN2RixpSEFBaUg7QUFDakgsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUFVO0NBQUcifQ==","import { RawBuffer } from '../types/raw_buffer.js';\n// For serializing bool.\nexport function boolToBuffer(b) {\n const buf = new Uint8Array(1);\n buf[0] = b ? 1 : 0;\n return buf;\n}\n// For serializing numbers to 32 bit little-endian form.\nexport function numToUInt32LE(n, bufferSize = 4) {\n const buf = new Uint8Array(bufferSize);\n new DataView(buf.buffer).setUint32(buf.byteLength - 4, n, true);\n return buf;\n}\n// For serializing numbers to 32 bit big-endian form.\nexport function numToUInt32BE(n, bufferSize = 4) {\n const buf = new Uint8Array(bufferSize);\n new DataView(buf.buffer).setUint32(buf.byteLength - 4, n, false);\n return buf;\n}\n// For serializing signed numbers to 32 bit big-endian form.\nexport function numToInt32BE(n, bufferSize = 4) {\n const buf = new Uint8Array(bufferSize);\n new DataView(buf.buffer).setInt32(buf.byteLength - 4, n, false);\n return buf;\n}\n// For serializing numbers to 8 bit form.\nexport function numToUInt8(n) {\n const buf = new Uint8Array(1);\n buf[0] = n;\n return buf;\n}\nexport function concatenateUint8Arrays(arrayOfUint8Arrays) {\n const totalLength = arrayOfUint8Arrays.reduce((prev, curr) => prev + curr.length, 0);\n const result = new Uint8Array(totalLength);\n let length = 0;\n for (const array of arrayOfUint8Arrays) {\n result.set(array, length);\n length += array.length;\n }\n return result;\n}\nexport function uint8ArrayToHexString(uint8Array) {\n return uint8Array.reduce((accumulator, byte) => accumulator + byte.toString(16).padStart(2, '0'), '');\n}\n// For serializing a buffer as a vector.\nexport function serializeBufferToVector(buf) {\n return concatenateUint8Arrays([numToInt32BE(buf.length), buf]);\n}\nexport function serializeBigInt(n, width = 32) {\n const buf = new Uint8Array(width);\n for (let i = 0; i < width; i++) {\n buf[width - i - 1] = Number((n >> BigInt(i * 8)) & 0xffn);\n }\n return buf;\n}\nexport function deserializeBigInt(buf, offset = 0, width = 32) {\n let result = 0n;\n for (let i = 0; i < width; i++) {\n result = (result << BigInt(8)) | BigInt(buf[offset + i]);\n }\n return { elem: result, adv: width };\n}\nexport function serializeDate(date) {\n return serializeBigInt(BigInt(date.getTime()), 8);\n}\nexport function deserializeBufferFromVector(vector, offset = 0) {\n const length = new DataView(vector.buffer, vector.byteOffset + offset, 4).getUint32(0, false);\n const adv = 4 + length;\n const elem = vector.slice(offset + 4, offset + adv);\n return { elem, adv };\n}\nexport function deserializeBool(buf, offset = 0) {\n const adv = 1;\n const elem = buf[offset] !== 0;\n return { elem, adv };\n}\nexport function deserializeUInt32(buf, offset = 0) {\n const adv = 4;\n const elem = new DataView(buf.buffer, buf.byteOffset + offset, adv).getUint32(0, false);\n return { elem, adv };\n}\nexport function deserializeInt32(buf, offset = 0) {\n const adv = 4;\n const elem = new DataView(buf.buffer, buf.byteOffset + offset, adv).getInt32(0, false);\n return { elem, adv };\n}\nexport function deserializeField(buf, offset = 0) {\n const adv = 32;\n const elem = buf.slice(offset, offset + adv);\n return { elem, adv };\n}\n// For serializing an array of fixed length elements.\nexport function serializeBufferArrayToVector(arr) {\n return concatenateUint8Arrays([numToUInt32BE(arr.length), ...arr.flat()]);\n}\nexport function deserializeArrayFromVector(deserialize, vector, offset = 0) {\n let pos = offset;\n const size = new DataView(vector.buffer, vector.byteOffset + pos, 4).getUint32(0, false);\n pos += 4;\n const arr = new Array(size);\n for (let i = 0; i < size; ++i) {\n const { elem, adv } = deserialize(vector, pos);\n pos += adv;\n arr[i] = elem;\n }\n return { elem: arr, adv: pos - offset };\n}\n/**\n * Serializes a list of objects contiguously for calling into wasm.\n * @param objs - Objects to serialize.\n * @returns A buffer list with the concatenation of all fields.\n */\nexport function serializeBufferable(obj) {\n if (Array.isArray(obj)) {\n return serializeBufferArrayToVector(obj.map(serializeBufferable));\n }\n else if (obj instanceof RawBuffer) {\n return obj;\n }\n else if (obj instanceof Uint8Array) {\n return serializeBufferToVector(obj);\n }\n else if (typeof obj === 'boolean') {\n return boolToBuffer(obj);\n }\n else if (typeof obj === 'number') {\n return numToUInt32BE(obj);\n }\n else if (typeof obj === 'bigint') {\n return serializeBigInt(obj);\n }\n else if (typeof obj === 'string') {\n return serializeBufferToVector(new TextEncoder().encode(obj));\n }\n else {\n return obj.toBuffer();\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcmlhbGl6ZS9zZXJpYWxpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5ELHdCQUF3QjtBQUN4QixNQUFNLFVBQVUsWUFBWSxDQUFDLENBQVU7SUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBUyxFQUFFLFVBQVUsR0FBRyxDQUFDO0lBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVMsRUFBRSxVQUFVLEdBQUcsQ0FBQztJQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCw0REFBNEQ7QUFD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","import { BufferReader } from '../serialize/index.js';\n/**\n * Holds an opaque pointer into WASM memory.\n * Currently only 4 bytes, but could grow to 8 bytes with wasm64.\n */\nexport class Ptr {\n constructor(value) {\n this.value = value;\n }\n static fromBuffer(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new this(reader.readBytes(this.SIZE_IN_BYTES));\n }\n toBuffer() {\n return this.value;\n }\n}\nPtr.SIZE_IN_BYTES = 4;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHRyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3B0ci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLEdBQUc7SUFHZCxZQUE0QixLQUFpQjtRQUFqQixVQUFLLEdBQUwsS0FBSyxDQUFZO0lBQUcsQ0FBQztJQUVqRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQWlDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7O0FBWE0saUJBQWEsR0FBRyxDQUFDLENBQUMifQ==","import { randomBytes as cryptoRandomBytes } from 'crypto';\nexport function randomBytes(len) {\n return new Uint8Array(cryptoRandomBytes(len));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFuZG9tL25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsSUFBSSxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUxRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDckMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUMifQ==","/**\n * Convert a 32-byte BE Buffer to a BigInt.\n */\nexport function buffer32BytesToBigIntBE(buf) {\n return ((buf.readBigUInt64BE(0) << 192n) +\n (buf.readBigUInt64BE(8) << 128n) +\n (buf.readBigUInt64BE(16) << 64n) +\n buf.readBigUInt64BE(24));\n}\n/**\n * Convert a BE Uint8Array to a BigInt.\n */\nexport function uint8ArrayToBigIntBE(bytes) {\n const buffer = Buffer.from(bytes);\n return buffer32BytesToBigIntBE(buffer);\n}\n/**\n * Convert a BigInt to a 32-byte BE Buffer.\n */\nexport function bigIntToBufferBE(value, byteLength = 32) {\n if (byteLength != 32) {\n throw new Error(`Only 32 bytes supported for conversion from bigint to buffer, attempted byte length: ${byteLength}`);\n }\n const buf = Buffer.alloc(byteLength);\n buf.writeBigUInt64BE(value >> 192n, 0);\n buf.writeBigUInt64BE((value >> 128n) & 0xffffffffffffffffn, 8);\n buf.writeBigUInt64BE((value >> 64n) & 0xffffffffffffffffn, 16);\n buf.writeBigUInt64BE(value & 0xffffffffffffffffn, 24);\n return buf;\n}\n/**\n * Convert a BigInt to a 32-byte BE Uint8Array.\n */\nexport function bigIntToUint8ArrayBE(value, byteLength = 32) {\n return new Uint8Array(bigIntToBufferBE(value, byteLength));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlnaW50LWFycmF5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEdBQVc7SUFDakQsT0FBTyxDQUNMLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDaEMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNoQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQ3hCLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBaUI7SUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxPQUFPLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsVUFBVSxHQUFHLEVBQUU7SUFDN0QsSUFBSSxVQUFVLElBQUksRUFBRSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYix3RkFBd0YsVUFBVSxFQUFFLENBQ3JHLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYSxFQUFFLFVBQVUsR0FBRyxFQUFFO0lBQ2pFLE9BQU8sSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQyJ9","var _a, _b;\nimport { randomBytes } from '../random/index.js';\nimport { buffer32BytesToBigIntBE, uint8ArrayToBigIntBE, bigIntToBufferBE, bigIntToUint8ArrayBE, } from '../bigint-array/index.js';\nimport { BufferReader, uint8ArrayToHexString } from '../serialize/index.js';\n// TODO(#4189): Replace with implementation in yarn-project/foundation/src/fields/fields.ts\n/**\n * Fr field class.\n * @dev This class is used to represent elements of BN254 scalar field or elements in the base field of Grumpkin.\n * (Grumpkin's scalar field corresponds to BN254's base field and vice versa.)\n */\nexport class Fr {\n constructor(value) {\n // We convert buffer value to bigint to be able to check it fits within modulus\n const valueBigInt = typeof value === 'bigint'\n ? value\n : value instanceof Buffer\n ? buffer32BytesToBigIntBE(value)\n : uint8ArrayToBigIntBE(value);\n if (valueBigInt > _a.MAX_VALUE) {\n throw new Error(`Value 0x${valueBigInt.toString(16)} is greater or equal to field modulus.`);\n }\n this.value =\n typeof value === 'bigint' ? bigIntToUint8ArrayBE(value) : value instanceof Buffer ? new Uint8Array(value) : value;\n }\n static random() {\n const r = uint8ArrayToBigIntBE(randomBytes(64)) % _a.MODULUS;\n return new this(r);\n }\n static fromBuffer(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new this(reader.readBytes(this.SIZE_IN_BYTES));\n }\n static fromBufferReduce(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new this(uint8ArrayToBigIntBE(reader.readBytes(this.SIZE_IN_BYTES)) % _a.MODULUS);\n }\n static fromString(str) {\n return this.fromBuffer(Buffer.from(str.replace(/^0x/i, ''), 'hex'));\n }\n toBuffer() {\n return this.value;\n }\n toString() {\n return '0x' + uint8ArrayToHexString(this.toBuffer());\n }\n equals(rhs) {\n return this.value.every((v, i) => v === rhs.value[i]);\n }\n isZero() {\n return this.value.every(v => v === 0);\n }\n}\n_a = Fr;\nFr.ZERO = new _a(0n);\nFr.MODULUS = 0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001n;\nFr.MAX_VALUE = _a.MODULUS - 1n;\nFr.SIZE_IN_BYTES = 32;\n/**\n * Fq field class.\n * @dev This class is used to represent elements of BN254 base field or elements in the scalar field of Grumpkin.\n * (Grumpkin's scalar field corresponds to BN254's base field and vice versa.)\n */\nexport class Fq {\n constructor(value) {\n this.value = value;\n if (value > _b.MAX_VALUE) {\n throw new Error(`Fq out of range ${value}.`);\n }\n }\n static random() {\n const r = uint8ArrayToBigIntBE(randomBytes(64)) % _b.MODULUS;\n return new this(r);\n }\n static fromBuffer(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new this(uint8ArrayToBigIntBE(reader.readBytes(this.SIZE_IN_BYTES)));\n }\n static fromBufferReduce(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new this(uint8ArrayToBigIntBE(reader.readBytes(this.SIZE_IN_BYTES)) % Fr.MODULUS);\n }\n static fromString(str) {\n return this.fromBuffer(Buffer.from(str.replace(/^0x/i, ''), 'hex'));\n }\n toBuffer() {\n return bigIntToBufferBE(this.value, _b.SIZE_IN_BYTES);\n }\n toString() {\n return '0x' + this.value.toString(16);\n }\n equals(rhs) {\n return this.value === rhs.value;\n }\n isZero() {\n return this.value === 0n;\n }\n}\n_b = Fq;\nFq.MODULUS = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47n;\nFq.MAX_VALUE = _b.MODULUS - 1n;\nFq.SIZE_IN_BYTES = 32;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL2ZpZWxkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixvQkFBb0IsR0FDckIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUUsMkZBQTJGO0FBQzNGOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sRUFBRTtJQU9iLFlBQVksS0FBbUM7UUFDN0MsK0VBQStFO1FBQy9FLE1BQU0sV0FBVyxHQUNmLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDdkIsQ0FBQyxDQUFDLEtBQUs7WUFDUCxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU07Z0JBQ3ZCLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLO1lBQ1IsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0SCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU07UUFDWCxNQUFN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","import { Fr } from './index.js';\nimport { BufferReader } from '../serialize/buffer_reader.js';\nexport class Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n static random() {\n // TODO: This is not a point on the curve!\n return new Point(Fr.random(), Fr.random());\n }\n static fromBuffer(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new this(Fr.fromBuffer(reader), Fr.fromBuffer(reader));\n }\n static fromString(address) {\n return Point.fromBuffer(Buffer.from(address.replace(/^0x/i, ''), 'hex'));\n }\n toBuffer() {\n return Buffer.concat([this.x.toBuffer(), this.y.toBuffer()]);\n }\n toString() {\n return '0x' + this.toBuffer().toString('hex');\n }\n equals(rhs) {\n return this.x.equals(rhs.x) && this.y.equals(rhs.y);\n }\n}\nPoint.SIZE_IN_BYTES = 64;\nPoint.EMPTY = new Point(Fr.ZERO, Fr.ZERO);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFN0QsTUFBTSxPQUFPLEtBQUs7SUFJaEIsWUFDa0IsQ0FBSyxFQUNMLENBQUs7UUFETCxNQUFDLEdBQUQsQ0FBQyxDQUFJO1FBQ0wsTUFBQyxHQUFELENBQUMsQ0FBSTtJQUNwQixDQUFDO0lBRUosTUFBTSxDQUFDLE1BQU07UUFDWCwwQ0FBMEM7UUFDMUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBaUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQWU7UUFDL0IsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDOztBQWhDTSxtQkFBYSxHQUFHLEVBQUUsQ0FBQztBQUNuQixXQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMifQ==","import { randomBytes } from '../random/index.js';\nimport { BufferReader } from '../serialize/index.js';\nexport class Buffer32 {\n constructor(buffer) {\n this.buffer = buffer;\n }\n static fromBuffer(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new Buffer32(reader.readBytes(this.SIZE_IN_BYTES));\n }\n static random() {\n return new Buffer32(randomBytes(this.SIZE_IN_BYTES));\n }\n toBuffer() {\n return this.buffer;\n }\n}\nBuffer32.SIZE_IN_BYTES = 32;\nexport class Buffer64 {\n constructor(buffer) {\n this.buffer = buffer;\n }\n static fromBuffer(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new Buffer64(reader.readBytes(this.SIZE_IN_BYTES));\n }\n static random() {\n return new Buffer64(randomBytes(this.SIZE_IN_BYTES));\n }\n toBuffer() {\n return this.buffer;\n }\n}\nBuffer64.SIZE_IN_BYTES = 64;\nexport class Buffer128 {\n constructor(buffer) {\n this.buffer = buffer;\n }\n static fromBuffer(buffer) {\n const reader = BufferReader.asReader(buffer);\n return new Buffer128(reader.readBytes(this.SIZE_IN_BYTES));\n }\n static random() {\n return new Buffer128(randomBytes(this.SIZE_IN_BYTES));\n }\n toBuffer() {\n return this.buffer;\n }\n}\nBuffer128.SIZE_IN_BYTES = 128;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRfc2l6ZV9idWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvZml4ZWRfc2l6ZV9idWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxNQUFNLE9BQU8sUUFBUTtJQUduQixZQUE0QixNQUFrQjtRQUFsQixXQUFNLEdBQU4sTUFBTSxDQUFZO0lBQUcsQ0FBQztJQUVsRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQWlDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTTtRQUNYLE9BQU8sSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7O0FBZk0sc0JBQWEsR0FBRyxFQUFFLENBQUM7QUFrQjVCLE1BQU0sT0FBTyxRQUFRO0lBR25CLFlBQTRCLE1BQWtCO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7SUFBRyxDQUFDO0lBRWxELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBaUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNO1FBQ1gsT0FBTyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7QUFmTSxzQkFBYSxHQUFHLEVBQUUsQ0FBQztBQWtCNUIsTUFBTSxPQUFPLFNBQVM7SUFHcEIsWUFBNEIsTUFBa0I7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtJQUFHLENBQUM7SUFFbEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFpQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU07UUFDWCxPQUFPLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDOztBQWZNLHVCQUFhLEdBQUcsR0FBRyxDQUFDIn0=","import { BufferDeserializer, NumberDeserializer, VectorDeserializer, BoolDeserializer, StringDeserializer, serializeBufferable, } from '../serialize/index.js';\nimport { Fr, Point, Buffer32 } from '../types/index.js';\nexport class BarretenbergApi {\n constructor(wasm) {\n this.wasm = wasm;\n }\n async pedersenCommit(inputsBuffer, ctxIndex) {\n const inArgs = [inputsBuffer, ctxIndex].map(serializeBufferable);\n const outTypes = [Point];\n const result = await this.wasm.callWasmExport('pedersen_commit', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async pedersenHash(inputsBuffer, hashIndex) {\n const inArgs = [inputsBuffer, hashIndex].map(serializeBufferable);\n const outTypes = [Fr];\n const result = await this.wasm.callWasmExport('pedersen_hash', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async pedersenHashes(inputsBuffer, hashIndex) {\n const inArgs = [inputsBuffer, hashIndex].map(serializeBufferable);\n const outTypes = [Fr];\n const result = await this.wasm.callWasmExport('pedersen_hashes', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async pedersenHashBuffer(inputBuffer, hashIndex) {\n const inArgs = [inputBuffer, hashIndex].map(serializeBufferable);\n const outTypes = [Fr];\n const result = await this.wasm.callWasmExport('pedersen_hash_buffer', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async poseidon2Hash(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [Fr];\n const result = await this.wasm.callWasmExport('poseidon2_hash', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async poseidon2Hashes(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [Fr];\n const result = await this.wasm.callWasmExport('poseidon2_hashes', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async poseidon2Permutation(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = await this.wasm.callWasmExport('poseidon2_permutation', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async poseidon2HashAccumulate(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [Fr];\n const result = await this.wasm.callWasmExport('poseidon2_hash_accumulate', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async blake2s(data) {\n const inArgs = [data].map(serializeBufferable);\n const outTypes = [Buffer32];\n const result = await this.wasm.callWasmExport('blake2s', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async blake2sToField(data) {\n const inArgs = [data].map(serializeBufferable);\n const outTypes = [Fr];\n const result = await this.wasm.callWasmExport('blake2s_to_field_', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async aesEncryptBufferCbc(input, iv, key, length) {\n const inArgs = [input, iv, key, length].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('aes_encrypt_buffer_cbc', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async aesDecryptBufferCbc(input, iv, key, length) {\n const inArgs = [input, iv, key, length].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('aes_decrypt_buffer_cbc', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async srsInitSrs(pointsBuf, numPoints, g2PointBuf) {\n const inArgs = [pointsBuf, numPoints, g2PointBuf].map(serializeBufferable);\n const outTypes = [];\n const result = await this.wasm.callWasmExport('srs_init_srs', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n async srsInitGrumpkinSrs(pointsBuf, numPoints) {\n const inArgs = [pointsBuf, numPoints].map(serializeBufferable);\n const outTypes = [];\n const result = await this.wasm.callWasmExport('srs_init_grumpkin_srs', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n async testThreads(threads, iterations) {\n const inArgs = [threads, iterations].map(serializeBufferable);\n const outTypes = [NumberDeserializer()];\n const result = await this.wasm.callWasmExport('test_threads', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async commonInitSlabAllocator(circuitSize) {\n const inArgs = [circuitSize].map(serializeBufferable);\n const outTypes = [];\n const result = await this.wasm.callWasmExport('common_init_slab_allocator', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n async acirGetCircuitSizes(constraintSystemBuf, recursive, honkRecursion) {\n const inArgs = [constraintSystemBuf, recursive, honkRecursion].map(serializeBufferable);\n const outTypes = [NumberDeserializer(), NumberDeserializer()];\n const result = await this.wasm.callWasmExport('acir_get_circuit_sizes', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out;\n }\n async acirProveAndVerifyUltraHonk(constraintSystemBuf, witnessBuf) {\n const inArgs = [constraintSystemBuf, witnessBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_and_verify_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirProveAndVerifyMegaHonk(constraintSystemBuf, witnessBuf) {\n const inArgs = [constraintSystemBuf, witnessBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_and_verify_mega_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirProveAztecClient(ivcInputsBuf) {\n const inArgs = [ivcInputsBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer(), BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_aztec_client', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out;\n }\n async acirVerifyAztecClient(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_verify_aztec_client', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirLoadVerificationKey(acirComposerPtr, vkBuf) {\n const inArgs = [acirComposerPtr, vkBuf].map(serializeBufferable);\n const outTypes = [];\n const result = await this.wasm.callWasmExport('acir_load_verification_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n async acirInitVerificationKey(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [];\n const result = await this.wasm.callWasmExport('acir_init_verification_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n async acirGetVerificationKey(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_get_verification_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirGetProvingKey(acirComposerPtr, acirVec, recursive) {\n const inArgs = [acirComposerPtr, acirVec, recursive].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_get_proving_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVerifyProof(acirComposerPtr, proofBuf) {\n const inArgs = [acirComposerPtr, proofBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_verify_proof', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirGetSolidityVerifier(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [StringDeserializer()];\n const result = await this.wasm.callWasmExport('acir_get_solidity_verifier', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirHonkSolidityVerifier(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [StringDeserializer()];\n const result = await this.wasm.callWasmExport('acir_honk_solidity_verifier', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirSerializeProofIntoFields(acirComposerPtr, proofBuf, numInnerPublicInputs) {\n const inArgs = [acirComposerPtr, proofBuf, numInnerPublicInputs].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = await this.wasm.callWasmExport('acir_serialize_proof_into_fields', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirSerializeVerificationKeyIntoFields(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr), Fr];\n const result = await this.wasm.callWasmExport('acir_serialize_verification_key_into_fields', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out;\n }\n async acirProveUltraZKHonk(acirVec, witnessVec, vkBuf) {\n const inArgs = [acirVec, witnessVec, vkBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_ultra_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirProveUltraKeccakHonk(acirVec, witnessVec, vkBuf) {\n const inArgs = [acirVec, witnessVec, vkBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_ultra_keccak_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirProveUltraKeccakZkHonk(acirVec, witnessVec, vkBuf) {\n const inArgs = [acirVec, witnessVec, vkBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_ultra_keccak_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirProveUltraStarknetHonk(acirVec, witnessVec, vkBuf) {\n const inArgs = [acirVec, witnessVec, vkBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_ultra_starknet_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirProveUltraStarknetZkHonk(acirVec, witnessVec, vkBuf) {\n const inArgs = [acirVec, witnessVec, vkBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_prove_ultra_starknet_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVerifyUltraZKHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_verify_ultra_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVerifyUltraKeccakHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_verify_ultra_keccak_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVerifyUltraKeccakZkHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_verify_ultra_keccak_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVerifyUltraStarknetHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_verify_ultra_starknet_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVerifyUltraStarknetZkHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = await this.wasm.callWasmExport('acir_verify_ultra_starknet_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirWriteVkUltraHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_write_vk_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirWriteVkUltraKeccakHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_write_vk_ultra_keccak_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirWriteVkUltraKeccakZkHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_write_vk_ultra_keccak_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirWriteVkUltraStarknetHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_write_vk_ultra_starknet_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirWriteVkUltraStarknetZkHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_write_vk_ultra_starknet_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirProofAsFieldsUltraHonk(proofBuf) {\n const inArgs = [proofBuf].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = await this.wasm.callWasmExport('acir_proof_as_fields_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVkAsFieldsUltraHonk(vkBuf) {\n const inArgs = [vkBuf].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = await this.wasm.callWasmExport('acir_vk_as_fields_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirVkAsFieldsMegaHonk(vkBuf) {\n const inArgs = [vkBuf].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = await this.wasm.callWasmExport('acir_vk_as_fields_mega_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n async acirGatesAztecClient(ivcInputsBuf) {\n const inArgs = [ivcInputsBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = await this.wasm.callWasmExport('acir_gates_aztec_client', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n}\nexport class BarretenbergApiSync {\n constructor(wasm) {\n this.wasm = wasm;\n }\n pedersenCommit(inputsBuffer, ctxIndex) {\n const inArgs = [inputsBuffer, ctxIndex].map(serializeBufferable);\n const outTypes = [Point];\n const result = this.wasm.callWasmExport('pedersen_commit', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n pedersenHash(inputsBuffer, hashIndex) {\n const inArgs = [inputsBuffer, hashIndex].map(serializeBufferable);\n const outTypes = [Fr];\n const result = this.wasm.callWasmExport('pedersen_hash', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n pedersenHashes(inputsBuffer, hashIndex) {\n const inArgs = [inputsBuffer, hashIndex].map(serializeBufferable);\n const outTypes = [Fr];\n const result = this.wasm.callWasmExport('pedersen_hashes', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n pedersenHashBuffer(inputBuffer, hashIndex) {\n const inArgs = [inputBuffer, hashIndex].map(serializeBufferable);\n const outTypes = [Fr];\n const result = this.wasm.callWasmExport('pedersen_hash_buffer', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n poseidon2Hash(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [Fr];\n const result = this.wasm.callWasmExport('poseidon2_hash', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n poseidon2Hashes(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [Fr];\n const result = this.wasm.callWasmExport('poseidon2_hashes', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n poseidon2Permutation(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = this.wasm.callWasmExport('poseidon2_permutation', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n poseidon2HashAccumulate(inputsBuffer) {\n const inArgs = [inputsBuffer].map(serializeBufferable);\n const outTypes = [Fr];\n const result = this.wasm.callWasmExport('poseidon2_hash_accumulate', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n blake2s(data) {\n const inArgs = [data].map(serializeBufferable);\n const outTypes = [Buffer32];\n const result = this.wasm.callWasmExport('blake2s', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n blake2sToField(data) {\n const inArgs = [data].map(serializeBufferable);\n const outTypes = [Fr];\n const result = this.wasm.callWasmExport('blake2s_to_field_', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n aesEncryptBufferCbc(input, iv, key, length) {\n const inArgs = [input, iv, key, length].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('aes_encrypt_buffer_cbc', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n aesDecryptBufferCbc(input, iv, key, length) {\n const inArgs = [input, iv, key, length].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('aes_decrypt_buffer_cbc', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n srsInitSrs(pointsBuf, numPoints, g2PointBuf) {\n const inArgs = [pointsBuf, numPoints, g2PointBuf].map(serializeBufferable);\n const outTypes = [];\n const result = this.wasm.callWasmExport('srs_init_srs', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n srsInitGrumpkinSrs(pointsBuf, numPoints) {\n const inArgs = [pointsBuf, numPoints].map(serializeBufferable);\n const outTypes = [];\n const result = this.wasm.callWasmExport('srs_init_grumpkin_srs', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n testThreads(threads, iterations) {\n const inArgs = [threads, iterations].map(serializeBufferable);\n const outTypes = [NumberDeserializer()];\n const result = this.wasm.callWasmExport('test_threads', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n commonInitSlabAllocator(circuitSize) {\n const inArgs = [circuitSize].map(serializeBufferable);\n const outTypes = [];\n const result = this.wasm.callWasmExport('common_init_slab_allocator', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n acirGetCircuitSizes(constraintSystemBuf, recursive, honkRecursion) {\n const inArgs = [constraintSystemBuf, recursive, honkRecursion].map(serializeBufferable);\n const outTypes = [NumberDeserializer(), NumberDeserializer()];\n const result = this.wasm.callWasmExport('acir_get_circuit_sizes', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out;\n }\n acirProveAndVerifyUltraHonk(constraintSystemBuf, witnessBuf) {\n const inArgs = [constraintSystemBuf, witnessBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_and_verify_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirProveAndVerifyMegaHonk(constraintSystemBuf, witnessBuf) {\n const inArgs = [constraintSystemBuf, witnessBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_and_verify_mega_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirProveAztecClient(ivcInputsBuf) {\n const inArgs = [ivcInputsBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer(), BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_aztec_client', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out;\n }\n acirVerifyAztecClient(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_verify_aztec_client', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirLoadVerificationKey(acirComposerPtr, vkBuf) {\n const inArgs = [acirComposerPtr, vkBuf].map(serializeBufferable);\n const outTypes = [];\n const result = this.wasm.callWasmExport('acir_load_verification_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n acirInitVerificationKey(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [];\n const result = this.wasm.callWasmExport('acir_init_verification_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return;\n }\n acirGetVerificationKey(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_get_verification_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirGetProvingKey(acirComposerPtr, acirVec, recursive) {\n const inArgs = [acirComposerPtr, acirVec, recursive].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_get_proving_key', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVerifyProof(acirComposerPtr, proofBuf) {\n const inArgs = [acirComposerPtr, proofBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_verify_proof', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirGetSolidityVerifier(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [StringDeserializer()];\n const result = this.wasm.callWasmExport('acir_get_solidity_verifier', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirHonkSolidityVerifier(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [StringDeserializer()];\n const result = this.wasm.callWasmExport('acir_honk_solidity_verifier', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirSerializeProofIntoFields(acirComposerPtr, proofBuf, numInnerPublicInputs) {\n const inArgs = [acirComposerPtr, proofBuf, numInnerPublicInputs].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = this.wasm.callWasmExport('acir_serialize_proof_into_fields', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirSerializeVerificationKeyIntoFields(acirComposerPtr) {\n const inArgs = [acirComposerPtr].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr), Fr];\n const result = this.wasm.callWasmExport('acir_serialize_verification_key_into_fields', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out;\n }\n acirProveUltraHonk(acirVec, witnessVec) {\n const inArgs = [acirVec, witnessVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirProveUltraKeccakHonk(acirVec, witnessVec) {\n const inArgs = [acirVec, witnessVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_ultra_keccak_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirProveUltraKeccakZkHonk(acirVec, witnessVec) {\n const inArgs = [acirVec, witnessVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_ultra_keccak_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirProveUltraStarknetHonk(acirVec, witnessVec) {\n const inArgs = [acirVec, witnessVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_ultra_starknet_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirProveUltraStarknetZkHonk(acirVec, witnessVec) {\n const inArgs = [acirVec, witnessVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_prove_ultra_starknet_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVerifyUltraHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_verify_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVerifyUltraKeccakHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_verify_ultra_keccak_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVerifyUltraKeccakZkHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_verify_ultra_keccak_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVerifyUltraStarknetHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_verify_ultra_starknet_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVerifyUltraStarknetZkHonk(proofBuf, vkBuf) {\n const inArgs = [proofBuf, vkBuf].map(serializeBufferable);\n const outTypes = [BoolDeserializer()];\n const result = this.wasm.callWasmExport('acir_verify_ultra_starknet_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirWriteVkUltraHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_write_vk_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirWriteVkUltraKeccakHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_write_vk_ultra_keccak_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirWriteVkUltraKeccakZkHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_write_vk_ultra_keccak_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirWriteVkUltraStarknetHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_write_vk_ultra_starknet_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirWriteVkUltraStarknetZkHonk(acirVec) {\n const inArgs = [acirVec].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_write_vk_ultra_starknet_zk_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirProofAsFieldsUltraHonk(proofBuf) {\n const inArgs = [proofBuf].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = this.wasm.callWasmExport('acir_proof_as_fields_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVkAsFieldsUltraHonk(vkBuf) {\n const inArgs = [vkBuf].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = this.wasm.callWasmExport('acir_vk_as_fields_ultra_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirVkAsFieldsMegaHonk(vkBuf) {\n const inArgs = [vkBuf].map(serializeBufferable);\n const outTypes = [VectorDeserializer(Fr)];\n const result = this.wasm.callWasmExport('acir_vk_as_fields_mega_honk', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n acirGatesAztecClient(ivcInputsBuf) {\n const inArgs = [ivcInputsBuf].map(serializeBufferable);\n const outTypes = [BufferDeserializer()];\n const result = this.wasm.callWasmExport('acir_gates_aztec_client', inArgs, outTypes.map(t => t.SIZE_IN_BYTES));\n const out = result.map((r, i) => outTypes[i].fromBuffer(r));\n return out[0];\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX2FwaS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixtQkFBbUIsR0FFcEIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUU3RCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUFzQixJQUFnQztRQUFoQyxTQUFJLEdBQUosSUFBSSxDQUE0QjtJQUFHLENBQUM7SUFFMUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFrQixFQUFFLFFBQWdCO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQzNDLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FDbkMsQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBa0IsRUFBRSxT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","import { Worker } from 'worker_threads';\nimport { dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { logOptions } from '../../../../log/index.js';\nfunction getCurrentDir() {\n if (typeof __dirname !== 'undefined') {\n return __dirname;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return dirname(fileURLToPath(import.meta.url));\n }\n}\nexport function createMainWorker() {\n const __dirname = getCurrentDir();\n const worker = new Worker(__dirname + `/main.worker.js`);\n worker.postMessage({ log: logOptions });\n return Promise.resolve(worker);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vYmFycmV0ZW5iZXJnX3dhc21fbWFpbi9mYWN0b3J5L25vZGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEQsU0FBUyxhQUFhO0lBQ3BCLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDckMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztTQUFNLENBQUM7UUFDTiw2REFBNkQ7UUFDN0QsYUFBYTtRQUNiLE9BQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCO0lBQzlCLE1BQU0sU0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsQ0FBQyJ9","export function nodeEndpoint(nep) {\n const listeners = new WeakMap();\n return {\n postMessage: nep.postMessage.bind(nep),\n addEventListener: (_, eh) => {\n const l = (data) => {\n if ('handleEvent' in eh) {\n eh.handleEvent({ data });\n }\n else {\n eh({ data });\n }\n };\n nep.on('message', l);\n listeners.set(eh, l);\n },\n removeEventListener: (_, eh) => {\n const l = listeners.get(eh);\n if (!l) {\n return;\n }\n nep.off('message', l);\n listeners.delete(eh);\n },\n start: nep.start && nep.start.bind(nep),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9lbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9iYXJyZXRlbmJlcmdfd2FzbS9oZWxwZXJzL25vZGUvbm9kZV9lbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQWlCO0lBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDaEMsT0FBTztRQUNMLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDdEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBTyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxhQUFhLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3hCLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELG1CQUFtQixFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQU8sRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLE9BQU87WUFDVCxDQUFDO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0tBQ3hDLENBQUM7QUFDSixDQUFDIn0=","import os from 'os';\nimport { wrap } from 'comlink';\nimport { nodeEndpoint } from './node_endpoint.js';\nimport { writeSync } from 'fs';\nexport function getSharedMemoryAvailable() {\n return true;\n}\n/**\n * Comlink allows you to produce a Proxy to the worker, enabling you to call methods as if it were a normal class.\n * Note we give it the type information it needs so the returned Proxy object looks like that type.\n * Node has a different implementation, needing this nodeEndpoint wrapper, hence this function exists here.\n */\nexport function getRemoteBarretenbergWasm(worker) {\n return wrap(nodeEndpoint(worker));\n}\n/**\n * Returns number of cpus as reported by the system, unless overriden by HARDWARE_CONCURRENCY env var.\n */\nexport function getNumCpu() {\n return +process.env.HARDWARE_CONCURRENCY || os.cpus().length;\n}\n/**\n * In node, the message passing is different to the browser. When using 'debug' in the browser, we seemingly always\n * get our logs, but in node it looks like it's dependent on the chain of workers from child to main thread be\n * unblocked. If one of our threads aborts, we can't see it as the parent is blocked waiting on threads to join.\n * To work around this in node, threads will by default write directly to stdout.\n */\nexport function threadLogger() {\n return (msg) => {\n writeSync(1, msg + '\\n');\n };\n}\nexport function killSelf() {\n // Extordinarily hard process termination. Due to how parent threads block on child threads etc, even process.exit\n // doesn't seem to be able to abort the process. The following does.\n process.kill(process.pid);\n throw new Error();\n}\nexport function getAvailableThreads(logger) {\n try {\n return os.cpus().length;\n }\n catch (e) {\n logger(`Could not detect environment to query number of threads. Falling back to one thread. Error: ${e.message ?? e}`);\n return 1;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vaGVscGVycy9ub2RlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRS9CLE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBSSxNQUFjO0lBQ3pELE9BQU8sSUFBSSxDQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFxQixJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDaEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVk7SUFDMUIsT0FBTyxDQUFDLEdBQVcsRUFBRSxFQUFFO1FBQ3JCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUTtJQUN0QixrSEFBa0g7SUFDbEgsb0VBQW9FO0lBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE1BQTZCO0lBQy9ELElBQUksQ0FBQztRQUNILE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQ0osK0ZBQStGLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQ2hILENBQUM7UUFDRixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7QUFDSCxDQUFDIn0=","import { Worker } from 'worker_threads';\nimport { dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport { logOptions } from '../../../../log/index.js';\nfunction getCurrentDir() {\n if (typeof __dirname !== 'undefined') {\n return __dirname;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return dirname(fileURLToPath(import.meta.url));\n }\n}\nexport function createThreadWorker() {\n const __dirname = getCurrentDir();\n const worker = new Worker(__dirname + `/thread.worker.js`);\n worker.postMessage({ log: logOptions });\n return Promise.resolve(worker);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vYmFycmV0ZW5iZXJnX3dhc21fdGhyZWFkL2ZhY3Rvcnkvbm9kZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RCxTQUFTLGFBQWE7SUFDcEIsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO1NBQU0sQ0FBQztRQUNOLDZEQUE2RDtRQUM3RCxhQUFhO1FBQ2IsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxTQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDLENBQUM7SUFDM0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDIn0=","import { createDebugLogger } from '../../log/index.js';\nimport { randomBytes } from '../../random/index.js';\n/**\n * Base implementation of BarretenbergWasm.\n * Contains code that is common to the \"main thread\" implementation and the \"child thread\" implementation.\n */\nexport class BarretenbergWasmBase {\n constructor() {\n this.memStore = {};\n this.logger = createDebugLogger('bb_wasm_base');\n }\n getImportObj(memory) {\n /* eslint-disable camelcase */\n const importObj = {\n // We need to implement a part of the wasi api:\n // https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md\n // We literally only need to support random_get, everything else is noop implementated in barretenberg.wasm.\n wasi_snapshot_preview1: {\n random_get: (out, length) => {\n out = out >>> 0;\n const randomData = randomBytes(length);\n const mem = this.getMemory();\n mem.set(randomData, out);\n },\n clock_time_get: (a1, a2, out) => {\n out = out >>> 0;\n const ts = BigInt(new Date().getTime()) * 1000000n;\n const view = new DataView(this.getMemory().buffer);\n view.setBigUint64(out, ts, true);\n },\n proc_exit: () => {\n this.logger('PANIC: proc_exit was called.');\n throw new Error();\n },\n },\n // These are functions implementations for imports we've defined are needed.\n // The native C++ build defines these in a module called \"env\". We must implement TypeScript versions here.\n env: {\n /**\n * The 'info' call we use for logging in C++, calls this under the hood.\n * The native code will just print to std:err (to avoid std::cout which is used for IPC).\n * Here we just emit the log line for the client to decide what to do with.\n */\n logstr: (addr) => {\n const str = this.stringFromAddress(addr);\n const m = this.getMemory();\n const str2 = `${str} (mem: ${(m.length / (1024 * 1024)).toFixed(2)}MiB)`;\n this.logger(str2);\n },\n throw_or_abort_impl: (addr) => {\n const str = this.stringFromAddress(addr);\n throw new Error(str);\n },\n get_data: (keyAddr, outBufAddr) => {\n const key = this.stringFromAddress(keyAddr);\n outBufAddr = outBufAddr >>> 0;\n const data = this.memStore[key];\n if (!data) {\n this.logger(`get_data miss ${key}`);\n return;\n }\n // this.logger(`get_data hit ${key} size: ${data.length} dest: ${outBufAddr}`);\n // this.logger(Buffer.from(data.slice(0, 64)).toString('hex'));\n this.writeMemory(outBufAddr, data);\n },\n set_data: (keyAddr, dataAddr, dataLength) => {\n const key = this.stringFromAddress(keyAddr);\n dataAddr = dataAddr >>> 0;\n this.memStore[key] = this.getMemorySlice(dataAddr, dataAddr + dataLength);\n // this.logger(`set_data: ${key} length: ${dataLength}`);\n },\n memory,\n },\n };\n /* eslint-enable camelcase */\n return importObj;\n }\n exports() {\n return this.instance.exports;\n }\n /**\n * When returning values from the WASM, use >>> operator to convert signed representation to unsigned representation.\n */\n call(name, ...args) {\n if (!this.exports()[name]) {\n throw new Error(`WASM function ${name} not found.`);\n }\n try {\n return this.exports()[name](...args) >>> 0;\n }\n catch (err) {\n const message = `WASM function ${name} aborted, error: ${err}`;\n this.logger(message);\n this.logger(err.stack);\n throw err;\n }\n }\n memSize() {\n return this.getMemory().length;\n }\n /**\n * Returns a copy of the data, not a view.\n */\n getMemorySlice(start, end) {\n return this.getMemory().subarray(start, end).slice();\n }\n writeMemory(offset, arr) {\n const mem = this.getMemory();\n mem.set(arr, offset);\n }\n // PRIVATE METHODS\n getMemory() {\n return new Uint8Array(this.memory.buffer);\n }\n stringFromAddress(addr) {\n addr = addr >>> 0;\n const m = this.getMemory();\n let i = addr;\n for (; m[i] !== 0; ++i)\n ;\n const textDecoder = new TextDecoder('ascii');\n return textDecoder.decode(m.slice(addr, i));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vYmFycmV0ZW5iZXJnX3dhc21fYmFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUFqQztRQUNZLGFBQVEsR0FBa0MsRUFBRSxDQUFDO1FBRzdDLFdBQU0sR0FBMEIsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUE4SDlFLENBQUM7SUE1SFcsWUFBWSxDQUFDLE1BQTBCO1FBQy9DLDhCQUE4QjtRQUM5QixNQUFNLFNBQVMsR0FBRztZQUNoQiwrQ0FBK0M7WUFDL0Msd0VBQXdFO1lBQ3hFLDRHQUE0RztZQUM1RyxzQkFBc0IsRUFBRTtnQkFDdEIsVUFBVSxFQUFFLENBQUMsR0FBUSxFQUFFLE1BQWMsRUFBRSxFQUFFO29CQUN2QyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztvQkFDaEIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzdCLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2dCQUNELGNBQWMsRUFBRSxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsR0FBVyxFQUFFLEVBQUU7b0JBQ3RELEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO29CQUNoQixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQkFDbkQsTUFB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","/**\n * Keeps track of heap allocations so they can be easily freed.\n * The WASM memory layout has 1024 bytes of unused \"scratch\" space at the start (addresses 0-1023).\n * We can leverage this for IO rather than making expensive bb_malloc bb_free calls.\n * Heap allocations will be created for input/output args that don't fit into the scratch space.\n * Input and output args can use the same scratch space as it's assume all input reads will be performed before any\n * output writes are performed.\n */\nexport class HeapAllocator {\n constructor(wasm) {\n this.wasm = wasm;\n this.allocs = [];\n this.inScratchRemaining = 1024;\n this.outScratchRemaining = 1024;\n }\n getInputs(buffers) {\n return buffers.map(bufOrNum => {\n if (typeof bufOrNum === 'object') {\n if (bufOrNum.length <= this.inScratchRemaining) {\n const ptr = (this.inScratchRemaining -= bufOrNum.length);\n this.wasm.writeMemory(ptr, bufOrNum);\n return ptr;\n }\n else {\n const ptr = this.wasm.call('bbmalloc', bufOrNum.length);\n this.wasm.writeMemory(ptr, bufOrNum);\n this.allocs.push(ptr);\n return ptr;\n }\n }\n else {\n return bufOrNum;\n }\n });\n }\n getOutputPtrs(outLens) {\n return outLens.map(len => {\n // If the obj is variable length, we need a 4 byte ptr to write the serialized data address to.\n // WARNING: 4 only works with WASM as it has 32 bit memory.\n const size = len || 4;\n if (size <= this.outScratchRemaining) {\n return (this.outScratchRemaining -= size);\n }\n else {\n const ptr = this.wasm.call('bbmalloc', size);\n this.allocs.push(ptr);\n return ptr;\n }\n });\n }\n addOutputPtr(ptr) {\n if (ptr >= 1024) {\n this.allocs.push(ptr);\n }\n }\n freeAll() {\n for (const ptr of this.allocs) {\n this.wasm.call('bbfree', ptr);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhcF9hbGxvY2F0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vYmFycmV0ZW5iZXJnX3dhc21fbWFpbi9oZWFwX2FsbG9jYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFLeEIsWUFBb0IsSUFBMEI7UUFBMUIsU0FBSSxHQUFKLElBQUksQ0FBc0I7UUFKdEMsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUN0Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO0lBRWMsQ0FBQztJQUVsRCxTQUFTLENBQUMsT0FBZ0M7UUFDeEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzVCLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3JDLE9BQU8sR0FBRyxDQUFDO2dCQUNiLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QixPQUFPLEdBQUcsQ0FBQztnQkFDYixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBK0I7UUFDM0MsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLCtGQUErRjtZQUMvRiwyREFBMkQ7WUFDM0QsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUV0QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVc7UUFDdEIsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==","import { getNumCpu, getRemoteBarretenbergWasm, getSharedMemoryAvailable } from '../helpers/index.js';\nimport { createThreadWorker } from '../barretenberg_wasm_thread/factory/node/index.js';\nimport { BarretenbergWasmBase } from '../barretenberg_wasm_base/index.js';\nimport { HeapAllocator } from './heap_allocator.js';\nimport { createDebugLogger } from '../../log/index.js';\n/**\n * This is the \"main thread\" implementation of BarretenbergWasm.\n * It spawns a bunch of \"child thread\" implementations.\n * In a browser context, this still runs on a worker, as it will block waiting on child threads.\n */\nexport class BarretenbergWasmMain extends BarretenbergWasmBase {\n constructor() {\n super(...arguments);\n this.workers = [];\n this.remoteWasms = [];\n this.nextWorker = 0;\n this.nextThreadId = 1;\n }\n getNumThreads() {\n return this.workers.length + 1;\n }\n /**\n * Init as main thread. Spawn child threads.\n */\n async init(module, threads = Math.min(getNumCpu(), BarretenbergWasmMain.MAX_THREADS), logger = createDebugLogger('bb_wasm'), initial = 32, maximum = this.getDefaultMaximumMemoryPages()) {\n this.logger = logger;\n const initialMb = (initial * 2 ** 16) / (1024 * 1024);\n const maxMb = (maximum * 2 ** 16) / (1024 * 1024);\n const shared = getSharedMemoryAvailable();\n this.logger(`Initializing bb wasm: initial memory ${initial} pages ${initialMb}MiB; ` +\n `max memory: ${maximum} pages, ${maxMb}MiB; ` +\n `threads: ${threads}; shared memory: ${shared}`);\n this.memory = new WebAssembly.Memory({ initial, maximum, shared });\n const instance = await WebAssembly.instantiate(module, this.getImportObj(this.memory));\n this.instance = instance;\n // Init all global/static data.\n this.call('_initialize');\n // Create worker threads. Create 1 less than requested, as main thread counts as a thread.\n if (threads > 1) {\n this.logger(`Creating ${threads} worker threads`);\n this.workers = await Promise.all(Array.from({ length: threads - 1 }).map(createThreadWorker));\n this.remoteWasms = await Promise.all(this.workers.map((getRemoteBarretenbergWasm)));\n await Promise.all(this.remoteWasms.map(w => w.initThread(module, this.memory)));\n }\n }\n getDefaultMaximumMemoryPages() {\n // iOS browser is very aggressive with memory. Check if running in browser and on iOS\n // We at any rate expect the mobile iOS browser to kill us >=1GB, so we don't set a maximum higher than that.\n if (typeof window !== 'undefined' && /iPad|iPhone/.test(navigator.userAgent)) {\n return 2 ** 14;\n }\n return 2 ** 16;\n }\n /**\n * Called on main thread. Signals child threads to gracefully exit.\n */\n async destroy() {\n await Promise.all(this.workers.map(w => w.terminate()));\n }\n getImportObj(memory) {\n const baseImports = super.getImportObj(memory);\n /* eslint-disable camelcase */\n return {\n ...baseImports,\n wasi: {\n 'thread-spawn': (arg) => {\n arg = arg >>> 0;\n const id = this.nextThreadId++;\n const worker = this.nextWorker++ % this.remoteWasms.length;\n // this.logger(`spawning thread ${id} on worker ${worker} with arg ${arg >>> 0}`);\n this.remoteWasms[worker].call('wasi_thread_start', id, arg).catch(this.logger);\n // this.remoteWasms[worker].postMessage({ msg: 'thread', data: { id, arg } });\n return id;\n },\n },\n env: {\n ...baseImports.env,\n env_hardware_concurrency: () => {\n // If there are no workers (we're already running as a worker, or the main thread requested no workers)\n // then we return 1, which should cause any algos using threading to just not create a thread.\n return this.remoteWasms.length + 1;\n },\n },\n };\n /* eslint-enable camelcase */\n }\n callWasmExport(funcName, inArgs, outLens) {\n const alloc = new HeapAllocator(this);\n const inPtrs = alloc.getInputs(inArgs);\n const outPtrs = alloc.getOutputPtrs(outLens);\n this.call(funcName, ...inPtrs, ...outPtrs);\n const outArgs = this.getOutputArgs(outLens, outPtrs, alloc);\n alloc.freeAll();\n return outArgs;\n }\n getOutputArgs(outLens, outPtrs, alloc) {\n return outLens.map((len, i) => {\n if (len) {\n return this.getMemorySlice(outPtrs[i], outPtrs[i] + len);\n }\n const slice = this.getMemorySlice(outPtrs[i], outPtrs[i] + 4);\n const ptr = new DataView(slice.buffer, slice.byteOffset, slice.byteLength).getUint32(0, true);\n // Add our heap buffer to the dealloc list.\n alloc.addOutputPtr(ptr);\n // The length will be found in the first 4 bytes of the buffer, big endian. See to_heap_buffer.\n const lslice = this.getMemorySlice(ptr, ptr + 4);\n const length = new DataView(lslice.buffer, lslice.byteOffset, lslice.byteLength).getUint32(0, false);\n return this.getMemorySlice(ptr + 4, ptr + 4 + length);\n });\n }\n cbindCall(cbind, inputBuffer) {\n const outputSizePtr = this.call('bbmalloc', 4);\n const outputMsgpackPtr = this.call('bbmalloc', 4);\n const inputPtr = this.call('bbmalloc', inputBuffer.length);\n this.writeMemory(inputPtr, inputBuffer);\n this.call(cbind, inputPtr, inputBuffer.length, outputMsgpackPtr, outputSizePtr);\n const readPtr32 = (ptr32) => {\n const dataView = new DataView(this.getMemorySlice(ptr32, ptr32 + 4).buffer);\n return dataView.getUint32(0, true);\n };\n const encodedResult = this.getMemorySlice(readPtr32(outputMsgpackPtr), readPtr32(outputMsgpackPtr) + readPtr32(outputSizePtr));\n this.call('bbfree', inputPtr);\n this.call('bbfree', outputSizePtr);\n this.call('bbfree', outputMsgpackPtr);\n return encodedResult;\n }\n}\nBarretenbergWasmMain.MAX_THREADS = 32;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vYmFycmV0ZW5iZXJnX3dhc21fbWFpbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFdkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsb0JBQW9CO0lBQTlEOztRQUVVLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDdkIsZ0JBQVcsR0FBbUMsRUFBRSxDQUFDO1FBQ2pELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixpQkFBWSxHQUFHLENBQUMsQ0FBQztJQThJM0IsQ0FBQztJQTVJUSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQ2YsTUFBMEIsRUFDMUIsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQ2pFLFNBQWdDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUM1RCxPQUFPLEdBQUcsRUFBRSxFQUNaLE9BQU8sR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7UUFFN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsTUFBTSxTQUFTLEdB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","import { readFile } from 'fs/promises';\nimport { dirname } from 'path';\nimport { fileURLToPath } from 'url';\nimport pako from 'pako';\nfunction getCurrentDir() {\n if (typeof __dirname !== 'undefined') {\n return __dirname;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return dirname(fileURLToPath(import.meta.url));\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport async function fetchCode(multithreaded, wasmPath) {\n const path = wasmPath ?? getCurrentDir() + '/../../barretenberg-threads.wasm.gz';\n // Default bb wasm is compressed, but user could point it to a non-compressed version\n const maybeCompressedData = await readFile(path);\n const buffer = new Uint8Array(maybeCompressedData);\n const isGzip = \n // Check magic number\n buffer[0] === 0x1f &&\n buffer[1] === 0x8b &&\n // Check compression method:\n buffer[2] === 0x08;\n if (isGzip) {\n const decompressedData = pako.ungzip(buffer);\n return decompressedData.buffer;\n }\n else {\n return buffer;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vZmV0Y2hfY29kZS9ub2RlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QixTQUFTLGFBQWE7SUFDcEIsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO1NBQU0sQ0FBQztRQUNOLDZEQUE2RDtRQUM3RCxhQUFhO1FBQ2IsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQUVELDZEQUE2RDtBQUM3RCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxhQUFzQixFQUFFLFFBQWlCO0lBQ3ZFLE1BQU0sSUFBSSxHQUFHLFFBQVEsSUFBSSxhQUFhLEVBQUUsR0FBRyxxQ0FBcUMsQ0FBQztJQUNqRixxRkFBcUY7SUFDckYsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sTUFBTTtJQUNWLHFCQUFxQjtJQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTtRQUNsQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTtRQUNsQiw0QkFBNEI7UUFDNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztJQUNyQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE9BQU8sZ0JBQWdCLENBQUMsTUFBNEMsQ0FBQztJQUN2RSxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDIn0=","import { getSharedMemoryAvailable, getAvailableThreads } from './helpers/node/index.js';\nimport { fetchCode } from './fetch_code/index.js';\nimport { createDebugLogger } from '../log/index.js';\nexport async function fetchModuleAndThreads(desiredThreads = 32, wasmPath, logger = createDebugLogger('fetch_mat')) {\n const shared = getSharedMemoryAvailable();\n const availableThreads = shared ? await getAvailableThreads(logger) : 1;\n // We limit the number of threads to 32 as we do not benefit from greater numbers.\n const limitedThreads = Math.min(desiredThreads, availableThreads, 32);\n logger(`Fetching bb wasm from ${wasmPath ?? 'default location'}`);\n const code = await fetchCode(shared, wasmPath);\n logger(`Compiling bb wasm of ${code.byteLength} bytes`);\n const module = await WebAssembly.compile(code);\n logger('Compilation of bb wasm complete');\n return { module, threads: limitedThreads };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnX3dhc20vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLGNBQWMsR0FBRyxFQUFFLEVBQ25CLFFBQWlCLEVBQ2pCLFNBQWdDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztJQUU5RCxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0lBRTFDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsa0ZBQWtGO0lBQ2xGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sQ0FBQyx5QkFBeUIsUUFBUSxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLHdCQUF3QixJQUFJLENBQUMsVUFBVSxRQUFRLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFDN0MsQ0FBQyJ9","var decoder\ntry {\n\tdecoder = new TextDecoder()\n} catch(error) {}\nvar src\nvar srcEnd\nvar position = 0\nvar alreadySet\nconst EMPTY_ARRAY = []\nvar strings = EMPTY_ARRAY\nvar stringPosition = 0\nvar currentUnpackr = {}\nvar currentStructures\nvar srcString\nvar srcStringStart = 0\nvar srcStringEnd = 0\nvar bundledStrings\nvar referenceMap\nvar currentExtensions = []\nvar dataView\nvar defaultOptions = {\n\tuseRecords: false,\n\tmapsAsObjects: true\n}\nexport class C1Type {}\nexport const C1 = new C1Type()\nC1.name = 'MessagePack 0xC1'\nvar sequentialMode = false\nvar inlineObjectReadThreshold = 2\nvar readStruct, onLoadedStructures, onSaveState\nvar BlockedFunction // we use search and replace to change the next call to BlockedFunction to avoid CSP issues for\n\nexport class Unpackr {\n\tconstructor(options) {\n\t\tif (options) {\n\t\t\tif (options.useRecords === false && options.mapsAsObjects === undefined)\n\t\t\t\toptions.mapsAsObjects = true\n\t\t\tif (options.sequential && options.trusted !== false) {\n\t\t\t\toptions.trusted = true;\n\t\t\t\tif (!options.structures && options.useRecords != false) {\n\t\t\t\t\toptions.structures = []\n\t\t\t\t\tif (!options.maxSharedStructures)\n\t\t\t\t\t\toptions.maxSharedStructures = 0\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (options.structures)\n\t\t\t\toptions.structures.sharedLength = options.structures.length\n\t\t\telse if (options.getStructures) {\n\t\t\t\t(options.structures = []).uninitialized = true // this is what we use to denote an uninitialized structures\n\t\t\t\toptions.structures.sharedLength = 0\n\t\t\t}\n\t\t\tif (options.int64AsNumber) {\n\t\t\t\toptions.int64AsType = 'number'\n\t\t\t}\n\t\t}\n\t\tObject.assign(this, options)\n\t}\n\tunpack(source, options) {\n\t\tif (src) {\n\t\t\t// re-entrant execution, save the state and restore it after we do this unpack\n\t\t\treturn saveState(() => {\n\t\t\t\tclearSource()\n\t\t\t\treturn this ? this.unpack(source, options) : Unpackr.prototype.unpack.call(defaultOptions, source, options)\n\t\t\t})\n\t\t}\n\t\tif (!source.buffer && source.constructor === ArrayBuffer)\n\t\t\tsource = typeof Buffer !== 'undefined' ? Buffer.from(source) : new Uint8Array(source);\n\t\tif (typeof options === 'object') {\n\t\t\tsrcEnd = options.end || source.length\n\t\t\tposition = options.start || 0\n\t\t} else {\n\t\t\tposition = 0\n\t\t\tsrcEnd = options > -1 ? options : source.length\n\t\t}\n\t\tstringPosition = 0\n\t\tsrcStringEnd = 0\n\t\tsrcString = null\n\t\tstrings = EMPTY_ARRAY\n\t\tbundledStrings = null\n\t\tsrc = source\n\t\t// this provides cached access to the data view for a buffer if it is getting reused, which is a recommend\n\t\t// technique for getting data from a database where it can be copied into an existing buffer instead of creating\n\t\t// new ones\n\t\ttry {\n\t\t\tdataView = source.dataView || (source.dataView = new DataView(source.buffer, source.byteOffset, source.byteLength))\n\t\t} catch(error) {\n\t\t\t// if it doesn't have a buffer, maybe it is the wrong type of object\n\t\t\tsrc = null\n\t\t\tif (source instanceof Uint8Array)\n\t\t\t\tthrow error\n\t\t\tthrow new Error('Source must be a Uint8Array or Buffer but was a ' + ((source && typeof source == 'object') ? source.constructor.name : typeof source))\n\t\t}\n\t\tif (this instanceof Unpackr) {\n\t\t\tcurrentUnpackr = this\n\t\t\tif (this.structures) {\n\t\t\t\tcurrentStructures = this.structures\n\t\t\t\treturn checkedRead(options)\n\t\t\t} else if (!currentStructures || currentStructures.length > 0) {\n\t\t\t\tcurrentStructures = []\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentUnpackr = defaultOptions\n\t\t\tif (!currentStructures || currentStructures.length > 0)\n\t\t\t\tcurrentStructures = []\n\t\t}\n\t\treturn checkedRead(options)\n\t}\n\tunpackMultiple(source, forEach) {\n\t\tlet values, lastPosition = 0\n\t\ttry {\n\t\t\tsequentialMode = true\n\t\t\tlet size = source.length\n\t\t\tlet value = this ? this.unpack(source, size) : defaultUnpackr.unpack(source, size)\n\t\t\tif (forEach) {\n\t\t\t\tif (forEach(value, lastPosition, position) === false) return;\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tif (forEach(checkedRead(), lastPosition, position) === false) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalues = [ value ]\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tvalues.push(checkedRead())\n\t\t\t\t}\n\t\t\t\treturn values\n\t\t\t}\n\t\t} catch(error) {\n\t\t\terror.lastPosition = lastPosition\n\t\t\terror.values = values\n\t\t\tthrow error\n\t\t} finally {\n\t\t\tsequentialMode = false\n\t\t\tclearSource()\n\t\t}\n\t}\n\t_mergeStructures(loadedStructures, existingStructures) {\n\t\tif (onLoadedStructures)\n\t\t\tloadedStructures = onLoadedStructures.call(this, loadedStructures);\n\t\tloadedStructures = loadedStructures || []\n\t\tif (Object.isFrozen(loadedStructures))\n\t\t\tloadedStructures = loadedStructures.map(structure => structure.slice(0))\n\t\tfor (let i = 0, l = loadedStructures.length; i < l; i++) {\n\t\t\tlet structure = loadedStructures[i]\n\t\t\tif (structure) {\n\t\t\t\tstructure.isShared = true\n\t\t\t\tif (i >= 32)\n\t\t\t\t\tstructure.highByte = (i - 32) >> 5\n\t\t\t}\n\t\t}\n\t\tloadedStructures.sharedLength = loadedStructures.length\n\t\tfor (let id in existingStructures || []) {\n\t\t\tif (id >= 0) {\n\t\t\t\tlet structure = loadedStructures[id]\n\t\t\t\tlet existing = existingStructures[id]\n\t\t\t\tif (existing) {\n\t\t\t\t\tif (structure)\n\t\t\t\t\t\t(loadedStructures.restoreStructures || (loadedStructures.restoreStructures = []))[id] = structure\n\t\t\t\t\tloadedStructures[id] = existing\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this.structures = loadedStructures\n\t}\n\tdecode(source, options) {\n\t\treturn this.unpack(source, options)\n\t}\n}\nexport function getPosition() {\n\treturn position\n}\nexport function checkedRead(options) {\n\ttry {\n\t\tif (!currentUnpackr.trusted && !sequentialMode) {\n\t\t\tlet sharedLength = currentStructures.sharedLength || 0\n\t\t\tif (sharedLength < currentStructures.length)\n\t\t\t\tcurrentStructures.length = sharedLength\n\t\t}\n\t\tlet result\n\t\tif (currentUnpackr.randomAccessStructure && src[position] < 0x40 && src[position] >= 0x20 && readStruct) {\n\t\t\tresult = readStruct(src, position, srcEnd, currentUnpackr)\n\t\t\tsrc = null // dispose of this so that recursive unpack calls don't save state\n\t\t\tif (!(options && options.lazy) && result)\n\t\t\t\tresult = result.toJSON()\n\t\t\tposition = srcEnd\n\t\t} else\n\t\t\tresult = read()\n\t\tif (bundledStrings) { // bundled strings to skip past\n\t\t\tposition = bundledStrings.postBundlePosition\n\t\t\tbundledStrings = null\n\t\t}\n\t\tif (sequentialMode)\n\t\t\t// we only need to restore the structures if there was an error, but if we completed a read,\n\t\t\t// we can clear this out and keep the structures we read\n\t\t\tcurrentStructures.restoreStructures = null\n\n\t\tif (position == srcEnd) {\n\t\t\t// finished reading this source, cleanup references\n\t\t\tif (currentStructures && currentStructures.restoreStructures)\n\t\t\t\trestoreStructures()\n\t\t\tcurrentStructures = null\n\t\t\tsrc = null\n\t\t\tif (referenceMap)\n\t\t\t\treferenceMap = null\n\t\t} else if (position > srcEnd) {\n\t\t\t// over read\n\t\t\tthrow new Error('Unexpected end of MessagePack data')\n\t\t} else if (!sequentialMode) {\n\t\t\tlet jsonView;\n\t\t\ttry {\n\t\t\t\tjsonView = JSON.stringify(result, (_, value) => typeof value === \"bigint\" ? `${value}n` : value).slice(0, 100)\n\t\t\t} catch(error) {\n\t\t\t\tjsonView = '(JSON view not available ' + error + ')'\n\t\t\t}\n\t\t\tthrow new Error('Data read, but end of buffer not reached ' + jsonView)\n\t\t}\n\t\t// else more to read, but we are reading sequentially, so don't clear source yet\n\t\treturn result\n\t} catch(error) {\n\t\tif (currentStructures && currentStructures.restoreStructures)\n\t\t\trestoreStructures()\n\t\tclearSource()\n\t\tif (error instanceof RangeError || error.message.startsWith('Unexpected end of buffer') || position > srcEnd) {\n\t\t\terror.incomplete = true\n\t\t}\n\t\tthrow error\n\t}\n}\n\nfunction restoreStructures() {\n\tfor (let id in currentStructures.restoreStructures) {\n\t\tcurrentStructures[id] = currentStructures.restoreStructures[id]\n\t}\n\tcurrentStructures.restoreStructures = null\n}\n\nexport function read() {\n\tlet token = src[position++]\n\tif (token < 0xa0) {\n\t\tif (token < 0x80) {\n\t\t\tif (token < 0x40)\n\t\t\t\treturn token\n\t\t\telse {\n\t\t\t\tlet structure = currentStructures[token & 0x3f] ||\n\t\t\t\t\tcurrentUnpackr.getStructures && loadStructures()[token & 0x3f]\n\t\t\t\tif (structure) {\n\t\t\t\t\tif (!structure.read) {\n\t\t\t\t\t\tstructure.read = createStructureReader(structure, token & 0x3f)\n\t\t\t\t\t}\n\t\t\t\t\treturn structure.read()\n\t\t\t\t} else\n\t\t\t\t\treturn token\n\t\t\t}\n\t\t} else if (token < 0x90) {\n\t\t\t// map\n\t\t\ttoken -= 0x80\n\t\t\tif (currentUnpackr.mapsAsObjects) {\n\t\t\t\tlet object = {}\n\t\t\t\tfor (let i = 0; i < token; i++) {\n\t\t\t\t\tlet key = readKey()\n\t\t\t\t\tif (key === '__proto__')\n\t\t\t\t\t\tkey = '__proto_'\n\t\t\t\t\tobject[key] = read()\n\t\t\t\t}\n\t\t\t\treturn object\n\t\t\t} else {\n\t\t\t\tlet map = new Map()\n\t\t\t\tfor (let i = 0; i < token; i++) {\n\t\t\t\t\tmap.set(read(), read())\n\t\t\t\t}\n\t\t\t\treturn map\n\t\t\t}\n\t\t} else {\n\t\t\ttoken -= 0x90\n\t\t\tlet array = new Array(token)\n\t\t\tfor (let i = 0; i < token; i++) {\n\t\t\t\tarray[i] = read()\n\t\t\t}\n\t\t\tif (currentUnpackr.freezeData)\n\t\t\t\treturn Object.freeze(array)\n\t\t\treturn array\n\t\t}\n\t} else if (token < 0xc0) {\n\t\t// fixstr\n\t\tlet length = token - 0xa0\n\t\tif (srcStringEnd >= position) {\n\t\t\treturn srcString.slice(position - srcStringStart, (position += length) - srcStringStart)\n\t\t}\n\t\tif (srcStringEnd == 0 && srcEnd < 140) {\n\t\t\t// for small blocks, avoiding the overhead of the extract call is helpful\n\t\t\tlet string = length < 16 ? shortStringInJS(length) : longStringInJS(length)\n\t\t\tif (string != null)\n\t\t\t\treturn string\n\t\t}\n\t\treturn readFixedString(length)\n\t} else {\n\t\tlet value\n\t\tswitch (token) {\n\t\t\tcase 0xc0: return null\n\t\t\tcase 0xc1:\n\t\t\t\tif (bundledStrings) {\n\t\t\t\t\tvalue = read() // followed by the length of the string in characters (not bytes!)\n\t\t\t\t\tif (value > 0)\n\t\t\t\t\t\treturn bundledStrings[1].slice(bundledStrings.position1, bundledStrings.position1 += value)\n\t\t\t\t\telse\n\t\t\t\t\t\treturn bundledStrings[0].slice(bundledStrings.position0, bundledStrings.position0 -= value)\n\t\t\t\t}\n\t\t\t\treturn C1; // \"never-used\", return special object to denote that\n\t\t\tcase 0xc2: return false\n\t\t\tcase 0xc3: return true\n\t\t\tcase 0xc4:\n\t\t\t\t// bin 8\n\t\t\t\tvalue = src[position++]\n\t\t\t\tif (value === undefined)\n\t\t\t\t\tthrow new Error('Unexpected end of buffer')\n\t\t\t\treturn readBin(value)\n\t\t\tcase 0xc5:\n\t\t\t\t// bin 16\n\t\t\t\tvalue = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\treturn readBin(value)\n\t\t\tcase 0xc6:\n\t\t\t\t// bin 32\n\t\t\t\tvalue = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\treturn readBin(value)\n\t\t\tcase 0xc7:\n\t\t\t\t// ext 8\n\t\t\t\treturn readExt(src[position++])\n\t\t\tcase 0xc8:\n\t\t\t\t// ext 16\n\t\t\t\tvalue = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\treturn readExt(value)\n\t\t\tcase 0xc9:\n\t\t\t\t// ext 32\n\t\t\t\tvalue = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\treturn readExt(value)\n\t\t\tcase 0xca:\n\t\t\t\tvalue = dataView.getFloat32(position)\n\t\t\t\tif (currentUnpackr.useFloat32 > 2) {\n\t\t\t\t\t// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\tlet multiplier = mult10[((src[position] & 0x7f) << 1) | (src[position + 1] >> 7)]\n\t\t\t\t\tposition += 4\n\t\t\t\t\treturn ((multiplier * value + (value > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n\t\t\t\t}\n\t\t\t\tposition += 4\n\t\t\t\treturn value\n\t\t\tcase 0xcb:\n\t\t\t\tvalue = dataView.getFloat64(position)\n\t\t\t\tposition += 8\n\t\t\t\treturn value\n\t\t\t// uint handlers\n\t\t\tcase 0xcc:\n\t\t\t\treturn src[position++]\n\t\t\tcase 0xcd:\n\t\t\t\tvalue = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\treturn value\n\t\t\tcase 0xce:\n\t\t\t\tvalue = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\treturn value\n\t\t\tcase 0xcf:\n\t\t\t\tif (currentUnpackr.int64AsType === 'number') {\n\t\t\t\t\tvalue = dataView.getUint32(position) * 0x100000000\n\t\t\t\t\tvalue += dataView.getUint32(position + 4)\n\t\t\t\t} else if (currentUnpackr.int64AsType === 'string') {\n\t\t\t\t\tvalue = dataView.getBigUint64(position).toString()\n\t\t\t\t} else if (currentUnpackr.int64AsType === 'auto') {\n\t\t\t\t\tvalue = dataView.getBigUint64(position)\n\t\t\t\t\tif (value<=BigInt(2)<<BigInt(52)) value=Number(value)\n\t\t\t\t} else\n\t\t\t\t\tvalue = dataView.getBigUint64(position)\n\t\t\t\tposition += 8\n\t\t\t\treturn value\n\n\t\t\t// int handlers\n\t\t\tcase 0xd0:\n\t\t\t\treturn dataView.getInt8(position++)\n\t\t\tcase 0xd1:\n\t\t\t\tvalue = dataView.getInt16(position)\n\t\t\t\tposition += 2\n\t\t\t\treturn value\n\t\t\tcase 0xd2:\n\t\t\t\tvalue = dataView.getInt32(position)\n\t\t\t\tposition += 4\n\t\t\t\treturn value\n\t\t\tcase 0xd3:\n\t\t\t\tif (currentUnpackr.int64AsType === 'number') {\n\t\t\t\t\tvalue = dataView.getInt32(position) * 0x100000000\n\t\t\t\t\tvalue += dataView.getUint32(position + 4)\n\t\t\t\t} else if (currentUnpackr.int64AsType === 'string') {\n\t\t\t\t\tvalue = dataView.getBigInt64(position).toString()\n\t\t\t\t} else if (currentUnpackr.int64AsType === 'auto') {\n\t\t\t\t\tvalue = dataView.getBigInt64(position)\n\t\t\t\t\tif (value>=BigInt(-2)<<BigInt(52)&&value<=BigInt(2)<<BigInt(52)) value=Number(value)\n\t\t\t\t} else\n\t\t\t\t\tvalue = dataView.getBigInt64(position)\n\t\t\t\tposition += 8\n\t\t\t\treturn value\n\n\t\t\tcase 0xd4:\n\t\t\t\t// fixext 1\n\t\t\t\tvalue = src[position++]\n\t\t\t\tif (value == 0x72) {\n\t\t\t\t\treturn recordDefinition(src[position++] & 0x3f)\n\t\t\t\t} else {\n\t\t\t\t\tlet extension = currentExtensions[value]\n\t\t\t\t\tif (extension) {\n\t\t\t\t\t\tif (extension.read) {\n\t\t\t\t\t\t\tposition++ // skip filler byte\n\t\t\t\t\t\t\treturn extension.read(read())\n\t\t\t\t\t\t} else if (extension.noBuffer) {\n\t\t\t\t\t\t\tposition++ // skip filler byte\n\t\t\t\t\t\t\treturn extension()\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\treturn extension(src.subarray(position, ++position))\n\t\t\t\t\t} else\n\t\t\t\t\t\tthrow new Error('Unknown extension ' + value)\n\t\t\t\t}\n\t\t\tcase 0xd5:\n\t\t\t\t// fixext 2\n\t\t\t\tvalue = src[position]\n\t\t\t\tif (value == 0x72) {\n\t\t\t\t\tposition++\n\t\t\t\t\treturn recordDefinition(src[position++] & 0x3f, src[position++])\n\t\t\t\t} else\n\t\t\t\t\treturn readExt(2)\n\t\t\tcase 0xd6:\n\t\t\t\t// fixext 4\n\t\t\t\treturn readExt(4)\n\t\t\tcase 0xd7:\n\t\t\t\t// fixext 8\n\t\t\t\treturn readExt(8)\n\t\t\tcase 0xd8:\n\t\t\t\t// fixext 16\n\t\t\t\treturn readExt(16)\n\t\t\tcase 0xd9:\n\t\t\t// str 8\n\t\t\t\tvalue = src[position++]\n\t\t\t\tif (srcStringEnd >= position) {\n\t\t\t\t\treturn srcString.slice(position - srcStringStart, (position += value) - srcStringStart)\n\t\t\t\t}\n\t\t\t\treturn readString8(value)\n\t\t\tcase 0xda:\n\t\t\t// str 16\n\t\t\t\tvalue = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tif (srcStringEnd >= position) {\n\t\t\t\t\treturn srcString.slice(position - srcStringStart, (position += value) - srcStringStart)\n\t\t\t\t}\n\t\t\t\treturn readString16(value)\n\t\t\tcase 0xdb:\n\t\t\t// str 32\n\t\t\t\tvalue = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tif (srcStringEnd >= position) {\n\t\t\t\t\treturn srcString.slice(position - srcStringStart, (position += value) - srcStringStart)\n\t\t\t\t}\n\t\t\t\treturn readString32(value)\n\t\t\tcase 0xdc:\n\t\t\t// array 16\n\t\t\t\tvalue = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\treturn readArray(value)\n\t\t\tcase 0xdd:\n\t\t\t// array 32\n\t\t\t\tvalue = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\treturn readArray(value)\n\t\t\tcase 0xde:\n\t\t\t// map 16\n\t\t\t\tvalue = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\treturn readMap(value)\n\t\t\tcase 0xdf:\n\t\t\t// map 32\n\t\t\t\tvalue = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\treturn readMap(value)\n\t\t\tdefault: // negative int\n\t\t\t\tif (token >= 0xe0)\n\t\t\t\t\treturn token - 0x100\n\t\t\t\tif (token === undefined) {\n\t\t\t\t\tlet error = new Error('Unexpected end of MessagePack data')\n\t\t\t\t\terror.incomplete = true\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t\tthrow new Error('Unknown MessagePack token ' + token)\n\n\t\t}\n\t}\n}\nconst validName = /^[a-zA-Z_$][a-zA-Z\\d_$]*$/\nfunction createStructureReader(structure, firstId) {\n\tfunction readObject() {\n\t\t// This initial function is quick to instantiate, but runs slower. After several iterations pay the cost to build the faster function\n\t\tif (readObject.count++ > inlineObjectReadThreshold) {\n\t\t\tlet optimizedReadObject\n\t\t\ttry {\n\t\t\t\toptimizedReadObject = structure.read = (new Function('r', 'return function(){return ' + (currentUnpackr.freezeData ? 'Object.freeze' : '') +\n\t\t\t\t\t'({' + structure.map(key => key === '__proto__' ? '__proto_:r()' : validName.test(key) ? key + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '})}'))(read)\n\t\t\t} catch(error) {\n\t\t\t\t// in CF workers, the new Function call could begin to fail at any point in time\n\t\t\t\tinlineObjectReadThreshold = Infinity // disable going forward\n\t\t\t\treturn readObject(); // recursively try again\n\t\t\t}\n\t\t\tif (structure.highByte === 0)\n\t\t\t\tstructure.read = createSecondByteReader(firstId, structure.read)\n\t\t\treturn optimizedReadObject() // second byte is already read, if there is one so immediately read object\n\t\t}\n\t\tlet object = {}\n\t\tfor (let i = 0, l = structure.length; i < l; i++) {\n\t\t\tlet key = structure[i]\n\t\t\tif (key === '__proto__')\n\t\t\t\tkey = '__proto_'\n\t\t\tobject[key] = read()\n\t\t}\n\t\tif (currentUnpackr.freezeData)\n\t\t\treturn Object.freeze(object);\n\t\treturn object\n\t}\n\treadObject.count = 0\n\tif (structure.highByte === 0) {\n\t\treturn createSecondByteReader(firstId, readObject)\n\t}\n\treturn readObject\n}\n\nconst createSecondByteReader = (firstId, read0) => {\n\treturn function() {\n\t\tlet highByte = src[position++]\n\t\tif (highByte === 0)\n\t\t\treturn read0()\n\t\tlet id = firstId < 32 ? -(firstId + (highByte << 5)) : firstId + (highByte << 5)\n\t\tlet structure = currentStructures[id] || loadStructures()[id]\n\t\tif (!structure) {\n\t\t\tthrow new Error('Record id is not defined for ' + id)\n\t\t}\n\t\tif (!structure.read)\n\t\t\tstructure.read = createStructureReader(structure, firstId)\n\t\treturn structure.read()\n\t}\n}\n\nexport function loadStructures() {\n\tlet loadedStructures = saveState(() => {\n\t\t// save the state in case getStructures modifies our buffer\n\t\tsrc = null\n\t\treturn currentUnpackr.getStructures()\n\t})\n\treturn currentStructures = currentUnpackr._mergeStructures(loadedStructures, currentStructures)\n}\n\nvar readFixedString = readStringJS\nvar readString8 = readStringJS\nvar readString16 = readStringJS\nvar readString32 = readStringJS\nexport let isNativeAccelerationEnabled = false\n\nexport function setExtractor(extractStrings) {\n\tisNativeAccelerationEnabled = true\n\treadFixedString = readString(1)\n\treadString8 = readString(2)\n\treadString16 = readString(3)\n\treadString32 = readString(5)\n\tfunction readString(headerLength) {\n\t\treturn function readString(length) {\n\t\t\tlet string = strings[stringPosition++]\n\t\t\tif (string == null) {\n\t\t\t\tif (bundledStrings)\n\t\t\t\t\treturn readStringJS(length)\n\t\t\t\tlet byteOffset = src.byteOffset\n\t\t\t\tlet extraction = extractStrings(position - headerLength + byteOffset, srcEnd + byteOffset, src.buffer)\n\t\t\t\tif (typeof extraction == 'string') {\n\t\t\t\t\tstring = extraction\n\t\t\t\t\tstrings = EMPTY_ARRAY\n\t\t\t\t} else {\n\t\t\t\t\tstrings = extraction\n\t\t\t\t\tstringPosition = 1\n\t\t\t\t\tsrcStringEnd = 1 // even if a utf-8 string was decoded, must indicate we are in the midst of extracted strings and can't skip strings\n\t\t\t\t\tstring = strings[0]\n\t\t\t\t\tif (string === undefined)\n\t\t\t\t\t\tthrow new Error('Unexpected end of buffer')\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet srcStringLength = string.length\n\t\t\tif (srcStringLength <= length) {\n\t\t\t\tposition += length\n\t\t\t\treturn string\n\t\t\t}\n\t\t\tsrcString = string\n\t\t\tsrcStringStart = position\n\t\t\tsrcStringEnd = position + srcStringLength\n\t\t\tposition += length\n\t\t\treturn string.slice(0, length) // we know we just want the beginning\n\t\t}\n\t}\n}\nfunction readStringJS(length) {\n\tlet result\n\tif (length < 16) {\n\t\tif (result = shortStringInJS(length))\n\t\t\treturn result\n\t}\n\tif (length > 64 && decoder)\n\t\treturn decoder.decode(src.subarray(position, position += length))\n\tconst end = position + length\n\tconst units = []\n\tresult = ''\n\twhile (position < end) {\n\t\tconst byte1 = src[position++]\n\t\tif ((byte1 & 0x80) === 0) {\n\t\t\t// 1 byte\n\t\t\tunits.push(byte1)\n\t\t} else if ((byte1 & 0xe0) === 0xc0) {\n\t\t\t// 2 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst codePoint = ((byte1 & 0x1f) << 6) | byte2\n\t\t\t// Reject overlong encoding: 2-byte sequences must encode values >= 0x80\n\t\t\tif (codePoint < 0x80) {\n\t\t\t\tunits.push(0xFFFD) // replacement character\n\t\t\t} else {\n\t\t\t\tunits.push(codePoint)\n\t\t\t}\n\t\t} else if ((byte1 & 0xf0) === 0xe0) {\n\t\t\t// 3 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tconst codePoint = ((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3\n\t\t\t// Reject overlong encoding: 3-byte sequences must encode values >= 0x800\n\t\t\t// Also reject surrogates (0xD800-0xDFFF)\n\t\t\tif (codePoint < 0x800 || (codePoint >= 0xD800 && codePoint <= 0xDFFF)) {\n\t\t\t\tunits.push(0xFFFD) // replacement character\n\t\t\t} else {\n\t\t\t\tunits.push(codePoint)\n\t\t\t}\n\t\t} else if ((byte1 & 0xf8) === 0xf0) {\n\t\t\t// 4 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tconst byte4 = src[position++] & 0x3f\n\t\t\tlet unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4\n\t\t\t// Reject overlong encoding: 4-byte sequences must encode values >= 0x10000\n\t\t\t// Also reject values > 0x10FFFF (maximum valid Unicode)\n\t\t\tif (unit < 0x10000 || unit > 0x10FFFF) {\n\t\t\t\tunits.push(0xFFFD) // replacement character\n\t\t\t} else if (unit > 0xffff) {\n\t\t\t\tunit -= 0x10000\n\t\t\t\tunits.push(((unit >>> 10) & 0x3ff) | 0xd800)\n\t\t\t\tunit = 0xdc00 | (unit & 0x3ff)\n\t\t\t\tunits.push(unit)\n\t\t\t} else {\n\t\t\t\tunits.push(unit)\n\t\t\t}\n\t\t} else {\n\t\t\tunits.push(0xFFFD) // replacement character for invalid lead byte\n\t\t}\n\n\t\tif (units.length >= 0x1000) {\n\t\t\tresult += fromCharCode.apply(String, units)\n\t\t\tunits.length = 0\n\t\t}\n\t}\n\n\tif (units.length > 0) {\n\t\tresult += fromCharCode.apply(String, units)\n\t}\n\n\treturn result\n}\nexport function readString(source, start, length) {\n\tlet existingSrc = src;\n\tsrc = source;\n\tposition = start;\n\ttry {\n\t\treturn readStringJS(length);\n\t} finally {\n\t\tsrc = existingSrc;\n\t}\n}\n\nfunction readArray(length) {\n\tlet array = new Array(length)\n\tfor (let i = 0; i < length; i++) {\n\t\tarray[i] = read()\n\t}\n\tif (currentUnpackr.freezeData)\n\t\treturn Object.freeze(array)\n\treturn array\n}\n\nfunction readMap(length) {\n\tif (currentUnpackr.mapsAsObjects) {\n\t\tlet object = {}\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tlet key = readKey()\n\t\t\tif (key === '__proto__')\n\t\t\t\tkey = '__proto_';\n\t\t\tobject[key] = read()\n\t\t}\n\t\treturn object\n\t} else {\n\t\tlet map = new Map()\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tmap.set(read(), read())\n\t\t}\n\t\treturn map\n\t}\n}\n\nvar fromCharCode = String.fromCharCode\nfunction longStringInJS(length) {\n\tlet start = position\n\tlet bytes = new Array(length)\n\tfor (let i = 0; i < length; i++) {\n\t\tconst byte = src[position++];\n\t\tif ((byte & 0x80) > 0) {\n\t\t\t\tposition = start\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbytes[i] = byte\n\t\t}\n\t\treturn fromCharCode.apply(String, bytes)\n}\nfunction shortStringInJS(length) {\n\tif (length < 4) {\n\t\tif (length < 2) {\n\t\t\tif (length === 0)\n\t\t\t\treturn ''\n\t\t\telse {\n\t\t\t\tlet a = src[position++]\n\t\t\t\tif ((a & 0x80) > 1) {\n\t\t\t\t\tposition -= 1\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a)\n\t\t\t}\n\t\t} else {\n\t\t\tlet a = src[position++]\n\t\t\tlet b = src[position++]\n\t\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0) {\n\t\t\t\tposition -= 2\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 3)\n\t\t\t\treturn fromCharCode(a, b)\n\t\t\tlet c = src[position++]\n\t\t\tif ((c & 0x80) > 0) {\n\t\t\t\tposition -= 3\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c)\n\t\t}\n\t} else {\n\t\tlet a = src[position++]\n\t\tlet b = src[position++]\n\t\tlet c = src[position++]\n\t\tlet d = src[position++]\n\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0 || (c & 0x80) > 0 || (d & 0x80) > 0) {\n\t\t\tposition -= 4\n\t\t\treturn\n\t\t}\n\t\tif (length < 6) {\n\t\t\tif (length === 4)\n\t\t\t\treturn fromCharCode(a, b, c, d)\n\t\t\telse {\n\t\t\t\tlet e = src[position++]\n\t\t\t\tif ((e & 0x80) > 0) {\n\t\t\t\t\tposition -= 5\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e)\n\t\t\t}\n\t\t} else if (length < 8) {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0) {\n\t\t\t\tposition -= 6\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 7)\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f)\n\t\t\tlet g = src[position++]\n\t\t\tif ((g & 0x80) > 0) {\n\t\t\t\tposition -= 7\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c, d, e, f, g)\n\t\t} else {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tlet g = src[position++]\n\t\t\tlet h = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0 || (g & 0x80) > 0 || (h & 0x80) > 0) {\n\t\t\t\tposition -= 8\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 10) {\n\t\t\t\tif (length === 8)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h)\n\t\t\t\telse {\n\t\t\t\t\tlet i = src[position++]\n\t\t\t\t\tif ((i & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 9\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i)\n\t\t\t\t}\n\t\t\t} else if (length < 12) {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0) {\n\t\t\t\t\tposition -= 10\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 11)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j)\n\t\t\t\tlet k = src[position++]\n\t\t\t\tif ((k & 0x80) > 0) {\n\t\t\t\t\tposition -= 11\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k)\n\t\t\t} else {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tlet k = src[position++]\n\t\t\t\tlet l = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0 || (k & 0x80) > 0 || (l & 0x80) > 0) {\n\t\t\t\t\tposition -= 12\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 14) {\n\t\t\t\t\tif (length === 12)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l)\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\t\tif ((m & 0x80) > 0) {\n\t\t\t\t\t\t\tposition -= 13\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\tlet n = src[position++]\n\t\t\t\t\tif ((m & 0x80) > 0 || (n & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 14\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (length < 15)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n)\n\t\t\t\t\tlet o = src[position++]\n\t\t\t\t\tif ((o & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 15\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction readOnlyJSString() {\n\tlet token = src[position++]\n\tlet length\n\tif (token < 0xc0) {\n\t\t// fixstr\n\t\tlength = token - 0xa0\n\t} else {\n\t\tswitch(token) {\n\t\t\tcase 0xd9:\n\t\t\t// str 8\n\t\t\t\tlength = src[position++]\n\t\t\t\tbreak\n\t\t\tcase 0xda:\n\t\t\t// str 16\n\t\t\t\tlength = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tbreak\n\t\t\tcase 0xdb:\n\t\t\t// str 32\n\t\t\t\tlength = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Expected string')\n\t\t}\n\t}\n\treturn readStringJS(length)\n}\n\n\nfunction readBin(length) {\n\treturn currentUnpackr.copyBuffers ?\n\t\t// specifically use the copying slice (not the node one)\n\t\tUint8Array.prototype.slice.call(src, position, position += length) :\n\t\tsrc.subarray(position, position += length)\n}\nfunction readExt(length) {\n\tlet type = src[position++]\n\tif (currentExtensions[type]) {\n\t\tlet end\n\t\treturn currentExtensions[type](src.subarray(position, end = (position += length)), (readPosition) => {\n\t\t\tposition = readPosition;\n\t\t\ttry {\n\t\t\t\treturn read();\n\t\t\t} finally {\n\t\t\t\tposition = end;\n\t\t\t}\n\t\t})\n\t}\n\telse\n\t\tthrow new Error('Unknown extension type ' + type)\n}\n\nvar keyCache = new Array(4096)\nfunction readKey() {\n\tlet length = src[position++]\n\tif (length >= 0xa0 && length < 0xc0) {\n\t\t// fixstr, potentially use key cache\n\t\tlength = length - 0xa0\n\t\tif (srcStringEnd >= position) // if it has been extracted, must use it (and faster anyway)\n\t\t\treturn srcString.slice(position - srcStringStart, (position += length) - srcStringStart)\n\t\telse if (!(srcStringEnd == 0 && srcEnd < 180))\n\t\t\treturn readFixedString(length)\n\t} else { // not cacheable, go back and do a standard read\n\t\tposition--\n\t\treturn asSafeString(read())\n\t}\n\tlet key = ((length << 5) ^ (length > 1 ? dataView.getUint16(position) : length > 0 ? src[position] : 0)) & 0xfff\n\tlet entry = keyCache[key]\n\tlet checkPosition = position\n\tlet end = position + length - 3\n\tlet chunk\n\tlet i = 0\n\tif (entry && entry.bytes == length) {\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = dataView.getUint32(checkPosition)\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcheckPosition += 4\n\t\t}\n\t\tend += 3\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = src[checkPosition++]\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (checkPosition === end) {\n\t\t\tposition = checkPosition\n\t\t\treturn entry.string\n\t\t}\n\t\tend -= 3\n\t\tcheckPosition = position\n\t}\n\tentry = []\n\tkeyCache[key] = entry\n\tentry.bytes = length\n\twhile (checkPosition < end) {\n\t\tchunk = dataView.getUint32(checkPosition)\n\t\tentry.push(chunk)\n\t\tcheckPosition += 4\n\t}\n\tend += 3\n\twhile (checkPosition < end) {\n\t\tchunk = src[checkPosition++]\n\t\tentry.push(chunk)\n\t}\n\t// for small blocks, avoiding the overhead of the extract call is helpful\n\tlet string = length < 16 ? shortStringInJS(length) : longStringInJS(length)\n\tif (string != null)\n\t\treturn entry.string = string\n\treturn entry.string = readFixedString(length)\n}\n\nfunction asSafeString(property) {\n\t// protect against expensive (DoS) string conversions\n\tif (typeof property === 'string') return property;\n\tif (typeof property === 'number' || typeof property === 'boolean' || typeof property === 'bigint') return property.toString();\n\tif (property == null) return property + '';\n\tif (currentUnpackr.allowArraysInMapKeys && Array.isArray(property) && property.flat().every(item => ['string', 'number', 'boolean', 'bigint'].includes(typeof item))) {\n\t\treturn property.flat().toString();\n\t}\n\tthrow new Error(`Invalid property type for record: ${typeof property}`);\n}\n// the registration of the record definition extension (as \"r\")\nconst recordDefinition = (id, highByte) => {\n\tlet structure = read().map(asSafeString) // ensure that all keys are strings and\n\t// that the array is mutable\n\tlet firstByte = id\n\tif (highByte !== undefined) {\n\t\tid = id < 32 ? -((highByte << 5) + id) : ((highByte << 5) + id)\n\t\tstructure.highByte = highByte\n\t}\n\tlet existingStructure = currentStructures[id]\n\t// If it is a shared structure, we need to restore any changes after reading.\n\t// Also in sequential mode, we may get incomplete reads and thus errors, and we need to restore\n\t// to the state prior to an incomplete read in order to properly resume.\n\tif (existingStructure && (existingStructure.isShared || sequentialMode)) {\n\t\t(currentStructures.restoreStructures || (currentStructures.restoreStructures = []))[id] = existingStructure\n\t}\n\tcurrentStructures[id] = structure\n\tstructure.read = createStructureReader(structure, firstByte)\n\treturn structure.read()\n}\ncurrentExtensions[0] = () => {} // notepack defines extension 0 to mean undefined, so use that as the default here\ncurrentExtensions[0].noBuffer = true\n\ncurrentExtensions[0x42] = data => {\n\tlet headLength = (data.byteLength % 8) || 8\n\tlet head = BigInt(data[0] & 0x80 ? data[0] - 0x100 : data[0])\n\tfor (let i = 1; i < headLength; i++) {\n\t\thead <<= BigInt(8)\n\t\thead += BigInt(data[i])\n\t}\n\tif (data.byteLength !== headLength) {\n\t\tlet view = new DataView(data.buffer, data.byteOffset, data.byteLength)\n\t\tlet decode = (start, end) => {\n\t\t\tlet length = end - start\n\t\t\tif (length <= 40) {\n\t\t\t\tlet out = view.getBigUint64(start)\n\t\t\t\tfor (let i = start + 8; i < end; i += 8) {\n\t\t\t\t\tout <<= BigInt(64)\n\t\t\t\t\tout |= view.getBigUint64(i)\n\t\t\t\t}\n\t\t\t\treturn out\n\t\t\t}\n\t\t\t// if (length === 8) return view.getBigUint64(start)\n\t\t\tlet middle = start + (length >> 4 << 3)\n\t\t\tlet left = decode(start, middle)\n\t\t\tlet right = decode(middle, end)\n\t\t\treturn (left << BigInt((end - middle) * 8)) | right\n\t\t}\n\t\thead = (head << BigInt((view.byteLength - headLength) * 8)) | decode(headLength, view.byteLength)\n\t}\n\treturn head\n}\n\nlet errors = {\n\tError, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError, AggregateError: typeof AggregateError === 'function' ? AggregateError : null,\n}\ncurrentExtensions[0x65] = () => {\n\tlet data = read()\n\tif (!errors[data[0]]) {\n\t\tlet error = Error(data[1], { cause: data[2] })\n\t\terror.name = data[0]\n\t\treturn error\n\t}\n\treturn errors[data[0]](data[1], { cause: data[2] })\n}\n\ncurrentExtensions[0x69] = (data) => {\n\t// id extension (for structured clones)\n\tif (currentUnpackr.structuredClone === false) throw new Error('Structured clone extension is disabled')\n\tlet id = dataView.getUint32(position - 4)\n\tif (!referenceMap)\n\t\treferenceMap = new Map()\n\tlet token = src[position]\n\tlet target\n\t// TODO: handle any other types that can cycle and make the code more robust if there are other extensions\n\tif (token >= 0x90 && token < 0xa0 || token == 0xdc || token == 0xdd)\n\t\ttarget = []\n\telse if (token >= 0x80 && token < 0x90 || token == 0xde || token == 0xdf)\n\t\ttarget = new Map()\n\telse if ((token >= 0xc7 && token <= 0xc9 || token >= 0xd4 && token <= 0xd8) && src[position + 1] === 0x73)\n\t\ttarget = new Set()\n\telse\n\t\ttarget = {}\n\n\tlet refEntry = { target } // a placeholder object\n\treferenceMap.set(id, refEntry)\n\tlet targetProperties = read() // read the next value as the target object to id\n\tif (!refEntry.used) {\n\t\t// no cycle, can just use the returned read object\n\t\treturn refEntry.target = targetProperties // replace the placeholder with the real one\n\t} else {\n\t\t// there is a cycle, so we have to assign properties to original target\n\t\tObject.assign(target, targetProperties)\n\t}\n\n\t// copy over map/set entries if we're able to\n\tif (target instanceof Map)\n\t\tfor (let [k, v] of targetProperties.entries()) target.set(k, v)\n\tif (target instanceof Set)\n\t\tfor (let i of Array.from(targetProperties)) target.add(i)\n\treturn target\n}\n\ncurrentExtensions[0x70] = (data) => {\n\t// pointer extension (for structured clones)\n\tif (currentUnpackr.structuredClone === false) throw new Error('Structured clone extension is disabled')\n\tlet id = dataView.getUint32(position - 4)\n\tlet refEntry = referenceMap.get(id)\n\trefEntry.used = true\n\treturn refEntry.target\n}\n\ncurrentExtensions[0x73] = () => new Set(read())\n\nexport const typedArrays = ['Int8','Uint8','Uint8Clamped','Int16','Uint16','Int32','Uint32','Float32','Float64','BigInt64','BigUint64'].map(type => type + 'Array')\n\nlet glbl = typeof globalThis === 'object' ? globalThis : window;\ncurrentExtensions[0x74] = (data) => {\n\tlet typeCode = data[0]\n\t// we always have to slice to get a new ArrayBuffer that is aligned\n\tlet buffer = Uint8Array.prototype.slice.call(data, 1).buffer\n\n\tlet typedArrayName = typedArrays[typeCode]\n\tif (!typedArrayName) {\n\t\tif (typeCode === 16) return buffer\n\t\tif (typeCode === 17) return new DataView(buffer)\n\t\tthrow new Error('Could not find typed array for code ' + typeCode)\n\t}\n\treturn new glbl[typedArrayName](buffer)\n}\ncurrentExtensions[0x78] = () => {\n\tlet data = read()\n\treturn new RegExp(data[0], data[1])\n}\nconst TEMP_BUNDLE = []\ncurrentExtensions[0x62] = (data) => {\n\tlet dataSize = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]\n\tlet dataPosition = position\n\tposition += dataSize - data.length\n\tbundledStrings = TEMP_BUNDLE\n\tbundledStrings = [readOnlyJSString(), readOnlyJSString()]\n\tbundledStrings.position0 = 0\n\tbundledStrings.position1 = 0\n\tbundledStrings.postBundlePosition = position\n\tposition = dataPosition\n\treturn read()\n}\n\ncurrentExtensions[0xff] = (data) => {\n\t// 32-bit date extension\n\tif (data.length == 4)\n\t\treturn new Date((data[0] * 0x1000000 + (data[1] << 16) + (data[2] << 8) + data[3]) * 1000)\n\telse if (data.length == 8)\n\t\treturn new Date(\n\t\t\t((data[0] << 22) + (data[1] << 14) + (data[2] << 6) + (data[3] >> 2)) / 1000000 +\n\t\t\t((data[3] & 0x3) * 0x100000000 + data[4] * 0x1000000 + (data[5] << 16) + (data[6] << 8) + data[7]) * 1000)\n\telse if (data.length == 12)\n\t\treturn new Date(\n\t\t\t((data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]) / 1000000 +\n\t\t\t(((data[4] & 0x80) ? -0x1000000000000 : 0) + data[6] * 0x10000000000 + data[7] * 0x100000000 + data[8] * 0x1000000 + (data[9] << 16) + (data[10] << 8) + data[11]) * 1000)\n\telse\n\t\treturn new Date('invalid')\n}\n// registration of bulk record definition?\n// currentExtensions[0x52] = () =>\n\nfunction saveState(callback) {\n\tif (onSaveState)\n\t\tonSaveState();\n\tlet savedSrcEnd = srcEnd\n\tlet savedPosition = position\n\tlet savedStringPosition = stringPosition\n\tlet savedSrcStringStart = srcStringStart\n\tlet savedSrcStringEnd = srcStringEnd\n\tlet savedSrcString = srcString\n\tlet savedStrings = strings\n\tlet savedReferenceMap = referenceMap\n\tlet savedBundledStrings = bundledStrings\n\n\t// TODO: We may need to revisit this if we do more external calls to user code (since it could be slow)\n\tlet savedSrc = new Uint8Array(src.slice(0, srcEnd)) // we copy the data in case it changes while external data is processed\n\tlet savedStructures = currentStructures\n\tlet savedStructuresContents = currentStructures.slice(0, currentStructures.length)\n\tlet savedPackr = currentUnpackr\n\tlet savedSequentialMode = sequentialMode\n\tlet value = callback()\n\tsrcEnd = savedSrcEnd\n\tposition = savedPosition\n\tstringPosition = savedStringPosition\n\tsrcStringStart = savedSrcStringStart\n\tsrcStringEnd = savedSrcStringEnd\n\tsrcString = savedSrcString\n\tstrings = savedStrings\n\treferenceMap = savedReferenceMap\n\tbundledStrings = savedBundledStrings\n\tsrc = savedSrc\n\tsequentialMode = savedSequentialMode\n\tcurrentStructures = savedStructures\n\tcurrentStructures.splice(0, currentStructures.length, ...savedStructuresContents)\n\tcurrentUnpackr = savedPackr\n\tdataView = new DataView(src.buffer, src.byteOffset, src.byteLength)\n\treturn value\n}\nexport function clearSource() {\n\tsrc = null\n\treferenceMap = null\n\tcurrentStructures = null\n}\n\nexport function addExtension(extension) {\n\tif (extension.unpack)\n\t\tcurrentExtensions[extension.type] = extension.unpack\n\telse\n\t\tcurrentExtensions[extension.type] = extension\n}\n\nexport const mult10 = new Array(147) // this is a table matching binary exponents to the multiplier to determine significant digit rounding\nfor (let i = 0; i < 256; i++) {\n\tmult10[i] = +('1e' + Math.floor(45.15 - i * 0.30103))\n}\nexport const Decoder = Unpackr\nvar defaultUnpackr = new Unpackr({ useRecords: false })\nexport const unpack = defaultUnpackr.unpack\nexport const unpackMultiple = defaultUnpackr.unpackMultiple\nexport const decode = defaultUnpackr.unpack\nexport const FLOAT32_OPTIONS = {\n\tNEVER: 0,\n\tALWAYS: 1,\n\tDECIMAL_ROUND: 3,\n\tDECIMAL_FIT: 4\n}\nlet f32Array = new Float32Array(1)\nlet u8Array = new Uint8Array(f32Array.buffer, 0, 4)\nexport function roundFloat32(float32Number) {\n\tf32Array[0] = float32Number\n\tlet multiplier = mult10[((u8Array[3] & 0x7f) << 1) | (u8Array[2] >> 7)]\n\treturn ((multiplier * float32Number + (float32Number > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n}\nexport function setReadStruct(updatedReadStruct, loadedStructs, saveState) {\n\treadStruct = updatedReadStruct;\n\tonLoadedStructures = loadedStructs;\n\tonSaveState = saveState;\n}\n","import { Unpackr, mult10, C1Type, typedArrays, addExtension as unpackAddExtension } from './unpack.js'\nlet textEncoder\ntry {\n\ttextEncoder = new TextEncoder()\n} catch (error) {}\nlet extensions, extensionClasses\nconst hasNodeBuffer = typeof Buffer !== 'undefined'\nconst ByteArrayAllocate = hasNodeBuffer ?\n\tfunction(length) { return Buffer.allocUnsafeSlow(length) } : Uint8Array\nconst ByteArray = hasNodeBuffer ? Buffer : Uint8Array\nconst MAX_BUFFER_SIZE = hasNodeBuffer ? 0x100000000 : 0x7fd00000\nlet target, keysTarget\nlet targetView\nlet position = 0\nlet safeEnd\nlet bundledStrings = null\nlet writeStructSlots\nconst MAX_BUNDLE_SIZE = 0x5500 // maximum characters such that the encoded bytes fits in 16 bits.\nconst hasNonLatin = /[\\u0080-\\uFFFF]/\nexport const RECORD_SYMBOL = Symbol('record-id')\nexport class Packr extends Unpackr {\n\tconstructor(options) {\n\t\tsuper(options)\n\t\tthis.offset = 0\n\t\tlet typeBuffer\n\t\tlet start\n\t\tlet hasSharedUpdate\n\t\tlet structures\n\t\tlet referenceMap\n\t\tlet encodeUtf8 = ByteArray.prototype.utf8Write ? function(string, position) {\n\t\t\treturn target.utf8Write(string, position, target.byteLength - position)\n\t\t} : (textEncoder && textEncoder.encodeInto) ?\n\t\t\tfunction(string, position) {\n\t\t\t\treturn textEncoder.encodeInto(string, target.subarray(position)).written\n\t\t\t} : false\n\n\t\tlet packr = this\n\t\tif (!options)\n\t\t\toptions = {}\n\t\tlet isSequential = options && options.sequential\n\t\tlet hasSharedStructures = options.structures || options.saveStructures\n\t\tlet maxSharedStructures = options.maxSharedStructures\n\t\tif (maxSharedStructures == null)\n\t\t\tmaxSharedStructures = hasSharedStructures ? 32 : 0\n\t\tif (maxSharedStructures > 8160)\n\t\t\tthrow new Error('Maximum maxSharedStructure is 8160')\n\t\tif (options.structuredClone && options.moreTypes == undefined) {\n\t\t\tthis.moreTypes = true\n\t\t}\n\t\tlet maxOwnStructures = options.maxOwnStructures\n\t\tif (maxOwnStructures == null)\n\t\t\tmaxOwnStructures = hasSharedStructures ? 32 : 64\n\t\tif (!this.structures && options.useRecords != false)\n\t\t\tthis.structures = []\n\t\t// two byte record ids for shared structures\n\t\tlet useTwoByteRecords = maxSharedStructures > 32 || (maxOwnStructures + maxSharedStructures > 64)\n\t\tlet sharedLimitId = maxSharedStructures + 0x40\n\t\tlet maxStructureId = maxSharedStructures + maxOwnStructures + 0x40\n\t\tif (maxStructureId > 8256) {\n\t\t\tthrow new Error('Maximum maxSharedStructure + maxOwnStructure is 8192')\n\t\t}\n\t\tlet recordIdsToRemove = []\n\t\tlet transitionsCount = 0\n\t\tlet serializationsSinceTransitionRebuild = 0\n\n\t\tthis.pack = this.encode = function(value, encodeOptions) {\n\t\t\tif (!target) {\n\t\t\t\ttarget = new ByteArrayAllocate(8192)\n\t\t\t\ttargetView = target.dataView || (target.dataView = new DataView(target.buffer, 0, 8192))\n\t\t\t\tposition = 0\n\t\t\t}\n\t\t\tsafeEnd = target.length - 10\n\t\t\tif (safeEnd - position < 0x800) {\n\t\t\t\t// don't start too close to the end,\n\t\t\t\ttarget = new ByteArrayAllocate(target.length)\n\t\t\t\ttargetView = target.dataView || (target.dataView = new DataView(target.buffer, 0, target.length))\n\t\t\t\tsafeEnd = target.length - 10\n\t\t\t\tposition = 0\n\t\t\t} else\n\t\t\t\tposition = (position + 7) & 0x7ffffff8 // Word align to make any future copying of this buffer faster\n\t\t\tstart = position\n\t\t\tif (encodeOptions & RESERVE_START_SPACE) position += (encodeOptions & 0xff)\n\t\t\treferenceMap = packr.structuredClone ? new Map() : null\n\t\t\tif (packr.bundleStrings && typeof value !== 'string') {\n\t\t\t\tbundledStrings = []\n\t\t\t\tbundledStrings.size = Infinity // force a new bundle start on first string\n\t\t\t} else\n\t\t\t\tbundledStrings = null\n\t\t\tstructures = packr.structures\n\t\t\tif (structures) {\n\t\t\t\tif (structures.uninitialized)\n\t\t\t\t\tstructures = packr._mergeStructures(packr.getStructures())\n\t\t\t\tlet sharedLength = structures.sharedLength || 0\n\t\t\t\tif (sharedLength > maxSharedStructures) {\n\t\t\t\t\t//if (maxSharedStructures <= 32 && structures.sharedLength > 32) // TODO: could support this, but would need to update the limit ids\n\t\t\t\t\tthrow new Error('Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to ' + structures.sharedLength)\n\t\t\t\t}\n\t\t\t\tif (!structures.transitions) {\n\t\t\t\t\t// rebuild our structure transitions\n\t\t\t\t\tstructures.transitions = Object.create(null)\n\t\t\t\t\tfor (let i = 0; i < sharedLength; i++) {\n\t\t\t\t\t\tlet keys = structures[i]\n\t\t\t\t\t\tif (!keys)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\tlet nextTransition, transition = structures.transitions\n\t\t\t\t\t\tfor (let j = 0, l = keys.length; j < l; j++) {\n\t\t\t\t\t\t\tlet key = keys[j]\n\t\t\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransition[RECORD_SYMBOL] = i + 0x40\n\t\t\t\t\t}\n\t\t\t\t\tthis.lastNamedStructuresLength = sharedLength\n\t\t\t\t}\n\t\t\t\tif (!isSequential) {\n\t\t\t\t\tstructures.nextId = sharedLength + 0x40\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasSharedUpdate)\n\t\t\t\thasSharedUpdate = false\n\t\t\tlet encodingError;\n\t\t\ttry {\n\t\t\t\tif (packr.randomAccessStructure && value && typeof value === 'object') {\n\t\t\t\t\tif (value.constructor === Object) writeStruct(value); // simple object\n\t\t\t\t\telse if (value.constructor !== Map && !Array.isArray(value) && !extensionClasses.some(extClass => value instanceof extClass)) {\n\t\t\t\t\t\t// allow user classes, if they don't need special handling (but do use toJSON if available)\n\t\t\t\t\t\twriteStruct(value.toJSON ? value.toJSON() : value);\n\t\t\t\t\t} else pack(value)\n\t\t\t\t} else\n\t\t\t\t\tpack(value)\n\t\t\t\tlet lastBundle = bundledStrings;\n\t\t\t\tif (bundledStrings)\n\t\t\t\t\twriteBundles(start, pack, 0)\n\t\t\t\tif (referenceMap && referenceMap.idsToInsert) {\n\t\t\t\t\tlet idsToInsert = referenceMap.idsToInsert.sort((a, b) => a.offset > b.offset ? 1 : -1);\n\t\t\t\t\tlet i = idsToInsert.length;\n\t\t\t\t\tlet incrementPosition = -1;\n\t\t\t\t\twhile (lastBundle && i > 0) {\n\t\t\t\t\t\tlet insertionPoint = idsToInsert[--i].offset + start;\n\t\t\t\t\t\tif (insertionPoint < (lastBundle.stringsPosition + start) && incrementPosition === -1)\n\t\t\t\t\t\t\tincrementPosition = 0;\n\t\t\t\t\t\tif (insertionPoint > (lastBundle.position + start)) {\n\t\t\t\t\t\t\tif (incrementPosition >= 0)\n\t\t\t\t\t\t\t\tincrementPosition += 6;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (incrementPosition >= 0) {\n\t\t\t\t\t\t\t\t// update the bundle reference now\n\t\t\t\t\t\t\t\ttargetView.setUint32(lastBundle.position + start,\n\t\t\t\t\t\t\t\t\ttargetView.getUint32(lastBundle.position + start) + incrementPosition)\n\t\t\t\t\t\t\t\tincrementPosition = -1; // reset\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlastBundle = lastBundle.previous;\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (incrementPosition >= 0 && lastBundle) {\n\t\t\t\t\t\t// update the bundle reference now\n\t\t\t\t\t\ttargetView.setUint32(lastBundle.position + start,\n\t\t\t\t\t\t\ttargetView.getUint32(lastBundle.position + start) + incrementPosition)\n\t\t\t\t\t}\n\t\t\t\t\tposition += idsToInsert.length * 6;\n\t\t\t\t\tif (position > safeEnd)\n\t\t\t\t\t\tmakeRoom(position)\n\t\t\t\t\tpackr.offset = position\n\t\t\t\t\tlet serialized = insertIds(target.subarray(start, position), idsToInsert)\n\t\t\t\t\treferenceMap = null\n\t\t\t\t\treturn serialized\n\t\t\t\t}\n\t\t\t\tpackr.offset = position // update the offset so next serialization doesn't write over our buffer, but can continue writing to same buffer sequentially\n\t\t\t\tif (encodeOptions & REUSE_BUFFER_MODE) {\n\t\t\t\t\ttarget.start = start\n\t\t\t\t\ttarget.end = position\n\t\t\t\t\treturn target\n\t\t\t\t}\n\t\t\t\treturn target.subarray(start, position) // position can change if we call pack again in saveStructures, so we get the buffer now\n\t\t\t} catch(error) {\n\t\t\t\tencodingError = error;\n\t\t\t\tthrow error;\n\t\t\t} finally {\n\t\t\t\tif (structures) {\n\t\t\t\t\tresetStructures();\n\t\t\t\t\tif (hasSharedUpdate && packr.saveStructures) {\n\t\t\t\t\t\tlet sharedLength = structures.sharedLength || 0\n\t\t\t\t\t\t// we can't rely on start/end with REUSE_BUFFER_MODE since they will (probably) change when we save\n\t\t\t\t\t\tlet returnBuffer = target.subarray(start, position)\n\t\t\t\t\t\tlet newSharedData = prepareStructures(structures, packr);\n\t\t\t\t\t\tif (!encodingError) { // TODO: If there is an encoding error, should make the structures as uninitialized so they get rebuilt next time\n\t\t\t\t\t\t\tif (packr.saveStructures(newSharedData, newSharedData.isCompatible) === false) {\n\t\t\t\t\t\t\t\t// get updated structures and try again if the update failed\n\t\t\t\t\t\t\t\treturn packr.pack(value, encodeOptions)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpackr.lastNamedStructuresLength = sharedLength\n\t\t\t\t\t\t\t// don't keep large buffers around\n\t\t\t\t\t\t\tif (target.length > 0x40000000) target = null\n\t\t\t\t\t\t\treturn returnBuffer\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// don't keep large buffers around, they take too much memory and cause problems (limit at 1GB)\n\t\t\t\tif (target.length > 0x40000000) target = null\n\t\t\t\tif (encodeOptions & RESET_BUFFER_MODE)\n\t\t\t\t\tposition = start\n\t\t\t}\n\t\t}\n\t\tconst resetStructures = () => {\n\t\t\tif (serializationsSinceTransitionRebuild < 10)\n\t\t\t\tserializationsSinceTransitionRebuild++\n\t\t\tlet sharedLength = structures.sharedLength || 0\n\t\t\tif (structures.length > sharedLength && !isSequential)\n\t\t\t\tstructures.length = sharedLength\n\t\t\tif (transitionsCount > 10000) {\n\t\t\t\t// force a rebuild occasionally after a lot of transitions so it can get cleaned up\n\t\t\t\tstructures.transitions = null\n\t\t\t\tserializationsSinceTransitionRebuild = 0\n\t\t\t\ttransitionsCount = 0\n\t\t\t\tif (recordIdsToRemove.length > 0)\n\t\t\t\t\trecordIdsToRemove = []\n\t\t\t} else if (recordIdsToRemove.length > 0 && !isSequential) {\n\t\t\t\tfor (let i = 0, l = recordIdsToRemove.length; i < l; i++) {\n\t\t\t\t\trecordIdsToRemove[i][RECORD_SYMBOL] = 0\n\t\t\t\t}\n\t\t\t\trecordIdsToRemove = []\n\t\t\t}\n\t\t}\n\t\tconst packArray = (value) => {\n\t\t\tvar length = value.length\n\t\t\tif (length < 0x10) {\n\t\t\t\ttarget[position++] = 0x90 | length\n\t\t\t} else if (length < 0x10000) {\n\t\t\t\ttarget[position++] = 0xdc\n\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t} else {\n\t\t\t\ttarget[position++] = 0xdd\n\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\tposition += 4\n\t\t\t}\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tpack(value[i])\n\t\t\t}\n\t\t}\n\t\tconst pack = (value) => {\n\t\t\tif (position > safeEnd)\n\t\t\t\ttarget = makeRoom(position)\n\n\t\t\tvar type = typeof value\n\t\t\tvar length\n\t\t\tif (type === 'string') {\n\t\t\t\tlet strLength = value.length\n\t\t\t\tif (bundledStrings && strLength >= 4 && strLength < 0x1000) {\n\t\t\t\t\tif ((bundledStrings.size += strLength) > MAX_BUNDLE_SIZE) {\n\t\t\t\t\t\tlet extStart\n\t\t\t\t\t\tlet maxBytes = (bundledStrings[0] ? bundledStrings[0].length * 3 + bundledStrings[1].length : 0) + 10\n\t\t\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\t\t\t\t\t\tlet lastBundle\n\t\t\t\t\t\tif (bundledStrings.position) { // here we use the 0x62 extension to write the last bundle and reserve space for the reference pointer to the next/current bundle\n\t\t\t\t\t\t\tlastBundle = bundledStrings\n\t\t\t\t\t\t\ttarget[position] = 0xc8 // ext 16\n\t\t\t\t\t\t\tposition += 3 // reserve for the writing bundle size\n\t\t\t\t\t\t\ttarget[position++] = 0x62 // 'b'\n\t\t\t\t\t\t\textStart = position - start\n\t\t\t\t\t\t\tposition += 4 // reserve for writing bundle reference\n\t\t\t\t\t\t\twriteBundles(start, pack, 0) // write the last bundles\n\t\t\t\t\t\t\ttargetView.setUint16(extStart + start - 3, position - start - extStart)\n\t\t\t\t\t\t} else { // here we use the 0x62 extension just to reserve the space for the reference pointer to the bundle (will be updated once the bundle is written)\n\t\t\t\t\t\t\ttarget[position++] = 0xd6 // fixext 4\n\t\t\t\t\t\t\ttarget[position++] = 0x62 // 'b'\n\t\t\t\t\t\t\textStart = position - start\n\t\t\t\t\t\t\tposition += 4 // reserve for writing bundle reference\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbundledStrings = ['', ''] // create new ones\n\t\t\t\t\t\tbundledStrings.previous = lastBundle;\n\t\t\t\t\t\tbundledStrings.size = 0\n\t\t\t\t\t\tbundledStrings.position = extStart\n\t\t\t\t\t}\n\t\t\t\t\tlet twoByte = hasNonLatin.test(value)\n\t\t\t\t\tbundledStrings[twoByte ? 0 : 1] += value\n\t\t\t\t\ttarget[position++] = 0xc1\n\t\t\t\t\tpack(twoByte ? -strLength : strLength);\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet headerSize\n\t\t\t\t// first we estimate the header size, so we can write to the correct location\n\t\t\t\tif (strLength < 0x20) {\n\t\t\t\t\theaderSize = 1\n\t\t\t\t} else if (strLength < 0x100) {\n\t\t\t\t\theaderSize = 2\n\t\t\t\t} else if (strLength < 0x10000) {\n\t\t\t\t\theaderSize = 3\n\t\t\t\t} else {\n\t\t\t\t\theaderSize = 5\n\t\t\t\t}\n\t\t\t\tlet maxBytes = strLength * 3\n\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\n\t\t\t\tif (strLength < 0x40 || !encodeUtf8) {\n\t\t\t\t\tlet i, c1, c2, strPosition = position + headerSize\n\t\t\t\t\tfor (i = 0; i < strLength; i++) {\n\t\t\t\t\t\tc1 = value.charCodeAt(i)\n\t\t\t\t\t\tif (c1 < 0x80) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1\n\t\t\t\t\t\t} else if (c1 < 0x800) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 | 0xc0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t(c1 & 0xfc00) === 0xd800 &&\n\t\t\t\t\t\t\t((c2 = value.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tc1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff)\n\t\t\t\t\t\t\ti++\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 18 | 0xf0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 | 0xe0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlength = strPosition - position - headerSize\n\t\t\t\t} else {\n\t\t\t\t\tlength = encodeUtf8(value, position + headerSize)\n\t\t\t\t}\n\n\t\t\t\tif (length < 0x20) {\n\t\t\t\t\ttarget[position++] = 0xa0 | length\n\t\t\t\t} else if (length < 0x100) {\n\t\t\t\t\tif (headerSize < 2) {\n\t\t\t\t\t\ttarget.copyWithin(position + 2, position + 1, position + 1 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\ttarget[position++] = length\n\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\tif (headerSize < 3) {\n\t\t\t\t\t\ttarget.copyWithin(position + 3, position + 2, position + 2 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0xda\n\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t} else {\n\t\t\t\t\tif (headerSize < 5) {\n\t\t\t\t\t\ttarget.copyWithin(position + 5, position + 3, position + 3 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0xdb\n\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\tposition += 4\n\t\t\t\t}\n\t\t\t\tposition += length\n\t\t\t} else if (type === 'number') {\n\t\t\t\tif (value >>> 0 === value) {// positive integer, 32-bit or less\n\t\t\t\t\t// positive uint\n\t\t\t\t\tif (value < 0x20 || (value < 0x80 && this.useRecords === false) || (value < 0x40 && !this.randomAccessStructure)) {\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x100) {\n\t\t\t\t\t\ttarget[position++] = 0xcc\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x10000) {\n\t\t\t\t\t\ttarget[position++] = 0xcd\n\t\t\t\t\t\ttarget[position++] = value >> 8\n\t\t\t\t\t\ttarget[position++] = value & 0xff\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0xce\n\t\t\t\t\t\ttargetView.setUint32(position, value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else if (value >> 0 === value) { // negative integer\n\t\t\t\t\tif (value >= -0x20) {\n\t\t\t\t\t\ttarget[position++] = 0x100 + value\n\t\t\t\t\t} else if (value >= -0x80) {\n\t\t\t\t\t\ttarget[position++] = 0xd0\n\t\t\t\t\t\ttarget[position++] = value + 0x100\n\t\t\t\t\t} else if (value >= -0x8000) {\n\t\t\t\t\t\ttarget[position++] = 0xd1\n\t\t\t\t\t\ttargetView.setInt16(position, value)\n\t\t\t\t\t\tposition += 2\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0xd2\n\t\t\t\t\t\ttargetView.setInt32(position, value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet useFloat32\n\t\t\t\t\tif ((useFloat32 = this.useFloat32) > 0 && value < 0x100000000 && value >= -0x80000000) {\n\t\t\t\t\t\ttarget[position++] = 0xca\n\t\t\t\t\t\ttargetView.setFloat32(position, value)\n\t\t\t\t\t\tlet xShifted\n\t\t\t\t\t\tif (useFloat32 < 4 ||\n\t\t\t\t\t\t\t\t// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\t\t\t((xShifted = value * mult10[((target[position] & 0x7f) << 1) | (target[position + 1] >> 7)]) >> 0) === xShifted) {\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tposition-- // move back into position for writing a double\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0xcb\n\t\t\t\t\ttargetView.setFloat64(position, value)\n\t\t\t\t\tposition += 8\n\t\t\t\t}\n\t\t\t} else if (type === 'object' || type === 'function') {\n\t\t\t\tif (!value)\n\t\t\t\t\ttarget[position++] = 0xc0\n\t\t\t\telse {\n\t\t\t\t\tif (referenceMap) {\n\t\t\t\t\t\tlet referee = referenceMap.get(value)\n\t\t\t\t\t\tif (referee) {\n\t\t\t\t\t\t\tif (!referee.id) {\n\t\t\t\t\t\t\t\tlet idsToInsert = referenceMap.idsToInsert || (referenceMap.idsToInsert = [])\n\t\t\t\t\t\t\t\treferee.id = idsToInsert.push(referee)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttarget[position++] = 0xd6 // fixext 4\n\t\t\t\t\t\t\ttarget[position++] = 0x70 // \"p\" for pointer\n\t\t\t\t\t\t\ttargetView.setUint32(position, referee.id)\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\treferenceMap.set(value, { offset: position - start })\n\t\t\t\t\t}\n\t\t\t\t\tlet constructor = value.constructor\n\t\t\t\t\tif (constructor === Object) {\n\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t} else if (constructor === Array) {\n\t\t\t\t\t\tpackArray(value)\n\t\t\t\t\t} else if (constructor === Map) {\n\t\t\t\t\t\tif (this.mapAsEmptyObject) target[position++] = 0x80\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlength = value.size\n\t\t\t\t\t\t\tif (length < 0x10) {\n\t\t\t\t\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\t\t\t\ttarget[position++] = 0xde\n\t\t\t\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget[position++] = 0xdf\n\t\t\t\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (let [key, entryValue] of value) {\n\t\t\t\t\t\t\t\tpack(key)\n\t\t\t\t\t\t\t\tpack(entryValue)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let i = 0, l = extensions.length; i < l; i++) {\n\t\t\t\t\t\t\tlet extensionClass = extensionClasses[i]\n\t\t\t\t\t\t\tif (value instanceof extensionClass) {\n\t\t\t\t\t\t\t\tlet extension = extensions[i]\n\t\t\t\t\t\t\t\tif (extension.write) {\n\t\t\t\t\t\t\t\t\tif (extension.type) {\n\t\t\t\t\t\t\t\t\t\ttarget[position++] = 0xd4 // one byte \"tag\" extension\n\t\t\t\t\t\t\t\t\t\ttarget[position++] = extension.type\n\t\t\t\t\t\t\t\t\t\ttarget[position++] = 0\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlet writeResult = extension.write.call(this, value)\n\t\t\t\t\t\t\t\t\tif (writeResult === value) { // avoid infinite recursion\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\t\t\t\t\tpackArray(value)\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tpack(writeResult)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet currentTarget = target\n\t\t\t\t\t\t\t\tlet currentTargetView = targetView\n\t\t\t\t\t\t\t\tlet currentPosition = position\n\t\t\t\t\t\t\t\ttarget = null\n\t\t\t\t\t\t\t\tlet result\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tresult = extension.pack.call(this, value, (size) => {\n\t\t\t\t\t\t\t\t\t\t// restore target and use it\n\t\t\t\t\t\t\t\t\t\ttarget = currentTarget\n\t\t\t\t\t\t\t\t\t\tcurrentTarget = null\n\t\t\t\t\t\t\t\t\t\tposition += size\n\t\t\t\t\t\t\t\t\t\tif (position > safeEnd)\n\t\t\t\t\t\t\t\t\t\t\tmakeRoom(position)\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\ttarget, targetView, position: position - size\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, pack)\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\t// restore current target information (unless already restored)\n\t\t\t\t\t\t\t\t\tif (currentTarget) {\n\t\t\t\t\t\t\t\t\t\ttarget = currentTarget\n\t\t\t\t\t\t\t\t\t\ttargetView = currentTargetView\n\t\t\t\t\t\t\t\t\t\tposition = currentPosition\n\t\t\t\t\t\t\t\t\t\tsafeEnd = target.length - 10\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t\t\tif (result.length + position > safeEnd)\n\t\t\t\t\t\t\t\t\t\tmakeRoom(result.length + position)\n\t\t\t\t\t\t\t\t\tposition = writeExtensionData(result, target, position, extension.type)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// check isArray after extensions, because extensions can extend Array\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tpackArray(value)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// use this as an alternate mechanism for expressing how to serialize\n\t\t\t\t\t\t\tif (value.toJSON) {\n\t\t\t\t\t\t\t\tconst json = value.toJSON()\n\t\t\t\t\t\t\t\t// if for some reason value.toJSON returns itself it'll loop forever\n\t\t\t\t\t\t\t\tif (json !== value)\n\t\t\t\t\t\t\t\t\treturn pack(json)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// if there is a writeFunction, use it, otherwise just encode as undefined\n\t\t\t\t\t\t\tif (type === 'function')\n\t\t\t\t\t\t\t\treturn pack(this.writeFunction && this.writeFunction(value));\n\n\t\t\t\t\t\t\t// no extension found, write as plain object\n\t\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (type === 'boolean') {\n\t\t\t\ttarget[position++] = value ? 0xc3 : 0xc2\n\t\t\t} else if (type === 'bigint') {\n\t\t\t\tif (value < 0x8000000000000000 && value >= -0x8000000000000000) {\n\t\t\t\t\t// use a signed int as long as it fits\n\t\t\t\t\ttarget[position++] = 0xd3\n\t\t\t\t\ttargetView.setBigInt64(position, value)\n\t\t\t\t} else if (value < 0x10000000000000000 && value > 0) {\n\t\t\t\t\t// if we can fit an unsigned int, use that\n\t\t\t\t\ttarget[position++] = 0xcf\n\t\t\t\t\ttargetView.setBigUint64(position, value)\n\t\t\t\t} else {\n\t\t\t\t\t// overflow\n\t\t\t\t\tif (this.largeBigIntToFloat) {\n\t\t\t\t\t\ttarget[position++] = 0xcb\n\t\t\t\t\t\ttargetView.setFloat64(position, Number(value))\n\t\t\t\t\t} else if (this.largeBigIntToString) {\n\t\t\t\t\t\treturn pack(value.toString());\n\t\t\t\t\t} else if (this.useBigIntExtension || this.moreTypes) {\n\t\t\t\t\t\tlet empty = value < 0 ? BigInt(-1) : BigInt(0)\n\n\t\t\t\t\t\tlet array\n\t\t\t\t\t\tif (value >> BigInt(0x10000) === empty) {\n\t\t\t\t\t\t\tlet mask = BigInt(0x10000000000000000) - BigInt(1) // literal would overflow\n\t\t\t\t\t\t\tlet chunks = []\n\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\tchunks.push(value & mask)\n\t\t\t\t\t\t\t\tif ((value >> BigInt(63)) === empty) break\n\t\t\t\t\t\t\t\tvalue >>= BigInt(64)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tarray = new Uint8Array(new BigUint64Array(chunks).buffer)\n\t\t\t\t\t\t\tarray.reverse()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet invert = value < 0\n\t\t\t\t\t\t\tlet string = (invert ? ~value : value).toString(16)\n\t\t\t\t\t\t\tif (string.length % 2) {\n\t\t\t\t\t\t\t\tstring = '0' + string\n\t\t\t\t\t\t\t} else if (parseInt(string.charAt(0), 16) >= 8) {\n\t\t\t\t\t\t\t\tstring = '00' + string\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (hasNodeBuffer) {\n\t\t\t\t\t\t\t\tarray = Buffer.from(string, 'hex')\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tarray = new Uint8Array(string.length / 2)\n\t\t\t\t\t\t\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\t\t\t\t\t\t\tarray[i] = parseInt(string.slice(i * 2, i * 2 + 2), 16)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (invert) {\n\t\t\t\t\t\t\t\tfor (let i = 0; i < array.length; i++) array[i] = ~array[i]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (array.length + position > safeEnd)\n\t\t\t\t\t\t\tmakeRoom(array.length + position)\n\t\t\t\t\t\tposition = writeExtensionData(array, target, position, 0x42)\n\t\t\t\t\t\treturn\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new RangeError(value + ' was too large to fit in MessagePack 64-bit integer format, use' +\n\t\t\t\t\t\t\t' useBigIntExtension, or set largeBigIntToFloat to convert to float-64, or set' +\n\t\t\t\t\t\t\t' largeBigIntToString to convert to string')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tposition += 8\n\t\t\t} else if (type === 'undefined') {\n\t\t\t\tif (this.encodeUndefinedAsNil)\n\t\t\t\t\ttarget[position++] = 0xc0\n\t\t\t\telse {\n\t\t\t\t\ttarget[position++] = 0xd4 // a number of implementations use fixext1 with type 0, data 0 to denote undefined, so we follow suite\n\t\t\t\t\ttarget[position++] = 0\n\t\t\t\t\ttarget[position++] = 0\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error('Unknown type: ' + type)\n\t\t\t}\n\t\t}\n\n\t\tconst writePlainObject = (this.variableMapSize || this.coercibleKeyAsNumber || this.skipValues) ? (object) => {\n\t\t\t// this method is slightly slower, but generates \"preferred serialization\" (optimally small for smaller objects)\n\t\t\tlet keys;\n\t\t\tif (this.skipValues) {\n\t\t\t\tkeys = [];\n\t\t\t\tfor (let key in object) {\n\t\t\t\t\tif ((typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) &&\n\t\t\t\t\t\t!this.skipValues.includes(object[key]))\n\t\t\t\t\t\tkeys.push(key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tkeys = Object.keys(object)\n\t\t\t}\n\t\t\tlet length = keys.length\n\t\t\tif (length < 0x10) {\n\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t} else if (length < 0x10000) {\n\t\t\t\ttarget[position++] = 0xde\n\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t} else {\n\t\t\t\ttarget[position++] = 0xdf\n\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\tposition += 4\n\t\t\t}\n\t\t\tlet key\n\t\t\tif (this.coercibleKeyAsNumber) {\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tkey = keys[i]\n\t\t\t\t\tlet num = Number(key)\n\t\t\t\t\tpack(isNaN(num) ? key : num)\n\t\t\t\t\tpack(object[key])\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tpack(key = keys[i])\n\t\t\t\t\tpack(object[key])\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\t\t(object) => {\n\t\t\ttarget[position++] = 0xde // always using map 16, so we can preallocate and set the length afterwards\n\t\t\tlet objectOffset = position - start\n\t\t\tposition += 2\n\t\t\tlet size = 0\n\t\t\tfor (let key in object) {\n\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tpack(key)\n\t\t\t\t\tpack(object[key])\n\t\t\t\t\tsize++\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (size > 0xffff) {\n\t\t\t\tthrow new Error('Object is too large to serialize with fast 16-bit map size,' +\n\t\t\t\t' use the \"variableMapSize\" option to serialize this object');\n\t\t\t}\n\t\t\ttarget[objectOffset++ + start] = size >> 8\n\t\t\ttarget[objectOffset + start] = size & 0xff\n\t\t}\n\n\t\tconst writeRecord = this.useRecords === false ? writePlainObject :\n\t\t(options.progressiveRecords && !useTwoByteRecords) ? // this is about 2% faster for highly stable structures, since it only requires one for-in loop (but much more expensive when new structure needs to be written)\n\t\t(object) => {\n\t\t\tlet nextTransition, transition = structures.transitions || (structures.transitions = Object.create(null))\n\t\t\tlet objectOffset = position++ - start\n\t\t\tlet wroteKeys\n\t\t\tfor (let key in object) {\n\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\tif (nextTransition)\n\t\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\telse {\n\t\t\t\t\t\t// record doesn't exist, create full new record and insert it\n\t\t\t\t\t\tlet keys = Object.keys(object)\n\t\t\t\t\t\tlet lastTransition = transition\n\t\t\t\t\t\ttransition = structures.transitions\n\t\t\t\t\t\tlet newTransitions = 0\n\t\t\t\t\t\tfor (let i = 0, l = keys.length; i < l; i++) {\n\t\t\t\t\t\t\tlet key = keys[i]\n\t\t\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\t\t\tnewTransitions++\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (objectOffset + start + 1 == position) {\n\t\t\t\t\t\t\t// first key, so we don't need to insert, we can just write record directly\n\t\t\t\t\t\t\tposition--\n\t\t\t\t\t\t\tnewRecord(transition, keys, newTransitions)\n\t\t\t\t\t\t} else // otherwise we need to insert the record, moving existing data after the record\n\t\t\t\t\t\t\tinsertNewRecord(transition, keys, objectOffset, newTransitions)\n\t\t\t\t\t\twroteKeys = true\n\t\t\t\t\t\ttransition = lastTransition[key]\n\t\t\t\t\t}\n\t\t\t\t\tpack(object[key])\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!wroteKeys) {\n\t\t\t\tlet recordId = transition[RECORD_SYMBOL]\n\t\t\t\tif (recordId)\n\t\t\t\t\ttarget[objectOffset + start] = recordId\n\t\t\t\telse\n\t\t\t\t\tinsertNewRecord(transition, Object.keys(object), objectOffset, 0)\n\t\t\t}\n\t\t} :\n\t\t(object) => {\n\t\t\tlet nextTransition, transition = structures.transitions || (structures.transitions = Object.create(null))\n\t\t\tlet newTransitions = 0\n\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\tnextTransition = transition[key]\n\t\t\t\tif (!nextTransition) {\n\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\tnewTransitions++\n\t\t\t\t}\n\t\t\t\ttransition = nextTransition\n\t\t\t}\n\t\t\tlet recordId = transition[RECORD_SYMBOL]\n\t\t\tif (recordId) {\n\t\t\t\tif (recordId >= 0x60 && useTwoByteRecords) {\n\t\t\t\t\ttarget[position++] = ((recordId -= 0x60) & 0x1f) + 0x60\n\t\t\t\t\ttarget[position++] = recordId >> 5\n\t\t\t\t} else\n\t\t\t\t\ttarget[position++] = recordId\n\t\t\t} else {\n\t\t\t\tnewRecord(transition, transition.__keys__ || Object.keys(object), newTransitions)\n\t\t\t}\n\t\t\t// now write the values\n\t\t\tfor (let key in object)\n\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tpack(object[key])\n\t\t\t\t}\n\t\t}\n\n\t\t// create reference to useRecords if useRecords is a function\n\t\tconst checkUseRecords = typeof this.useRecords == 'function' && this.useRecords;\n\n\t\tconst writeObject = checkUseRecords ? (object) => {\n\t\t\tcheckUseRecords(object) ? writeRecord(object) : writePlainObject(object)\n\t\t} : writeRecord\n\n\t\tconst makeRoom = (end) => {\n\t\t\tlet newSize\n\t\t\tif (end > 0x1000000) {\n\t\t\t\t// special handling for really large buffers\n\t\t\t\tif ((end - start) > MAX_BUFFER_SIZE)\n\t\t\t\t\tthrow new Error('Packed buffer would be larger than maximum buffer size')\n\t\t\t\tnewSize = Math.min(MAX_BUFFER_SIZE,\n\t\t\t\t\tMath.round(Math.max((end - start) * (end > 0x4000000 ? 1.25 : 2), 0x400000) / 0x1000) * 0x1000)\n\t\t\t} else // faster handling for smaller buffers\n\t\t\t\tnewSize = ((Math.max((end - start) << 2, target.length - 1) >> 12) + 1) << 12\n\t\t\tlet newBuffer = new ByteArrayAllocate(newSize)\n\t\t\ttargetView = newBuffer.dataView || (newBuffer.dataView = new DataView(newBuffer.buffer, 0, newSize))\n\t\t\tend = Math.min(end, target.length)\n\t\t\tif (target.copy)\n\t\t\t\ttarget.copy(newBuffer, 0, start, end)\n\t\t\telse\n\t\t\t\tnewBuffer.set(target.slice(start, end))\n\t\t\tposition -= start\n\t\t\tstart = 0\n\t\t\tsafeEnd = newBuffer.length - 10\n\t\t\treturn target = newBuffer\n\t\t}\n\t\tconst newRecord = (transition, keys, newTransitions) => {\n\t\t\tlet recordId = structures.nextId\n\t\t\tif (!recordId)\n\t\t\t\trecordId = 0x40\n\t\t\tif (recordId < sharedLimitId && this.shouldShareStructure && !this.shouldShareStructure(keys)) {\n\t\t\t\trecordId = structures.nextOwnId\n\t\t\t\tif (!(recordId < maxStructureId))\n\t\t\t\t\trecordId = sharedLimitId\n\t\t\t\tstructures.nextOwnId = recordId + 1\n\t\t\t} else {\n\t\t\t\tif (recordId >= maxStructureId)// cycle back around\n\t\t\t\t\trecordId = sharedLimitId\n\t\t\t\tstructures.nextId = recordId + 1\n\t\t\t}\n\t\t\tlet highByte = keys.highByte = recordId >= 0x60 && useTwoByteRecords ? (recordId - 0x60) >> 5 : -1\n\t\t\ttransition[RECORD_SYMBOL] = recordId\n\t\t\ttransition.__keys__ = keys\n\t\t\tstructures[recordId - 0x40] = keys\n\n\t\t\tif (recordId < sharedLimitId) {\n\t\t\t\tkeys.isShared = true\n\t\t\t\tstructures.sharedLength = recordId - 0x3f\n\t\t\t\thasSharedUpdate = true\n\t\t\t\tif (highByte >= 0) {\n\t\t\t\t\ttarget[position++] = (recordId & 0x1f) + 0x60\n\t\t\t\t\ttarget[position++] = highByte\n\t\t\t\t} else {\n\t\t\t\t\ttarget[position++] = recordId\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (highByte >= 0) {\n\t\t\t\t\ttarget[position++] = 0xd5 // fixext 2\n\t\t\t\t\ttarget[position++] = 0x72 // \"r\" record defintion extension type\n\t\t\t\t\ttarget[position++] = (recordId & 0x1f) + 0x60\n\t\t\t\t\ttarget[position++] = highByte\n\t\t\t\t} else {\n\t\t\t\t\ttarget[position++] = 0xd4 // fixext 1\n\t\t\t\t\ttarget[position++] = 0x72 // \"r\" record defintion extension type\n\t\t\t\t\ttarget[position++] = recordId\n\t\t\t\t}\n\n\t\t\t\tif (newTransitions)\n\t\t\t\t\ttransitionsCount += serializationsSinceTransitionRebuild * newTransitions\n\t\t\t\t// record the removal of the id, we can maintain our shared structure\n\t\t\t\tif (recordIdsToRemove.length >= maxOwnStructures)\n\t\t\t\t\trecordIdsToRemove.shift()[RECORD_SYMBOL] = 0 // we are cycling back through, and have to remove old ones\n\t\t\t\trecordIdsToRemove.push(transition)\n\t\t\t\tpack(keys)\n\t\t\t}\n\t\t}\n\t\tconst insertNewRecord = (transition, keys, insertionOffset, newTransitions) => {\n\t\t\tlet mainTarget = target\n\t\t\tlet mainPosition = position\n\t\t\tlet mainSafeEnd = safeEnd\n\t\t\tlet mainStart = start\n\t\t\ttarget = keysTarget\n\t\t\tposition = 0\n\t\t\tstart = 0\n\t\t\tif (!target)\n\t\t\t\tkeysTarget = target = new ByteArrayAllocate(8192)\n\t\t\tsafeEnd = target.length - 10\n\t\t\tnewRecord(transition, keys, newTransitions)\n\t\t\tkeysTarget = target\n\t\t\tlet keysPosition = position\n\t\t\ttarget = mainTarget\n\t\t\tposition = mainPosition\n\t\t\tsafeEnd = mainSafeEnd\n\t\t\tstart = mainStart\n\t\t\tif (keysPosition > 1) {\n\t\t\t\tlet newEnd = position + keysPosition - 1\n\t\t\t\tif (newEnd > safeEnd)\n\t\t\t\t\tmakeRoom(newEnd)\n\t\t\t\tlet insertionPosition = insertionOffset + start\n\t\t\t\ttarget.copyWithin(insertionPosition + keysPosition, insertionPosition + 1, position)\n\t\t\t\ttarget.set(keysTarget.slice(0, keysPosition), insertionPosition)\n\t\t\t\tposition = newEnd\n\t\t\t} else {\n\t\t\t\ttarget[insertionOffset + start] = keysTarget[0]\n\t\t\t}\n\t\t}\n\t\tconst writeStruct = (object) => {\n\t\t\tlet newPosition = writeStructSlots(object, target, start, position, structures, makeRoom, (value, newPosition, notifySharedUpdate) => {\n\t\t\t\tif (notifySharedUpdate)\n\t\t\t\t\treturn hasSharedUpdate = true;\n\t\t\t\tposition = newPosition;\n\t\t\t\tlet startTarget = target;\n\t\t\t\tpack(value);\n\t\t\t\tresetStructures();\n\t\t\t\tif (startTarget !== target) {\n\t\t\t\t\treturn { position, targetView, target }; // indicate the buffer was re-allocated\n\t\t\t\t}\n\t\t\t\treturn position;\n\t\t\t}, this);\n\t\t\tif (newPosition === 0) // bail and go to a msgpack object\n\t\t\t\treturn writeObject(object);\n\t\t\tposition = newPosition;\n\t\t}\n\t}\n\tuseBuffer(buffer) {\n\t\t// this means we are finished using our own buffer and we can write over it safely\n\t\ttarget = buffer\n\t\ttarget.dataView || (target.dataView = new DataView(target.buffer, target.byteOffset, target.byteLength))\n\t\ttargetView = target.dataView;\n\t\tposition = 0\n\t}\n\tset position (value) {\n\t\tposition = value;\n\t}\n\tget position() {\n\t\treturn position;\n\t}\n\tclearSharedData() {\n\t\tif (this.structures)\n\t\t\tthis.structures = []\n\t\tif (this.typedStructs)\n\t\t\tthis.typedStructs = []\n\t}\n}\n\nextensionClasses = [ Date, Set, Error, RegExp, ArrayBuffer, Object.getPrototypeOf(Uint8Array.prototype).constructor /*TypedArray*/, DataView, C1Type ]\nextensions = [{\n\tpack(date, allocateForWrite, pack) {\n\t\tlet seconds = date.getTime() / 1000\n\t\tif ((this.useTimestamp32 || date.getMilliseconds() === 0) && seconds >= 0 && seconds < 0x100000000) {\n\t\t\t// Timestamp 32\n\t\t\tlet { target, targetView, position} = allocateForWrite(6)\n\t\t\ttarget[position++] = 0xd6\n\t\t\ttarget[position++] = 0xff\n\t\t\ttargetView.setUint32(position, seconds)\n\t\t} else if (seconds > 0 && seconds < 0x100000000) {\n\t\t\t// Timestamp 64\n\t\t\tlet { target, targetView, position} = allocateForWrite(10)\n\t\t\ttarget[position++] = 0xd7\n\t\t\ttarget[position++] = 0xff\n\t\t\ttargetView.setUint32(position, date.getMilliseconds() * 4000000 + ((seconds / 1000 / 0x100000000) >> 0))\n\t\t\ttargetView.setUint32(position + 4, seconds)\n\t\t} else if (isNaN(seconds)) {\n\t\t\tif (this.onInvalidDate) {\n\t\t\t\tallocateForWrite(0)\n\t\t\t\treturn pack(this.onInvalidDate())\n\t\t\t}\n\t\t\t// Intentionally invalid timestamp\n\t\t\tlet { target, targetView, position} = allocateForWrite(3)\n\t\t\ttarget[position++] = 0xd4\n\t\t\ttarget[position++] = 0xff\n\t\t\ttarget[position++] = 0xff\n\t\t} else {\n\t\t\t// Timestamp 96\n\t\t\tlet { target, targetView, position} = allocateForWrite(15)\n\t\t\ttarget[position++] = 0xc7\n\t\t\ttarget[position++] = 12\n\t\t\ttarget[position++] = 0xff\n\t\t\ttargetView.setUint32(position, date.getMilliseconds() * 1000000)\n\t\t\ttargetView.setBigInt64(position + 4, BigInt(Math.floor(seconds)))\n\t\t}\n\t}\n}, {\n\tpack(set, allocateForWrite, pack) {\n\t\tif (this.setAsEmptyObject) {\n\t\t\tallocateForWrite(0);\n\t\t\treturn pack({})\n\t\t}\n\t\tlet array = Array.from(set)\n\t\tlet { target, position} = allocateForWrite(this.moreTypes ? 3 : 0)\n\t\tif (this.moreTypes) {\n\t\t\ttarget[position++] = 0xd4\n\t\t\ttarget[position++] = 0x73 // 's' for Set\n\t\t\ttarget[position++] = 0\n\t\t}\n\t\tpack(array)\n\t}\n}, {\n\tpack(error, allocateForWrite, pack) {\n\t\tlet { target, position} = allocateForWrite(this.moreTypes ? 3 : 0)\n\t\tif (this.moreTypes) {\n\t\t\ttarget[position++] = 0xd4\n\t\t\ttarget[position++] = 0x65 // 'e' for error\n\t\t\ttarget[position++] = 0\n\t\t}\n\t\tpack([ error.name, error.message, error.cause ])\n\t}\n}, {\n\tpack(regex, allocateForWrite, pack) {\n\t\tlet { target, position} = allocateForWrite(this.moreTypes ? 3 : 0)\n\t\tif (this.moreTypes) {\n\t\t\ttarget[position++] = 0xd4\n\t\t\ttarget[position++] = 0x78 // 'x' for regeXp\n\t\t\ttarget[position++] = 0\n\t\t}\n\t\tpack([ regex.source, regex.flags ])\n\t}\n}, {\n\tpack(arrayBuffer, allocateForWrite) {\n\t\tif (this.moreTypes)\n\t\t\twriteExtBuffer(arrayBuffer, 0x10, allocateForWrite)\n\t\telse\n\t\t\twriteBuffer(hasNodeBuffer ? Buffer.from(arrayBuffer) : new Uint8Array(arrayBuffer), allocateForWrite)\n\t}\n}, {\n\tpack(typedArray, allocateForWrite) {\n\t\tlet constructor = typedArray.constructor\n\t\tif (constructor !== ByteArray && this.moreTypes)\n\t\t\twriteExtBuffer(typedArray, typedArrays.indexOf(constructor.name), allocateForWrite)\n\t\telse\n\t\t\twriteBuffer(typedArray, allocateForWrite)\n\t}\n}, {\n\tpack(arrayBuffer, allocateForWrite) {\n\t\tif (this.moreTypes)\n\t\t\twriteExtBuffer(arrayBuffer, 0x11, allocateForWrite)\n\t\telse\n\t\t\twriteBuffer(hasNodeBuffer ? Buffer.from(arrayBuffer) : new Uint8Array(arrayBuffer), allocateForWrite)\n\t}\n}, {\n\tpack(c1, allocateForWrite) { // specific 0xC1 object\n\t\tlet { target, position} = allocateForWrite(1)\n\t\ttarget[position] = 0xc1\n\t}\n}]\n\nfunction writeExtBuffer(typedArray, type, allocateForWrite, encode) {\n\tlet length = typedArray.byteLength\n\tif (length + 1 < 0x100) {\n\t\tvar { target, position } = allocateForWrite(4 + length)\n\t\ttarget[position++] = 0xc7\n\t\ttarget[position++] = length + 1\n\t} else if (length + 1 < 0x10000) {\n\t\tvar { target, position } = allocateForWrite(5 + length)\n\t\ttarget[position++] = 0xc8\n\t\ttarget[position++] = (length + 1) >> 8\n\t\ttarget[position++] = (length + 1) & 0xff\n\t} else {\n\t\tvar { target, position, targetView } = allocateForWrite(7 + length)\n\t\ttarget[position++] = 0xc9\n\t\ttargetView.setUint32(position, length + 1) // plus one for the type byte\n\t\tposition += 4\n\t}\n\ttarget[position++] = 0x74 // \"t\" for typed array\n\ttarget[position++] = type\n\tif (!typedArray.buffer) typedArray = new Uint8Array(typedArray)\n\ttarget.set(new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength), position)\n}\nfunction writeBuffer(buffer, allocateForWrite) {\n\tlet length = buffer.byteLength\n\tvar target, position\n\tif (length < 0x100) {\n\t\tvar { target, position } = allocateForWrite(length + 2)\n\t\ttarget[position++] = 0xc4\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\tvar { target, position } = allocateForWrite(length + 3)\n\t\ttarget[position++] = 0xc5\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\tvar { target, position, targetView } = allocateForWrite(length + 5)\n\t\ttarget[position++] = 0xc6\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n\ttarget.set(buffer, position)\n}\n\nfunction writeExtensionData(result, target, position, type) {\n\tlet length = result.length\n\tswitch (length) {\n\t\tcase 1:\n\t\t\ttarget[position++] = 0xd4\n\t\t\tbreak\n\t\tcase 2:\n\t\t\ttarget[position++] = 0xd5\n\t\t\tbreak\n\t\tcase 4:\n\t\t\ttarget[position++] = 0xd6\n\t\t\tbreak\n\t\tcase 8:\n\t\t\ttarget[position++] = 0xd7\n\t\t\tbreak\n\t\tcase 16:\n\t\t\ttarget[position++] = 0xd8\n\t\t\tbreak\n\t\tdefault:\n\t\t\tif (length < 0x100) {\n\t\t\t\ttarget[position++] = 0xc7\n\t\t\t\ttarget[position++] = length\n\t\t\t} else if (length < 0x10000) {\n\t\t\t\ttarget[position++] = 0xc8\n\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t} else {\n\t\t\t\ttarget[position++] = 0xc9\n\t\t\t\ttarget[position++] = length >> 24\n\t\t\t\ttarget[position++] = (length >> 16) & 0xff\n\t\t\t\ttarget[position++] = (length >> 8) & 0xff\n\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t}\n\t}\n\ttarget[position++] = type\n\ttarget.set(result, position)\n\tposition += length\n\treturn position\n}\n\nfunction insertIds(serialized, idsToInsert) {\n\t// insert the ids that need to be referenced for structured clones\n\tlet nextId\n\tlet distanceToMove = idsToInsert.length * 6\n\tlet lastEnd = serialized.length - distanceToMove\n\twhile (nextId = idsToInsert.pop()) {\n\t\tlet offset = nextId.offset\n\t\tlet id = nextId.id\n\t\tserialized.copyWithin(offset + distanceToMove, offset, lastEnd)\n\t\tdistanceToMove -= 6\n\t\tlet position = offset + distanceToMove\n\t\tserialized[position++] = 0xd6\n\t\tserialized[position++] = 0x69 // 'i'\n\t\tserialized[position++] = id >> 24\n\t\tserialized[position++] = (id >> 16) & 0xff\n\t\tserialized[position++] = (id >> 8) & 0xff\n\t\tserialized[position++] = id & 0xff\n\t\tlastEnd = offset\n\t}\n\treturn serialized\n}\n\nfunction writeBundles(start, pack, incrementPosition) {\n\tif (bundledStrings.length > 0) {\n\t\ttargetView.setUint32(bundledStrings.position + start, position + incrementPosition - bundledStrings.position - start)\n\t\tbundledStrings.stringsPosition = position - start;\n\t\tlet writeStrings = bundledStrings\n\t\tbundledStrings = null\n\t\tpack(writeStrings[0])\n\t\tpack(writeStrings[1])\n\t}\n}\n\nexport function addExtension(extension) {\n\tif (extension.Class) {\n\t\tif (!extension.pack && !extension.write)\n\t\t\tthrow new Error('Extension has no pack or write function')\n\t\tif (extension.pack && !extension.type)\n\t\t\tthrow new Error('Extension has no type (numeric code to identify the extension)')\n\t\textensionClasses.unshift(extension.Class)\n\t\textensions.unshift(extension)\n\t}\n\tunpackAddExtension(extension)\n}\nfunction prepareStructures(structures, packr) {\n\tstructures.isCompatible = (existingStructures) => {\n\t\tlet compatible = !existingStructures || ((packr.lastNamedStructuresLength || 0) === existingStructures.length)\n\t\tif (!compatible) // we want to merge these existing structures immediately since we already have it and we are in the right transaction\n\t\t\tpackr._mergeStructures(existingStructures);\n\t\treturn compatible;\n\t}\n\treturn structures\n}\nexport function setWriteStructSlots(writeSlots, makeStructures) {\n\twriteStructSlots = writeSlots;\n\tprepareStructures = makeStructures;\n}\n\nlet defaultPackr = new Packr({ useRecords: false })\nexport const pack = defaultPackr.pack\nexport const encode = defaultPackr.pack\nexport const Encoder = Packr\nexport { FLOAT32_OPTIONS } from './unpack.js'\nimport { FLOAT32_OPTIONS } from './unpack.js'\nexport const { NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT } = FLOAT32_OPTIONS\nexport const REUSE_BUFFER_MODE = 512\nexport const RESET_BUFFER_MODE = 1024\nexport const RESERVE_START_SPACE = 2048\n","\n/*\n\nFor \"any-data\":\n32-55 - record with record ids (-32)\n56 - 8-bit record ids\n57 - 16-bit record ids\n58 - 24-bit record ids\n59 - 32-bit record ids\n250-255 - followed by typed fixed width values\n64-250 msgpackr/cbor/paired data\narrays and strings within arrays are handled by paired encoding\n\nStructure encoding:\n(type - string (using paired encoding))+\n\nType encoding\nencoding byte - fixed width byte - next reference+\n\nEncoding byte:\nfirst bit:\n\t0 - inline\n\t1 - reference\nsecond bit:\n\t0 - data or number\n\t1 - string\n\nremaining bits:\n\tcharacter encoding - ISO-8859-x\n\n\nnull (0xff)+ 0xf6\nnull (0xff)+ 0xf7\n\n*/\n\n\nimport {setWriteStructSlots, RECORD_SYMBOL, addExtension} from './pack.js'\nimport {setReadStruct, mult10, readString} from './unpack.js';\nconst ASCII = 3; // the MIBenum from https://www.iana.org/assignments/character-sets/character-sets.xhtml (and other character encodings could be referenced by MIBenum)\nconst NUMBER = 0;\nconst UTF8 = 2;\nconst OBJECT_DATA = 1;\nconst DATE = 16;\nconst TYPE_NAMES = ['num', 'object', 'string', 'ascii'];\nTYPE_NAMES[DATE] = 'date';\nconst float32Headers = [false, true, true, false, false, true, true, false];\nlet evalSupported;\ntry {\n\tnew Function('');\n\tevalSupported = true;\n} catch(error) {\n\t// if eval variants are not supported, do not create inline object readers ever\n}\n\nlet updatedPosition;\nconst hasNodeBuffer = typeof Buffer !== 'undefined'\nlet textEncoder, currentSource;\ntry {\n\ttextEncoder = new TextEncoder()\n} catch (error) {}\nconst encodeUtf8 = hasNodeBuffer ? function(target, string, position) {\n\treturn target.utf8Write(string, position, target.byteLength - position)\n} : (textEncoder && textEncoder.encodeInto) ?\n\tfunction(target, string, position) {\n\t\treturn textEncoder.encodeInto(string, target.subarray(position)).written\n\t} : false\n\nconst TYPE = Symbol('type');\nconst PARENT = Symbol('parent');\nsetWriteStructSlots(writeStruct, prepareStructures);\nfunction writeStruct(object, target, encodingStart, position, structures, makeRoom, pack, packr) {\n\tlet typedStructs = packr.typedStructs || (packr.typedStructs = []);\n\t// note that we rely on pack.js to load stored structures before we get to this point\n\tlet targetView = target.dataView;\n\tlet refsStartPosition = (typedStructs.lastStringStart || 100) + position;\n\tlet safeEnd = target.length - 10;\n\tlet start = position;\n\tif (position > safeEnd) {\n\t\ttarget = makeRoom(position);\n\t\ttargetView = target.dataView;\n\t\tposition -= encodingStart;\n\t\tstart -= encodingStart;\n\t\trefsStartPosition -= encodingStart;\n\t\tencodingStart = 0;\n\t\tsafeEnd = target.length - 10;\n\t}\n\n\tlet refOffset, refPosition = refsStartPosition;\n\n\tlet transition = typedStructs.transitions || (typedStructs.transitions = Object.create(null));\n\tlet nextId = typedStructs.nextId || typedStructs.length;\n\tlet headerSize =\n\t\tnextId < 0xf ? 1 :\n\t\t\tnextId < 0xf0 ? 2 :\n\t\t\t\tnextId < 0xf000 ? 3 :\n\t\t\t\t\tnextId < 0xf00000 ? 4 : 0;\n\tif (headerSize === 0)\n\t\treturn 0;\n\tposition += headerSize;\n\tlet queuedReferences = [];\n\tlet usedAscii0;\n\tlet keyIndex = 0;\n\tfor (let key in object) {\n\t\tlet value = object[key];\n\t\tlet nextTransition = transition[key];\n\t\tif (!nextTransition) {\n\t\t\ttransition[key] = nextTransition = {\n\t\t\t\tkey,\n\t\t\t\tparent: transition,\n\t\t\t\tenumerationOffset: 0,\n\t\t\t\tascii0: null,\n\t\t\t\tascii8: null,\n\t\t\t\tnum8: null,\n\t\t\t\tstring16: null,\n\t\t\t\tobject16: null,\n\t\t\t\tnum32: null,\n\t\t\t\tfloat64: null,\n\t\t\t\tdate64: null\n\t\t\t};\n\t\t}\n\t\tif (position > safeEnd) {\n\t\t\ttarget = makeRoom(position);\n\t\t\ttargetView = target.dataView;\n\t\t\tposition -= encodingStart;\n\t\t\tstart -= encodingStart;\n\t\t\trefsStartPosition -= encodingStart;\n\t\t\trefPosition -= encodingStart;\n\t\t\tencodingStart = 0;\n\t\t\tsafeEnd = target.length - 10\n\t\t}\n\t\tswitch (typeof value) {\n\t\t\tcase 'number':\n\t\t\t\tlet number = value;\n\t\t\t\t// first check to see if we are using a lot of ids and should default to wide/common format\n\t\t\t\tif (nextId < 200 || !nextTransition.num64) {\n\t\t\t\t\tif (number >> 0 === number && number < 0x20000000 && number > -0x1f000000) {\n\t\t\t\t\t\tif (number < 0xf6 && number >= 0 && (nextTransition.num8 && !(nextId > 200 && nextTransition.num32) || number < 0x20 && !nextTransition.num32)) {\n\t\t\t\t\t\t\ttransition = nextTransition.num8 || createTypeTransition(nextTransition, NUMBER, 1);\n\t\t\t\t\t\t\ttarget[position++] = number;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttransition = nextTransition.num32 || createTypeTransition(nextTransition, NUMBER, 4);\n\t\t\t\t\t\t\ttargetView.setUint32(position, number, true);\n\t\t\t\t\t\t\tposition += 4;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (number < 0x100000000 && number >= -0x80000000) {\n\t\t\t\t\t\ttargetView.setFloat32(position, number, true);\n\t\t\t\t\t\tif (float32Headers[target[position + 3] >>> 5]) {\n\t\t\t\t\t\t\tlet xShifted\n\t\t\t\t\t\t\t// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\t\tif (((xShifted = number * mult10[((target[position + 3] & 0x7f) << 1) | (target[position + 2] >> 7)]) >> 0) === xShifted) {\n\t\t\t\t\t\t\t\ttransition = nextTransition.num32 || createTypeTransition(nextTransition, NUMBER, 4);\n\t\t\t\t\t\t\t\tposition += 4;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttransition = nextTransition.num64 || createTypeTransition(nextTransition, NUMBER, 8);\n\t\t\t\ttargetView.setFloat64(position, number, true);\n\t\t\t\tposition += 8;\n\t\t\t\tbreak;\n\t\t\tcase 'string':\n\t\t\t\tlet strLength = value.length;\n\t\t\t\trefOffset = refPosition - refsStartPosition;\n\t\t\t\tif ((strLength << 2) + refPosition > safeEnd) {\n\t\t\t\t\ttarget = makeRoom((strLength << 2) + refPosition);\n\t\t\t\t\ttargetView = target.dataView;\n\t\t\t\t\tposition -= encodingStart;\n\t\t\t\t\tstart -= encodingStart;\n\t\t\t\t\trefsStartPosition -= encodingStart;\n\t\t\t\t\trefPosition -= encodingStart;\n\t\t\t\t\tencodingStart = 0;\n\t\t\t\t\tsafeEnd = target.length - 10\n\t\t\t\t}\n\t\t\t\tif (strLength > ((0xff00 + refOffset) >> 2)) {\n\t\t\t\t\tqueuedReferences.push(key, value, position - start);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlet isNotAscii\n\t\t\t\tlet strStart = refPosition;\n\t\t\t\tif (strLength < 0x40) {\n\t\t\t\t\tlet i, c1, c2;\n\t\t\t\t\tfor (i = 0; i < strLength; i++) {\n\t\t\t\t\t\tc1 = value.charCodeAt(i)\n\t\t\t\t\t\tif (c1 < 0x80) {\n\t\t\t\t\t\t\ttarget[refPosition++] = c1\n\t\t\t\t\t\t} else if (c1 < 0x800) {\n\t\t\t\t\t\t\tisNotAscii = true;\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 >> 6 | 0xc0\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t(c1 & 0xfc00) === 0xd800 &&\n\t\t\t\t\t\t\t((c2 = value.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tisNotAscii = true;\n\t\t\t\t\t\t\tc1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff)\n\t\t\t\t\t\t\ti++\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 >> 18 | 0xf0\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 >> 12 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tisNotAscii = true;\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 >> 12 | 0xe0\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[refPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trefPosition += encodeUtf8(target, value, refPosition);\n\t\t\t\t\tisNotAscii = refPosition - strStart > strLength;\n\t\t\t\t}\n\t\t\t\tif (refOffset < 0xa0 || (refOffset < 0xf6 && (nextTransition.ascii8 || nextTransition.string8))) {\n\t\t\t\t\t// short strings\n\t\t\t\t\tif (isNotAscii) {\n\t\t\t\t\t\tif (!(transition = nextTransition.string8)) {\n\t\t\t\t\t\t\tif (typedStructs.length > 10 && (transition = nextTransition.ascii8)) {\n\t\t\t\t\t\t\t\t// we can safely change ascii to utf8 in place since they are compatible\n\t\t\t\t\t\t\t\ttransition.__type = UTF8;\n\t\t\t\t\t\t\t\tnextTransition.ascii8 = null;\n\t\t\t\t\t\t\t\tnextTransition.string8 = transition;\n\t\t\t\t\t\t\t\tpack(null, 0, true); // special call to notify that structures have been updated\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttransition = createTypeTransition(nextTransition, UTF8, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (refOffset === 0 && !usedAscii0) {\n\t\t\t\t\t\tusedAscii0 = true;\n\t\t\t\t\t\ttransition = nextTransition.ascii0 || createTypeTransition(nextTransition, ASCII, 0);\n\t\t\t\t\t\tbreak; // don't increment position\n\t\t\t\t\t}// else ascii:\n\t\t\t\t\telse if (!(transition = nextTransition.ascii8) && !(typedStructs.length > 10 && (transition = nextTransition.string8)))\n\t\t\t\t\t\ttransition = createTypeTransition(nextTransition, ASCII, 1);\n\t\t\t\t\ttarget[position++] = refOffset;\n\t\t\t\t} else {\n\t\t\t\t\t// TODO: Enable ascii16 at some point, but get the logic right\n\t\t\t\t\t//if (isNotAscii)\n\t\t\t\t\t\ttransition = nextTransition.string16 || createTypeTransition(nextTransition, UTF8, 2);\n\t\t\t\t\t//else\n\t\t\t\t\t\t//transition = nextTransition.ascii16 || createTypeTransition(nextTransition, ASCII, 2);\n\t\t\t\t\ttargetView.setUint16(position, refOffset, true);\n\t\t\t\t\tposition += 2;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'object':\n\t\t\t\tif (value) {\n\t\t\t\t\tif (value.constructor === Date) {\n\t\t\t\t\t\ttransition = nextTransition.date64 || createTypeTransition(nextTransition, DATE, 8);\n\t\t\t\t\t\ttargetView.setFloat64(position, value.getTime(), true);\n\t\t\t\t\t\tposition += 8;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueuedReferences.push(key, value, keyIndex);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t} else { // null\n\t\t\t\t\tnextTransition = anyType(nextTransition, position, targetView, -10); // match CBOR with this\n\t\t\t\t\tif (nextTransition) {\n\t\t\t\t\t\ttransition = nextTransition;\n\t\t\t\t\t\tposition = updatedPosition;\n\t\t\t\t\t} else queuedReferences.push(key, value, keyIndex);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'boolean':\n\t\t\t\ttransition = nextTransition.num8 || nextTransition.ascii8 || createTypeTransition(nextTransition, NUMBER, 1);\n\t\t\t\ttarget[position++] = value ? 0xf9 : 0xf8; // match CBOR with these\n\t\t\t\tbreak;\n\t\t\tcase 'undefined':\n\t\t\t\tnextTransition = anyType(nextTransition, position, targetView, -9); // match CBOR with this\n\t\t\t\tif (nextTransition) {\n\t\t\t\t\ttransition = nextTransition;\n\t\t\t\t\tposition = updatedPosition;\n\t\t\t\t} else queuedReferences.push(key, value, keyIndex);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tqueuedReferences.push(key, value, keyIndex);\n\t\t}\n\t\tkeyIndex++;\n\t}\n\n\tfor (let i = 0, l = queuedReferences.length; i < l;) {\n\t\tlet key = queuedReferences[i++];\n\t\tlet value = queuedReferences[i++];\n\t\tlet propertyIndex = queuedReferences[i++];\n\t\tlet nextTransition = transition[key];\n\t\tif (!nextTransition) {\n\t\t\ttransition[key] = nextTransition = {\n\t\t\t\tkey,\n\t\t\t\tparent: transition,\n\t\t\t\tenumerationOffset: propertyIndex - keyIndex,\n\t\t\t\tascii0: null,\n\t\t\t\tascii8: null,\n\t\t\t\tnum8: null,\n\t\t\t\tstring16: null,\n\t\t\t\tobject16: null,\n\t\t\t\tnum32: null,\n\t\t\t\tfloat64: null\n\t\t\t};\n\t\t}\n\t\tlet newPosition;\n\t\tif (value) {\n\t\t\t/*if (typeof value === 'string') { // TODO: we could re-enable long strings\n\t\t\t\tif (position + value.length * 3 > safeEnd) {\n\t\t\t\t\ttarget = makeRoom(position + value.length * 3);\n\t\t\t\t\tposition -= start;\n\t\t\t\t\ttargetView = target.dataView;\n\t\t\t\t\tstart = 0;\n\t\t\t\t}\n\t\t\t\tnewPosition = position + target.utf8Write(value, position, 0xffffffff);\n\t\t\t} else { */\n\t\t\tlet size;\n\t\t\trefOffset = refPosition - refsStartPosition;\n\t\t\tif (refOffset < 0xff00) {\n\t\t\t\ttransition = nextTransition.object16;\n\t\t\t\tif (transition)\n\t\t\t\t\tsize = 2;\n\t\t\t\telse if ((transition = nextTransition.object32))\n\t\t\t\t\tsize = 4;\n\t\t\t\telse {\n\t\t\t\t\ttransition = createTypeTransition(nextTransition, OBJECT_DATA, 2);\n\t\t\t\t\tsize = 2;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttransition = nextTransition.object32 || createTypeTransition(nextTransition, OBJECT_DATA, 4);\n\t\t\t\tsize = 4;\n\t\t\t}\n\t\t\tnewPosition = pack(value, refPosition);\n\t\t\t//}\n\t\t\tif (typeof newPosition === 'object') {\n\t\t\t\t// re-allocated\n\t\t\t\trefPosition = newPosition.position;\n\t\t\t\ttargetView = newPosition.targetView;\n\t\t\t\ttarget = newPosition.target;\n\t\t\t\trefsStartPosition -= encodingStart;\n\t\t\t\tposition -= encodingStart;\n\t\t\t\tstart -= encodingStart;\n\t\t\t\tencodingStart = 0;\n\t\t\t} else\n\t\t\t\trefPosition = newPosition;\n\t\t\tif (size === 2) {\n\t\t\t\ttargetView.setUint16(position, refOffset, true);\n\t\t\t\tposition += 2;\n\t\t\t} else {\n\t\t\t\ttargetView.setUint32(position, refOffset, true);\n\t\t\t\tposition += 4;\n\t\t\t}\n\t\t} else { // null or undefined\n\t\t\ttransition = nextTransition.object16 || createTypeTransition(nextTransition, OBJECT_DATA, 2);\n\t\t\ttargetView.setInt16(position, value === null ? -10 : -9, true);\n\t\t\tposition += 2;\n\t\t}\n\t\tkeyIndex++;\n\t}\n\n\n\tlet recordId = transition[RECORD_SYMBOL];\n\tif (recordId == null) {\n\t\trecordId = packr.typedStructs.length;\n\t\tlet structure = [];\n\t\tlet nextTransition = transition;\n\t\tlet key, type;\n\t\twhile ((type = nextTransition.__type) !== undefined) {\n\t\t\tlet size = nextTransition.__size;\n\t\t\tnextTransition = nextTransition.__parent;\n\t\t\tkey = nextTransition.key;\n\t\t\tlet property = [type, size, key];\n\t\t\tif (nextTransition.enumerationOffset)\n\t\t\t\tproperty.push(nextTransition.enumerationOffset);\n\t\t\tstructure.push(property);\n\t\t\tnextTransition = nextTransition.parent;\n\t\t}\n\t\tstructure.reverse();\n\t\ttransition[RECORD_SYMBOL] = recordId;\n\t\tpackr.typedStructs[recordId] = structure;\n\t\tpack(null, 0, true); // special call to notify that structures have been updated\n\t}\n\n\n\tswitch (headerSize) {\n\t\tcase 1:\n\t\t\tif (recordId >= 0x10) return 0;\n\t\t\ttarget[start] = recordId + 0x20;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tif (recordId >= 0x100) return 0;\n\t\t\ttarget[start] = 0x38;\n\t\t\ttarget[start + 1] = recordId;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tif (recordId >= 0x10000) return 0;\n\t\t\ttarget[start] = 0x39;\n\t\t\ttargetView.setUint16(start + 1, recordId, true);\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tif (recordId >= 0x1000000) return 0;\n\t\t\ttargetView.setUint32(start, (recordId << 8) + 0x3a, true);\n\t\t\tbreak;\n\t}\n\n\tif (position < refsStartPosition) {\n\t\tif (refsStartPosition === refPosition)\n\t\t\treturn position; // no refs\n\t\t// adjust positioning\n\t\ttarget.copyWithin(position, refsStartPosition, refPosition);\n\t\trefPosition += position - refsStartPosition;\n\t\ttypedStructs.lastStringStart = position - start;\n\t} else if (position > refsStartPosition) {\n\t\tif (refsStartPosition === refPosition)\n\t\t\treturn position; // no refs\n\t\ttypedStructs.lastStringStart = position - start;\n\t\treturn writeStruct(object, target, encodingStart, start, structures, makeRoom, pack, packr);\n\t}\n\treturn refPosition;\n}\nfunction anyType(transition, position, targetView, value) {\n\tlet nextTransition;\n\tif ((nextTransition = transition.ascii8 || transition.num8)) {\n\t\ttargetView.setInt8(position, value, true);\n\t\tupdatedPosition = position + 1;\n\t\treturn nextTransition;\n\t}\n\tif ((nextTransition = transition.string16 || transition.object16)) {\n\t\ttargetView.setInt16(position, value, true);\n\t\tupdatedPosition = position + 2;\n\t\treturn nextTransition;\n\t}\n\tif (nextTransition = transition.num32) {\n\t\ttargetView.setUint32(position, 0xe0000100 + value, true);\n\t\tupdatedPosition = position + 4;\n\t\treturn nextTransition;\n\t}\n\t// transition.float64\n\tif (nextTransition = transition.num64) {\n\t\ttargetView.setFloat64(position, NaN, true);\n\t\ttargetView.setInt8(position, value);\n\t\tupdatedPosition = position + 8;\n\t\treturn nextTransition;\n\t}\n\tupdatedPosition = position;\n\t// TODO: can we do an \"any\" type where we defer the decision?\n\treturn;\n}\nfunction createTypeTransition(transition, type, size) {\n\tlet typeName = TYPE_NAMES[type] + (size << 3);\n\tlet newTransition = transition[typeName] || (transition[typeName] = Object.create(null));\n\tnewTransition.__type = type;\n\tnewTransition.__size = size;\n\tnewTransition.__parent = transition;\n\treturn newTransition;\n}\nfunction onLoadedStructures(sharedData) {\n\tif (!(sharedData instanceof Map))\n\t\treturn sharedData;\n\tlet typed = sharedData.get('typed') || [];\n\tif (Object.isFrozen(typed))\n\t\ttyped = typed.map(structure => structure.slice(0));\n\tlet named = sharedData.get('named');\n\tlet transitions = Object.create(null);\n\tfor (let i = 0, l = typed.length; i < l; i++) {\n\t\tlet structure = typed[i];\n\t\tlet transition = transitions;\n\t\tfor (let [type, size, key] of structure) {\n\t\t\tlet nextTransition = transition[key];\n\t\t\tif (!nextTransition) {\n\t\t\t\ttransition[key] = nextTransition = {\n\t\t\t\t\tkey,\n\t\t\t\t\tparent: transition,\n\t\t\t\t\tenumerationOffset: 0,\n\t\t\t\t\tascii0: null,\n\t\t\t\t\tascii8: null,\n\t\t\t\t\tnum8: null,\n\t\t\t\t\tstring16: null,\n\t\t\t\t\tobject16: null,\n\t\t\t\t\tnum32: null,\n\t\t\t\t\tfloat64: null,\n\t\t\t\t\tdate64: null,\n\t\t\t\t};\n\t\t\t}\n\t\t\ttransition = createTypeTransition(nextTransition, type, size);\n\t\t}\n\t\ttransition[RECORD_SYMBOL] = i;\n\t}\n\ttyped.transitions = transitions;\n\tthis.typedStructs = typed;\n\tthis.lastTypedStructuresLength = typed.length;\n\treturn named;\n}\nvar sourceSymbol = Symbol.for('source')\nfunction readStruct(src, position, srcEnd, unpackr) {\n\tlet recordId = src[position++] - 0x20;\n\tif (recordId >= 24) {\n\t\tswitch(recordId) {\n\t\t\tcase 24: recordId = src[position++]; break;\n\t\t\t// little endian:\n\t\t\tcase 25: recordId = src[position++] + (src[position++] << 8); break;\n\t\t\tcase 26: recordId = src[position++] + (src[position++] << 8) + (src[position++] << 16); break;\n\t\t\tcase 27: recordId = src[position++] + (src[position++] << 8) + (src[position++] << 16) + (src[position++] << 24); break;\n\t\t}\n\t}\n\tlet structure = unpackr.typedStructs && unpackr.typedStructs[recordId];\n\tif (!structure) {\n\t\t// copy src buffer because getStructures will override it\n\t\tsrc = Uint8Array.prototype.slice.call(src, position, srcEnd);\n\t\tsrcEnd -= position;\n\t\tposition = 0;\n\t\tif (!unpackr.getStructures)\n\t\t\tthrow new Error(`Reference to shared structure ${recordId} without getStructures method`);\n\t\tunpackr._mergeStructures(unpackr.getStructures());\n\t\tif (!unpackr.typedStructs)\n\t\t\tthrow new Error('Could not find any shared typed structures');\n\t\tunpackr.lastTypedStructuresLength = unpackr.typedStructs.length;\n\t\tstructure = unpackr.typedStructs[recordId];\n\t\tif (!structure)\n\t\t\tthrow new Error('Could not find typed structure ' + recordId);\n\t}\n\tvar construct = structure.construct;\n\tvar fullConstruct = structure.fullConstruct;\n\tif (!construct) {\n\t\tconstruct = structure.construct = function LazyObject() {\n\t\t}\n\t\tfullConstruct = structure.fullConstruct = function LoadedObject() {\n\t\t}\n\t\tfullConstruct.prototype = unpackr.structPrototype || {};\n\t\tvar prototype = construct.prototype = unpackr.structPrototype ? Object.create(unpackr.structPrototype) : {};\n\t\tlet properties = [];\n\t\tlet currentOffset = 0;\n\t\tlet lastRefProperty;\n\t\tfor (let i = 0, l = structure.length; i < l; i++) {\n\t\t\tlet definition = structure[i];\n\t\t\tlet [ type, size, key, enumerationOffset ] = definition;\n\t\t\tif (key === '__proto__')\n\t\t\t\tkey = '__proto_';\n\t\t\tlet property = {\n\t\t\t\tkey,\n\t\t\t\toffset: currentOffset,\n\t\t\t}\n\t\t\tif (enumerationOffset)\n\t\t\t\tproperties.splice(i + enumerationOffset, 0, property);\n\t\t\telse\n\t\t\t\tproperties.push(property);\n\t\t\tlet getRef;\n\t\t\tswitch(size) { // TODO: Move into a separate function\n\t\t\t\tcase 0: getRef = () => 0; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tgetRef = (source, position) => {\n\t\t\t\t\t\tlet ref = source.bytes[position + property.offset];\n\t\t\t\t\t\treturn ref >= 0xf6 ? toConstant(ref) : ref;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tgetRef = (source, position) => {\n\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\tlet dataView = src.dataView || (src.dataView = new DataView(src.buffer, src.byteOffset, src.byteLength));\n\t\t\t\t\t\tlet ref = dataView.getUint16(position + property.offset, true);\n\t\t\t\t\t\treturn ref >= 0xff00 ? toConstant(ref & 0xff) : ref;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tgetRef = (source, position) => {\n\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\tlet dataView = src.dataView || (src.dataView = new DataView(src.buffer, src.byteOffset, src.byteLength));\n\t\t\t\t\t\tlet ref = dataView.getUint32(position + property.offset, true);\n\t\t\t\t\t\treturn ref >= 0xffffff00 ? toConstant(ref & 0xff) : ref;\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tproperty.getRef = getRef;\n\t\t\tcurrentOffset += size;\n\t\t\tlet get;\n\t\t\tswitch(type) {\n\t\t\t\tcase ASCII:\n\t\t\t\t\tif (lastRefProperty && !lastRefProperty.next)\n\t\t\t\t\t\tlastRefProperty.next = property;\n\t\t\t\t\tlastRefProperty = property;\n\t\t\t\t\tproperty.multiGetCount = 0;\n\t\t\t\t\tget = function(source) {\n\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\tlet position = source.position;\n\t\t\t\t\t\tlet refStart = currentOffset + position;\n\t\t\t\t\t\tlet ref = getRef(source, position);\n\t\t\t\t\t\tif (typeof ref !== 'number') return ref;\n\n\t\t\t\t\t\tlet end, next = property.next;\n\t\t\t\t\t\twhile(next) {\n\t\t\t\t\t\t\tend = next.getRef(source, position);\n\t\t\t\t\t\t\tif (typeof end === 'number')\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tend = null;\n\t\t\t\t\t\t\tnext = next.next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (end == null)\n\t\t\t\t\t\t\tend = source.bytesEnd - refStart;\n\t\t\t\t\t\tif (source.srcString) {\n\t\t\t\t\t\t\treturn source.srcString.slice(ref, end);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/*if (property.multiGetCount > 0) {\n\t\t\t\t\t\t\tlet asciiEnd;\n\t\t\t\t\t\t\tnext = firstRefProperty;\n\t\t\t\t\t\t\tlet dataView = src.dataView || (src.dataView = new DataView(src.buffer, src.byteOffset, src.byteLength));\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tasciiEnd = dataView.getUint16(source.position + next.offset, true);\n\t\t\t\t\t\t\t\tif (asciiEnd < 0xff00)\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tasciiEnd = null;\n\t\t\t\t\t\t\t} while((next = next.next));\n\t\t\t\t\t\t\tif (asciiEnd == null)\n\t\t\t\t\t\t\t\tasciiEnd = source.bytesEnd - refStart\n\t\t\t\t\t\t\tsource.srcString = src.toString('latin1', refStart, refStart + asciiEnd);\n\t\t\t\t\t\t\treturn source.srcString.slice(ref, end);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (source.prevStringGet) {\n\t\t\t\t\t\t\tsource.prevStringGet.multiGetCount += 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsource.prevStringGet = property;\n\t\t\t\t\t\t\tproperty.multiGetCount--;\n\t\t\t\t\t\t}*/\n\t\t\t\t\t\treturn readString(src, ref + refStart, end - ref);\n\t\t\t\t\t\t//return src.toString('latin1', ref + refStart, end + refStart);\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tcase UTF8: case OBJECT_DATA:\n\t\t\t\t\tif (lastRefProperty && !lastRefProperty.next)\n\t\t\t\t\t\tlastRefProperty.next = property;\n\t\t\t\t\tlastRefProperty = property;\n\t\t\t\t\tget = function(source) {\n\t\t\t\t\t\tlet position = source.position;\n\t\t\t\t\t\tlet refStart = currentOffset + position;\n\t\t\t\t\t\tlet ref = getRef(source, position);\n\t\t\t\t\t\tif (typeof ref !== 'number') return ref;\n\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\tlet end, next = property.next;\n\t\t\t\t\t\twhile(next) {\n\t\t\t\t\t\t\tend = next.getRef(source, position);\n\t\t\t\t\t\t\tif (typeof end === 'number')\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tend = null;\n\t\t\t\t\t\t\tnext = next.next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (end == null)\n\t\t\t\t\t\t\tend = source.bytesEnd - refStart;\n\t\t\t\t\t\tif (type === UTF8) {\n\t\t\t\t\t\t\treturn src.toString('utf8', ref + refStart, end + refStart);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentSource = source;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\treturn unpackr.unpack(src, { start: ref + refStart, end: end + refStart });\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tcurrentSource = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tcase NUMBER:\n\t\t\t\t\tswitch(size) {\n\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\tget = function (source) {\n\t\t\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\t\t\tlet dataView = src.dataView || (src.dataView = new DataView(src.buffer, src.byteOffset, src.byteLength));\n\t\t\t\t\t\t\t\tlet position = source.position + property.offset;\n\t\t\t\t\t\t\t\tlet value = dataView.getInt32(position, true)\n\t\t\t\t\t\t\t\tif (value < 0x20000000) {\n\t\t\t\t\t\t\t\t\tif (value > -0x1f000000)\n\t\t\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t\t\tif (value > -0x20000000)\n\t\t\t\t\t\t\t\t\t\treturn toConstant(value & 0xff);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet fValue = dataView.getFloat32(position, true);\n\t\t\t\t\t\t\t\t// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\t\t\tlet multiplier = mult10[((src[position + 3] & 0x7f) << 1) | (src[position + 2] >> 7)]\n\t\t\t\t\t\t\t\treturn ((multiplier * fValue + (fValue > 0 ? 0.5 : -0.5)) >> 0) / multiplier;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 8:\n\t\t\t\t\t\t\tget = function (source) {\n\t\t\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\t\t\tlet dataView = src.dataView || (src.dataView = new DataView(src.buffer, src.byteOffset, src.byteLength));\n\t\t\t\t\t\t\t\tlet value = dataView.getFloat64(source.position + property.offset, true);\n\t\t\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\t\t\tlet byte = src[source.position + property.offset];\n\t\t\t\t\t\t\t\t\tif (byte >= 0xf6)\n\t\t\t\t\t\t\t\t\t\treturn toConstant(byte);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tget = function (source) {\n\t\t\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\t\t\tlet value = src[source.position + property.offset];\n\t\t\t\t\t\t\t\treturn value < 0xf6 ? value : toConstant(value);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase DATE:\n\t\t\t\t\tget = function (source) {\n\t\t\t\t\t\tlet src = source.bytes;\n\t\t\t\t\t\tlet dataView = src.dataView || (src.dataView = new DataView(src.buffer, src.byteOffset, src.byteLength));\n\t\t\t\t\t\treturn new Date(dataView.getFloat64(source.position + property.offset, true));\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t\tproperty.get = get;\n\t\t}\n\t\t// TODO: load the srcString for faster string decoding on toJSON\n\t\tif (evalSupported) {\n\t\t\tlet objectLiteralProperties = [];\n\t\t\tlet args = [];\n\t\t\tlet i = 0;\n\t\t\tlet hasInheritedProperties;\n\t\t\tfor (let property of properties) { // assign in enumeration order\n\t\t\t\tif (unpackr.alwaysLazyProperty && unpackr.alwaysLazyProperty(property.key)) {\n\t\t\t\t\t// these properties are not eagerly evaluated and this can be used for creating properties\n\t\t\t\t\t// that are not serialized as JSON\n\t\t\t\t\thasInheritedProperties = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tObject.defineProperty(prototype, property.key, { get: withSource(property.get), enumerable: true });\n\t\t\t\tlet valueFunction = 'v' + i++;\n\t\t\t\targs.push(valueFunction);\n\t\t\t\tobjectLiteralProperties.push('o[' + JSON.stringify(property.key) + ']=' + valueFunction + '(s)');\n\t\t\t}\n\t\t\tif (hasInheritedProperties) {\n\t\t\t\tobjectLiteralProperties.push('__proto__:this');\n\t\t\t}\n\t\t\tlet toObject = (new Function(...args, 'var c=this;return function(s){var o=new c();' + objectLiteralProperties.join(';') + ';return o;}')).apply(fullConstruct, properties.map(prop => prop.get));\n\t\t\tObject.defineProperty(prototype, 'toJSON', {\n\t\t\t\tvalue(omitUnderscoredProperties) {\n\t\t\t\t\treturn toObject.call(this, this[sourceSymbol]);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tObject.defineProperty(prototype, 'toJSON', {\n\t\t\t\tvalue(omitUnderscoredProperties) {\n\t\t\t\t\t// return an enumerable object with own properties to JSON stringify\n\t\t\t\t\tlet resolved = {};\n\t\t\t\t\tfor (let i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t// TODO: check alwaysLazyProperty\n\t\t\t\t\t\tlet key = properties[i].key;\n\n\t\t\t\t\t\tresolved[key] = this[key];\n\t\t\t\t\t}\n\t\t\t\t\treturn resolved;\n\t\t\t\t},\n\t\t\t\t// not enumerable or anything\n\t\t\t});\n\t\t}\n\t}\n\tvar instance = new construct();\n\tinstance[sourceSymbol] = {\n\t\tbytes: src,\n\t\tposition,\n\t\tsrcString: '',\n\t\tbytesEnd: srcEnd\n\t}\n\treturn instance;\n}\nfunction toConstant(code) {\n\tswitch(code) {\n\t\tcase 0xf6: return null;\n\t\tcase 0xf7: return undefined;\n\t\tcase 0xf8: return false;\n\t\tcase 0xf9: return true;\n\t}\n\tthrow new Error('Unknown constant');\n}\nfunction withSource(get) {\n\treturn function() {\n\t\treturn get(this[sourceSymbol]);\n\t}\n}\n\nfunction saveState() {\n\tif (currentSource) {\n\t\tcurrentSource.bytes = Uint8Array.prototype.slice.call(currentSource.bytes, currentSource.position, currentSource.bytesEnd);\n\t\tcurrentSource.position = 0;\n\t\tcurrentSource.bytesEnd = currentSource.bytes.length;\n\t}\n}\nfunction prepareStructures(structures, packr) {\n\tif (packr.typedStructs) {\n\t\tlet structMap = new Map();\n\t\tstructMap.set('named', structures);\n\t\tstructMap.set('typed', packr.typedStructs);\n\t\tstructures = structMap;\n\t}\n\tlet lastTypedStructuresLength = packr.lastTypedStructuresLength || 0;\n\tstructures.isCompatible = existing => {\n\t\tlet compatible = true;\n\t\tif (existing instanceof Map) {\n\t\t\tlet named = existing.get('named') || [];\n\t\t\tif (named.length !== (packr.lastNamedStructuresLength || 0))\n\t\t\t\tcompatible = false;\n\t\t\tlet typed = existing.get('typed') || [];\n\t\t\tif (typed.length !== lastTypedStructuresLength)\n\t\t\t\tcompatible = false;\n\t\t} else if (existing instanceof Array || Array.isArray(existing)) {\n\t\t\tif (existing.length !== (packr.lastNamedStructuresLength || 0))\n\t\t\t\tcompatible = false;\n\t\t}\n\t\tif (!compatible)\n\t\t\tpackr._mergeStructures(existing);\n\t\treturn compatible;\n\t};\n\tpackr.lastTypedStructuresLength = packr.typedStructs && packr.typedStructs.length;\n\treturn structures;\n}\n\nsetReadStruct(readStruct, onLoadedStructures, saveState);\n\n","// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst isLinux = () => process.platform === 'linux';\n\nlet report = null;\nconst getReport = () => {\n if (!report) {\n /* istanbul ignore next */\n if (isLinux() && process.report) {\n const orig = process.report.excludeNetwork;\n process.report.excludeNetwork = true;\n report = process.report.getReport();\n process.report.excludeNetwork = orig;\n } else {\n report = {};\n }\n }\n return report;\n};\n\nmodule.exports = { isLinux, getReport };\n","// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst fs = require('fs');\n\nconst LDD_PATH = '/usr/bin/ldd';\nconst SELF_PATH = '/proc/self/exe';\nconst MAX_LENGTH = 2048;\n\n/**\n * Read the content of a file synchronous\n *\n * @param {string} path\n * @returns {Buffer}\n */\nconst readFileSync = (path) => {\n const fd = fs.openSync(path, 'r');\n const buffer = Buffer.alloc(MAX_LENGTH);\n const bytesRead = fs.readSync(fd, buffer, 0, MAX_LENGTH, 0);\n fs.close(fd, () => {});\n return buffer.subarray(0, bytesRead);\n};\n\n/**\n * Read the content of a file\n *\n * @param {string} path\n * @returns {Promise<Buffer>}\n */\nconst readFile = (path) => new Promise((resolve, reject) => {\n fs.open(path, 'r', (err, fd) => {\n if (err) {\n reject(err);\n } else {\n const buffer = Buffer.alloc(MAX_LENGTH);\n fs.read(fd, buffer, 0, MAX_LENGTH, 0, (_, bytesRead) => {\n resolve(buffer.subarray(0, bytesRead));\n fs.close(fd, () => {});\n });\n }\n });\n});\n\nmodule.exports = {\n LDD_PATH,\n SELF_PATH,\n readFileSync,\n readFile\n};\n","// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst interpreterPath = (elf) => {\n if (elf.length < 64) {\n return null;\n }\n if (elf.readUInt32BE(0) !== 0x7F454C46) {\n // Unexpected magic bytes\n return null;\n }\n if (elf.readUInt8(4) !== 2) {\n // Not a 64-bit ELF\n return null;\n }\n if (elf.readUInt8(5) !== 1) {\n // Not little-endian\n return null;\n }\n const offset = elf.readUInt32LE(32);\n const size = elf.readUInt16LE(54);\n const count = elf.readUInt16LE(56);\n for (let i = 0; i < count; i++) {\n const headerOffset = offset + (i * size);\n const type = elf.readUInt32LE(headerOffset);\n if (type === 3) {\n const fileOffset = elf.readUInt32LE(headerOffset + 8);\n const fileSize = elf.readUInt32LE(headerOffset + 32);\n return elf.subarray(fileOffset, fileOffset + fileSize).toString().replace(/\\0.*$/g, '');\n }\n }\n return null;\n};\n\nmodule.exports = {\n interpreterPath\n};\n","// Copyright 2017 Lovell Fuller and others.\n// SPDX-License-Identifier: Apache-2.0\n\n'use strict';\n\nconst childProcess = require('child_process');\nconst { isLinux, getReport } = require('./process');\nconst { LDD_PATH, SELF_PATH, readFile, readFileSync } = require('./filesystem');\nconst { interpreterPath } = require('./elf');\n\nlet cachedFamilyInterpreter;\nlet cachedFamilyFilesystem;\nlet cachedVersionFilesystem;\n\nconst command = 'getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true';\nlet commandOut = '';\n\nconst safeCommand = () => {\n if (!commandOut) {\n return new Promise((resolve) => {\n childProcess.exec(command, (err, out) => {\n commandOut = err ? ' ' : out;\n resolve(commandOut);\n });\n });\n }\n return commandOut;\n};\n\nconst safeCommandSync = () => {\n if (!commandOut) {\n try {\n commandOut = childProcess.execSync(command, { encoding: 'utf8' });\n } catch (_err) {\n commandOut = ' ';\n }\n }\n return commandOut;\n};\n\n/**\n * A String constant containing the value `glibc`.\n * @type {string}\n * @public\n */\nconst GLIBC = 'glibc';\n\n/**\n * A Regexp constant to get the GLIBC Version.\n * @type {string}\n */\nconst RE_GLIBC_VERSION = /LIBC[a-z0-9 \\-).]*?(\\d+\\.\\d+)/i;\n\n/**\n * A String constant containing the value `musl`.\n * @type {string}\n * @public\n */\nconst MUSL = 'musl';\n\nconst isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-');\n\nconst familyFromReport = () => {\n const report = getReport();\n if (report.header && report.header.glibcVersionRuntime) {\n return GLIBC;\n }\n if (Array.isArray(report.sharedObjects)) {\n if (report.sharedObjects.some(isFileMusl)) {\n return MUSL;\n }\n }\n return null;\n};\n\nconst familyFromCommand = (out) => {\n const [getconf, ldd1] = out.split(/[\\r\\n]+/);\n if (getconf && getconf.includes(GLIBC)) {\n return GLIBC;\n }\n if (ldd1 && ldd1.includes(MUSL)) {\n return MUSL;\n }\n return null;\n};\n\nconst familyFromInterpreterPath = (path) => {\n if (path) {\n if (path.includes('/ld-musl-')) {\n return MUSL;\n } else if (path.includes('/ld-linux-')) {\n return GLIBC;\n }\n }\n return null;\n};\n\nconst getFamilyFromLddContent = (content) => {\n content = content.toString();\n if (content.includes('musl')) {\n return MUSL;\n }\n if (content.includes('GNU C Library')) {\n return GLIBC;\n }\n return null;\n};\n\nconst familyFromFilesystem = async () => {\n if (cachedFamilyFilesystem !== undefined) {\n return cachedFamilyFilesystem;\n }\n cachedFamilyFilesystem = null;\n try {\n const lddContent = await readFile(LDD_PATH);\n cachedFamilyFilesystem = getFamilyFromLddContent(lddContent);\n } catch (e) {}\n return cachedFamilyFilesystem;\n};\n\nconst familyFromFilesystemSync = () => {\n if (cachedFamilyFilesystem !== undefined) {\n return cachedFamilyFilesystem;\n }\n cachedFamilyFilesystem = null;\n try {\n const lddContent = readFileSync(LDD_PATH);\n cachedFamilyFilesystem = getFamilyFromLddContent(lddContent);\n } catch (e) {}\n return cachedFamilyFilesystem;\n};\n\nconst familyFromInterpreter = async () => {\n if (cachedFamilyInterpreter !== undefined) {\n return cachedFamilyInterpreter;\n }\n cachedFamilyInterpreter = null;\n try {\n const selfContent = await readFile(SELF_PATH);\n const path = interpreterPath(selfContent);\n cachedFamilyInterpreter = familyFromInterpreterPath(path);\n } catch (e) {}\n return cachedFamilyInterpreter;\n};\n\nconst familyFromInterpreterSync = () => {\n if (cachedFamilyInterpreter !== undefined) {\n return cachedFamilyInterpreter;\n }\n cachedFamilyInterpreter = null;\n try {\n const selfContent = readFileSync(SELF_PATH);\n const path = interpreterPath(selfContent);\n cachedFamilyInterpreter = familyFromInterpreterPath(path);\n } catch (e) {}\n return cachedFamilyInterpreter;\n};\n\n/**\n * Resolves with the libc family when it can be determined, `null` otherwise.\n * @returns {Promise<?string>}\n */\nconst family = async () => {\n let family = null;\n if (isLinux()) {\n family = await familyFromInterpreter();\n if (!family) {\n family = await familyFromFilesystem();\n if (!family) {\n family = familyFromReport();\n }\n if (!family) {\n const out = await safeCommand();\n family = familyFromCommand(out);\n }\n }\n }\n return family;\n};\n\n/**\n * Returns the libc family when it can be determined, `null` otherwise.\n * @returns {?string}\n */\nconst familySync = () => {\n let family = null;\n if (isLinux()) {\n family = familyFromInterpreterSync();\n if (!family) {\n family = familyFromFilesystemSync();\n if (!family) {\n family = familyFromReport();\n }\n if (!family) {\n const out = safeCommandSync();\n family = familyFromCommand(out);\n }\n }\n }\n return family;\n};\n\n/**\n * Resolves `true` only when the platform is Linux and the libc family is not `glibc`.\n * @returns {Promise<boolean>}\n */\nconst isNonGlibcLinux = async () => isLinux() && await family() !== GLIBC;\n\n/**\n * Returns `true` only when the platform is Linux and the libc family is not `glibc`.\n * @returns {boolean}\n */\nconst isNonGlibcLinuxSync = () => isLinux() && familySync() !== GLIBC;\n\nconst versionFromFilesystem = async () => {\n if (cachedVersionFilesystem !== undefined) {\n return cachedVersionFilesystem;\n }\n cachedVersionFilesystem = null;\n try {\n const lddContent = await readFile(LDD_PATH);\n const versionMatch = lddContent.match(RE_GLIBC_VERSION);\n if (versionMatch) {\n cachedVersionFilesystem = versionMatch[1];\n }\n } catch (e) {}\n return cachedVersionFilesystem;\n};\n\nconst versionFromFilesystemSync = () => {\n if (cachedVersionFilesystem !== undefined) {\n return cachedVersionFilesystem;\n }\n cachedVersionFilesystem = null;\n try {\n const lddContent = readFileSync(LDD_PATH);\n const versionMatch = lddContent.match(RE_GLIBC_VERSION);\n if (versionMatch) {\n cachedVersionFilesystem = versionMatch[1];\n }\n } catch (e) {}\n return cachedVersionFilesystem;\n};\n\nconst versionFromReport = () => {\n const report = getReport();\n if (report.header && report.header.glibcVersionRuntime) {\n return report.header.glibcVersionRuntime;\n }\n return null;\n};\n\nconst versionSuffix = (s) => s.trim().split(/\\s+/)[1];\n\nconst versionFromCommand = (out) => {\n const [getconf, ldd1, ldd2] = out.split(/[\\r\\n]+/);\n if (getconf && getconf.includes(GLIBC)) {\n return versionSuffix(getconf);\n }\n if (ldd1 && ldd2 && ldd1.includes(MUSL)) {\n return versionSuffix(ldd2);\n }\n return null;\n};\n\n/**\n * Resolves with the libc version when it can be determined, `null` otherwise.\n * @returns {Promise<?string>}\n */\nconst version = async () => {\n let version = null;\n if (isLinux()) {\n version = await versionFromFilesystem();\n if (!version) {\n version = versionFromReport();\n }\n if (!version) {\n const out = await safeCommand();\n version = versionFromCommand(out);\n }\n }\n return version;\n};\n\n/**\n * Returns the libc version when it can be determined, `null` otherwise.\n * @returns {?string}\n */\nconst versionSync = () => {\n let version = null;\n if (isLinux()) {\n version = versionFromFilesystemSync();\n if (!version) {\n version = versionFromReport();\n }\n if (!version) {\n const out = safeCommandSync();\n version = versionFromCommand(out);\n }\n }\n return version;\n};\n\nmodule.exports = {\n GLIBC,\n MUSL,\n family,\n familySync,\n isNonGlibcLinux,\n isNonGlibcLinuxSync,\n version,\n versionSync\n};\n","var fs = require('fs')\nvar path = require('path')\nvar url = require('url')\nvar os = require('os')\n// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'\nvar runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\n\nvar vars = (process.config && process.config.variables) || {}\nvar prebuildsOnly = !!process.env.PREBUILDS_ONLY\nvar versions = process.versions\nvar abi = versions.modules\nif (versions.deno || process.isBun) {\n // both Deno and Bun made the very poor decision to shoot themselves in the foot and lie about support for ABI\n // (which they do not have)\n abi = 'unsupported'\n}\nvar runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node')\nvar arch = process.env.npm_config_arch || os.arch()\nvar platform = process.env.npm_config_platform || os.platform()\nvar libc = process.env.LIBC || (isMusl(platform) ? 'musl' : 'glibc')\n\nvar armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : vars.arm_version) || ''\nvar uv = (versions.uv || '').split('.')[0]\n\nmodule.exports = load\n\nfunction load (dir) {\n return runtimeRequire(load.resolve(dir))\n}\n\nload.resolve = load.path = function (dir) {\n dir = path.resolve(dir || '.')\n var packageName = ''\n var packageNameError\n try {\n packageName = runtimeRequire(path.join(dir, 'package.json')).name;\n var varName = packageName.toUpperCase().replace(/-/g, '_')\n if (process.env[varName + '_PREBUILD']) dir = process.env[varName + '_PREBUILD']\n } catch (err) {\n packageNameError = err;\n }\n if (!prebuildsOnly) {\n var release = getFirst(path.join(dir, 'build/Release'), matchBuild)\n if (release) return release\n\n var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)\n if (debug) return debug\n }\n\n var prebuild = resolve(dir)\n if (prebuild) return prebuild\n\n var nearby = resolve(path.dirname(process.execPath))\n if (nearby) return nearby\n\n var platformPackage = (packageName[0] == '@' ? '' : '@' + packageName + '/') + packageName + '-' + platform + '-' + arch\n var packageResolutionError\n try {\n var prebuildPackage = path.dirname(require('module').createRequire(url.pathToFileURL(path.join(dir, 'package.json'))).resolve(platformPackage))\n return resolveFile(prebuildPackage)\n } catch(error) {\n packageResolutionError = error\n }\n\n var target = [\n 'platform=' + platform,\n 'arch=' + arch,\n 'runtime=' + runtime,\n 'abi=' + abi,\n 'uv=' + uv,\n armv ? 'armv=' + armv : '',\n 'libc=' + libc,\n 'node=' + process.versions.node,\n process.versions.electron ? 'electron=' + process.versions.electron : '',\n typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line\n ].filter(Boolean).join(' ')\n let errMessage = 'No native build was found for ' + target + '\\n attempted loading from: ' + dir + ' and package:' +\n ' ' + platformPackage + '\\n';\n if (packageNameError) {\n errMessage += 'Error finding package.json: ' + packageNameError.message + '\\n';\n }\n if (packageResolutionError) {\n errMessage += 'Error resolving package: ' + packageResolutionError.message + '\\n';\n }\n throw new Error(errMessage)\n\n function resolve (dir) {\n // Find matching \"prebuilds/<platform>-<arch>\" directory\n var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple)\n var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0]\n if (!tuple) return\n return resolveFile(path.join(dir, 'prebuilds', tuple.name))\n }\n function resolveFile (prebuilds) {\n // Find most specific flavor first\n var parsed = readdirSync(prebuilds).map(parseTags)\n var candidates = parsed.filter(matchTags(runtime, abi))\n var winner = candidates.sort(compareTags(runtime))[0]\n if (winner) return path.join(prebuilds, winner.file)\n }\n}\n\nfunction readdirSync (dir) {\n try {\n return fs.readdirSync(dir)\n } catch (err) {\n return []\n }\n}\n\nfunction getFirst (dir, filter) {\n var files = readdirSync(dir).filter(filter)\n return files[0] && path.join(dir, files[0])\n}\n\nfunction matchBuild (name) {\n return /\\.node$/.test(name)\n}\n\nfunction parseTuple (name) {\n // Example: darwin-x64+arm64\n var arr = name.split('-')\n if (arr.length !== 2) return\n\n var platform = arr[0]\n var architectures = arr[1].split('+')\n\n if (!platform) return\n if (!architectures.length) return\n if (!architectures.every(Boolean)) return\n\n return { name, platform, architectures }\n}\n\nfunction matchTuple (platform, arch) {\n return function (tuple) {\n if (tuple == null) return false\n if (tuple.platform !== platform) return false\n return tuple.architectures.includes(arch)\n }\n}\n\nfunction compareTuples (a, b) {\n // Prefer single-arch prebuilds over multi-arch\n return a.architectures.length - b.architectures.length\n}\n\nfunction parseTags (file) {\n var arr = file.split('.')\n var extension = arr.pop()\n var tags = { file: file, specificity: 0 }\n\n if (extension !== 'node') return\n\n for (var i = 0; i < arr.length; i++) {\n var tag = arr[i]\n\n if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {\n tags.runtime = tag\n } else if (tag === 'napi') {\n tags.napi = true\n } else if (tag.slice(0, 3) === 'abi') {\n tags.abi = tag.slice(3)\n } else if (tag.slice(0, 2) === 'uv') {\n tags.uv = tag.slice(2)\n } else if (tag.slice(0, 4) === 'armv') {\n tags.armv = tag.slice(4)\n } else if (tag === 'glibc' || tag === 'musl') {\n tags.libc = tag\n } else {\n continue\n }\n\n tags.specificity++\n }\n\n return tags\n}\n\nfunction matchTags (runtime, abi) {\n return function (tags) {\n if (tags == null) return false\n if (tags.runtime !== runtime && !runtimeAgnostic(tags)) return false\n if (tags.abi !== abi && !tags.napi) return false\n if (tags.uv && tags.uv !== uv) return false\n if (tags.armv && tags.armv !== armv) return false\n if (tags.libc && tags.libc !== libc) return false\n\n return true\n }\n}\n\nfunction runtimeAgnostic (tags) {\n return tags.runtime === 'node' && tags.napi\n}\n\nfunction compareTags (runtime) {\n // Precedence: non-agnostic runtime, abi over napi, then by specificity.\n return function (a, b) {\n if (a.runtime !== b.runtime) {\n return a.runtime === runtime ? -1 : 1\n } else if (a.abi !== b.abi) {\n return a.abi ? -1 : 1\n } else if (a.specificity !== b.specificity) {\n return a.specificity > b.specificity ? -1 : 1\n } else {\n return 0\n }\n }\n}\n\nfunction isNwjs () {\n return !!(process.versions && process.versions.nw)\n}\n\nfunction isElectron () {\n if (process.versions && process.versions.electron) return true\n if (process.env.ELECTRON_RUN_AS_NODE) return true\n return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'\n}\n\nfunction isMusl (platform) {\n if (platform !== 'linux') return false;\n const { familySync, MUSL } = require('detect-libc');\n return familySync() === MUSL;\n}\n\n// Exposed for unit tests\n// TODO: move to lib\nload.parseTags = parseTags\nload.matchTags = matchTags\nload.compareTags = compareTags\nload.parseTuple = parseTuple\nload.matchTuple = matchTuple\nload.compareTuples = compareTuples\n\n","const runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\nif (typeof runtimeRequire.addon === 'function') { // if the platform supports native resolving prefer that\n module.exports = runtimeRequire.addon.bind(runtimeRequire)\n} else { // else use the runtime version here\n module.exports = require('./node-gyp-build.js')\n}\n","module.exports = require('node-gyp-build-optional-packages')(__dirname);","export { Packr, Encoder, addExtension, pack, encode, NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT, REUSE_BUFFER_MODE, RESET_BUFFER_MODE, RESERVE_START_SPACE } from './pack.js'\nexport { Unpackr, Decoder, C1, unpack, unpackMultiple, decode, FLOAT32_OPTIONS, clearSource, roundFloat32, isNativeAccelerationEnabled } from './unpack.js'\nimport './struct.js'\nexport { PackrStream, UnpackrStream, PackrStream as EncoderStream, UnpackrStream as DecoderStream } from './stream.js'\nexport { decodeIter, encodeIter } from './iterators.js'\nexport const useRecords = false\nexport const mapsAsObjects = true\nimport { setExtractor } from './unpack.js'\nimport { createRequire } from 'module'\n\nconst nativeAccelerationDisabled = process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED !== undefined && process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED.toLowerCase() === 'true';\n\nif (!nativeAccelerationDisabled) {\n\tlet extractor\n\ttry {\n\t\tif (typeof require == 'function')\n\t\t\textractor = require('msgpackr-extract')\n\t\telse\n\t\t\textractor = createRequire(import.meta.url)('msgpackr-extract')\n\t\tif (extractor)\n\t\t\tsetExtractor(extractor.extractStrings)\n\t} catch (error) {\n\t\t// native module is optional\n\t}\n}","// AUTOGENERATED FILE - DO NOT EDIT\n// Conversion functions (exported)\nexport function toCircuitComputeVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in CircuitComputeVk deserialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitComputeVk deserialization\");\n }\n ;\n return {\n circuit: toCircuitInputNoVK(o.circuit),\n settings: toProofSystemSettings(o.settings),\n };\n}\nexport function fromCircuitComputeVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in CircuitComputeVk serialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitComputeVk serialization\");\n }\n ;\n return {\n circuit: fromCircuitInputNoVK(o.circuit),\n settings: fromProofSystemSettings(o.settings),\n };\n}\nexport function toCircuitComputeVkResponse(o) {\n if (o.bytes === undefined) {\n throw new Error(\"Expected bytes in CircuitComputeVkResponse deserialization\");\n }\n if (o.fields === undefined) {\n throw new Error(\"Expected fields in CircuitComputeVkResponse deserialization\");\n }\n if (o.hash === undefined) {\n throw new Error(\"Expected hash in CircuitComputeVkResponse deserialization\");\n }\n ;\n return {\n bytes: o.bytes,\n fields: o.fields.map((v) => v),\n hash: o.hash,\n };\n}\nexport function fromCircuitComputeVkResponse(o) {\n if (o.bytes === undefined) {\n throw new Error(\"Expected bytes in CircuitComputeVkResponse serialization\");\n }\n if (o.fields === undefined) {\n throw new Error(\"Expected fields in CircuitComputeVkResponse serialization\");\n }\n if (o.hash === undefined) {\n throw new Error(\"Expected hash in CircuitComputeVkResponse serialization\");\n }\n ;\n return {\n bytes: o.bytes,\n fields: o.fields.map((v) => v),\n hash: o.hash,\n };\n}\nexport function toCircuitInfoResponse(o) {\n if (o.num_gates === undefined) {\n throw new Error(\"Expected num_gates in CircuitInfoResponse deserialization\");\n }\n if (o.num_gates_dyadic === undefined) {\n throw new Error(\"Expected num_gates_dyadic in CircuitInfoResponse deserialization\");\n }\n if (o.num_acir_opcodes === undefined) {\n throw new Error(\"Expected num_acir_opcodes in CircuitInfoResponse deserialization\");\n }\n if (o.gates_per_opcode === undefined) {\n throw new Error(\"Expected gates_per_opcode in CircuitInfoResponse deserialization\");\n }\n ;\n return {\n numGates: o.num_gates,\n numGatesDyadic: o.num_gates_dyadic,\n numAcirOpcodes: o.num_acir_opcodes,\n gatesPerOpcode: o.gates_per_opcode.map((v) => v),\n };\n}\nexport function fromCircuitInfoResponse(o) {\n if (o.numGates === undefined) {\n throw new Error(\"Expected numGates in CircuitInfoResponse serialization\");\n }\n if (o.numGatesDyadic === undefined) {\n throw new Error(\"Expected numGatesDyadic in CircuitInfoResponse serialization\");\n }\n if (o.numAcirOpcodes === undefined) {\n throw new Error(\"Expected numAcirOpcodes in CircuitInfoResponse serialization\");\n }\n if (o.gatesPerOpcode === undefined) {\n throw new Error(\"Expected gatesPerOpcode in CircuitInfoResponse serialization\");\n }\n ;\n return {\n num_gates: o.numGates,\n num_gates_dyadic: o.numGatesDyadic,\n num_acir_opcodes: o.numAcirOpcodes,\n gates_per_opcode: o.gatesPerOpcode.map((v) => v),\n };\n}\nexport function toCircuitInput(o) {\n if (o.name === undefined) {\n throw new Error(\"Expected name in CircuitInput deserialization\");\n }\n if (o.bytecode === undefined) {\n throw new Error(\"Expected bytecode in CircuitInput deserialization\");\n }\n if (o.verification_key === undefined) {\n throw new Error(\"Expected verification_key in CircuitInput deserialization\");\n }\n ;\n return {\n name: o.name,\n bytecode: o.bytecode,\n verificationKey: o.verification_key,\n };\n}\nexport function fromCircuitInput(o) {\n if (o.name === undefined) {\n throw new Error(\"Expected name in CircuitInput serialization\");\n }\n if (o.bytecode === undefined) {\n throw new Error(\"Expected bytecode in CircuitInput serialization\");\n }\n if (o.verificationKey === undefined) {\n throw new Error(\"Expected verificationKey in CircuitInput serialization\");\n }\n ;\n return {\n name: o.name,\n bytecode: o.bytecode,\n verification_key: o.verificationKey,\n };\n}\nexport function toCircuitInputNoVK(o) {\n if (o.name === undefined) {\n throw new Error(\"Expected name in CircuitInputNoVK deserialization\");\n }\n if (o.bytecode === undefined) {\n throw new Error(\"Expected bytecode in CircuitInputNoVK deserialization\");\n }\n ;\n return {\n name: o.name,\n bytecode: o.bytecode,\n };\n}\nexport function fromCircuitInputNoVK(o) {\n if (o.name === undefined) {\n throw new Error(\"Expected name in CircuitInputNoVK serialization\");\n }\n if (o.bytecode === undefined) {\n throw new Error(\"Expected bytecode in CircuitInputNoVK serialization\");\n }\n ;\n return {\n name: o.name,\n bytecode: o.bytecode,\n };\n}\nexport function toCircuitProve(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in CircuitProve deserialization\");\n }\n if (o.witness === undefined) {\n throw new Error(\"Expected witness in CircuitProve deserialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitProve deserialization\");\n }\n ;\n return {\n circuit: toCircuitInput(o.circuit),\n witness: o.witness,\n settings: toProofSystemSettings(o.settings),\n };\n}\nexport function fromCircuitProve(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in CircuitProve serialization\");\n }\n if (o.witness === undefined) {\n throw new Error(\"Expected witness in CircuitProve serialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitProve serialization\");\n }\n ;\n return {\n circuit: fromCircuitInput(o.circuit),\n witness: o.witness,\n settings: fromProofSystemSettings(o.settings),\n };\n}\nexport function toCircuitProveResponse(o) {\n if (o.public_inputs === undefined) {\n throw new Error(\"Expected public_inputs in CircuitProveResponse deserialization\");\n }\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in CircuitProveResponse deserialization\");\n }\n if (o.vk === undefined) {\n throw new Error(\"Expected vk in CircuitProveResponse deserialization\");\n }\n ;\n return {\n publicInputs: o.public_inputs.map((v) => v),\n proof: o.proof.map((v) => v),\n vk: toCircuitComputeVkResponse(o.vk),\n };\n}\nexport function fromCircuitProveResponse(o) {\n if (o.publicInputs === undefined) {\n throw new Error(\"Expected publicInputs in CircuitProveResponse serialization\");\n }\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in CircuitProveResponse serialization\");\n }\n if (o.vk === undefined) {\n throw new Error(\"Expected vk in CircuitProveResponse serialization\");\n }\n ;\n return {\n public_inputs: o.publicInputs.map((v) => v),\n proof: o.proof.map((v) => v),\n vk: fromCircuitComputeVkResponse(o.vk),\n };\n}\nexport function toCircuitStats(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in CircuitStats deserialization\");\n }\n if (o.include_gates_per_opcode === undefined) {\n throw new Error(\"Expected include_gates_per_opcode in CircuitStats deserialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitStats deserialization\");\n }\n ;\n return {\n circuit: toCircuitInput(o.circuit),\n includeGatesPerOpcode: o.include_gates_per_opcode,\n settings: toProofSystemSettings(o.settings),\n };\n}\nexport function fromCircuitStats(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in CircuitStats serialization\");\n }\n if (o.includeGatesPerOpcode === undefined) {\n throw new Error(\"Expected includeGatesPerOpcode in CircuitStats serialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitStats serialization\");\n }\n ;\n return {\n circuit: fromCircuitInput(o.circuit),\n include_gates_per_opcode: o.includeGatesPerOpcode,\n settings: fromProofSystemSettings(o.settings),\n };\n}\nexport function toCircuitVerify(o) {\n if (o.verification_key === undefined) {\n throw new Error(\"Expected verification_key in CircuitVerify deserialization\");\n }\n if (o.public_inputs === undefined) {\n throw new Error(\"Expected public_inputs in CircuitVerify deserialization\");\n }\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in CircuitVerify deserialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitVerify deserialization\");\n }\n ;\n return {\n verificationKey: o.verification_key,\n publicInputs: o.public_inputs.map((v) => v),\n proof: o.proof.map((v) => v),\n settings: toProofSystemSettings(o.settings),\n };\n}\nexport function fromCircuitVerify(o) {\n if (o.verificationKey === undefined) {\n throw new Error(\"Expected verificationKey in CircuitVerify serialization\");\n }\n if (o.publicInputs === undefined) {\n throw new Error(\"Expected publicInputs in CircuitVerify serialization\");\n }\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in CircuitVerify serialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitVerify serialization\");\n }\n ;\n return {\n verification_key: o.verificationKey,\n public_inputs: o.publicInputs.map((v) => v),\n proof: o.proof.map((v) => v),\n settings: fromProofSystemSettings(o.settings),\n };\n}\nexport function toCircuitVerifyResponse(o) {\n if (o.verified === undefined) {\n throw new Error(\"Expected verified in CircuitVerifyResponse deserialization\");\n }\n ;\n return {\n verified: o.verified,\n };\n}\nexport function fromCircuitVerifyResponse(o) {\n if (o.verified === undefined) {\n throw new Error(\"Expected verified in CircuitVerifyResponse serialization\");\n }\n ;\n return {\n verified: o.verified,\n };\n}\nexport function toCircuitWriteSolidityVerifier(o) {\n if (o.verification_key === undefined) {\n throw new Error(\"Expected verification_key in CircuitWriteSolidityVerifier deserialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitWriteSolidityVerifier deserialization\");\n }\n ;\n return {\n verificationKey: o.verification_key,\n settings: toProofSystemSettings(o.settings),\n };\n}\nexport function fromCircuitWriteSolidityVerifier(o) {\n if (o.verificationKey === undefined) {\n throw new Error(\"Expected verificationKey in CircuitWriteSolidityVerifier serialization\");\n }\n if (o.settings === undefined) {\n throw new Error(\"Expected settings in CircuitWriteSolidityVerifier serialization\");\n }\n ;\n return {\n verification_key: o.verificationKey,\n settings: fromProofSystemSettings(o.settings),\n };\n}\nexport function toCircuitWriteSolidityVerifierResponse(o) {\n if (o.solidity_code === undefined) {\n throw new Error(\"Expected solidity_code in CircuitWriteSolidityVerifierResponse deserialization\");\n }\n ;\n return {\n solidityCode: o.solidity_code,\n };\n}\nexport function fromCircuitWriteSolidityVerifierResponse(o) {\n if (o.solidityCode === undefined) {\n throw new Error(\"Expected solidityCode in CircuitWriteSolidityVerifierResponse serialization\");\n }\n ;\n return {\n solidity_code: o.solidityCode,\n };\n}\nexport function toClientIvcAccumulate(o) {\n if (o.witness === undefined) {\n throw new Error(\"Expected witness in ClientIvcAccumulate deserialization\");\n }\n ;\n return {\n witness: o.witness,\n };\n}\nexport function fromClientIvcAccumulate(o) {\n if (o.witness === undefined) {\n throw new Error(\"Expected witness in ClientIvcAccumulate serialization\");\n }\n ;\n return {\n witness: o.witness,\n };\n}\nexport function toClientIvcAccumulateResponse(o) {\n return {};\n}\nexport function fromClientIvcAccumulateResponse(o) {\n return {};\n}\nexport function toClientIvcCheckPrecomputedVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcCheckPrecomputedVk deserialization\");\n }\n ;\n return {\n circuit: toCircuitInput(o.circuit),\n };\n}\nexport function fromClientIvcCheckPrecomputedVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcCheckPrecomputedVk serialization\");\n }\n ;\n return {\n circuit: fromCircuitInput(o.circuit),\n };\n}\nexport function toClientIvcCheckPrecomputedVkResponse(o) {\n if (o.valid === undefined) {\n throw new Error(\"Expected valid in ClientIvcCheckPrecomputedVkResponse deserialization\");\n }\n if (o.actual_vk === undefined) {\n throw new Error(\"Expected actual_vk in ClientIvcCheckPrecomputedVkResponse deserialization\");\n }\n ;\n return {\n valid: o.valid,\n actualVk: o.actual_vk,\n };\n}\nexport function fromClientIvcCheckPrecomputedVkResponse(o) {\n if (o.valid === undefined) {\n throw new Error(\"Expected valid in ClientIvcCheckPrecomputedVkResponse serialization\");\n }\n if (o.actualVk === undefined) {\n throw new Error(\"Expected actualVk in ClientIvcCheckPrecomputedVkResponse serialization\");\n }\n ;\n return {\n valid: o.valid,\n actual_vk: o.actualVk,\n };\n}\nexport function toClientIvcComputeIvcVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcComputeIvcVk deserialization\");\n }\n ;\n return {\n circuit: toCircuitInputNoVK(o.circuit),\n };\n}\nexport function fromClientIvcComputeIvcVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcComputeIvcVk serialization\");\n }\n ;\n return {\n circuit: fromCircuitInputNoVK(o.circuit),\n };\n}\nexport function toClientIvcComputeIvcVkResponse(o) {\n if (o.bytes === undefined) {\n throw new Error(\"Expected bytes in ClientIvcComputeIvcVkResponse deserialization\");\n }\n ;\n return {\n bytes: o.bytes,\n };\n}\nexport function fromClientIvcComputeIvcVkResponse(o) {\n if (o.bytes === undefined) {\n throw new Error(\"Expected bytes in ClientIvcComputeIvcVkResponse serialization\");\n }\n ;\n return {\n bytes: o.bytes,\n };\n}\nexport function toClientIvcComputeStandaloneVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcComputeStandaloneVk deserialization\");\n }\n ;\n return {\n circuit: toCircuitInputNoVK(o.circuit),\n };\n}\nexport function fromClientIvcComputeStandaloneVk(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcComputeStandaloneVk serialization\");\n }\n ;\n return {\n circuit: fromCircuitInputNoVK(o.circuit),\n };\n}\nexport function toClientIvcComputeStandaloneVkResponse(o) {\n if (o.bytes === undefined) {\n throw new Error(\"Expected bytes in ClientIvcComputeStandaloneVkResponse deserialization\");\n }\n if (o.fields === undefined) {\n throw new Error(\"Expected fields in ClientIvcComputeStandaloneVkResponse deserialization\");\n }\n ;\n return {\n bytes: o.bytes,\n fields: o.fields.map((v) => v),\n };\n}\nexport function fromClientIvcComputeStandaloneVkResponse(o) {\n if (o.bytes === undefined) {\n throw new Error(\"Expected bytes in ClientIvcComputeStandaloneVkResponse serialization\");\n }\n if (o.fields === undefined) {\n throw new Error(\"Expected fields in ClientIvcComputeStandaloneVkResponse serialization\");\n }\n ;\n return {\n bytes: o.bytes,\n fields: o.fields.map((v) => v),\n };\n}\nexport function toClientIvcLoad(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcLoad deserialization\");\n }\n ;\n return {\n circuit: toCircuitInput(o.circuit),\n };\n}\nexport function fromClientIvcLoad(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcLoad serialization\");\n }\n ;\n return {\n circuit: fromCircuitInput(o.circuit),\n };\n}\nexport function toClientIvcLoadResponse(o) {\n return {};\n}\nexport function fromClientIvcLoadResponse(o) {\n return {};\n}\nexport function toClientIVCProof(o) {\n if (o.mega_proof === undefined) {\n throw new Error(\"Expected mega_proof in ClientIVCProof deserialization\");\n }\n if (o.goblin_proof === undefined) {\n throw new Error(\"Expected goblin_proof in ClientIVCProof deserialization\");\n }\n ;\n return {\n megaProof: o.mega_proof.map((v) => v),\n goblinProof: toGoblinProof(o.goblin_proof),\n };\n}\nexport function fromClientIVCProof(o) {\n if (o.megaProof === undefined) {\n throw new Error(\"Expected megaProof in ClientIVCProof serialization\");\n }\n if (o.goblinProof === undefined) {\n throw new Error(\"Expected goblinProof in ClientIVCProof serialization\");\n }\n ;\n return {\n mega_proof: o.megaProof.map((v) => v),\n goblin_proof: fromGoblinProof(o.goblinProof),\n };\n}\nexport function toClientIvcProve(o) {\n return {};\n}\nexport function fromClientIvcProve(o) {\n return {};\n}\nexport function toClientIvcProveResponse(o) {\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in ClientIvcProveResponse deserialization\");\n }\n ;\n return {\n proof: toClientIVCProof(o.proof),\n };\n}\nexport function fromClientIvcProveResponse(o) {\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in ClientIvcProveResponse serialization\");\n }\n ;\n return {\n proof: fromClientIVCProof(o.proof),\n };\n}\nexport function toClientIvcStart(o) {\n if (o.num_circuits === undefined) {\n throw new Error(\"Expected num_circuits in ClientIvcStart deserialization\");\n }\n ;\n return {\n numCircuits: o.num_circuits,\n };\n}\nexport function fromClientIvcStart(o) {\n if (o.numCircuits === undefined) {\n throw new Error(\"Expected numCircuits in ClientIvcStart serialization\");\n }\n ;\n return {\n num_circuits: o.numCircuits,\n };\n}\nexport function toClientIvcStartResponse(o) {\n return {};\n}\nexport function fromClientIvcStartResponse(o) {\n return {};\n}\nexport function toClientIvcStats(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcStats deserialization\");\n }\n if (o.include_gates_per_opcode === undefined) {\n throw new Error(\"Expected include_gates_per_opcode in ClientIvcStats deserialization\");\n }\n ;\n return {\n circuit: toCircuitInputNoVK(o.circuit),\n includeGatesPerOpcode: o.include_gates_per_opcode,\n };\n}\nexport function fromClientIvcStats(o) {\n if (o.circuit === undefined) {\n throw new Error(\"Expected circuit in ClientIvcStats serialization\");\n }\n if (o.includeGatesPerOpcode === undefined) {\n throw new Error(\"Expected includeGatesPerOpcode in ClientIvcStats serialization\");\n }\n ;\n return {\n circuit: fromCircuitInputNoVK(o.circuit),\n include_gates_per_opcode: o.includeGatesPerOpcode,\n };\n}\nexport function toClientIvcStatsResponse(o) {\n if (o.acir_opcodes === undefined) {\n throw new Error(\"Expected acir_opcodes in ClientIvcStatsResponse deserialization\");\n }\n if (o.circuit_size === undefined) {\n throw new Error(\"Expected circuit_size in ClientIvcStatsResponse deserialization\");\n }\n if (o.gates_per_opcode === undefined) {\n throw new Error(\"Expected gates_per_opcode in ClientIvcStatsResponse deserialization\");\n }\n ;\n return {\n acirOpcodes: o.acir_opcodes,\n circuitSize: o.circuit_size,\n gatesPerOpcode: o.gates_per_opcode.map((v) => v),\n };\n}\nexport function fromClientIvcStatsResponse(o) {\n if (o.acirOpcodes === undefined) {\n throw new Error(\"Expected acirOpcodes in ClientIvcStatsResponse serialization\");\n }\n if (o.circuitSize === undefined) {\n throw new Error(\"Expected circuitSize in ClientIvcStatsResponse serialization\");\n }\n if (o.gatesPerOpcode === undefined) {\n throw new Error(\"Expected gatesPerOpcode in ClientIvcStatsResponse serialization\");\n }\n ;\n return {\n acir_opcodes: o.acirOpcodes,\n circuit_size: o.circuitSize,\n gates_per_opcode: o.gatesPerOpcode.map((v) => v),\n };\n}\nexport function toClientIvcVerify(o) {\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in ClientIvcVerify deserialization\");\n }\n if (o.vk === undefined) {\n throw new Error(\"Expected vk in ClientIvcVerify deserialization\");\n }\n ;\n return {\n proof: toClientIVCProof(o.proof),\n vk: o.vk,\n };\n}\nexport function fromClientIvcVerify(o) {\n if (o.proof === undefined) {\n throw new Error(\"Expected proof in ClientIvcVerify serialization\");\n }\n if (o.vk === undefined) {\n throw new Error(\"Expected vk in ClientIvcVerify serialization\");\n }\n ;\n return {\n proof: fromClientIVCProof(o.proof),\n vk: o.vk,\n };\n}\nexport function toClientIvcVerifyResponse(o) {\n if (o.valid === undefined) {\n throw new Error(\"Expected valid in ClientIvcVerifyResponse deserialization\");\n }\n ;\n return {\n valid: o.valid,\n };\n}\nexport function fromClientIvcVerifyResponse(o) {\n if (o.valid === undefined) {\n throw new Error(\"Expected valid in ClientIvcVerifyResponse serialization\");\n }\n ;\n return {\n valid: o.valid,\n };\n}\nexport function toECCVMProof(o) {\n if (o.pre_ipa_proof === undefined) {\n throw new Error(\"Expected pre_ipa_proof in ECCVMProof deserialization\");\n }\n if (o.ipa_proof === undefined) {\n throw new Error(\"Expected ipa_proof in ECCVMProof deserialization\");\n }\n ;\n return {\n preIpaProof: o.pre_ipa_proof.map((v) => v),\n ipaProof: o.ipa_proof.map((v) => v),\n };\n}\nexport function fromECCVMProof(o) {\n if (o.preIpaProof === undefined) {\n throw new Error(\"Expected preIpaProof in ECCVMProof serialization\");\n }\n if (o.ipaProof === undefined) {\n throw new Error(\"Expected ipaProof in ECCVMProof serialization\");\n }\n ;\n return {\n pre_ipa_proof: o.preIpaProof.map((v) => v),\n ipa_proof: o.ipaProof.map((v) => v),\n };\n}\nexport function toGoblinProof(o) {\n if (o.merge_proof === undefined) {\n throw new Error(\"Expected merge_proof in GoblinProof deserialization\");\n }\n if (o.eccvm_proof === undefined) {\n throw new Error(\"Expected eccvm_proof in GoblinProof deserialization\");\n }\n if (o.translator_proof === undefined) {\n throw new Error(\"Expected translator_proof in GoblinProof deserialization\");\n }\n ;\n return {\n mergeProof: o.merge_proof.map((v) => v),\n eccvmProof: toECCVMProof(o.eccvm_proof),\n translatorProof: o.translator_proof.map((v) => v),\n };\n}\nexport function fromGoblinProof(o) {\n if (o.mergeProof === undefined) {\n throw new Error(\"Expected mergeProof in GoblinProof serialization\");\n }\n if (o.eccvmProof === undefined) {\n throw new Error(\"Expected eccvmProof in GoblinProof serialization\");\n }\n if (o.translatorProof === undefined) {\n throw new Error(\"Expected translatorProof in GoblinProof serialization\");\n }\n ;\n return {\n merge_proof: o.mergeProof.map((v) => v),\n eccvm_proof: fromECCVMProof(o.eccvmProof),\n translator_proof: o.translatorProof.map((v) => v),\n };\n}\nexport function toProofSystemSettings(o) {\n if (o.ipa_accumulation === undefined) {\n throw new Error(\"Expected ipa_accumulation in ProofSystemSettings deserialization\");\n }\n if (o.oracle_hash_type === undefined) {\n throw new Error(\"Expected oracle_hash_type in ProofSystemSettings deserialization\");\n }\n if (o.disable_zk === undefined) {\n throw new Error(\"Expected disable_zk in ProofSystemSettings deserialization\");\n }\n if (o.optimized_solidity_verifier === undefined) {\n throw new Error(\"Expected optimized_solidity_verifier in ProofSystemSettings deserialization\");\n }\n ;\n return {\n ipaAccumulation: o.ipa_accumulation,\n oracleHashType: o.oracle_hash_type,\n disableZk: o.disable_zk,\n optimizedSolidityVerifier: o.optimized_solidity_verifier,\n };\n}\nexport function fromProofSystemSettings(o) {\n if (o.ipaAccumulation === undefined) {\n throw new Error(\"Expected ipaAccumulation in ProofSystemSettings serialization\");\n }\n if (o.oracleHashType === undefined) {\n throw new Error(\"Expected oracleHashType in ProofSystemSettings serialization\");\n }\n if (o.disableZk === undefined) {\n throw new Error(\"Expected disableZk in ProofSystemSettings serialization\");\n }\n if (o.optimizedSolidityVerifier === undefined) {\n throw new Error(\"Expected optimizedSolidityVerifier in ProofSystemSettings serialization\");\n }\n ;\n return {\n ipa_accumulation: o.ipaAccumulation,\n oracle_hash_type: o.oracleHashType,\n disable_zk: o.disableZk,\n optimized_solidity_verifier: o.optimizedSolidityVerifier,\n };\n}\nexport function toVkAsFields(o) {\n if (o.verification_key === undefined) {\n throw new Error(\"Expected verification_key in VkAsFields deserialization\");\n }\n ;\n return {\n verificationKey: o.verification_key,\n };\n}\nexport function fromVkAsFields(o) {\n if (o.verificationKey === undefined) {\n throw new Error(\"Expected verificationKey in VkAsFields serialization\");\n }\n ;\n return {\n verification_key: o.verificationKey,\n };\n}\nexport function toVkAsFieldsResponse(o) {\n if (o.fields === undefined) {\n throw new Error(\"Expected fields in VkAsFieldsResponse deserialization\");\n }\n ;\n return {\n fields: o.fields.map((v) => v),\n };\n}\nexport function fromVkAsFieldsResponse(o) {\n if (o.fields === undefined) {\n throw new Error(\"Expected fields in VkAsFieldsResponse serialization\");\n }\n ;\n return {\n fields: o.fields.map((v) => v),\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpX3R5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NiaW5kL2dlbmVyYXRlZC9hcGlfdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBeXJCbkMsa0NBQWtDO0FBQ2xDLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxDQUEwQjtJQUMzRCxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFBQyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQ3pHLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUFDLENBQUM7SUFBQSxDQUFDO0lBQzVHLE9BQU87UUFDTCxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN0QyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztLQUM1QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxDQUFtQjtJQUN0RCxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFBQyxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQ3ZHLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztJQUFDLENBQUM7SUFBQSxDQUFDO0lBQzFHLE9BQU87UUFDUCxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4QyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztLQUM1QyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxDQUFrQztJQUMzRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFBQyxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQzdHLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUFDLENBQUM7SUFDL0csSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0lBQUMsQ0FBQztJQUFBLENBQUM7SUFDNUcsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztRQUNkLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDRCQUE0QixDQUFDLENBQTJCO0lBQ3RFLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUFDLENBQUM7SUFDM0csSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0lBQUMsQ0FBQztJQUM3RyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFBQyxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQUEsQ0FBQztJQUMxRyxPQUFPO1FBQ1AsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1FBQ2QsTUFBTSxFQUFFLENBQUMs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","// AUTOGENERATED FILE - DO NOT EDIT\nimport { Decoder, Encoder } from 'msgpackr';\nimport { fromCircuitComputeVk, fromCircuitProve, fromCircuitStats, fromCircuitVerify, fromCircuitWriteSolidityVerifier, fromClientIvcAccumulate, fromClientIvcCheckPrecomputedVk, fromClientIvcComputeIvcVk, fromClientIvcComputeStandaloneVk, fromClientIvcLoad, fromClientIvcProve, fromClientIvcStart, fromClientIvcStats, fromClientIvcVerify, fromVkAsFields, toCircuitComputeVkResponse, toCircuitInfoResponse, toCircuitProveResponse, toCircuitVerifyResponse, toCircuitWriteSolidityVerifierResponse, toClientIvcAccumulateResponse, toClientIvcCheckPrecomputedVkResponse, toClientIvcComputeIvcVkResponse, toClientIvcComputeStandaloneVkResponse, toClientIvcLoadResponse, toClientIvcProveResponse, toClientIvcStartResponse, toClientIvcStatsResponse, toClientIvcVerifyResponse, toVkAsFieldsResponse } from './api_types.js';\nasync function msgpackCall(wasm, cbind, input) { const inputBuffer = new Encoder({ useRecords: false }).pack(input); const encodedResult = await wasm.cbindCall(cbind, inputBuffer); return new Decoder({ useRecords: false }).unpack(encodedResult); }\nexport class AsyncApi {\n constructor(wasm) {\n this.wasm = wasm;\n }\n circuitProve(command) {\n const msgpackCommand = fromCircuitProve(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"CircuitProve\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'CircuitProveResponse') {\n throw new Error(`Expected variant name 'CircuitProveResponse' but got '${variantName}'`);\n }\n return toCircuitProveResponse(result);\n });\n }\n circuitComputeVk(command) {\n const msgpackCommand = fromCircuitComputeVk(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"CircuitComputeVk\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'CircuitComputeVkResponse') {\n throw new Error(`Expected variant name 'CircuitComputeVkResponse' but got '${variantName}'`);\n }\n return toCircuitComputeVkResponse(result);\n });\n }\n circuitStats(command) {\n const msgpackCommand = fromCircuitStats(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"CircuitStats\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'CircuitInfoResponse') {\n throw new Error(`Expected variant name 'CircuitInfoResponse' but got '${variantName}'`);\n }\n return toCircuitInfoResponse(result);\n });\n }\n circuitVerify(command) {\n const msgpackCommand = fromCircuitVerify(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"CircuitVerify\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'CircuitVerifyResponse') {\n throw new Error(`Expected variant name 'CircuitVerifyResponse' but got '${variantName}'`);\n }\n return toCircuitVerifyResponse(result);\n });\n }\n clientIvcComputeStandaloneVk(command) {\n const msgpackCommand = fromClientIvcComputeStandaloneVk(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcComputeStandaloneVk\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcComputeStandaloneVkResponse') {\n throw new Error(`Expected variant name 'ClientIvcComputeStandaloneVkResponse' but got '${variantName}'`);\n }\n return toClientIvcComputeStandaloneVkResponse(result);\n });\n }\n clientIvcComputeIvcVk(command) {\n const msgpackCommand = fromClientIvcComputeIvcVk(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcComputeIvcVk\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcComputeIvcVkResponse') {\n throw new Error(`Expected variant name 'ClientIvcComputeIvcVkResponse' but got '${variantName}'`);\n }\n return toClientIvcComputeIvcVkResponse(result);\n });\n }\n clientIvcStart(command) {\n const msgpackCommand = fromClientIvcStart(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcStart\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcStartResponse') {\n throw new Error(`Expected variant name 'ClientIvcStartResponse' but got '${variantName}'`);\n }\n return toClientIvcStartResponse(result);\n });\n }\n clientIvcLoad(command) {\n const msgpackCommand = fromClientIvcLoad(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcLoad\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcLoadResponse') {\n throw new Error(`Expected variant name 'ClientIvcLoadResponse' but got '${variantName}'`);\n }\n return toClientIvcLoadResponse(result);\n });\n }\n clientIvcAccumulate(command) {\n const msgpackCommand = fromClientIvcAccumulate(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcAccumulate\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcAccumulateResponse') {\n throw new Error(`Expected variant name 'ClientIvcAccumulateResponse' but got '${variantName}'`);\n }\n return toClientIvcAccumulateResponse(result);\n });\n }\n clientIvcProve(command) {\n const msgpackCommand = fromClientIvcProve(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcProve\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcProveResponse') {\n throw new Error(`Expected variant name 'ClientIvcProveResponse' but got '${variantName}'`);\n }\n return toClientIvcProveResponse(result);\n });\n }\n clientIvcVerify(command) {\n const msgpackCommand = fromClientIvcVerify(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcVerify\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcVerifyResponse') {\n throw new Error(`Expected variant name 'ClientIvcVerifyResponse' but got '${variantName}'`);\n }\n return toClientIvcVerifyResponse(result);\n });\n }\n vkAsFields(command) {\n const msgpackCommand = fromVkAsFields(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"VkAsFields\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'VkAsFieldsResponse') {\n throw new Error(`Expected variant name 'VkAsFieldsResponse' but got '${variantName}'`);\n }\n return toVkAsFieldsResponse(result);\n });\n }\n circuitWriteSolidityVerifier(command) {\n const msgpackCommand = fromCircuitWriteSolidityVerifier(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"CircuitWriteSolidityVerifier\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'CircuitWriteSolidityVerifierResponse') {\n throw new Error(`Expected variant name 'CircuitWriteSolidityVerifierResponse' but got '${variantName}'`);\n }\n return toCircuitWriteSolidityVerifierResponse(result);\n });\n }\n clientIvcCheckPrecomputedVk(command) {\n const msgpackCommand = fromClientIvcCheckPrecomputedVk(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcCheckPrecomputedVk\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcCheckPrecomputedVkResponse') {\n throw new Error(`Expected variant name 'ClientIvcCheckPrecomputedVkResponse' but got '${variantName}'`);\n }\n return toClientIvcCheckPrecomputedVkResponse(result);\n });\n }\n clientIvcStats(command) {\n const msgpackCommand = fromClientIvcStats(command);\n return msgpackCall(this.wasm, 'bbapi', [[\"ClientIvcStats\", msgpackCommand]]).then(([variantName, result]) => {\n if (variantName !== 'ClientIvcStatsResponse') {\n throw new Error(`Expected variant name 'ClientIvcStatsResponse' but got '${variantName}'`);\n }\n return toClientIvcStatsResponse(result);\n });\n }\n destroy() {\n return this.wasm.destroy();\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2JpbmQvZ2VuZXJhdGVkL2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUduQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1QyxPQUFPLEVBQTR5QixvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQ0FBZ0MsRUFBRSx1QkFBdUIsRUFBRSwrQkFBK0IsRUFBRSx5QkFBeUIsRUFBRSxnQ0FBZ0MsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsc0NBQXNDLEVBQUUsNkJBQTZCLEVBQUUscUNBQXFDLEVBQUUsK0JBQStCLEVBQUUsc0NBQXNDLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2bEQsS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUFnQyxFQUFFLEtBQWEsRUFBRSxLQUFZLElBQUssTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBLENBQUM7QUFDcFMs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","export const PAIRING_POINTS_SIZE = 16;\n// Fields are 32 bytes\nconst fieldByteSize = 32;\nexport function splitHonkProof(proofWithPublicInputs, numPublicInputs) {\n const publicInputs = proofWithPublicInputs.slice(0, numPublicInputs * fieldByteSize);\n const proof = proofWithPublicInputs.slice(numPublicInputs * fieldByteSize);\n return {\n proof,\n publicInputs,\n };\n}\nexport function reconstructHonkProof(publicInputs, proof) {\n const proofWithPublicInputs = Uint8Array.from([...publicInputs, ...proof]);\n return proofWithPublicInputs;\n}\nexport function deflattenFields(flattenedFields) {\n const publicInputSize = 32;\n const chunkedFlattenedPublicInputs = [];\n for (let i = 0; i < flattenedFields.length; i += publicInputSize) {\n const publicInput = flattenedFields.slice(i, i + publicInputSize);\n chunkedFlattenedPublicInputs.push(publicInput);\n }\n return chunkedFlattenedPublicInputs.map(uint8ArrayToHex);\n}\nexport function flattenFieldsAsArray(fields) {\n const flattenedPublicInputs = fields.map(hexToUint8Array);\n return flattenUint8Arrays(flattenedPublicInputs);\n}\nfunction flattenUint8Arrays(arrays) {\n const totalLength = arrays.reduce((acc, val) => acc + val.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\nexport function uint8ArrayToHex(buffer) {\n const hex = [];\n buffer.forEach(function (i) {\n let h = i.toString(16);\n if (h.length % 2) {\n h = '0' + h;\n }\n hex.push(h);\n });\n return '0x' + hex.join('');\n}\nexport function hexToUint8Array(hex) {\n const sanitizedHex = BigInt(hex).toString(16).padStart(64, '0');\n const len = sanitizedHex.length / 2;\n const u8 = new Uint8Array(len);\n let i = 0;\n let j = 0;\n while (i < len) {\n u8[i] = parseInt(sanitizedHex.slice(j, j + 2), 16);\n i += 1;\n j += 2;\n }\n return u8;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvb2YvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBRXRDLHNCQUFzQjtBQUN0QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFFekIsTUFBTSxVQUFVLGNBQWMsQ0FDNUIscUJBQWlDLEVBQ2pDLGVBQXVCO0lBRXZCLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFFM0UsT0FBTztRQUNMLEtBQUs7UUFDTCxZQUFZO0tBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsWUFBd0IsRUFBRSxLQUFpQjtJQUM5RSxNQUFNLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0UsT0FBTyxxQkFBcUIsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxlQUEyQjtJQUN6RCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDM0IsTUFBTSw0QkFBNEIsR0FBaUIsRUFBRSxDQUFDO0lBRXRELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDbEUsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFdB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","import { Barretenberg } from './index.js';\nimport { RawBuffer } from '../types/raw_buffer.js';\nimport { uint8ArrayToHex, hexToUint8Array, } from '../proof/index.js';\nimport { fromClientIVCProof, toClientIVCProof } from '../cbind/generated/api_types.js';\nimport { ungzip } from 'pako';\nimport { Buffer } from 'buffer';\nimport { Decoder, Encoder } from 'msgpackr';\nexport class AztecClientBackendError extends Error {\n constructor(message) {\n super(message);\n }\n}\nfunction getProofSettingsFromOptions(options) {\n return {\n ipaAccumulation: false,\n oracleHashType: options?.keccak || options?.keccakZK ? 'keccak' : (options?.starknet || options?.starknetZK ? 'starknet' : 'poseidon2'),\n // TODO no current way to target non-zk poseidon2 hash\n disableZk: options?.keccak || options?.starknet ? true : false,\n optimizedSolidityVerifier: false,\n };\n}\nexport class UltraHonkVerifierBackend {\n constructor(backendOptions = { threads: 1 }, circuitOptions = { recursive: false }) {\n this.backendOptions = backendOptions;\n this.circuitOptions = circuitOptions;\n }\n /** @ignore */\n async instantiate() {\n if (!this.api) {\n const api = await Barretenberg.new(this.backendOptions);\n const honkRecursion = true;\n await api.initSRSForCircuitSize(0);\n this.api = api;\n }\n }\n async verifyProof(proofData, options) {\n await this.instantiate();\n const proofFrs = [];\n for (let i = 0; i < proofData.proof.length; i += 32) {\n proofFrs.push(proofData.proof.slice(i, i + 32));\n }\n const { verified } = await this.api.circuitVerify({\n verificationKey: proofData.verificationKey,\n publicInputs: proofData.publicInputs.map(hexToUint8Array),\n proof: proofFrs,\n settings: getProofSettingsFromOptions(options),\n });\n return verified;\n }\n destroy() {\n if (!this.api) {\n return Promise.resolve();\n }\n return this.api.destroy();\n }\n}\nexport class UltraHonkBackend {\n constructor(acirBytecode, backendOptions = { threads: 1 }, circuitOptions = { recursive: false }) {\n this.backendOptions = backendOptions;\n this.circuitOptions = circuitOptions;\n this.acirUncompressedBytecode = acirToUint8Array(acirBytecode);\n }\n /** @ignore */\n async instantiate() {\n if (!this.api) {\n const api = await Barretenberg.new(this.backendOptions);\n const honkRecursion = true;\n await api.acirInitSRS(this.acirUncompressedBytecode, this.circuitOptions.recursive, honkRecursion);\n this.api = api;\n }\n }\n async generateProof(compressedWitness, options) {\n await this.instantiate();\n const witness = ungzip(compressedWitness);\n const { proof, publicInputs } = await this.api.circuitProve({\n witness,\n circuit: {\n name: 'circuit',\n bytecode: Buffer.from(this.acirUncompressedBytecode),\n verificationKey: Buffer.from([]), // Empty VK - lower performance.\n },\n settings: getProofSettingsFromOptions(options)\n });\n console.log(`Generated proof for circuit with ${publicInputs.length} public inputs and ${proof.length} fields.`);\n // We return ProofData as a flat buffer and an array of strings to match the current ProofData class.\n const flatProof = new Uint8Array(proof.length * 32);\n proof.forEach((fr, i) => {\n flatProof.set(fr, i * 32);\n });\n return { proof: flatProof, publicInputs: publicInputs.map(uint8ArrayToHex) };\n }\n async verifyProof(proofData, options) {\n await this.instantiate();\n const proofFrs = [];\n for (let i = 0; i < proofData.proof.length; i += 32) {\n proofFrs.push(proofData.proof.slice(i, i + 32));\n }\n // TODO reconsider API - computing the VK at this point is not optimal\n const vkResult = await this.api.circuitComputeVk({\n circuit: {\n name: 'circuit',\n bytecode: this.acirUncompressedBytecode,\n },\n settings: getProofSettingsFromOptions(options),\n });\n const { verified } = await this.api.circuitVerify({\n verificationKey: vkResult.bytes,\n publicInputs: proofData.publicInputs.map(hexToUint8Array),\n proof: proofFrs,\n settings: getProofSettingsFromOptions(options),\n });\n return verified;\n }\n async getVerificationKey(options) {\n await this.instantiate();\n const vkResult = await this.api.circuitComputeVk({\n circuit: {\n name: 'circuit',\n bytecode: Buffer.from(this.acirUncompressedBytecode),\n },\n settings: getProofSettingsFromOptions(options),\n });\n return vkResult.bytes;\n }\n /** @description Returns a solidity verifier */\n async getSolidityVerifier(vk) {\n await this.instantiate();\n const vkBuf = vk ?? (await this.api.acirWriteVkUltraKeccakHonk(this.acirUncompressedBytecode));\n return await this.api.acirHonkSolidityVerifier(this.acirUncompressedBytecode, new RawBuffer(vkBuf));\n }\n // TODO(https://github.com/noir-lang/noir/issues/5661): Update this to handle Honk recursive aggregation in the browser once it is ready in the backend itself\n async generateRecursiveProofArtifacts(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proof, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _numOfPublicInputs) {\n await this.instantiate();\n // TODO(https://github.com/noir-lang/noir/issues/5661): This needs to be updated to handle recursive aggregation.\n // There is still a proofAsFields method but we could consider getting rid of it as the proof itself\n // is a list of field elements.\n // UltraHonk also does not have public inputs directly prepended to the proof and they are still instead\n // inserted at an offset.\n // const proof = reconstructProofWithPublicInputs(proofData);\n // const proofAsFields = (await this.api.acirProofAsFieldsUltraHonk(proof)).slice(numOfPublicInputs);\n // TODO: perhaps we should put this in the init function. Need to benchmark\n // TODO how long it takes.\n const vkResult = await this.api.circuitComputeVk({\n circuit: {\n name: 'circuit',\n bytecode: Buffer.from(this.acirUncompressedBytecode),\n },\n settings: getProofSettingsFromOptions({}),\n });\n // Convert VK bytes to field elements (32-byte chunks)\n const vkAsFields = [];\n for (let i = 0; i < vkResult.bytes.length; i += 32) {\n const chunk = vkResult.bytes.slice(i, i + 32);\n vkAsFields.push(uint8ArrayToHex(chunk));\n }\n return {\n // TODO(https://github.com/noir-lang/noir/issues/5661)\n proofAsFields: [],\n vkAsFields,\n // We use an empty string for the vk hash here as it is unneeded as part of the recursive artifacts\n // The user can be expected to hash the vk inside their circuit to check whether the vk is the circuit\n // they expect\n vkHash: uint8ArrayToHex(vkResult.hash)\n };\n }\n async destroy() {\n if (!this.api) {\n return;\n }\n await this.api.destroy();\n }\n}\nexport class AztecClientBackend {\n constructor(acirBuf, options = { threads: 1 }) {\n this.acirBuf = acirBuf;\n this.options = options;\n }\n /** @ignore */\n async instantiate() {\n if (!this.api) {\n const api = await Barretenberg.new(this.options);\n await api.initSRSClientIVC();\n this.api = api;\n }\n }\n async prove(witnessBuf, vksBuf = []) {\n if (vksBuf.length !== 0 && this.acirBuf.length !== witnessBuf.length) {\n throw new AztecClientBackendError('Witness and bytecodes must have the same stack depth!');\n }\n if (vksBuf.length !== 0 && vksBuf.length !== witnessBuf.length) {\n // NOTE: we allow 0 as an explicit 'I have no VKs'. This is a deprecated feature.\n throw new AztecClientBackendError('Witness and VKs must have the same stack depth!');\n }\n await this.instantiate();\n // Queue IVC start with the number of circuits\n this.api.clientIvcStart({ numCircuits: this.acirBuf.length });\n // Queue load and accumulate for each circuit\n for (let i = 0; i < this.acirBuf.length; i++) {\n const bytecode = this.acirBuf[i];\n const witness = witnessBuf[i] || Buffer.from([]);\n const vk = vksBuf[i] || Buffer.from([]);\n const functionName = `unknown_wasm_${i}`;\n // Load the circuit\n this.api.clientIvcLoad({\n circuit: {\n name: functionName,\n bytecode: Buffer.from(bytecode),\n verificationKey: Buffer.from(vk),\n }\n });\n // Accumulate with witness\n this.api.clientIvcAccumulate({\n witness: Buffer.from(witness),\n });\n }\n // Generate the proof (and wait for all previous steps to finish)\n const proveResult = await this.api.clientIvcProve({});\n // The API currently expects a msgpack-encoded API.\n const proof = new Encoder({ useRecords: false }).encode(fromClientIVCProof(proveResult.proof));\n // Generate the VK\n const vkResult = await this.api.clientIvcComputeIvcVk({ circuit: {\n name: 'hiding',\n bytecode: this.acirBuf[this.acirBuf.length - 1],\n } });\n // Note: Verification may not work correctly until we properly serialize the proof\n if (!(await this.verify(proof, vkResult.bytes))) {\n throw new AztecClientBackendError('Failed to verify the private (ClientIVC) transaction proof!');\n }\n return [proof, vkResult.bytes];\n }\n async verify(proof, vk) {\n await this.instantiate();\n const result = await this.api.clientIvcVerify({\n proof: toClientIVCProof(new Decoder({ useRecords: false }).decode(proof)),\n vk: Buffer.from(vk),\n });\n return result.valid;\n }\n async gates() {\n await this.instantiate();\n const circuitSizes = [];\n for (const buf of this.acirBuf) {\n const gates = await this.api.clientIvcStats({\n circuit: {\n name: 'circuit',\n bytecode: buf,\n },\n includeGatesPerOpcode: false\n });\n circuitSizes.push(gates.circuitSize);\n }\n return circuitSizes;\n }\n async destroy() {\n if (!this.api) {\n return;\n }\n await this.api.destroy();\n }\n}\n// Converts bytecode from a base64 string to a Uint8Array\nfunction acirToUint8Array(base64EncodedBytecode) {\n const compressedByteCode = base64Decode(base64EncodedBytecode);\n return ungzip(compressedByteCode);\n}\n// Since this is a simple function, we can use feature detection to\n// see if we are in the nodeJs environment or the browser environment.\nfunction base64Decode(input) {\n if (typeof Buffer !== 'undefined') {\n // Node.js environment\n const b = Buffer.from(input, 'base64');\n return new Uint8Array(b.buffer, b.byteOffset, b.byteLength);\n }\n else if (typeof atob === 'function') {\n // Browser environment\n return Uint8Array.from(atob(input), c => c.charCodeAt(0));\n }\n else {\n throw new Error('No implementation found for base64 decoding.');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYXJyZXRlbmJlcmcvYmFja2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFlBQVksRUFBa0IsTUFBTSxZQUFZLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFLTCxlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU1QyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsS0FBSztJQUNoRCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQTRCRCxTQUFTLDJCQUEyQixDQUNsQyxPQUFpQztJQUVqQyxPQUFPO1FBQ0wsZUFBZSxFQUFFLEtBQUs7UUFDdEIsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDdkksc0RBQXNEO1FBQ3RELFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztRQUM5RCx5QkFBeUIsRUFB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","import { proxy } from 'comlink';\nimport { BarretenbergApi, BarretenbergApiSync } from '../barretenberg_api/index.js';\nimport { createMainWorker } from '../barretenberg_wasm/barretenberg_wasm_main/factory/node/index.js';\nimport { BarretenbergWasmMain } from '../barretenberg_wasm/barretenberg_wasm_main/index.js';\nimport { getRemoteBarretenbergWasm } from '../barretenberg_wasm/helpers/index.js';\nimport { Crs, GrumpkinCrs } from '../crs/index.js';\nimport { RawBuffer } from '../types/raw_buffer.js';\nimport { fetchModuleAndThreads } from '../barretenberg_wasm/index.js';\nimport { createDebugLogger } from '../log/index.js';\nimport { AsyncApi } from '../cbind/generated/async.js';\nexport { UltraHonkBackend, UltraHonkVerifierBackend, AztecClientBackend } from './backend.js';\n/**\n * The main class library consumers interact with.\n * It extends the generated api, and provides a static constructor \"new\" to compose components.\n */\nexport class Barretenberg extends BarretenbergApi {\n constructor(worker, wasm, options) {\n super(wasm);\n this.worker = worker;\n this.options = options;\n this.bbApi = new AsyncApi(wasm);\n }\n /**\n * Constructs an instance of Barretenberg.\n * Launches it within a worker. This is necessary as it blocks waiting on child threads to complete,\n * and blocking the main thread in the browser is not allowed.\n * It threads > 1 (defaults to hardware availability), child threads will be created on their own workers.\n */\n static async new(options = {}) {\n const worker = await createMainWorker();\n const wasm = getRemoteBarretenbergWasm(worker);\n const { module, threads } = await fetchModuleAndThreads(options.threads, options.wasmPath, options.logger);\n await wasm.init(module, threads, proxy(options.logger ?? createDebugLogger('bb_wasm_async')), options.memory?.initial, options.memory?.maximum);\n return new Barretenberg(worker, wasm, options);\n }\n async getNumThreads() {\n return await this.wasm.getNumThreads();\n }\n async initSRSForCircuitSize(circuitSize) {\n const minSRSSize = 2 ** 9; // 2**9 is the dyadic size for the SmallSubgroupIPA MSM.\n const crs = await Crs.new(Math.max(circuitSize, minSRSSize) + 1, this.options.crsPath, this.options.logger);\n // TODO(https://github.com/AztecProtocol/barretenberg/issues/1129): Do slab allocator initialization?\n // await this.commonInitSlabAllocator(circuitSize);\n await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));\n }\n async initSRSClientIVC(srsSize = this.getDefaultSrsSize()) {\n // crsPath can be undefined\n const crs = await Crs.new(srsSize + 1, this.options.crsPath, this.options.logger);\n const grumpkinCrs = await GrumpkinCrs.new(2 ** 16 + 1, this.options.crsPath, this.options.logger);\n // Load CRS into wasm global CRS state.\n // TODO: Make RawBuffer be default behavior, and have a specific Vector type for when wanting length prefixed.\n await this.srsInitSrs(new RawBuffer(crs.getG1Data()), crs.numPoints, new RawBuffer(crs.getG2Data()));\n await this.srsInitGrumpkinSrs(new RawBuffer(grumpkinCrs.getG1Data()), grumpkinCrs.numPoints);\n }\n getDefaultSrsSize() {\n // iOS browser is very aggressive with memory. Check if running in browser and on iOS\n // We expect the mobile iOS browser to kill us >=1GB, so no real use in using a larger SRS.\n if (typeof window !== 'undefined' && /iPad|iPhone/.test(navigator.userAgent)) {\n return 2 ** 18;\n }\n return 2 ** 20;\n }\n async acirInitSRS(bytecode, recursive, honkRecursion) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_total, subgroupSize] = await this.acirGetCircuitSizes(bytecode, recursive, honkRecursion);\n return this.initSRSForCircuitSize(subgroupSize);\n }\n async destroy() {\n await this.wasm.destroy();\n await this.worker.terminate();\n }\n getWasm() {\n return this.wasm;\n }\n // Wrap ClientIVC methods used by AztecClientBackend and UltraHonkBackend\n async clientIvcStart(command) {\n return this.bbApi.clientIvcStart(command);\n }\n async clientIvcLoad(command) {\n return this.bbApi.clientIvcLoad(command);\n }\n async clientIvcAccumulate(command) {\n return this.bbApi.clientIvcAccumulate(command);\n }\n async clientIvcProve(command) {\n return this.bbApi.clientIvcProve(command);\n }\n async clientIvcVerify(command) {\n return this.bbApi.clientIvcVerify(command);\n }\n async clientIvcComputeIvcVk(command) {\n return this.bbApi.clientIvcComputeIvcVk(command);\n }\n async clientIvcStats(command) {\n return this.bbApi.clientIvcStats(command);\n }\n // Wrap circuit methods used by BbApiUltraHonkBackend\n async circuitProve(command) {\n return this.bbApi.circuitProve(command);\n }\n async circuitComputeVk(command) {\n return this.bbApi.circuitComputeVk(command);\n }\n async circuitVerify(command) {\n return this.bbApi.circuitVerify(command);\n }\n async vkAsFields(command) {\n return this.bbApi.vkAsFields(command);\n }\n}\nlet barretenbergSyncSingletonPromise;\nlet barretenbergSyncSingleton;\nexport class BarretenbergSync extends BarretenbergApiSync {\n constructor(wasm) {\n super(wasm);\n }\n static async new(wasmPath, logger = createDebugLogger('bb_wasm_sync')) {\n const wasm = new BarretenbergWasmMain();\n const { module, threads } = await fetchModuleAndThreads(1, wasmPath, logger);\n await wasm.init(module, threads, logger);\n return new BarretenbergSync(wasm);\n }\n static async initSingleton(wasmPath, logger = createDebugLogger('bb_wasm_sync')) {\n if (!barretenbergSyncSingletonPromise) {\n barretenbergSyncSingletonPromise = BarretenbergSync.new(wasmPath, logger);\n }\n barretenbergSyncSingleton = await barretenbergSyncSingletonPromise;\n return barretenbergSyncSingleton;\n }\n static getSingleton() {\n if (!barretenbergSyncSingleton) {\n throw new Error('First call BarretenbergSync.initSingleton() on @aztec/bb.js module.');\n }\n return barretenbergSyncSingleton;\n }\n getWasm() {\n return this.wasm;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFycmV0ZW5iZXJnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxvQkFBb0IsRUFBOEIsTUFBTSxzREFBc0QsQ0FBQztBQUN4SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBd0I5Rjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBYSxTQUFRLGVBQWU7SUFJL0MsWUFDVSxNQUFXLEVBQ25CLElBQWdDLEVBQ2hDLE9BQXVCO1FBRXZCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUpKLFdBQU0sR0FBTixNQUFNLENBQUs7UUFLbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09B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"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69],"mappings":"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"}
|