@farcaster/create-mini-app 0.0.7 → 0.0.8
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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +7 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +20 -2
- package/dist/init.js.map +1 -1
- package/init.ts +22 -2
- package/package.json +3 -1
- package/templates/default/README.md +19 -0
- package/asd/README.md +0 -1
- package/asd/biome.json +0 -13
- package/asd/index.html +0 -12
- package/asd/package.json +0 -30
- package/asd/public/.well-known/farcaster.json +0 -1
- package/asd/src/App.tsx +0 -67
- package/asd/src/index.css +0 -21
- package/asd/src/main.tsx +0 -21
- package/asd/src/vite-env.d.ts +0 -1
- package/asd/src/wagmi.ts +0 -18
- package/asd/tsconfig.json +0 -25
- package/asd/tsconfig.node.json +0 -10
- package/asd/vite.config.ts +0 -10
- package/templates/default/node_modules/.bin/biome +0 -17
- package/templates/default/node_modules/.bin/browserslist +0 -17
- package/templates/default/node_modules/.bin/esbuild +0 -17
- package/templates/default/node_modules/.bin/terser +0 -17
- package/templates/default/node_modules/.bin/tsc +0 -17
- package/templates/default/node_modules/.bin/tsserver +0 -17
- package/templates/default/node_modules/.bin/vite +0 -17
- package/templates/default/node_modules/.bin/wagmi +0 -17
- package/templates/default/node_modules/.vite/deps/@farcaster_frame-sdk.js +0 -84
- package/templates/default/node_modules/.vite/deps/@farcaster_frame-sdk.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/@farcaster_frame-wagmi-connector.js +0 -1936
- package/templates/default/node_modules/.vite/deps/@farcaster_frame-wagmi-connector.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/@tanstack_react-query.js +0 -96
- package/templates/default/node_modules/.vite/deps/@tanstack_react-query.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/_metadata.json +0 -139
- package/templates/default/node_modules/.vite/deps/ccip-JTEXJDV5.js +0 -17
- package/templates/default/node_modules/.vite/deps/ccip-JTEXJDV5.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/ccip-LLOJAQYN.js +0 -14
- package/templates/default/node_modules/.vite/deps/ccip-LLOJAQYN.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-2KW72IQL.js +0 -2601
- package/templates/default/node_modules/.vite/deps/chunk-2KW72IQL.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-2ULAEEW3.js +0 -286
- package/templates/default/node_modules/.vite/deps/chunk-2ULAEEW3.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-3MMZATWV.js +0 -1906
- package/templates/default/node_modules/.vite/deps/chunk-3MMZATWV.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-6WYSWNQJ.js +0 -3183
- package/templates/default/node_modules/.vite/deps/chunk-6WYSWNQJ.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-AJPHOYQK.js +0 -21628
- package/templates/default/node_modules/.vite/deps/chunk-AJPHOYQK.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-HP7M7ER3.js +0 -2221
- package/templates/default/node_modules/.vite/deps/chunk-HP7M7ER3.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-JDAHWTZP.js +0 -928
- package/templates/default/node_modules/.vite/deps/chunk-JDAHWTZP.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-OOB7NECH.js +0 -58
- package/templates/default/node_modules/.vite/deps/chunk-OOB7NECH.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-OYL52S4H.js +0 -190
- package/templates/default/node_modules/.vite/deps/chunk-OYL52S4H.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-P2SCV6N5.js +0 -1085
- package/templates/default/node_modules/.vite/deps/chunk-P2SCV6N5.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-P727YSDY.js +0 -3246
- package/templates/default/node_modules/.vite/deps/chunk-P727YSDY.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-PH77EFIP.js +0 -278
- package/templates/default/node_modules/.vite/deps/chunk-PH77EFIP.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-PK65EOOR.js +0 -4416
- package/templates/default/node_modules/.vite/deps/chunk-PK65EOOR.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-PPRY4ZGR.js +0 -36187
- package/templates/default/node_modules/.vite/deps/chunk-PPRY4ZGR.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-Q3UTC4SW.js +0 -832
- package/templates/default/node_modules/.vite/deps/chunk-Q3UTC4SW.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-R2PSY44V.js +0 -815
- package/templates/default/node_modules/.vite/deps/chunk-R2PSY44V.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/chunk-WOOG5QLI.js +0 -60
- package/templates/default/node_modules/.vite/deps/chunk-WOOG5QLI.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/native-J7PVLWWX.js +0 -21
- package/templates/default/node_modules/.vite/deps/native-J7PVLWWX.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/native-UTGEKOTD.js +0 -21
- package/templates/default/node_modules/.vite/deps/native-UTGEKOTD.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/package.json +0 -3
- package/templates/default/node_modules/.vite/deps/react-dom.js +0 -7
- package/templates/default/node_modules/.vite/deps/react-dom.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/react-dom_client.js +0 -39
- package/templates/default/node_modules/.vite/deps/react-dom_client.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/react.js +0 -6
- package/templates/default/node_modules/.vite/deps/react.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/react_jsx-dev-runtime.js +0 -913
- package/templates/default/node_modules/.vite/deps/react_jsx-dev-runtime.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/react_jsx-runtime.js +0 -7
- package/templates/default/node_modules/.vite/deps/react_jsx-runtime.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/secp256k1-HB6OVCEM.js +0 -14
- package/templates/default/node_modules/.vite/deps/secp256k1-HB6OVCEM.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/secp256k1-YI5SRKAE.js +0 -16
- package/templates/default/node_modules/.vite/deps/secp256k1-YI5SRKAE.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/wagmi.js +0 -12147
- package/templates/default/node_modules/.vite/deps/wagmi.js.map +0 -7
- package/templates/default/node_modules/.vite/deps/wagmi_chains.js +0 -16355
- package/templates/default/node_modules/.vite/deps/wagmi_chains.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/actions/AddFrame.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/errors.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/actions/Ready.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/actions/SignIn.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/actions/Swap.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/actions/ViewProfile.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/actions/ViewToken.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/wallet/ethereum.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/context.js", "../../../../../../../node_modules/.pnpm/zod@3.24.1/node_modules/zod/lib/index.mjs", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/schemas/shared.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/schemas/embeds.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/schemas/notifications.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/schemas/events.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-core@0.0.29_typescript@5.8.2/node_modules/@farcaster/frame-core/esm/schemas/manifest.js", "../../../../../../../node_modules/.pnpm/comlink@4.4.2/node_modules/comlink/src/comlink.ts", "../../../../../../../node_modules/.pnpm/@farcaster+frame-sdk@0.0.31_typescript@5.8.2_zod@3.24.1/node_modules/@farcaster/frame-sdk/dist/endpoint.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-sdk@0.0.31_typescript@5.8.2_zod@3.24.1/node_modules/@farcaster/frame-sdk/dist/frameHost.js", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Abi.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/abi.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AbiConstructor.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AbiItem.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Errors.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/version.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/errors.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Hash.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Bytes.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Hex.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Json.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/bytes.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/hex.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Address.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Caches.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/lru.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/PublicKey.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/abiItem.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AbiParameters.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Solidity.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/abiParameters.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/cursor.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AbiError.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AbiEvent.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AbiFunction.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AccessList.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/_esm/core/AccountProof.js", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/AesGcm.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Authorization.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Rlp.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Signature.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Base58.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/base58.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Base64.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Blobs.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Kzg.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Block.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Transaction.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Withdrawal.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Bloom.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Bls.ts", "../../../../../../../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/src/abstract/bls.ts", "../../../../../../../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/src/abstract/tower.ts", "../../../../../../../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/src/bls12-381.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/BlsPoint.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/ContractAddress.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Ens.ts", "../../../../../../../node_modules/.pnpm/@adraffy+ens-normalize@1.11.0/node_modules/@adraffy/ens-normalize/dist/index.mjs", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/ens.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Filter.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/HdKey.ts", "../../../../../../../node_modules/.pnpm/@noble+hashes@1.7.1/node_modules/@noble/hashes/src/sha512.ts", "../../../../../../../node_modules/.pnpm/@scure+base@1.2.4/node_modules/@scure/base/index.ts", "../../../../../../../node_modules/.pnpm/@scure+bip32@1.6.2/node_modules/@scure/bip32/index.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Secp256k1.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/entropy.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/hdKey.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/_esm/core/Fee.js", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Log.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Mnemonic.ts", "../../../../../../../node_modules/.pnpm/@noble+hashes@1.7.1/node_modules/@noble/hashes/src/pbkdf2.ts", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/index.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/czech.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/english.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/french.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/italian.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/japanese.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/korean.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/portuguese.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/simplified-chinese.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/spanish.js", "../../../../../../../node_modules/.pnpm/@scure+bip39@1.5.4/node_modules/@scure/bip39/esm/wordlists/traditional-chinese.js", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/PersonalMessage.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Provider.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/RpcResponse.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/RpcSchema.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/RpcRequest.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/RpcTransport.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/promise.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/rpcTransport.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/P256.ts", "../../../../../../../node_modules/.pnpm/@noble+curves@1.7.0/node_modules/@noble/curves/src/p256.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Siwe.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/uid.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionEnvelope.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/Value.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionEnvelopeLegacy.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionEnvelopeEip1559.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionEnvelopeEip2930.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionEnvelopeEip4844.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionEnvelopeEip7702.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionReceipt.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TransactionRequest.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/TypedData.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/ValidatorData.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/WebAuthnP256.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/internal/webauthn.ts", "../../../../../../../node_modules/.pnpm/ox@0.4.4_typescript@5.8.2_zod@3.24.1/node_modules/ox/core/WebCryptoP256.ts", "../../../../../../../node_modules/.pnpm/@farcaster+frame-sdk@0.0.31_typescript@5.8.2_zod@3.24.1/node_modules/@farcaster/frame-sdk/dist/provider.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-sdk@0.0.31_typescript@5.8.2_zod@3.24.1/node_modules/@farcaster/frame-sdk/dist/sdk.js", "../../../../../../../node_modules/.pnpm/@farcaster+frame-sdk@0.0.31_typescript@5.8.2_zod@3.24.1/node_modules/@farcaster/frame-sdk/dist/index.js"],
|
|
4
|
-
"sourcesContent": ["import * as Errors from '../errors'\n/**\n * Thrown when the frame does not have a valid domain manifest.\n */\nexport class InvalidDomainManifest extends Errors.BaseError {\n name = 'AddFrame.InvalidDomainManifest'\n constructor() {\n super('Invalid domain manifest')\n }\n}\n/**\n * Thrown when add frame action was rejected by the user.\n */\nexport class RejectedByUser extends Errors.BaseError {\n name = 'AddFrame.RejectedByUser'\n constructor() {\n super('Add frame rejected by user')\n }\n}\n", "export class BaseError extends Error {\n name = 'BaseError'\n cause\n constructor(message, options = {}) {\n super(message, options.cause ? { cause: options.cause } : undefined)\n this.cause = options.cause\n }\n}\n", "export const DEFAULT_READY_OPTIONS = {\n disableNativeGestures: false,\n}\n", "import * as Errors from '../errors'\n/**\n * Thrown when a sign in action was rejected.\n */\nexport class RejectedByUser extends Errors.BaseError {\n name = 'SignIn.RejectedByUser'\n constructor() {\n super('Sign in rejected by user')\n }\n}\n", "export {}\n", "export {}\n", "export {}\n", "export {}\n", "export {}\n", "var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === errorMap ? undefined : errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n var _a, _b;\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if ((_b = (_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (!decoded.typ || !decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a, _b;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch (_a) {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result)\n ? result.then((data) => freeze(data))\n : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\nfunction custom(check, params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\n });\n return ZodAny.create();\n}\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n", "import { z } from 'zod'\nexport const secureUrlSchema = z\n .string()\n .url()\n .startsWith('https://', { message: 'Must be an https url' })\n .max(512)\nexport const frameNameSchema = z.string().max(32)\nexport const buttonTitleSchema = z.string().max(32)\nconst CAIP_19_REGEX =\n /^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}\\/(?:[-a-z0-9]{3,8}:[-.%a-zA-Z0-9]{1,128}(?:\\/[-.%a-zA-Z0-9]{1,78})?|native)$/\nexport const caip19TokenSchema = z\n .string()\n .regex(CAIP_19_REGEX, { message: 'Invalid CAIP-19 asset ID' })\nexport const hexColorSchema = z\n .string()\n .regex(/^#([0-9A-F]{3}|[0-9A-F]{6})$/i, {\n message:\n 'Invalid hex color code. It should be in the format #RRGGBB or #RGB.',\n })\nexport const aspectRatioSchema = z.union([z.literal('1:1'), z.literal('3:2')])\nexport const encodedJsonFarcasterSignatureSchema = z.object({\n header: z.string(),\n payload: z.string(),\n signature: z.string(),\n})\nexport const jsonFarcasterSignatureHeaderSchema = z.object({\n fid: z.number(),\n type: z.literal('app_key'),\n key: z.string().startsWith('0x'),\n})\n", "import { z } from 'zod'\nimport {\n aspectRatioSchema,\n buttonTitleSchema,\n caip19TokenSchema,\n frameNameSchema,\n hexColorSchema,\n secureUrlSchema,\n} from './shared'\nexport const actionLaunchFrameSchema = z.object({\n type: z.literal('launch_frame'),\n name: frameNameSchema,\n url: secureUrlSchema,\n splashImageUrl: secureUrlSchema.optional(),\n splashBackgroundColor: hexColorSchema.optional(),\n})\nexport const actionViewTokenSchema = z.object({\n type: z.literal('view_token'),\n token: caip19TokenSchema,\n})\nexport const actionSchema = z.discriminatedUnion('type', [\n actionLaunchFrameSchema,\n actionViewTokenSchema,\n])\nexport const buttonSchema = z.object({\n title: buttonTitleSchema,\n action: actionSchema,\n})\nexport const frameEmbedNextSchema = z.object({\n version: z.literal('next'),\n imageUrl: secureUrlSchema,\n aspectRatio: aspectRatioSchema.optional(),\n button: buttonSchema,\n})\nexport const safeParseFrameEmbed = (rawResponse) =>\n frameEmbedNextSchema.safeParse(rawResponse)\n", "import { z } from 'zod'\nimport { secureUrlSchema } from './shared'\nexport const notificationDetailsSchema = z.object({\n url: z.string(),\n token: z.string(),\n})\nexport const sendNotificationRequestSchema = z.object({\n notificationId: z.string().max(128),\n title: z.string().max(32),\n body: z.string().max(128),\n targetUrl: secureUrlSchema,\n tokens: z.string().array().max(100),\n})\nexport const sendNotificationResponseSchema = z.object({\n result: z.object({\n successfulTokens: z.array(z.string()),\n invalidTokens: z.array(z.string()),\n rateLimitedTokens: z.array(z.string()),\n }),\n})\n", "import { z } from 'zod'\nimport { notificationDetailsSchema } from './notifications'\nexport const eventFrameAddedSchema = z.object({\n event: z.literal('frame_added'),\n notificationDetails: notificationDetailsSchema.optional(),\n})\nexport const eventFrameRemovedSchema = z.object({\n event: z.literal('frame_removed'),\n})\nexport const eventNotificationsEnabledSchema = z.object({\n event: z.literal('notifications_enabled'),\n notificationDetails: notificationDetailsSchema.required(),\n})\nexport const notificationsDisabledSchema = z.object({\n event: z.literal('notifications_disabled'),\n})\nexport const serverEventSchema = z.discriminatedUnion('event', [\n eventFrameAddedSchema,\n eventFrameRemovedSchema,\n eventNotificationsEnabledSchema,\n notificationsDisabledSchema,\n])\n", "import { z } from 'zod'\nimport {\n buttonTitleSchema,\n encodedJsonFarcasterSignatureSchema,\n frameNameSchema,\n hexColorSchema,\n secureUrlSchema,\n} from './shared'\nexport const domainFrameConfigSchema = z.object({\n // 0.0.0 and 0.0.1 are not technically part of the spec but kept for\n // backwards compatibilty. next should always resolve to the most recent\n // schema version.\n version: z.union([\n z.literal('0.0.0'),\n z.literal('0.0.1'),\n z.literal('1'),\n z.literal('next'),\n ]),\n name: frameNameSchema,\n iconUrl: secureUrlSchema,\n homeUrl: secureUrlSchema,\n imageUrl: secureUrlSchema.optional(),\n buttonTitle: buttonTitleSchema.optional(),\n splashImageUrl: secureUrlSchema.optional(),\n splashBackgroundColor: hexColorSchema.optional(),\n webhookUrl: secureUrlSchema.optional(),\n})\nexport const domainManifestSchema = z.object({\n accountAssociation: encodedJsonFarcasterSignatureSchema,\n frame: domainFrameConfigSchema.optional(),\n})\n", "/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Endpoint,\n EventSource,\n Message,\n MessageType,\n PostMessageWithOrigin,\n WireValue,\n WireValueType,\n} from \"./protocol\";\nexport type { Endpoint };\n\nexport const proxyMarker = Symbol(\"Comlink.proxy\");\nexport const createEndpoint = Symbol(\"Comlink.endpoint\");\nexport const releaseProxy = Symbol(\"Comlink.releaseProxy\");\nexport const finalizer = Symbol(\"Comlink.finalizer\");\n\nconst throwMarker = Symbol(\"Comlink.thrown\");\n\n/**\n * Interface of values that were marked to be proxied with `comlink.proxy()`.\n * Can also be implemented by classes.\n */\nexport interface ProxyMarked {\n [proxyMarker]: true;\n}\n\n/**\n * Takes a type and wraps it in a Promise, if it not already is one.\n * This is to avoid `Promise<Promise<T>>`.\n *\n * This is the inverse of `Unpromisify<T>`.\n */\ntype Promisify<T> = T extends Promise<unknown> ? T : Promise<T>;\n/**\n * Takes a type that may be Promise and unwraps the Promise type.\n * If `P` is not a Promise, it returns `P`.\n *\n * This is the inverse of `Promisify<T>`.\n */\ntype Unpromisify<P> = P extends Promise<infer T> ? T : P;\n\n/**\n * Takes the raw type of a remote property and returns the type that is visible to the local thread on the proxy.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions.\n * See https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype RemoteProperty<T> =\n // If the value is a method, comlink will proxy it automatically.\n // Objects are only proxied if they are marked to be proxied.\n // Otherwise, the property is converted to a Promise that resolves the cloned value.\n T extends Function | ProxyMarked ? Remote<T> : Promisify<T>;\n\n/**\n * Takes the raw type of a property as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This is the inverse of `RemoteProperty<T>`.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions. See\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype LocalProperty<T> = T extends Function | ProxyMarked\n ? Local<T>\n : Unpromisify<T>;\n\n/**\n * Proxies `T` if it is a `ProxyMarked`, clones it otherwise (as handled by structured cloning and transfer handlers).\n */\nexport type ProxyOrClone<T> = T extends ProxyMarked ? Remote<T> : T;\n/**\n * Inverse of `ProxyOrClone<T>`.\n */\nexport type UnproxyOrClone<T> = T extends RemoteObject<ProxyMarked>\n ? Local<T>\n : T;\n\n/**\n * Takes the raw type of a remote object in the other thread and returns the type as it is visible to the local thread\n * when proxied with `Comlink.proxy()`.\n *\n * This does not handle call signatures, which is handled by the more general `Remote<T>` type.\n *\n * @template T The raw type of a remote object as seen in the other thread.\n */\nexport type RemoteObject<T> = { [P in keyof T]: RemoteProperty<T[P]> };\n/**\n * Takes the type of an object as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This does not handle call signatures, which is handled by the more general `Local<T>` type.\n *\n * This is the inverse of `RemoteObject<T>`.\n *\n * @template T The type of a proxied object.\n */\nexport type LocalObject<T> = { [P in keyof T]: LocalProperty<T[P]> };\n\n/**\n * Additional special comlink methods available on each proxy returned by `Comlink.wrap()`.\n */\nexport interface ProxyMethods {\n [createEndpoint]: () => Promise<MessagePort>;\n [releaseProxy]: () => void;\n}\n\n/**\n * Takes the raw type of a remote object, function or class in the other thread and returns the type as it is visible to\n * the local thread from the proxy return value of `Comlink.wrap()` or `Comlink.proxy()`.\n */\nexport type Remote<T> =\n // Handle properties\n RemoteObject<T> &\n // Handle call signature (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: UnproxyOrClone<TArguments[I]> }\n ) => Promisify<ProxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: UnproxyOrClone<TArguments[I]>;\n }\n ): Promisify<Remote<TInstance>>;\n }\n : unknown) &\n // Include additional special comlink methods available on the proxy.\n ProxyMethods;\n\n/**\n * Expresses that a type can be either a sync or async.\n */\ntype MaybePromise<T> = Promise<T> | T;\n\n/**\n * Takes the raw type of a remote object, function or class as a remote thread would see it through a proxy (e.g. when\n * passed in as a function argument) and returns the type the local thread has to supply.\n *\n * This is the inverse of `Remote<T>`. It takes a `Remote<T>` and returns its original input `T`.\n */\nexport type Local<T> =\n // Omit the special proxy methods (they don't need to be supplied, comlink adds them)\n Omit<LocalObject<T>, keyof ProxyMethods> &\n // Handle call signatures (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: ProxyOrClone<TArguments[I]> }\n ) => // The raw function could either be sync or async, but is always proxied automatically\n MaybePromise<UnproxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: ProxyOrClone<TArguments[I]>;\n }\n ): // The raw constructor could either be sync or async, but is always proxied automatically\n MaybePromise<Local<Unpromisify<TInstance>>>;\n }\n : unknown);\n\nconst isObject = (val: unknown): val is object =>\n (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n\n/**\n * Customizes the serialization of certain values as determined by `canHandle()`.\n *\n * @template T The input type being handled by this transfer handler.\n * @template S The serialized type sent over the wire.\n */\nexport interface TransferHandler<T, S> {\n /**\n * Gets called for every value to determine whether this transfer handler\n * should serialize the value, which includes checking that it is of the right\n * type (but can perform checks beyond that as well).\n */\n canHandle(value: unknown): value is T;\n\n /**\n * Gets called with the value if `canHandle()` returned `true` to produce a\n * value that can be sent in a message, consisting of structured-cloneable\n * values and/or transferrable objects.\n */\n serialize(value: T): [S, Transferable[]];\n\n /**\n * Gets called to deserialize an incoming value that was serialized in the\n * other thread with this transfer handler (known through the name it was\n * registered under).\n */\n deserialize(value: S): T;\n}\n\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler: TransferHandler<object, MessagePort> = {\n canHandle: (val): val is ProxyMarked =>\n isObject(val) && (val as ProxyMarked)[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\ninterface ThrownValue {\n [throwMarker]: unknown; // just needs to be present\n value: unknown;\n}\ntype SerializedThrownValue =\n | { isError: true; value: Error }\n | { isError: false; value: unknown };\ntype PendingListenersMap = Map<\n string,\n (value: WireValue | PromiseLike<WireValue>) => void\n>;\n\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler: TransferHandler<\n ThrownValue,\n SerializedThrownValue\n> = {\n canHandle: (value): value is ThrownValue =>\n isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized: SerializedThrownValue;\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 } else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(\n new Error(serialized.value.message),\n serialized.value\n );\n }\n throw serialized.value;\n },\n};\n\n/**\n * Allows customizing the serialization of certain values.\n */\nexport const transferHandlers = new Map<\n string,\n TransferHandler<unknown, unknown>\n>([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\n\nfunction isAllowedOrigin(\n allowedOrigins: (string | RegExp)[],\n origin: string\n): boolean {\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\nexport function expose(\n obj: any,\n ep: Endpoint = globalThis as any,\n allowedOrigins: (string | RegExp)[] = [\"*\"]\n) {\n ep.addEventListener(\"message\", function callback(ev: MessageEvent) {\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 } = {\n path: [] as string[],\n ...(ev.data as Message),\n };\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 MessageType.GET:\n {\n returnValue = rawValue;\n }\n break;\n case MessageType.SET:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case MessageType.APPLY:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case MessageType.CONSTRUCT:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case MessageType.ENDPOINT:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case MessageType.RELEASE:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\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({ ...wireValue, id }, transferables);\n if (type === MessageType.RELEASE) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback as any);\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({ ...wireValue, id }, transferables);\n });\n } as any);\n if (ep.start) {\n ep.start();\n }\n}\n\nfunction isMessagePort(endpoint: Endpoint): endpoint is MessagePort {\n return endpoint.constructor.name === \"MessagePort\";\n}\n\nfunction closeEndPoint(endpoint: Endpoint) {\n if (isMessagePort(endpoint)) endpoint.close();\n}\n\nexport function wrap<T>(ep: Endpoint, target?: any): Remote<T> {\n const pendingListeners : PendingListenersMap = new Map();\n\n ep.addEventListener(\"message\", function handleMessage(ev: Event) {\n const { data } = ev as MessageEvent;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n\n try {\n resolver(data);\n } finally {\n pendingListeners.delete(data.id);\n }\n });\n\n return createProxy<T>(ep, pendingListeners, [], target) as any;\n}\n\nfunction throwIfProxyReleased(isReleased: boolean) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\n\nfunction releaseEndpoint(ep: Endpoint) {\n return requestResponseMessage(ep, new Map(), {\n type: MessageType.RELEASE,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\n\ninterface FinalizationRegistry<T> {\n new (cb: (heldValue: T) => void): FinalizationRegistry<T>;\n register(\n weakItem: object,\n heldValue: T,\n unregisterToken?: object | undefined\n ): void;\n unregister(unregisterToken: object): void;\n}\ndeclare var FinalizationRegistry: FinalizationRegistry<Endpoint>;\n\nconst proxyCounter = new WeakMap<Endpoint, number>();\nconst proxyFinalizers =\n \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep: Endpoint) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\n\nfunction registerProxy(proxy: object, ep: Endpoint) {\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\nfunction unregisterProxy(proxy: object) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\n\nfunction createProxy<T>(\n ep: Endpoint,\n pendingListeners: PendingListenersMap,\n path: (string | number | symbol)[] = [],\n target: object = function () {}\n): Remote<T> {\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: 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(\n ep,\n pendingListeners,\n {\n type: MessageType.SET,\n path: [...path, prop].map((p) => p.toString()),\n value,\n },\n transferables\n ).then(fromWireValue) as any;\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if ((last as any) === createEndpoint) {\n return requestResponseMessage(ep, pendingListeners, {\n type: 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(\n ep,\n pendingListeners,\n {\n type: MessageType.APPLY,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables\n ).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n ep,\n pendingListeners,\n {\n type: MessageType.CONSTRUCT,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables\n ).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy as any;\n}\n\nfunction myFlat<T>(arr: (T | T[])[]): T[] {\n return Array.prototype.concat.apply([], arr);\n}\n\nfunction processArguments(argumentList: any[]): [WireValue[], Transferable[]] {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\n\nconst transferCache = new WeakMap<any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport function proxy<T extends {}>(obj: T): T & ProxyMarked {\n return Object.assign(obj, { [proxyMarker]: true }) as any;\n}\n\nexport function windowEndpoint(\n w: PostMessageWithOrigin,\n context: EventSource = globalThis,\n targetOrigin = \"*\"\n): Endpoint {\n return {\n postMessage: (msg: any, transferables: Transferable[]) =>\n w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\n\nfunction toWireValue(value: any): [WireValue, Transferable[]] {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: WireValueType.HANDLER,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: WireValueType.RAW,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\n\nfunction fromWireValue(value: WireValue): any {\n switch (value.type) {\n case WireValueType.HANDLER:\n return transferHandlers.get(value.name)!.deserialize(value.value);\n case WireValueType.RAW:\n return value.value;\n }\n}\n\nfunction requestResponseMessage(\n ep: Endpoint,\n pendingListeners: PendingListenersMap,\n msg: Message,\n transfers?: Transferable[]\n): Promise<WireValue> {\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({ id, ...msg }, transfers);\n});\n}\n\nfunction generateUUID(): string {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n", "import { windowEndpoint } from 'comlink';\nconst mockEndpoint = {\n postMessage() {\n // noop\n },\n addEventListener: () => {\n // noop\n },\n removeEventListener: () => {\n // noop\n },\n};\nconst webViewEndpoint = {\n postMessage: (data) => {\n console.debug('[webview:req]', data);\n window.ReactNativeWebView.postMessage(JSON.stringify(data));\n },\n addEventListener: (_, listener, ...args) => {\n document.addEventListener('FarcasterFrameCallback', listener, ...args);\n },\n removeEventListener: (_, listener) => {\n document.removeEventListener('FarcasterFrameCallback', listener);\n },\n};\nexport const endpoint = (() => {\n // No actions are actually gonna take place during SSR, thus it's safe to return mocked endpoint\n if (typeof window === 'undefined')\n return mockEndpoint;\n return window?.ReactNativeWebView\n ? webViewEndpoint\n : windowEndpoint(window?.parent ?? window);\n})();\n", "import { wrap } from 'comlink';\nimport { endpoint } from './endpoint';\nexport const frameHost = wrap(endpoint);\n", "import * as abitype from 'abitype'\nimport type * as Errors from './Errors.js'\nimport * as internal from './internal/abi.js'\nimport type * as AbiItem_internal from './internal/abiItem.js'\n\n/** Root type for an ABI. */\nexport type Abi = abitype.Abi\n\n/** @internal */\nexport function format<const abi extends Abi>(abi: abi): format.ReturnType<abi>\n/**\n * Formats an {@link ox#Abi.Abi} into a **Human Readable ABI**.\n *\n * @example\n * ```ts twoslash\n * import { Abi } from 'ox'\n *\n * const formatted = Abi.format([{\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * }])\n *\n * formatted\n * // ^?\n *\n *\n *\n * ```\n *\n * @param abi - The ABI to format.\n * @returns The formatted ABI.\n */\nexport function format(abi: Abi | readonly unknown[]): readonly string[]\n/** @internal */\nexport function format(abi: Abi | readonly unknown[]): format.ReturnType {\n return abitype.formatAbi(abi) as never\n}\n\nexport declare namespace format {\n type ReturnType<abi extends Abi | readonly unknown[] = Abi> =\n abitype.FormatAbi<abi>\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function from<const abi extends Abi | readonly string[]>(\n abi: abi &\n (abi extends readonly string[]\n ? AbiItem_internal.Signatures<abi>\n : unknown),\n): from.ReturnType<abi>\n/**\n * Parses an arbitrary **JSON ABI** or **Human Readable ABI** into a typed {@link ox#Abi.Abi}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { Abi } from 'ox'\n *\n * const abi = Abi.from([{\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * }])\n *\n * abi\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * ```ts twoslash\n * import { Abi } from 'ox'\n *\n * const abi = Abi.from([\n * 'function approve(address spender, uint256 amount) returns (bool)'\n * ])\n *\n * abi\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @param abi - The ABI to parse.\n * @returns The typed ABI.\n */\nexport function from(abi: Abi | readonly string[]): Abi\n/** @internal */\nexport function from(abi: Abi | readonly string[]): from.ReturnType {\n if (internal.isSignatures(abi)) return abitype.parseAbi(abi)\n return abi\n}\n\nexport declare namespace from {\n type ReturnType<\n abi extends Abi | readonly string[] | readonly unknown[] = Abi,\n > = abi extends readonly string[] ? abitype.ParseAbi<abi> : abi\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Abi from '../Abi.js'\n\n/** @internal */\nexport function isSignatures(\n value: Abi.Abi | readonly string[],\n): value is readonly string[] {\n for (const item of value) {\n if (typeof item !== 'string') return false\n }\n return true\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiConstructor.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `constructor` type. */\nexport type AbiConstructor = abitype.AbiConstructor\n\n/** @internal */\nexport function decode<const abiConstructor extends AbiConstructor>(\n abiConstructor: abiConstructor,\n options: decode.Options,\n): decode.ReturnType<abiConstructor>\n/**\n * ABI-decodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const bytecode = '0x...'\n *\n * const data = AbiConstructor.encode(constructor, {\n * bytecode,\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * const decoded = AbiConstructor.decode(constructor, { // [!code focus]\n * bytecode, // [!code focus]\n * data, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param abiConstructor - The ABI Constructor to decode.\n * @param options - Decoding options.\n * @returns The decoded constructor inputs.\n */\nexport function decode(\n abiConstructor: AbiConstructor,\n options: decode.Options,\n): readonly unknown[] | undefined\n/** @internal */\nexport function decode(\n abiConstructor: AbiConstructor,\n options: decode.Options,\n): decode.ReturnType {\n const { bytecode } = options\n if (abiConstructor.inputs.length === 0) return undefined\n const data = options.data.replace(bytecode, '0x') as Hex.Hex\n return AbiParameters.decode(abiConstructor.inputs, data)\n}\n\nexport declare namespace decode {\n interface Options {\n /** The bytecode of the contract. */\n bytecode: Hex.Hex\n /** The encoded constructor. */\n data: Hex.Hex\n }\n\n type ReturnType<abiConstructor extends AbiConstructor = AbiConstructor> =\n | (abiConstructor['inputs']['length'] extends 0\n ? undefined\n : abitype.AbiParametersToPrimitiveTypes<abiConstructor['inputs']>)\n | (IsNarrowable<abiConstructor, AbiConstructor> extends true\n ? never\n : undefined)\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes the provided constructor input (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from('constructor(address, uint256)')\n *\n * const data = AbiConstructor.encode(constructor, {\n * bytecode: '0x...',\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiConstructor.encode` to encode the constructor of a contract and deploy it.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { AbiConstructor, Hex } from 'ox'\n *\n * // 1. Instantiate the ABI Constructor.\n * const constructor = AbiConstructor.from(\n * 'constructor(address owner, uint256 amount)',\n * )\n *\n * // 2. Encode the ABI Constructor.\n * const data = AbiConstructor.encode(constructor, {\n * bytecode: '0x...',\n * args: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 123n],\n * })\n *\n * // 3. Deploy the contract.\n * const hash = await window.ethereum!.request({\n * method: 'eth_sendTransaction',\n * params: [{ data }],\n * })\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiConstructor - The ABI Constructor to encode.\n * @param options - Encoding options.\n * @returns The encoded constructor.\n */\nexport function encode<const abiConstructor extends AbiConstructor>(\n abiConstructor: abiConstructor,\n options: encode.Options<abiConstructor>,\n): encode.ReturnType {\n const { bytecode, args } = options\n return Hex.concat(\n bytecode,\n abiConstructor.inputs?.length && args?.length\n ? AbiParameters.encode(abiConstructor.inputs, args as readonly unknown[])\n : '0x',\n )\n}\n\nexport declare namespace encode {\n type Options<\n abiConstructor extends AbiConstructor = AbiConstructor,\n ///\n args extends abitype.AbiParametersToPrimitiveTypes<\n abiConstructor['inputs']\n > = abitype.AbiParametersToPrimitiveTypes<abiConstructor['inputs']>,\n > = {\n /** The bytecode of the contract. */\n bytecode: Hex.Hex\n /** The constructor arguments to encode. */\n args?: args | undefined\n } & (readonly [] extends args\n ? {}\n : {\n /** The constructor arguments to encode. */\n args: args\n })\n\n type ReturnType = Hex.Hex\n\n type ErrorType =\n | Hex.concat.ErrorType\n | AbiParameters.encode.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function format<const abiConstructor extends AbiConstructor>(\n abiConstructor: abiConstructor,\n): format.ReturnType<abiConstructor>\n/**\n * Formats an {@link ox#AbiConstructor.AbiConstructor} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const formatted = AbiConstructor.format({\n * inputs: [\n * { name: 'owner', type: 'address' },\n * ],\n * payable: false,\n * stateMutability: 'nonpayable',\n * type: 'constructor',\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiConstructor - The ABI Constructor to format.\n * @returns The formatted ABI Constructor.\n */\nexport function format(abiConstructor: AbiConstructor): string\n/** @internal */\nexport function format(abiConstructor: AbiConstructor): format.ReturnType {\n return abitype.formatAbiItem(abiConstructor)\n}\n\nexport declare namespace format {\n type ReturnType<abiConstructor extends AbiConstructor = AbiConstructor> =\n abitype.FormatAbiItem<abiConstructor>\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function from<\n const abiConstructor extends AbiConstructor | string | readonly string[],\n>(\n abiConstructor: (abiConstructor | string | readonly string[]) &\n (\n | (abiConstructor extends string\n ? internal.Signature<abiConstructor>\n : never)\n | (abiConstructor extends readonly string[]\n ? internal.Signatures<abiConstructor>\n : never)\n | AbiConstructor\n ),\n): from.ReturnType<abiConstructor>\n/**\n * Parses an arbitrary **JSON ABI Constructor** or **Human Readable ABI Constructor** into a typed {@link ox#AbiConstructor.AbiConstructor}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from({\n * inputs: [\n * { name: 'owner', type: 'address' },\n * ],\n * payable: false,\n * stateMutability: 'nonpayable',\n * type: 'constructor',\n * })\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from(\n * 'constructor(address owner)' // [!code hl]\n * )\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiConstructor } from 'ox'\n *\n * const constructor = AbiConstructor.from([\n * 'struct Foo { address owner; uint256 amount; }', // [!code hl]\n * 'constructor(Foo foo)',\n * ])\n *\n * constructor\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiConstructor - The ABI Constructor to parse.\n * @returns Typed ABI Constructor.\n */\nexport function from(\n abiConstructor: AbiConstructor | string | readonly string[],\n): AbiConstructor\n/** @internal */\nexport function from(\n abiConstructor: AbiConstructor | string | readonly string[],\n): from.ReturnType {\n return AbiItem.from(abiConstructor as AbiConstructor)\n}\n\nexport declare namespace from {\n type ReturnType<\n abiConstructor extends\n | AbiConstructor\n | string\n | readonly string[] = AbiConstructor,\n > = AbiItem.from.ReturnType<abiConstructor>\n\n type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function fromAbi<const abi extends Abi.Abi | readonly unknown[]>(\n abi: abi | Abi.Abi | readonly unknown[],\n): fromAbi.ReturnType<abi>\n/**\n * Extracts an {@link ox#AbiConstructor.AbiConstructor} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Events can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiConstructor } from 'ox'\n *\n * const abi = Abi.from([\n * 'constructor(address owner)',\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiConstructor.fromAbi(abi) // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @returns The ABI constructor.\n */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): AbiConstructor\n/** @internal */\nexport function fromAbi(abi: Abi.Abi | readonly unknown[]): fromAbi.ReturnType {\n const item = (abi as Abi.Abi).find((item) => item.type === 'constructor')\n if (!item) throw new AbiItem.NotFoundError({ name: 'constructor' })\n return item\n}\n\nexport declare namespace fromAbi {\n type ReturnType<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> = Extract<\n abi[number],\n { type: 'constructor' }\n >\n\n type ErrorType = AbiItem.NotFoundError | Errors.GlobalErrorType\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/abiItem.js'\nimport type { UnionCompute } from './internal/types.js'\n\n/** Root type for an item on an {@link ox#Abi.Abi}. */\nexport type AbiItem = Abi.Abi[number]\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'error Foo(string)',\n * 'function foo(string)',\n * 'event Bar(uint256)',\n * ])\n *\n * type Foo = AbiItem.FromAbi<typeof abi, 'Foo'>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n abi extends Abi.Abi,\n name extends ExtractNames<abi>,\n> = Extract<abi[number], { name: name }>\n\n/**\n * Extracts the names of all {@link ox#AbiItem.AbiItem} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'error Foo(string)',\n * 'function foo(string)',\n * 'event Bar(uint256)',\n * ])\n *\n * type names = AbiItem.Name<typeof abi>\n * // ^?\n *\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<abi extends Abi.Abi> = Extract<\n abi[number],\n { name: string }\n>['name']\n\n/**\n * Formats an {@link ox#AbiItem.AbiItem} into a **Human Readable ABI Item**.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const formatted = AbiItem.format({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiItem - The ABI Item to format.\n * @returns The formatted ABI Item .\n */\nexport function format<const abiItem extends AbiItem>(\n abiItem: abiItem | AbiItem,\n): abitype.FormatAbiItem<abiItem> {\n return abitype.formatAbiItem(abiItem) as never\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Item** or **Human Readable ABI Item** into a typed {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from(\n * 'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const abiItem = AbiItem.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'function approve(Foo foo) returns (bool)',\n * ])\n *\n * abiItem\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiItem - The ABI Item to parse.\n * @returns The typed ABI Item.\n */\nexport function from<\n const abiItem extends AbiItem | string | readonly string[],\n>(\n abiItem: (abiItem | AbiItem | string | readonly string[]) &\n (\n | (abiItem extends string ? internal.Signature<abiItem> : never)\n | (abiItem extends readonly string[]\n ? internal.Signatures<abiItem>\n : never)\n | AbiItem\n ),\n options: from.Options = {},\n): from.ReturnType<abiItem> {\n const { prepare = true } = options\n const item = (() => {\n if (Array.isArray(abiItem)) return abitype.parseAbiItem(abiItem)\n if (typeof abiItem === 'string')\n return abitype.parseAbiItem(abiItem as never)\n return abiItem\n })() as AbiItem\n return {\n ...item,\n ...(prepare ? { hash: getSignatureHash(item) } : {}),\n } as never\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether or not to prepare the extracted item (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n }\n\n type ReturnType<abiItem extends AbiItem | string | readonly string[]> =\n abiItem extends string\n ? abitype.ParseAbiItem<abiItem>\n : abiItem extends readonly string[]\n ? abitype.ParseAbiItem<abiItem>\n : abiItem\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiItem.AbiItem} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ABI Items can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiItem.fromAbi(abi, 'Transfer') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Items can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiItem } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiItem.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Item from an `eth_call` RPC response,\n * a Transaction `input`, or from Event Log `topics`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name<abi>,\n const args extends internal.ExtractArgs<abi, name> | undefined = undefined,\n //\n allNames = Name<abi>,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n options?: fromAbi.Options<abi, name, args>,\n): fromAbi.ReturnType<abi, name, args> {\n const { args = [], prepare = true } = (options ??\n {}) as unknown as fromAbi.Options\n\n const isSelector = Hex.validate(name, { strict: false })\n const abiItems = (abi as Abi.Abi).filter((abiItem) => {\n if (isSelector) {\n if (abiItem.type === 'function' || abiItem.type === 'error')\n return getSelector(abiItem) === Hex.slice(name, 0, 4)\n if (abiItem.type === 'event') return getSignatureHash(abiItem) === name\n return false\n }\n return 'name' in abiItem && abiItem.name === name\n })\n\n if (abiItems.length === 0) throw new NotFoundError({ name: name as string })\n if (abiItems.length === 1)\n return {\n ...abiItems[0],\n ...(prepare ? { hash: getSignatureHash(abiItems[0]!) } : {}),\n } as never\n\n let matchedAbiItem: AbiItem | undefined = undefined\n for (const abiItem of abiItems) {\n if (!('inputs' in abiItem)) continue\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0)\n return {\n ...abiItem,\n ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n } as never\n continue\n }\n if (!abiItem.inputs) continue\n if (abiItem.inputs.length === 0) continue\n if (abiItem.inputs.length !== args.length) continue\n const matched = args.every((arg, index) => {\n const abiParameter = 'inputs' in abiItem && abiItem.inputs![index]\n if (!abiParameter) return false\n return internal.isArgOfType(arg, abiParameter)\n })\n if (matched) {\n // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n if (\n matchedAbiItem &&\n 'inputs' in matchedAbiItem &&\n matchedAbiItem.inputs\n ) {\n const ambiguousTypes = internal.getAmbiguousTypes(\n abiItem.inputs,\n matchedAbiItem.inputs,\n args as readonly unknown[],\n )\n if (ambiguousTypes)\n throw new AmbiguityError(\n {\n abiItem,\n type: ambiguousTypes[0]!,\n },\n {\n abiItem: matchedAbiItem,\n type: ambiguousTypes[1]!,\n },\n )\n }\n\n matchedAbiItem = abiItem\n }\n }\n\n const abiItem = (() => {\n if (matchedAbiItem) return matchedAbiItem\n const [abiItem, ...overloads] = abiItems\n return { ...abiItem!, overloads }\n })()\n\n if (!abiItem) throw new NotFoundError({ name: name as string })\n return {\n ...abiItem,\n ...(prepare ? { hash: getSignatureHash(abiItem) } : {}),\n } as never\n}\n\nexport declare namespace fromAbi {\n type Options<\n abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n name extends Name<abi> = Name<abi>,\n args extends\n | internal.ExtractArgs<abi, name>\n | undefined = internal.ExtractArgs<abi, name>,\n ///\n allArgs = internal.ExtractArgs<abi, name>,\n > = {\n /**\n * Whether or not to prepare the extracted item (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n } & UnionCompute<\n readonly [] extends allArgs\n ? {\n args?:\n | allArgs // show all options\n // infer value, widen inferred value of `args` conditionally to match `allArgs`\n | (abi extends Abi.Abi\n ? args extends allArgs\n ? internal.Widen<args>\n : never\n : never)\n | undefined\n }\n : {\n args?:\n | allArgs // show all options\n | (internal.Widen<args> & (args extends allArgs ? unknown : never)) // infer value, widen inferred value of `args` match `allArgs` (e.g. avoid union `args: readonly [123n] | readonly [bigint]`)\n | undefined\n }\n >\n\n type ReturnType<\n abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n name extends Name<abi> = Name<abi>,\n args extends\n | internal.ExtractArgs<abi, name>\n | undefined = internal.ExtractArgs<abi, name>,\n fallback = AbiItem,\n > = abi extends Abi.Abi\n ? Abi.Abi extends abi\n ? fallback\n : internal.ExtractForArgs<\n abi,\n name,\n args extends internal.ExtractArgs<abi, name>\n ? args\n : internal.ExtractArgs<abi, name>\n >\n : fallback\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const selector = AbiItem.getSelector({\n * inputs: [{ type: 'uint256' }],\n * name: 'ownerOf',\n * outputs: [],\n * stateMutability: 'view',\n * type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for. Can be a signature or an ABI item for an error, event, function, etc.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector(abiItem: string | AbiItem): Hex.Hex {\n return Hex.slice(getSignatureHash(abiItem), 0, 4)\n}\n\nexport declare namespace getSelector {\n type ErrorType =\n | getSignatureHash.ErrorType\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes the stringified signature for a given {@link ox#AbiItem.AbiItem}.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature('function ownerOf(uint256 tokenId)')\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const signature = AbiItem.getSignature({\n * name: 'ownerOf',\n * type: 'function',\n * inputs: [{ name: 'tokenId', type: 'uint256' }],\n * outputs: [],\n * stateMutability: 'view',\n * })\n * // @log: 'ownerOf(uint256)'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature for.\n * @returns The stringified signature of the ABI Item.\n */\nexport function getSignature(abiItem: string | AbiItem): string {\n const signature = (() => {\n if (typeof abiItem === 'string') return abiItem\n return abitype.formatAbiItem(abiItem)\n })()\n return internal.normalizeSignature(signature)\n}\n\nexport declare namespace getSignature {\n type ErrorType =\n | internal.normalizeSignature.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes the signature hash for an {@link ox#AbiItem.AbiItem}.\n *\n * Useful for computing Event Topic values.\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash('event Transfer(address indexed from, address indexed to, uint256 amount)')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiItem } from 'ox'\n *\n * const hash = AbiItem.getSignatureHash({\n * name: 'Transfer',\n * type: 'event',\n * inputs: [\n * { name: 'from', type: 'address', indexed: true },\n * { name: 'to', type: 'address', indexed: true },\n * { name: 'amount', type: 'uint256', indexed: false },\n * ],\n * })\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'\n * ```\n *\n * @param abiItem - The ABI Item to compute the signature hash for.\n * @returns The {@link ox#Hash.(keccak256:function)} hash of the ABI item's signature.\n */\nexport function getSignatureHash(abiItem: string | AbiItem): Hex.Hex {\n if (typeof abiItem !== 'string' && 'hash' in abiItem && abiItem.hash)\n return abiItem.hash as Hex.Hex\n return Hash.keccak256(Hex.fromString(getSignature(abiItem)))\n}\n\nexport declare namespace getSignatureHash {\n type ErrorType =\n | getSignature.ErrorType\n | Hash.keccak256.ErrorType\n | Hex.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Throws when ambiguous types are found on overloaded ABI items.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from(['function foo(address)', 'function foo(bytes20)'])\n * AbiFunction.fromAbi(foo, 'foo', {\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n *\n * ### Solution\n *\n * Remove one of the ambiguous types from the ABI.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function foo(bytes20)' // [!code --]\n * ])\n * AbiFunction.fromAbi(foo, 'foo', {\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * })\n * // @error: AbiItem.AmbiguityError: Found ambiguous types in overloaded ABI Items.\n * // @error: `bytes20` in `foo(bytes20)`, and\n * // @error: `address` in `foo(address)`\n * // @error: These types encode differently and cannot be distinguished at runtime.\n * // @error: Remove one of the ambiguous items in the ABI.\n * ```\n */\nexport class AmbiguityError extends Errors.BaseError {\n override readonly name = 'AbiItem.AmbiguityError'\n constructor(\n x: { abiItem: Abi.Abi[number]; type: string },\n y: { abiItem: Abi.Abi[number]; type: string },\n ) {\n super('Found ambiguous types in overloaded ABI Items.', {\n metaMessages: [\n // TODO: abitype to add support for signature-formatted ABI items.\n `\\`${x.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(x.abiItem))}\\`, and`,\n `\\`${y.type}\\` in \\`${internal.normalizeSignature(abitype.formatAbiItem(y.abiItem))}\\``,\n '',\n 'These types encode differently and cannot be distinguished at runtime.',\n 'Remove one of the ambiguous items in the ABI.',\n ],\n })\n }\n}\n\n/**\n * Throws when an ABI item is not found in the ABI.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * // @error: AbiItem.NotFoundError: ABI function with name \"baz\" not found.\n * ```\n *\n * ### Solution\n *\n * Ensure the ABI item exists on the ABI.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)',\n * 'function baz(bool)' // [!code ++]\n * ])\n * AbiFunction.fromAbi(foo, 'baz')\n * ```\n */\nexport class NotFoundError extends Errors.BaseError {\n override readonly name = 'AbiItem.NotFoundError'\n constructor({\n name,\n data,\n type = 'item',\n }: {\n name?: string | undefined\n data?: Hex.Hex | undefined\n type?: string | undefined\n }) {\n const selector = (() => {\n if (name) return ` with name \"${name}\"`\n if (data) return ` with data \"${data}\"`\n return ''\n })()\n super(`ABI ${type}${selector} not found.`)\n }\n}\n\n/**\n * Throws when the selector size is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0xaaa')\n * // @error: AbiItem.InvalidSelectorSizeError: Selector size is invalid. Expected 4 bytes. Received 2 bytes (\"0xaaa\").\n * ```\n *\n * ### Solution\n *\n * Ensure the selector size is 4 bytes.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const foo = Abi.from([\n * 'function foo(address)',\n * 'function bar(uint)'\n * ])\n * AbiFunction.fromAbi(foo, '0x7af82b1a')\n * ```\n */\nexport class InvalidSelectorSizeError extends Errors.BaseError {\n override readonly name = 'AbiItem.InvalidSelectorSizeError'\n constructor({ data }: { data: Hex.Hex }) {\n super(\n `Selector size is invalid. Expected 4 bytes. Received ${Hex.size(data)} bytes (\"${data}\").`,\n )\n }\n}\n", "import { getVersion } from './internal/errors.js'\n\nexport type GlobalErrorType<name extends string = 'Error'> = Error & {\n name: name\n}\n\n/**\n * Base error class inherited by all errors thrown by ox.\n *\n * @example\n * ```ts\n * import { Errors } from 'ox'\n * throw new Errors.BaseError('An error occurred')\n * ```\n */\nexport class BaseError<\n cause extends Error | undefined = undefined,\n> extends Error {\n details: string\n docs?: string | undefined\n docsPath?: string | undefined\n shortMessage: string\n\n override cause: cause\n override name = 'BaseError'\n\n version = `ox@${getVersion()}`\n\n constructor(shortMessage: string, options: BaseError.Options<cause> = {}) {\n const details = (() => {\n if (options.cause instanceof BaseError) {\n if (options.cause.details) return options.cause.details\n if (options.cause.shortMessage) return options.cause.shortMessage\n }\n if (options.cause?.message) return options.cause.message\n return options.details!\n })()\n const docsPath = (() => {\n if (options.cause instanceof BaseError)\n return options.cause.docsPath || options.docsPath\n return options.docsPath\n })()\n\n const docsBaseUrl = 'https://oxlib.sh'\n const docs = `${docsBaseUrl}${docsPath ?? ''}`\n\n const message = [\n shortMessage || 'An error occurred.',\n ...(options.metaMessages ? ['', ...options.metaMessages] : []),\n ...(details || docsPath\n ? [\n '',\n details ? `Details: ${details}` : undefined,\n docsPath ? `See: ${docs}` : undefined,\n ]\n : []),\n ]\n .filter((x) => typeof x === 'string')\n .join('\\n')\n\n super(message, options.cause ? { cause: options.cause } : undefined)\n\n this.cause = options.cause as any\n this.details = details\n this.docs = docs\n this.docsPath = docsPath\n this.shortMessage = shortMessage\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nexport declare namespace BaseError {\n type Options<cause extends Error | undefined = Error | undefined> = {\n cause?: cause | undefined\n details?: string | undefined\n docsPath?: string | undefined\n metaMessages?: (string | undefined)[] | undefined\n }\n}\n\n/** @internal */\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (err && typeof err === 'object' && 'cause' in err && err.cause)\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "/** @internal */\nexport const version = '0.1.1'\n", "import { version } from '../version.js'\n\n/** @internal */\nexport function getUrl(url: string) {\n return url\n}\n\n/** @internal */\nexport function getVersion() {\n return version\n}\n\n/** @internal */\nexport function prettyPrint(args: unknown) {\n if (!args) return ''\n const entries = Object.entries(args)\n .map(([key, value]) => {\n if (value === undefined || value === false) return null\n return [key, value]\n })\n .filter(Boolean) as [string, string][]\n const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0)\n return entries\n .map(([key, value]) => ` ${`${key}:`.padEnd(maxLength + 1)} ${value}`)\n .join('\\n')\n}\n", "import { ripemd160 as noble_ripemd160 } from '@noble/hashes/ripemd160'\nimport { keccak_256 as noble_keccak256 } from '@noble/hashes/sha3'\nimport { sha256 as noble_sha256 } from '@noble/hashes/sha256'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/**\n * Calculates the [Keccak256](https://en.wikipedia.org/wiki/SHA-3) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `keccak_256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef')\n * // @log: '0xd4fd4e189132273036449fc9e11198c739161b4c0116a9a2dccdfa1c492006f1'\n * ```\n *\n * @example\n * ### Calculate Hash of a String\n *\n * ```ts twoslash\n * import { Hash, Hex } from 'ox'\n *\n * Hash.keccak256(Hex.fromString('hello world'))\n * // @log: '0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0'\n * ```\n *\n * @example\n * ### Configure Return Type\n *\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.keccak256('0xdeadbeef', { as: 'Bytes' })\n * // @log: Uint8Array [...]\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Keccak256 hash.\n */\nexport function keccak256<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Hex.Hex | Bytes.Bytes,\n options: keccak256.Options<as> = {},\n): keccak256.ReturnType<as> {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const bytes = noble_keccak256(Bytes.from(value))\n if (as === 'Bytes') return bytes as never\n return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace keccak256 {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n /** The return type. @default 'Hex' */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Ripemd160](https://en.wikipedia.org/wiki/RIPEMD) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `ripemd160` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.ripemd160('0xdeadbeef')\n * // '0x226821c2f5423e11fe9af68bd285c249db2e4b5a'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Ripemd160 hash.\n */\nexport function ripemd160<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Hex.Hex | Bytes.Bytes,\n options: ripemd160.Options<as> = {},\n): ripemd160.ReturnType<as> {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const bytes = noble_ripemd160(Bytes.from(value))\n if (as === 'Bytes') return bytes as never\n return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace ripemd160 {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> = {\n /** The return type. @default 'Hex' */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Calculates the [Sha256](https://en.wikipedia.org/wiki/SHA-256) hash of a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n *\n * This function is a re-export of `sha256` from [`@noble/hashes`](https://github.com/paulmillr/noble-hashes), an audited & minimal JS hashing library.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.sha256('0xdeadbeef')\n * // '0x5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value.\n * @param options - Options.\n * @returns Sha256 hash.\n */\nexport function sha256<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Hex.Hex | Bytes.Bytes,\n options: sha256.Options<as> = {},\n): sha256.ReturnType<as> {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const bytes = noble_sha256(Bytes.from(value))\n if (as === 'Bytes') return bytes as never\n return Hex.fromBytes(bytes) as never\n}\n\nexport declare namespace sha256 {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n /** The return type. @default 'Hex' */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if a string is a valid hash value.\n *\n * @example\n * ```ts twoslash\n * import { Hash } from 'ox'\n *\n * Hash.validate('0x')\n * // @log: false\n *\n * Hash.validate('0x3ea2f1d0abf3fc66cf29eebb70cbd4e7fe762ef8a09bcc06c8edf641230afec0')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns Whether the value is a valid hash.\n */\nexport function validate(value: string): value is Hex.Hex {\n return Hex.validate(value) && Hex.size(value) === 32\n}\n\nexport declare namespace validate {\n type ErrorType =\n | Hex.validate.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Json from './Json.js'\nimport * as internal from './internal/bytes.js'\nimport * as internal_hex from './internal/hex.js'\n\nconst decoder = /*#__PURE__*/ new TextDecoder()\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\n/** Root type for a Bytes array. */\nexport type Bytes = Uint8Array\n\n/**\n * Asserts if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.assert('abc')\n * // @error: Bytes.InvalidBytesTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid Bytes value.\n * // @error: Bytes values must be of type `Uint8Array`.\n * ```\n *\n * @param value - Value to assert.\n */\nexport function assert(value: unknown): asserts value is Bytes {\n if (value instanceof Uint8Array) return\n if (!value) throw new InvalidBytesTypeError(value)\n if (typeof value !== 'object') throw new InvalidBytesTypeError(value)\n if (!('BYTES_PER_ELEMENT' in value)) throw new InvalidBytesTypeError(value)\n if (value.BYTES_PER_ELEMENT !== 1 || value.constructor.name !== 'Uint8Array')\n throw new InvalidBytesTypeError(value)\n}\n\nexport declare namespace assert {\n type ErrorType = InvalidBytesTypeError | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.concat(\n * Bytes.from([1]),\n * Bytes.from([69]),\n * Bytes.from([420, 69]),\n * )\n * // @log: Uint8Array [ 1, 69, 420, 69 ]\n * ```\n *\n * @param values - Values to concatenate.\n * @returns Concatenated {@link ox#Bytes.Bytes}.\n */\nexport function concat(...values: readonly Bytes[]): Bytes {\n let length = 0\n for (const arr of values) {\n length += arr.length\n }\n const result = new Uint8Array(length)\n for (let i = 0, index = 0; i < values.length; i++) {\n const arr = values[i]\n result.set(arr!, index)\n index += arr!.length\n }\n return result\n}\n\nexport declare namespace concat {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Bytes.Bytes} value from a `Uint8Array`, a hex string, or an array of unsigned 8-bit integers.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Bytes.fromBoolean`\n *\n * - `Bytes.fromString`\n *\n * - `Bytes.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.from([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n *\n * const data = Bytes.from('0xdeadbeef')\n * // @log: Uint8Array([222, 173, 190, 239])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function from(value: Hex.Hex | Bytes | readonly number[]): Bytes {\n if (value instanceof Uint8Array) return value\n if (typeof value === 'string') return fromHex(value)\n return fromArray(value)\n}\n\nexport declare namespace from {\n type ErrorType =\n | fromHex.ErrorType\n | fromArray.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an array of unsigned 8-bit integers into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromArray([255, 124, 5, 4])\n * // @log: Uint8Array([255, 124, 5, 4])\n * ```\n *\n * @param value - Value to convert.\n * @returns A {@link ox#Bytes.Bytes} instance.\n */\nexport function fromArray(value: readonly number[] | Uint8Array): Bytes {\n return value instanceof Uint8Array ? value : new Uint8Array(value)\n}\n\nexport declare namespace fromArray {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true)\n * // @log: Uint8Array([1])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromBoolean(true, { size: 32 })\n * // @log: Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n * ```\n *\n * @param value - Boolean value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromBoolean(value: boolean, options: fromBoolean.Options = {}) {\n const { size } = options\n const bytes = new Uint8Array(1)\n bytes[0] = Number(value)\n if (typeof size === 'number') {\n internal.assertSize(bytes, size)\n return padLeft(bytes, size)\n }\n return bytes\n}\n\nexport declare namespace fromBoolean {\n type Options = {\n /** Size of the output bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromHex('0x48656c6c6f20776f726c6421', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Hex.Hex} value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromHex(value: Hex.Hex, options: fromHex.Options = {}): Bytes {\n const { size } = options\n\n let hex = value\n if (size) {\n internal_hex.assertSize(value, size)\n hex = Hex.padRight(value, size)\n }\n\n let hexString = hex.slice(2) as string\n if (hexString.length % 2) hexString = `0${hexString}`\n\n const length = hexString.length / 2\n const bytes = new Uint8Array(length)\n for (let index = 0, j = 0; index < length; index++) {\n const nibbleLeft = internal.charCodeToBase16(hexString.charCodeAt(j++))\n const nibbleRight = internal.charCodeToBase16(hexString.charCodeAt(j++))\n if (nibbleLeft === undefined || nibbleRight === undefined) {\n throw new Errors.BaseError(\n `Invalid byte sequence (\"${hexString[j - 2]}${hexString[j - 1]}\" in \"${hexString}\").`,\n )\n }\n bytes[index] = nibbleLeft * 16 + nibbleRight\n }\n return bytes\n}\n\nexport declare namespace fromHex {\n type Options = {\n /** Size of the output bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal_hex.assertSize.ErrorType\n | Hex.padRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number value into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420)\n * // @log: Uint8Array([1, 164])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromNumber(420, { size: 4 })\n * // @log: Uint8Array([0, 0, 1, 164])\n * ```\n *\n * @param value - Number value to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromNumber(\n value: bigint | number,\n options?: fromNumber.Options | undefined,\n) {\n const hex = Hex.fromNumber(value, options)\n return fromHex(hex)\n}\n\nexport declare namespace fromNumber {\n export type Options = Hex.fromNumber.Options\n\n export type ErrorType =\n | Hex.fromNumber.ErrorType\n | fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.fromString('Hello world!', { size: 32 })\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n * ```\n *\n * @param value - String to encode.\n * @param options - Encoding options.\n * @returns Encoded {@link ox#Bytes.Bytes}.\n */\nexport function fromString(\n value: string,\n options: fromString.Options = {},\n): Bytes {\n const { size } = options\n\n const bytes = encoder.encode(value)\n if (typeof size === 'number') {\n internal.assertSize(bytes, size)\n return padRight(bytes, size)\n }\n return bytes\n}\n\nexport declare namespace fromString {\n type Options = {\n /** Size of the output bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Bytes.Bytes} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([1]))\n * // @log: true\n *\n * Bytes.isEqual(Bytes.from([1]), Bytes.from([2]))\n * // @log: false\n * ```\n *\n * @param bytesA - First {@link ox#Bytes.Bytes} value.\n * @param bytesB - Second {@link ox#Bytes.Bytes} value.\n * @returns `true` if the two values are equal, otherwise `false`.\n */\nexport function isEqual(bytesA: Bytes, bytesB: Bytes) {\n return equalBytes(bytesA, bytesB)\n}\n\nexport declare namespace isEqual {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.from([1]), 4)\n * // @log: Uint8Array([0, 0, 0, 1])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padLeft(\n value: Bytes,\n size?: number | undefined,\n): padLeft.ReturnType {\n return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n type ReturnType = internal.pad.ReturnType\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Bytes.Bytes} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padRight(Bytes.from([1]), 4)\n * // @log: Uint8Array([1, 0, 0, 0])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value to pad.\n * @param size - Size to pad the {@link ox#Bytes.Bytes} value to.\n * @returns Padded {@link ox#Bytes.Bytes} value.\n */\nexport function padRight(\n value: Bytes,\n size?: number | undefined,\n): padRight.ReturnType {\n return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n type ReturnType = internal.pad.ReturnType\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates random {@link ox#Bytes.Bytes} of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const bytes = Bytes.random(32)\n * // @log: Uint8Array([... x32])\n * ```\n *\n * @param length - Length of the random {@link ox#Bytes.Bytes} to generate.\n * @returns Random {@link ox#Bytes.Bytes} of the specified length.\n */\nexport function random(length: number): Bytes {\n return crypto.getRandomValues(new Uint8Array(length))\n}\n\nexport declare namespace random {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.size(Bytes.from([1, 2, 3, 4]))\n * // @log: 4\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Size of the {@link ox#Bytes.Bytes} value.\n */\nexport function size(value: Bytes): number {\n return value.length\n}\n\nexport declare namespace size {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(\n * Bytes.from([1, 2, 3, 4, 5, 6, 7, 8, 9]),\n * 1,\n * 4,\n * )\n * // @log: Uint8Array([2, 3, 4])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value.\n * @param start - Start offset.\n * @param end - End offset.\n * @param options - Slice options.\n * @returns Sliced {@link ox#Bytes.Bytes} value.\n */\nexport function slice(\n value: Bytes,\n start?: number | undefined,\n end?: number | undefined,\n options: slice.Options = {},\n): Bytes {\n const { strict } = options\n internal.assertStartOffset(value, start)\n const value_ = value.slice(start, end)\n if (strict) internal.assertEndOffset(value_, start, end)\n return value_\n}\n\nexport declare namespace slice {\n type Options = {\n /** Asserts that the sliced value is the same size as the given start/end offsets. */\n strict?: boolean | undefined\n }\n\n export type ErrorType =\n | internal.assertStartOffset.ErrorType\n | internal.assertEndOffset.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a bigint.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBigInt(Bytes.from([1, 164]))\n * // @log: 420n\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded bigint.\n */\nexport function toBigInt(bytes: Bytes, options: toBigInt.Options = {}): bigint {\n const { size } = options\n if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n const hex = Hex.fromBytes(bytes, options)\n return Hex.toBigInt(hex, options)\n}\n\nexport declare namespace toBigInt {\n type Options = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Hex.toBigInt.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a boolean.\n *\n * @example\n * ```ts\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([1]))\n * // @log: true\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Decoding options.\n * @returns Decoded boolean.\n */\nexport function toBoolean(\n bytes: Bytes,\n options: toBoolean.Options = {},\n): boolean {\n const { size } = options\n let bytes_ = bytes\n if (typeof size !== 'undefined') {\n internal.assertSize(bytes_, size)\n bytes_ = trimLeft(bytes_)\n }\n if (bytes_.length > 1 || bytes_[0]! > 1)\n throw new InvalidBytesBooleanError(bytes_)\n return Boolean(bytes_[0])\n}\n\nexport declare namespace toBoolean {\n type Options = {\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | trimLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toHex(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes, options: toHex.Options = {}): Hex.Hex {\n return Hex.fromBytes(value, options)\n}\n\nexport declare namespace toHex {\n type Options = {\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a number.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toNumber(Bytes.from([1, 164]))\n * // @log: 420\n * ```\n */\nexport function toNumber(bytes: Bytes, options: toNumber.Options = {}): number {\n const { size } = options\n if (typeof size !== 'undefined') internal.assertSize(bytes, size)\n const hex = Hex.fromBytes(bytes, options)\n return Hex.toNumber(hex, options)\n}\n\nexport declare namespace toNumber {\n type Options = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Hex.toNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Bytes.Bytes} into a string.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * const data = Bytes.toString(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: 'Hello world'\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} to decode.\n * @param options - Options.\n * @returns Decoded string.\n */\nexport function toString(bytes: Bytes, options: toString.Options = {}): string {\n const { size } = options\n\n let bytes_ = bytes\n if (typeof size !== 'undefined') {\n internal.assertSize(bytes_, size)\n bytes_ = trimRight(bytes_)\n }\n return decoder.decode(bytes_)\n}\n\nexport declare namespace toString {\n export type Options = {\n /** Size of the bytes. */\n size?: number | undefined\n }\n\n export type ErrorType =\n | internal.assertSize.ErrorType\n | trimRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimLeft(Bytes.from([0, 0, 0, 0, 1, 2, 3]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimLeft(value: Bytes): Bytes {\n return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.trimRight(Bytes.from([1, 2, 3, 0, 0, 0, 0]))\n * // @log: Uint8Array([1, 2, 3])\n * ```\n *\n * @param value - {@link ox#Bytes.Bytes} value.\n * @returns Trimmed {@link ox#Bytes.Bytes} value.\n */\nexport function trimRight(value: Bytes): Bytes {\n return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n export type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.validate('0x')\n * // @log: false\n *\n * Bytes.validate(Bytes.from([1, 2, 3]))\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns `true` if the value is {@link ox#Bytes.Bytes}, otherwise `false`.\n */\nexport function validate(value: unknown): value is Bytes {\n try {\n assert(value)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the bytes value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.toBoolean(Bytes.from([5]))\n * // @error: Bytes.InvalidBytesBooleanError: Bytes value `[5]` is not a valid boolean.\n * // @error: The bytes array must contain a single byte of either a `0` or `1` value.\n * ```\n */\nexport class InvalidBytesBooleanError extends Errors.BaseError {\n override readonly name = 'Bytes.InvalidBytesBooleanError'\n\n constructor(bytes: Bytes) {\n super(`Bytes value \\`${bytes}\\` is not a valid boolean.`, {\n metaMessages: [\n 'The bytes array must contain a single byte of either a `0` or `1` value.',\n ],\n })\n }\n}\n\n/**\n * Thrown when a value cannot be converted to bytes.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Bytes } from 'ox'\n *\n * Bytes.from('foo')\n * // @error: Bytes.InvalidBytesTypeError: Value `foo` of type `string` is an invalid Bytes value.\n * ```\n */\nexport class InvalidBytesTypeError extends Errors.BaseError {\n override readonly name = 'Bytes.InvalidBytesTypeError'\n\n constructor(value: unknown) {\n super(\n `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid Bytes value.`,\n {\n metaMessages: ['Bytes values must be of type `Bytes`.'],\n },\n )\n }\n}\n\n/**\n * Thrown when a size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromString('Hello World!', { size: 8 })\n * // @error: Bytes.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n override readonly name = 'Bytes.SizeOverflowError'\n\n constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n super(\n `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n )\n }\n}\n\n/**\n * Thrown when a slice offset is out-of-bounds.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.slice(Bytes.from([1, 2, 3]), 4)\n * // @error: Bytes.SliceOffsetOutOfBoundsError: Slice starting at offset `4` is out-of-bounds (size: `3`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n override readonly name = 'Bytes.SliceOffsetOutOfBoundsError'\n\n constructor({\n offset,\n position,\n size,\n }: { offset: number; position: 'start' | 'end'; size: number }) {\n super(\n `Slice ${\n position === 'start' ? 'starting' : 'ending'\n } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n )\n }\n}\n\n/**\n * Thrown when a the padding size exceeds the maximum allowed size.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.padLeft(Bytes.fromString('Hello World!'), 8)\n * // @error: [Bytes.SizeExceedsPaddingSizeError: Bytes size (`12`) exceeds padding size (`8`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n override readonly name = 'Bytes.SizeExceedsPaddingSizeError'\n\n constructor({\n size,\n targetSize,\n type,\n }: {\n size: number\n targetSize: number\n type: 'Hex' | 'Bytes'\n }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n )\n }\n}\n", "import { equalBytes } from '@noble/curves/abstract/utils'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Json from './Json.js'\nimport * as internal_bytes from './internal/bytes.js'\nimport * as internal from './internal/hex.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) =>\n i.toString(16).padStart(2, '0'),\n)\n\n/** Root type for a Hex string. */\nexport type Hex = `0x${string}`\n\n/**\n * Asserts if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('abc')\n * // @error: InvalidHexValueTypeError:\n * // @error: Value `\"abc\"` of type `string` is an invalid hex type.\n * // @error: Hex types must be represented as `\"0x\\${string}\"`.\n * ```\n *\n * @param value - The value to assert.\n * @param options - Options.\n */\nexport function assert(\n value: unknown,\n options: assert.Options = {},\n): asserts value is Hex {\n const { strict = false } = options\n if (!value) throw new InvalidHexTypeError(value)\n if (typeof value !== 'string') throw new InvalidHexTypeError(value)\n if (strict) {\n if (!/^0x[0-9a-fA-F]*$/.test(value)) throw new InvalidHexValueError(value)\n }\n if (!value.startsWith('0x')) throw new InvalidHexValueError(value)\n}\n\nexport declare namespace assert {\n type Options = {\n /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n strict?: boolean | undefined\n }\n\n type ErrorType =\n | InvalidHexTypeError\n | InvalidHexValueError\n | Errors.GlobalErrorType\n}\n\n/**\n * Concatenates two or more {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.concat('0x123', '0x456')\n * // @log: '0x123456'\n * ```\n *\n * @param values - The {@link ox#Hex.Hex} values to concatenate.\n * @returns The concatenated {@link ox#Hex.Hex} value.\n */\nexport function concat(...values: readonly Hex[]): Hex {\n return `0x${(values as Hex[]).reduce((acc, x) => acc + x.replace('0x', ''), '')}`\n}\n\nexport declare namespace concat {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a {@link ox#Hex.Hex} value from a hex string or {@link ox#Bytes.Bytes} value.\n *\n * :::tip\n *\n * To instantiate from a **Boolean**, **String**, or **Number**, use one of the following:\n *\n * - `Hex.fromBoolean`\n *\n * - `Hex.fromString`\n *\n * - `Hex.fromNumber`\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.from('0x48656c6c6f20576f726c6421')\n * // @log: '0x48656c6c6f20576f726c6421'\n *\n * Hex.from(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function from(value: Hex | Bytes.Bytes | readonly number[]): Hex {\n if (value instanceof Uint8Array) return fromBytes(value)\n if (Array.isArray(value)) return fromBytes(new Uint8Array(value))\n return value as never\n}\n\nexport declare namespace from {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a boolean into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromBoolean(true)\n * // @log: '0x1'\n *\n * Hex.fromBoolean(false)\n * // @log: '0x0'\n *\n * Hex.fromBoolean(true, { size: 32 })\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001'\n * ```\n *\n * @param value - The boolean value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBoolean(\n value: boolean,\n options: fromBoolean.Options = {},\n): Hex {\n const hex: Hex = `0x${Number(value)}`\n if (typeof options.size === 'number') {\n internal.assertSize(hex, options.size)\n return padLeft(hex, options.size)\n }\n return hex\n}\n\nexport declare namespace fromBoolean {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.fromBytes(Bytes.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]))\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromBytes(\n value: Bytes.Bytes,\n options: fromBytes.Options = {},\n): Hex {\n let string = ''\n for (let i = 0; i < value.length; i++) string += hexes[value[i]!]\n const hex = `0x${string}` as const\n\n if (typeof options.size === 'number') {\n internal.assertSize(hex, options.size)\n return padRight(hex, options.size)\n }\n return hex\n}\n\nexport declare namespace fromBytes {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | padRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a number or bigint into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420)\n * // @log: '0x1a4'\n *\n * Hex.fromNumber(420, { size: 32 })\n * // @log: '0x00000000000000000000000000000000000000000000000000000000000001a4'\n * ```\n *\n * @param value - The number or bigint value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromNumber(\n value: number | bigint,\n options: fromNumber.Options = {},\n): Hex {\n const { signed, size } = options\n\n const value_ = BigInt(value)\n\n let maxValue: bigint | number | undefined\n if (size) {\n if (signed) maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n\n else maxValue = 2n ** (BigInt(size) * 8n) - 1n\n } else if (typeof value === 'number') {\n maxValue = BigInt(Number.MAX_SAFE_INTEGER)\n }\n\n const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0\n\n if ((maxValue && value_ > maxValue) || value_ < minValue) {\n const suffix = typeof value === 'bigint' ? 'n' : ''\n throw new IntegerOutOfRangeError({\n max: maxValue ? `${maxValue}${suffix}` : undefined,\n min: `${minValue}${suffix}`,\n signed,\n size,\n value: `${value}${suffix}`,\n })\n }\n\n const stringValue = (\n signed && value_ < 0 ? (1n << BigInt(size * 8)) + BigInt(value_) : value_\n ).toString(16)\n\n const hex = `0x${stringValue}` as Hex\n if (size) return padLeft(hex, size) as Hex\n return hex\n}\n\nexport declare namespace fromNumber {\n type Options =\n | {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** The size (in bytes) of the output hex value. */\n size: number\n }\n | {\n signed?: undefined\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | IntegerOutOfRangeError\n | padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n * Hex.fromString('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * Hex.fromString('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n * ```\n *\n * @param value - The string value to encode.\n * @param options - Options.\n * @returns The encoded {@link ox#Hex.Hex} value.\n */\nexport function fromString(\n value: string,\n options: fromString.Options = {},\n): Hex {\n return fromBytes(encoder.encode(value), options)\n}\n\nexport declare namespace fromString {\n type Options = {\n /** The size (in bytes) of the output hex value. */\n size?: number | undefined\n }\n\n type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Hex.Hex} values are equal.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.isEqual('0xdeadbeef', '0xdeadbeef')\n * // @log: true\n *\n * Hex.isEqual('0xda', '0xba')\n * // @log: false\n * ```\n *\n * @param hexA - The first {@link ox#Hex.Hex} value.\n * @param hexB - The second {@link ox#Hex.Hex} value.\n * @returns `true` if the two {@link ox#Hex.Hex} values are equal, `false` otherwise.\n */\nexport function isEqual(hexA: Hex, hexB: Hex) {\n return equalBytes(Bytes.fromHex(hexA), Bytes.fromHex(hexB))\n}\n\nexport declare namespace isEqual {\n type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the left with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1234', 4)\n * // @log: '0x00001234'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padLeft(\n value: Hex,\n size?: number | undefined,\n): padLeft.ReturnType {\n return internal.pad(value, { dir: 'left', size })\n}\n\nexport declare namespace padLeft {\n type ReturnType = Hex\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Pads a {@link ox#Hex.Hex} value to the right with zero bytes until it reaches the given `size` (default: 32 bytes).\n *\n * @example\n * ```ts\n * import { Hex } from 'ox'\n *\n * Hex.padRight('0x1234', 4)\n * // @log: '0x12340000'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to pad.\n * @param size - The size (in bytes) of the output hex value.\n * @returns The padded {@link ox#Hex.Hex} value.\n */\nexport function padRight(\n value: Hex,\n size?: number | undefined,\n): padRight.ReturnType {\n return internal.pad(value, { dir: 'right', size })\n}\n\nexport declare namespace padRight {\n type ReturnType = Hex\n type ErrorType = internal.pad.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random {@link ox#Hex.Hex} value of the specified length.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const hex = Hex.random(32)\n * // @log: '0x...'\n * ```\n *\n * @returns Random {@link ox#Hex.Hex} value.\n */\nexport function random(length: number): Hex {\n return fromBytes(Bytes.random(length))\n}\n\nexport declare namespace random {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns a section of a {@link ox#Bytes.Bytes} value given a start/end bytes offset.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 1, 4)\n * // @log: '0x234567'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to slice.\n * @param start - The start offset (in bytes).\n * @param end - The end offset (in bytes).\n * @param options - Options.\n * @returns The sliced {@link ox#Hex.Hex} value.\n */\nexport function slice(\n value: Hex,\n start?: number | undefined,\n end?: number | undefined,\n options: slice.Options = {},\n): Hex {\n const { strict } = options\n internal.assertStartOffset(value, start)\n const value_ = `0x${value\n .replace('0x', '')\n .slice((start ?? 0) * 2, (end ?? value.length) * 2)}` as const\n if (strict) internal.assertEndOffset(value_, start, end)\n return value_\n}\n\nexport declare namespace slice {\n type Options = {\n /** Asserts that the sliced value is the same size as the given start/end offsets. */\n strict?: boolean | undefined\n }\n\n type ErrorType =\n | internal.assertStartOffset.ErrorType\n | internal.assertEndOffset.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Retrieves the size of a {@link ox#Hex.Hex} value (in bytes).\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.size('0xdeadbeef')\n * // @log: 4\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to get the size of.\n * @returns The size of the {@link ox#Hex.Hex} value (in bytes).\n */\nexport function size(value: Hex): number {\n return Math.ceil((value.length - 2) / 2)\n}\n\nexport declare namespace size {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Trims leading zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimLeft('0x00000000deadbeef')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimLeft(value: Hex): trimLeft.ReturnType {\n return internal.trim(value, { dir: 'left' })\n}\n\nexport declare namespace trimLeft {\n type ReturnType = Hex\n\n type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Trims trailing zeros from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.trimRight('0xdeadbeef00000000')\n * // @log: '0xdeadbeef'\n * ```\n *\n * @param value - The {@link ox#Hex.Hex} value to trim.\n * @returns The trimmed {@link ox#Hex.Hex} value.\n */\nexport function trimRight(value: Hex): trimRight.ReturnType {\n return internal.trim(value, { dir: 'right' })\n}\n\nexport declare namespace trimRight {\n type ReturnType = Hex\n\n type ErrorType = internal.trim.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a BigInt.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBigInt('0x1a4')\n * // @log: 420n\n *\n * Hex.toBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420n\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded BigInt.\n */\nexport function toBigInt(hex: Hex, options: toBigInt.Options = {}): bigint {\n const { signed } = options\n\n if (options.size) internal.assertSize(hex, options.size)\n\n const value = BigInt(hex)\n if (!signed) return value\n\n const size = (hex.length - 2) / 2\n\n const max_unsigned = (1n << (BigInt(size) * 8n)) - 1n\n const max_signed = max_unsigned >> 1n\n\n if (value <= max_signed) return value\n return value - max_unsigned - 1n\n}\n\nexport declare namespace toBigInt {\n type Options = {\n /** Whether or not the number of a signed representation. */\n signed?: boolean | undefined\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType = internal.assertSize.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0x01')\n * // @log: true\n *\n * Hex.toBoolean('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // @log: true\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded boolean.\n */\nexport function toBoolean(hex: Hex, options: toBoolean.Options = {}): boolean {\n if (options.size) internal.assertSize(hex, options.size)\n const hex_ = trimLeft(hex)\n if (hex_ === '0x') return false\n if (hex_ === '0x1') return true\n throw new InvalidHexBooleanError(hex)\n}\n\nexport declare namespace toBoolean {\n type Options = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal.assertSize.ErrorType\n | trimLeft.ErrorType\n | InvalidHexBooleanError\n | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * const data = Hex.toBytes('0x48656c6c6f20776f726c6421')\n * // @log: Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded {@link ox#Bytes.Bytes}.\n */\nexport function toBytes(hex: Hex, options: toBytes.Options = {}): Bytes.Bytes {\n return Bytes.fromHex(hex, options)\n}\n\nexport declare namespace toBytes {\n type Options = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a number.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toNumber('0x1a4')\n * // @log: 420\n *\n * Hex.toNumber('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // @log: 420\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded number.\n */\nexport function toNumber(hex: Hex, options: toNumber.Options = {}): number {\n const { signed, size } = options\n if (!signed && !size) return Number(hex)\n return Number(toBigInt(hex, options))\n}\n\nexport declare namespace toNumber {\n type Options = toBigInt.Options\n\n type ErrorType = toBigInt.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a {@link ox#Hex.Hex} value into a string.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toString('0x48656c6c6f20576f726c6421')\n * // @log: 'Hello world!'\n *\n * Hex.toString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n * size: 32,\n * })\n * // @log: 'Hello world'\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to decode.\n * @param options - Options.\n * @returns The decoded string.\n */\nexport function toString(hex: Hex, options: toString.Options = {}): string {\n const { size } = options\n\n let bytes = Bytes.fromHex(hex)\n if (size) {\n internal_bytes.assertSize(bytes, size)\n bytes = Bytes.trimRight(bytes)\n }\n return new TextDecoder().decode(bytes)\n}\n\nexport declare namespace toString {\n type Options = {\n /** Size (in bytes) of the hex value. */\n size?: number | undefined\n }\n\n type ErrorType =\n | internal_bytes.assertSize.ErrorType\n | Bytes.fromHex.ErrorType\n | Bytes.trimRight.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given value is {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Hex } from 'ox'\n *\n * Hex.validate('0xdeadbeef')\n * // @log: true\n *\n * Hex.validate(Bytes.from([1, 2, 3]))\n * // @log: false\n * ```\n *\n * @param value - The value to check.\n * @param options - Options.\n * @returns `true` if the value is a {@link ox#Hex.Hex}, `false` otherwise.\n */\nexport function validate(\n value: unknown,\n options: validate.Options = {},\n): value is Hex {\n const { strict = false } = options\n try {\n assert(value, { strict })\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /** Checks if the {@link ox#Hex.Hex} value contains invalid hexadecimal characters. @default false */\n strict?: boolean | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the provided integer is out of range, and cannot be represented as a hex value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromNumber(420182738912731283712937129)\n * // @error: Hex.IntegerOutOfRangeError: Number \\`4.2018273891273126e+26\\` is not in safe unsigned integer range (`0` to `9007199254740991`)\n * ```\n */\nexport class IntegerOutOfRangeError extends Errors.BaseError {\n override readonly name = 'Hex.IntegerOutOfRangeError'\n\n constructor({\n max,\n min,\n signed,\n size,\n value,\n }: {\n max?: string | undefined\n min: string\n signed?: boolean | undefined\n size?: number | undefined\n value: string\n }) {\n super(\n `Number \\`${value}\\` is not in safe${\n size ? ` ${size * 8}-bit` : ''\n }${signed ? ' signed' : ' unsigned'} integer range ${max ? `(\\`${min}\\` to \\`${max}\\`)` : `(above \\`${min}\\`)`}`,\n )\n }\n}\n\n/**\n * Thrown when the provided hex value cannot be represented as a boolean.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.toBoolean('0xa')\n * // @error: Hex.InvalidHexBooleanError: Hex value `\"0xa\"` is not a valid boolean.\n * // @error: The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).\n * ```\n */\nexport class InvalidHexBooleanError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidHexBooleanError'\n\n constructor(hex: Hex) {\n super(`Hex value \\`\"${hex}\"\\` is not a valid boolean.`, {\n metaMessages: [\n 'The hex value must be `\"0x0\"` (false) or `\"0x1\"` (true).',\n ],\n })\n }\n}\n\n/**\n * Thrown when the provided value is not a valid hex type.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert(1)\n * // @error: Hex.InvalidHexTypeError: Value `1` of type `number` is an invalid hex type.\n * ```\n */\nexport class InvalidHexTypeError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidHexTypeError'\n\n constructor(value: unknown) {\n super(\n `Value \\`${typeof value === 'object' ? Json.stringify(value) : value}\\` of type \\`${typeof value}\\` is an invalid hex type.`,\n {\n metaMessages: ['Hex types must be represented as `\"0x${string}\"`.'],\n },\n )\n }\n}\n\n/**\n * Thrown when the provided hex value is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.assert('0x0123456789abcdefg')\n * // @error: Hex.InvalidHexValueError: Value `0x0123456789abcdefg` is an invalid hex value.\n * // @error: Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).\n * ```\n */\nexport class InvalidHexValueError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidHexValueError'\n\n constructor(value: unknown) {\n super(`Value \\`${value}\\` is an invalid hex value.`, {\n metaMessages: [\n 'Hex values must start with `\"0x\"` and contain only hexadecimal characters (0-9, a-f, A-F).',\n ],\n })\n }\n}\n\n/**\n * Thrown when the provided hex value is an odd length.\n *\n * @example\n * ```ts twoslash\n * import { Bytes } from 'ox'\n *\n * Bytes.fromHex('0xabcde')\n * // @error: Hex.InvalidLengthError: Hex value `\"0xabcde\"` is an odd length (5 nibbles).\n * ```\n */\nexport class InvalidLengthError extends Errors.BaseError {\n override readonly name = 'Hex.InvalidLengthError'\n\n constructor(value: Hex) {\n super(\n `Hex value \\`\"${value}\"\\` is an odd length (${value.length - 2} nibbles).`,\n {\n metaMessages: ['It must be an even length.'],\n },\n )\n }\n}\n\n/**\n * Thrown when the size of the value exceeds the expected max size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.fromString('Hello World!', { size: 8 })\n * // @error: Hex.SizeOverflowError: Size cannot exceed `8` bytes. Given size: `12` bytes.\n * ```\n */\nexport class SizeOverflowError extends Errors.BaseError {\n override readonly name = 'Hex.SizeOverflowError'\n\n constructor({ givenSize, maxSize }: { givenSize: number; maxSize: number }) {\n super(\n `Size cannot exceed \\`${maxSize}\\` bytes. Given size: \\`${givenSize}\\` bytes.`,\n )\n }\n}\n\n/**\n * Thrown when the slice offset exceeds the bounds of the value.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.slice('0x0123456789', 6)\n * // @error: Hex.SliceOffsetOutOfBoundsError: Slice starting at offset `6` is out-of-bounds (size: `5`).\n * ```\n */\nexport class SliceOffsetOutOfBoundsError extends Errors.BaseError {\n override readonly name = 'Hex.SliceOffsetOutOfBoundsError'\n\n constructor({\n offset,\n position,\n size,\n }: { offset: number; position: 'start' | 'end'; size: number }) {\n super(\n `Slice ${\n position === 'start' ? 'starting' : 'ending'\n } at offset \\`${offset}\\` is out-of-bounds (size: \\`${size}\\`).`,\n )\n }\n}\n\n/**\n * Thrown when the size of the value exceeds the pad size.\n *\n * @example\n * ```ts twoslash\n * import { Hex } from 'ox'\n *\n * Hex.padLeft('0x1a4e12a45a21323123aaa87a897a897a898a6567a578a867a98778a667a85a875a87a6a787a65a675a6a9', 32)\n * // @error: Hex.SizeExceedsPaddingSizeError: Hex size (`43`) exceeds padding size (`32`).\n * ```\n */\nexport class SizeExceedsPaddingSizeError extends Errors.BaseError {\n override readonly name = 'Hex.SizeExceedsPaddingSizeError'\n\n constructor({\n size,\n targetSize,\n type,\n }: {\n size: number\n targetSize: number\n type: 'Hex' | 'Bytes'\n }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (\\`${size}\\`) exceeds padding size (\\`${targetSize}\\`).`,\n )\n }\n}\n", "import type * as Errors from './Errors.js'\n\nconst bigIntSuffix = /*#__PURE__*/ '#__bigint'\n\n/**\n * Parses a JSON string, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.parse('{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}')\n * // @log: {\n * // @log: foo: 'bar',\n * // @log: baz: 69420694206942069420694206942069420694206942069420n\n * // @log: }\n * ```\n *\n * @param string - The value to parse.\n * @param reviver - A function that transforms the results.\n * @returns The parsed value.\n */\nexport function parse(\n string: string,\n reviver?: ((this: any, key: string, value: any) => any) | undefined,\n) {\n return JSON.parse(string, (key, value_) => {\n const value = value_\n if (typeof value === 'string' && value.endsWith(bigIntSuffix))\n return BigInt(value.slice(0, -bigIntSuffix.length))\n return typeof reviver === 'function' ? reviver(key, value) : value\n })\n}\n\nexport declare namespace parse {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Stringifies a value to its JSON representation, with support for `bigint`.\n *\n * @example\n * ```ts twoslash\n * import { Json } from 'ox'\n *\n * const json = Json.stringify({\n * foo: 'bar',\n * baz: 69420694206942069420694206942069420694206942069420n,\n * })\n * // @log: '{\"foo\":\"bar\",\"baz\":\"69420694206942069420694206942069420694206942069420#__bigint\"}'\n * ```\n *\n * @param value - The value to stringify.\n * @param replacer - A function that transforms the results. It is passed the key and value of the property, and must return the value to be used in the JSON string. If this function returns `undefined`, the property is not included in the resulting JSON string.\n * @param space - A string or number that determines the indentation of the JSON string. If it is a number, it indicates the number of spaces to use as indentation; if it is a string (e.g. `'\\t'`), it uses the string as the indentation character.\n * @returns The JSON string.\n */\nexport function stringify(\n value: any,\n replacer?: ((this: any, key: string, value: any) => any) | null | undefined,\n space?: string | number | undefined,\n) {\n return JSON.stringify(\n value,\n (key, value) => {\n if (typeof replacer === 'function') return replacer(key, value)\n if (typeof value === 'bigint') return value.toString() + bigIntSuffix\n return value\n },\n space,\n )\n}\n\nexport declare namespace stringify {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Bytes from '../Bytes.js'\nimport type * as Errors from '../Errors.js'\n\n/** @internal */\nexport function assertSize(bytes: Bytes.Bytes, size_: number): void {\n if (Bytes.size(bytes) > size_)\n throw new Bytes.SizeOverflowError({\n givenSize: Bytes.size(bytes),\n maxSize: size_,\n })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n type ErrorType =\n | Bytes.size.ErrorType\n | Bytes.SizeOverflowError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(\n value: Bytes.Bytes,\n start?: number | undefined,\n) {\n if (typeof start === 'number' && start > 0 && start > Bytes.size(value) - 1)\n throw new Bytes.SliceOffsetOutOfBoundsError({\n offset: start,\n position: 'start',\n size: Bytes.size(value),\n })\n}\n\nexport declare namespace assertStartOffset {\n export type ErrorType =\n | Bytes.SliceOffsetOutOfBoundsError\n | Bytes.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n value: Bytes.Bytes,\n start?: number | undefined,\n end?: number | undefined,\n) {\n if (\n typeof start === 'number' &&\n typeof end === 'number' &&\n Bytes.size(value) !== end - start\n ) {\n throw new Bytes.SliceOffsetOutOfBoundsError({\n offset: end,\n position: 'end',\n size: Bytes.size(value),\n })\n }\n}\n\n/** @internal */\nexport declare namespace assertEndOffset {\n type ErrorType =\n | Bytes.SliceOffsetOutOfBoundsError\n | Bytes.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport const charCodeMap = {\n zero: 48,\n nine: 57,\n A: 65,\n F: 70,\n a: 97,\n f: 102,\n} as const\n\n/** @internal */\nexport function charCodeToBase16(char: number) {\n if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n return char - charCodeMap.zero\n if (char >= charCodeMap.A && char <= charCodeMap.F)\n return char - (charCodeMap.A - 10)\n if (char >= charCodeMap.a && char <= charCodeMap.f)\n return char - (charCodeMap.a - 10)\n return undefined\n}\n\n/** @internal */\nexport function pad(bytes: Bytes.Bytes, options: pad.Options = {}) {\n const { dir, size = 32 } = options\n if (size === 0) return bytes\n if (bytes.length > size)\n throw new Bytes.SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'Bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] =\n bytes[padEnd ? i : bytes.length - i - 1]!\n }\n return paddedBytes\n}\n\n/** @internal */\nexport declare namespace pad {\n type Options = {\n dir?: 'left' | 'right' | undefined\n size?: number | undefined\n }\n\n type ReturnType = Bytes.Bytes\n\n type ErrorType = Bytes.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n value: Bytes.Bytes,\n options: trim.Options = {},\n): trim.ReturnType {\n const { dir = 'left' } = options\n\n let data = value\n\n let sliceLength = 0\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n sliceLength++\n else break\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength)\n\n return data as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n type Options = {\n dir?: 'left' | 'right' | undefined\n }\n\n type ReturnType = Bytes.Bytes\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\n\n/** @internal */\nexport function assertSize(hex: Hex.Hex, size_: number): void {\n if (Hex.size(hex) > size_)\n throw new Hex.SizeOverflowError({\n givenSize: Hex.size(hex),\n maxSize: size_,\n })\n}\n\n/** @internal */\nexport declare namespace assertSize {\n type ErrorType =\n | Hex.size.ErrorType\n | Hex.SizeOverflowError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertStartOffset(value: Hex.Hex, start?: number | undefined) {\n if (typeof start === 'number' && start > 0 && start > Hex.size(value) - 1)\n throw new Hex.SliceOffsetOutOfBoundsError({\n offset: start,\n position: 'start',\n size: Hex.size(value),\n })\n}\n\nexport declare namespace assertStartOffset {\n type ErrorType =\n | Hex.SliceOffsetOutOfBoundsError\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function assertEndOffset(\n value: Hex.Hex,\n start?: number | undefined,\n end?: number | undefined,\n) {\n if (\n typeof start === 'number' &&\n typeof end === 'number' &&\n Hex.size(value) !== end - start\n ) {\n throw new Hex.SliceOffsetOutOfBoundsError({\n offset: end,\n position: 'end',\n size: Hex.size(value),\n })\n }\n}\n\nexport declare namespace assertEndOffset {\n type ErrorType =\n | Hex.SliceOffsetOutOfBoundsError\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function pad(hex_: Hex.Hex, options: pad.Options = {}) {\n const { dir, size = 32 } = options\n\n if (size === 0) return hex_\n\n const hex = hex_.replace('0x', '')\n if (hex.length > size * 2)\n throw new Hex.SizeExceedsPaddingSizeError({\n size: Math.ceil(hex.length / 2),\n targetSize: size,\n type: 'Hex',\n })\n\n return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}` as Hex.Hex\n}\n\n/** @internal */\nexport declare namespace pad {\n type Options = {\n dir?: 'left' | 'right' | undefined\n size?: number | undefined\n }\n type ErrorType = Hex.SizeExceedsPaddingSizeError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function trim(\n value: Hex.Hex,\n options: trim.Options = {},\n): trim.ReturnType {\n const { dir = 'left' } = options\n\n let data = value.replace('0x', '')\n\n let sliceLength = 0\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1]!.toString() === '0')\n sliceLength++\n else break\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength)\n\n if (data === '0') return '0x'\n if (dir === 'right' && data.length % 2 === 1) return `0x${data}0`\n return `0x${data}` as trim.ReturnType\n}\n\n/** @internal */\nexport declare namespace trim {\n type Options = {\n dir?: 'left' | 'right' | undefined\n }\n\n type ReturnType = Hex.Hex\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type { Address as abitype_Address } from 'abitype'\nimport * as Bytes from './Bytes.js'\nimport * as Caches from './Caches.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as PublicKey from './PublicKey.js'\n\nconst addressRegex = /*#__PURE__*/ /^0x[a-fA-F0-9]{40}$/\n\n/** Root type for Address. */\nexport type Address = abitype_Address\n\n/**\n * Asserts that the given value is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.assert('0xdeadbeef')\n * // @error: InvalidAddressError: Address \"0xdeadbeef\" is invalid.\n * ```\n *\n * @param value - Value to assert if it is a valid address.\n * @param options - Assertion options.\n */\nexport function assert(\n value: string,\n options: assert.Options = {},\n): asserts value is Address {\n const { strict = true } = options\n\n if (!addressRegex.test(value))\n throw new InvalidAddressError({\n address: value,\n cause: new InvalidInputError(),\n })\n\n if (strict) {\n if (value.toLowerCase() === value) return\n if (checksum(value as Address) !== value)\n throw new InvalidAddressError({\n address: value,\n cause: new InvalidChecksumError(),\n })\n }\n}\n\nexport declare namespace assert {\n type Options = {\n /**\n * Enables strict mode. Whether or not to compare the address against its checksum.\n *\n * @default true\n */\n strict?: boolean | undefined\n }\n\n type ErrorType = InvalidAddressError | Errors.GlobalErrorType\n}\n\n/**\n * Computes the checksum address for the given {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.checksum('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @param address - The address to compute the checksum for.\n * @returns The checksummed address.\n */\nexport function checksum(address: string): Address {\n if (Caches.checksum.has(address)) return Caches.checksum.get(address)!\n\n assert(address, { strict: false })\n\n const hexAddress = address.substring(2).toLowerCase()\n const hash = Hash.keccak256(Bytes.fromString(hexAddress), { as: 'Bytes' })\n\n const characters = hexAddress.split('')\n for (let i = 0; i < 40; i += 2) {\n if (hash[i >> 1]! >> 4 >= 8 && characters[i]) {\n characters[i] = characters[i]!.toUpperCase()\n }\n if ((hash[i >> 1]! & 0x0f) >= 8 && characters[i + 1]) {\n characters[i + 1] = characters[i + 1]!.toUpperCase()\n }\n }\n\n const result = `0x${characters.join('')}` as const\n Caches.checksum.set(address, result)\n return result\n}\n\nexport declare namespace checksum {\n type ErrorType =\n | assert.ErrorType\n | Hash.keccak256.ErrorType\n | Bytes.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts a stringified address to a typed (checksummed) {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e')\n * // @log: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0xa0cf798816d4b9b9866b5330eea46a18382f251e', {\n * checksum: false\n * })\n * // @log: '0xa0cf798816d4b9b9866b5330eea46a18382f251e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('hello')\n * // @error: InvalidAddressError: Address \"0xa\" is invalid.\n * ```\n *\n * @param address - An address string to convert to a typed Address.\n * @param options - Conversion options.\n * @returns The typed Address.\n */\nexport function from(address: string, options: from.Options = {}): Address {\n const { checksum: checksumVal = false } = options\n assert(address)\n if (checksumVal) return checksum(address)\n return address as Address\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether to checksum the address.\n *\n * @default false\n */\n checksum?: boolean | undefined\n }\n\n type ErrorType =\n | assert.ErrorType\n | checksum.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an ECDSA public key to an {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address, PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from(\n * '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5',\n * )\n * const address = Address.fromPublicKey(publicKey)\n * // @log: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266'\n * ```\n *\n * @param publicKey - The ECDSA public key to convert to an {@link ox#Address.Address}.\n * @param options - Conversion options.\n * @returns The {@link ox#Address.Address} corresponding to the public key.\n */\nexport function fromPublicKey(\n publicKey: PublicKey.PublicKey,\n options: fromPublicKey.Options = {},\n): Address {\n const address = Hash.keccak256(\n `0x${PublicKey.toHex(publicKey).slice(4)}`,\n ).substring(26)\n return from(`0x${address}`, options)\n}\n\nexport declare namespace fromPublicKey {\n type Options = {\n /**\n * Whether to checksum the address.\n *\n * @default false\n */\n checksum?: boolean | undefined\n }\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | PublicKey.toHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if two {@link ox#Address.Address} are equal.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n * '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n * '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'\n * )\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.isEqual(\n * '0xa0cf798816d4b9b9866b5330eea46a18382f251e',\n * '0xA0Cf798816D4b9b9866b5330EEa46a18382f251f'\n * )\n * // @log: false\n * ```\n *\n * @param addressA - The first address to compare.\n * @param addressB - The second address to compare.\n * @returns Whether the addresses are equal.\n */\nexport function isEqual(addressA: Address, addressB: Address): boolean {\n assert(addressA, { strict: false })\n assert(addressB, { strict: false })\n return addressA.toLowerCase() === addressB.toLowerCase()\n}\n\nexport declare namespace isEqual {\n type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if the given address is a valid {@link ox#Address.Address}.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xA0Cf798816D4b9b9866b5330EEa46a18382f251e')\n * // @log: true\n * ```\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.validate('0xdeadbeef')\n * // @log: false\n * ```\n *\n * @param address - Value to check if it is a valid address.\n * @param options - Check options.\n * @returns Whether the address is a valid address.\n */\nexport function validate(\n address: string,\n options: validate.Options = {},\n): address is Address {\n const { strict = true } = options ?? {}\n try {\n assert(address, { strict })\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /**\n * Enables strict mode. Whether or not to compare the address against its checksum.\n *\n * @default true\n */\n strict?: boolean | undefined\n }\n}\n\n/**\n * Thrown when an address is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Address } from 'ox'\n *\n * Address.from('0x123')\n * // @error: Address.InvalidAddressError: Address `0x123` is invalid.\n * ```\n */\nexport class InvalidAddressError<\n cause extends InvalidInputError | InvalidChecksumError =\n | InvalidInputError\n | InvalidChecksumError,\n> extends Errors.BaseError<cause> {\n override readonly name = 'Address.InvalidAddressError'\n\n constructor({ address, cause }: { address: string; cause: cause }) {\n super(`Address \"${address}\" is invalid.`, {\n cause,\n })\n }\n}\n\n/** Thrown when an address is not a 20 byte (40 hexadecimal character) value. */\nexport class InvalidInputError extends Errors.BaseError {\n override readonly name = 'Address.InvalidInputError'\n\n constructor() {\n super('Address is not a 20 byte (40 hexadecimal character) value.')\n }\n}\n\n/** Thrown when an address does not match its checksum counterpart. */\nexport class InvalidChecksumError extends Errors.BaseError {\n override readonly name = 'Address.InvalidChecksumError'\n\n constructor() {\n super('Address does not match its checksum counterpart.')\n }\n}\n", "import type * as Address from './Address.js'\nimport { LruMap } from './internal/lru.js'\n\nconst caches = {\n checksum: /*#__PURE__*/ new LruMap<Address.Address>(8192),\n}\n\nexport const checksum = caches.checksum\n\n/**\n * Clears all global caches.\n *\n * @example\n * ```ts\n * import { Caches } from 'ox'\n * Caches.clear()\n * ```\n */\nexport function clear() {\n for (const cache of Object.values(caches)) cache.clear()\n}\n", "/**\n * @internal\n *\n * Map with a LRU (Least recently used) policy.\n * @see https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class LruMap<value = unknown> extends Map<string, value> {\n maxSize: number\n\n constructor(size: number) {\n super()\n this.maxSize = size\n }\n\n override get(key: string) {\n const value = super.get(key)\n\n if (super.has(key) && value !== undefined) {\n this.delete(key)\n super.set(key, value)\n }\n\n return value\n }\n\n override set(key: string, value: value) {\n super.set(key, value)\n if (this.maxSize && this.size > this.maxSize) {\n const firstKey = this.keys().next().value\n if (firstKey) this.delete(firstKey)\n }\n return this\n }\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Json from './Json.js'\nimport type { Compute, ExactPartial } from './internal/types.js'\n\n/** Root type for an ECDSA Public Key. */\nexport type PublicKey<\n compressed extends boolean = false,\n bigintType = bigint,\n numberType = number,\n> = Compute<\n compressed extends true\n ? {\n prefix: numberType\n x: bigintType\n y?: undefined\n }\n : {\n prefix: numberType\n x: bigintType\n y: bigintType\n }\n>\n\n/**\n * Asserts that a {@link ox#PublicKey.PublicKey} is valid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({\n * prefix: 4,\n * y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @error: PublicKey.InvalidError: Value \\`{\"y\":\"1\"}\\` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function assert(\n publicKey: ExactPartial<PublicKey>,\n options: assert.Options = {},\n): asserts publicKey is PublicKey {\n const { compressed } = options\n const { prefix, x, y } = publicKey\n\n // Uncompressed\n if (\n compressed === false ||\n (typeof x === 'bigint' && typeof y === 'bigint')\n ) {\n if (prefix !== 4)\n throw new InvalidPrefixError({\n prefix,\n cause: new InvalidUncompressedPrefixError(),\n })\n return\n }\n\n // Compressed\n if (\n compressed === true ||\n (typeof x === 'bigint' && typeof y === 'undefined')\n ) {\n if (prefix !== 3 && prefix !== 2)\n throw new InvalidPrefixError({\n prefix,\n cause: new InvalidCompressedPrefixError(),\n })\n return\n }\n\n // Unknown/invalid\n throw new InvalidError({ publicKey })\n}\n\nexport declare namespace assert {\n type Options = {\n /** Whether or not the public key should be compressed. */\n compressed?: boolean\n }\n\n type ErrorType = InvalidError | InvalidPrefixError | Errors.GlobalErrorType\n}\n\n/**\n * Compresses a {@link ox#PublicKey.PublicKey}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const compressed = PublicKey.compress(publicKey) // [!code focus]\n * // @log: {\n * // @log: prefix: 3,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The public key to compress.\n * @returns The compressed public key.\n */\nexport function compress(publicKey: PublicKey<false>): PublicKey<true> {\n const { x, y } = publicKey\n return {\n prefix: y % 2n === 0n ? 2 : 3,\n x,\n }\n}\n\nexport declare namespace compress {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#PublicKey.PublicKey} object from a {@link ox#PublicKey.PublicKey}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from('0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param value - The public key value to instantiate.\n * @returns The instantiated {@link ox#PublicKey.PublicKey}.\n */\nexport function from<\n const publicKey extends\n | CompressedPublicKey\n | UncompressedPublicKey\n | Hex.Hex\n | Bytes.Bytes,\n>(value: from.Value<publicKey>): from.ReturnType<publicKey> {\n const publicKey = (() => {\n if (Hex.validate(value)) return fromHex(value)\n if (Bytes.validate(value)) return fromBytes(value)\n\n const { prefix, x, y } = value\n if (typeof x === 'bigint' && typeof y === 'bigint')\n return { prefix: prefix ?? 0x04, x, y }\n return { prefix, x }\n })()\n\n assert(publicKey)\n\n return publicKey as never\n}\n\n/** @internal */\ntype CompressedPublicKey = PublicKey<true>\n\n/** @internal */\ntype UncompressedPublicKey = Omit<PublicKey<false>, 'prefix'> & {\n prefix?: PublicKey['prefix'] | undefined\n}\n\nexport declare namespace from {\n type Value<\n publicKey extends\n | CompressedPublicKey\n | UncompressedPublicKey\n | Hex.Hex\n | Bytes.Bytes = PublicKey,\n > = publicKey | CompressedPublicKey | UncompressedPublicKey\n\n type ReturnType<\n publicKey extends\n | CompressedPublicKey\n | UncompressedPublicKey\n | Hex.Hex\n | Bytes.Bytes = PublicKey,\n > = publicKey extends CompressedPublicKey | UncompressedPublicKey\n ? publicKey extends UncompressedPublicKey\n ? Compute<publicKey & { readonly prefix: 0x04 }>\n : publicKey\n : PublicKey\n\n type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromBytes(publicKey: Bytes.Bytes): PublicKey {\n return fromHex(Hex.fromBytes(publicKey))\n}\n\nexport declare namespace fromBytes {\n type ErrorType =\n | fromHex.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#PublicKey.PublicKey} from a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5')\n * // @log: {\n * // @log: prefix: 4,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: }\n * ```\n *\n * @example\n * ### Deserializing a Compressed Public Key\n *\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.fromHex('0x038318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed75')\n * // @log: {\n * // @log: prefix: 3,\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: }\n * ```\n *\n * @param publicKey - The serialized public key.\n * @returns The deserialized public key.\n */\nexport function fromHex(publicKey: Hex.Hex): PublicKey {\n if (\n publicKey.length !== 132 &&\n publicKey.length !== 130 &&\n publicKey.length !== 68\n )\n throw new InvalidSerializedSizeError({ publicKey })\n\n if (publicKey.length === 130) {\n const x = BigInt(Hex.slice(publicKey, 0, 32))\n const y = BigInt(Hex.slice(publicKey, 32, 64))\n return {\n prefix: 4,\n x,\n y,\n } as never\n }\n\n if (publicKey.length === 132) {\n const prefix = Number(Hex.slice(publicKey, 0, 1))\n const x = BigInt(Hex.slice(publicKey, 1, 33))\n const y = BigInt(Hex.slice(publicKey, 33, 65))\n return {\n prefix,\n x,\n y,\n } as never\n }\n\n const prefix = Number(Hex.slice(publicKey, 0, 1))\n const x = BigInt(Hex.slice(publicKey, 1, 33))\n return {\n prefix,\n x,\n } as never\n}\n\nexport declare namespace fromHex {\n type ErrorType = Hex.slice.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const bytes = PublicKey.toBytes(publicKey) // [!code focus]\n * // @log: Uint8Array [128, 3, 131, ...]\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toBytes(\n publicKey: PublicKey<boolean>,\n options: toBytes.Options = {},\n): Bytes.Bytes {\n return Bytes.fromHex(toHex(publicKey, options))\n}\n\nexport declare namespace toBytes {\n type Options = {\n /**\n * Whether to include the prefix in the serialized public key.\n * @default true\n */\n includePrefix?: boolean | undefined\n }\n\n type ErrorType =\n | Hex.fromNumber.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#PublicKey.PublicKey} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const publicKey = PublicKey.from({\n * prefix: 4,\n * x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * })\n *\n * const hex = PublicKey.toHex(publicKey) // [!code focus]\n * // @log: '0x048318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5'\n * ```\n *\n * @param publicKey - The public key to serialize.\n * @returns The serialized public key.\n */\nexport function toHex(\n publicKey: PublicKey<boolean>,\n options: toHex.Options = {},\n): Hex.Hex {\n assert(publicKey)\n\n const { prefix, x, y } = publicKey\n const { includePrefix = true } = options\n\n const publicKey_ = Hex.concat(\n includePrefix ? Hex.fromNumber(prefix, { size: 1 }) : '0x',\n Hex.fromNumber(x, { size: 32 }),\n // If the public key is not compressed, add the y coordinate.\n typeof y === 'bigint' ? Hex.fromNumber(y, { size: 32 }) : '0x',\n )\n\n return publicKey_\n}\n\nexport declare namespace toHex {\n type Options = {\n /**\n * Whether to include the prefix in the serialized public key.\n * @default true\n */\n includePrefix?: boolean | undefined\n }\n\n type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#PublicKey.PublicKey}. Returns `true` if valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * const valid = PublicKey.validate({\n * prefix: 4,\n * y: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * })\n * // @log: false\n * ```\n *\n * @param publicKey - The public key object to assert.\n */\nexport function validate(\n publicKey: ExactPartial<PublicKey>,\n options: validate.Options = {},\n): boolean {\n try {\n assert(publicKey, options)\n return true\n } catch (error) {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /** Whether or not the public key should be compressed. */\n compressed?: boolean\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Thrown when a public key is invalid.\n *\n * @example\n * ```ts twoslash\n * import { PublicKey } from 'ox'\n *\n * PublicKey.assert({ y: 1n })\n * // @error: PublicKey.InvalidError: Value `{\"y\":1n}` is not a valid public key.\n * // @error: Public key must contain:\n * // @error: - an `x` and `prefix` value (compressed)\n * // @error: - an `x`, `y`, and `prefix` value (uncompressed)\n * ```\n */\nexport class InvalidError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidError'\n\n constructor({ publicKey }: { publicKey: unknown }) {\n super(`Value \\`${Json.stringify(publicKey)}\\` is not a valid public key.`, {\n metaMessages: [\n 'Public key must contain:',\n '- an `x` and `prefix` value (compressed)',\n '- an `x`, `y`, and `prefix` value (uncompressed)',\n ],\n })\n }\n}\n\n/** Thrown when a public key has an invalid prefix. */\nexport class InvalidPrefixError<\n cause extends InvalidCompressedPrefixError | InvalidUncompressedPrefixError =\n | InvalidCompressedPrefixError\n | InvalidUncompressedPrefixError,\n> extends Errors.BaseError<cause> {\n override readonly name = 'PublicKey.InvalidPrefixError'\n\n constructor({ prefix, cause }: { prefix: number | undefined; cause: cause }) {\n super(`Prefix \"${prefix}\" is invalid.`, {\n cause,\n })\n }\n}\n\n/** Thrown when the public key has an invalid prefix for a compressed public key. */\nexport class InvalidCompressedPrefixError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidCompressedPrefixError'\n\n constructor() {\n super('Prefix must be 2 or 3 for compressed public keys.')\n }\n}\n\n/** Thrown when the public key has an invalid prefix for an uncompressed public key. */\nexport class InvalidUncompressedPrefixError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidUncompressedPrefixError'\n\n constructor() {\n super('Prefix must be 4 for uncompressed public keys.')\n }\n}\n\n/** Thrown when the public key has an invalid serialized size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n override readonly name = 'PublicKey.InvalidSerializedSizeError'\n\n constructor({ publicKey }: { publicKey: Hex.Hex | Bytes.Bytes }) {\n super(`Value \\`${publicKey}\\` is an invalid public key size.`, {\n metaMessages: [\n 'Expected: 33 bytes (compressed + prefix), 64 bytes (uncompressed) or 65 bytes (uncompressed + prefix).',\n `Received ${Hex.size(Hex.from(publicKey))} bytes.`,\n ],\n })\n }\n}\n", "import type * as abitype from 'abitype'\nimport type * as Abi from '../Abi.js'\nimport type * as AbiItem from '../AbiItem.js'\nimport type * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Errors from '../Errors.js'\nimport type {\n Compute,\n IsNever,\n IsUnion,\n TypeErrorMessage,\n UnionToTuple,\n} from './types.js'\n\n/** @internal */\nexport type ExtractArgs<\n abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n name extends AbiItem.Name<abi> = AbiItem.Name<abi>,\n> = abitype.AbiParametersToPrimitiveTypes<\n AbiItem.FromAbi<abi extends Abi.Abi ? abi : Abi.Abi, name>['inputs'],\n 'inputs'\n> extends infer args\n ? [args] extends [never]\n ? readonly unknown[]\n : args\n : readonly unknown[]\n\n/** @internal */\nexport type ExtractForArgs<\n abi extends Abi.Abi,\n name extends AbiItem.Name<abi>,\n args extends ExtractArgs<abi, name>,\n> = IsUnion<name> extends true\n ? {\n [key in keyof abi]: abi[key] extends { name: name } ? abi[key] : never\n }[number]\n : AbiItem.FromAbi<abi, name> extends infer abiItem extends AbiItem.AbiItem & {\n inputs: readonly abitype.AbiParameter[]\n }\n ? IsUnion<abiItem> extends true // narrow overloads using `args` by converting to tuple and filtering out overloads that don't match\n ? UnionToTuple<abiItem> extends infer abiItems extends\n readonly (AbiItem.AbiItem & {\n inputs: readonly abitype.AbiParameter[]\n })[]\n ? IsNever<TupleToUnion<abiItems, abi, name, args>> extends true\n ? Compute<\n abiItems[0] & {\n readonly overloads: UnionToTuple<\n Exclude<abiItems[number], abiItems[0]>\n >\n }\n >\n : TupleToUnion<abiItems, abi, name, args> // convert back to union (removes `never` tuple entries: `['foo', never, 'bar'][number]` => `'foo' | 'bar'`)\n : never\n : abiItem\n : never\n\n/** @internal */\nexport type TupleToUnion<\n abiItems extends readonly {\n inputs: readonly abitype.AbiParameter[]\n }[],\n abi extends Abi.Abi,\n name extends AbiItem.Name<abi>,\n args extends ExtractArgs<abi, name>,\n> = {\n [k in keyof abiItems]: (\n readonly [] extends args\n ? readonly [] // fallback to `readonly []` if `args` has no value (e.g. `args` property not provided)\n : args\n ) extends abitype.AbiParametersToPrimitiveTypes<\n abiItems[k]['inputs'],\n 'inputs'\n >\n ? abiItems[k]\n : never\n}[number]\n\n/** @internal */\nexport type ErrorSignature<\n name extends string = string,\n parameters extends string = string,\n> = `error ${name}(${parameters})`\n\n/** @internal */\nexport type IsErrorSignature<signature extends string> =\n signature extends ErrorSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type EventSignature<\n name extends string = string,\n parameters extends string = string,\n> = `event ${name}(${parameters})`\n\n/** @internal */\nexport type IsEventSignature<signature extends string> =\n signature extends EventSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type FunctionSignature<\n name extends string = string,\n tail extends string = string,\n> = `function ${name}(${tail}`\nexport type IsFunctionSignature<signature> =\n signature extends FunctionSignature<infer name>\n ? IsName<name> extends true\n ? signature extends ValidFunctionSignatures\n ? true\n : // Check that `Parameters` is not absorbing other types (e.g. `returns`)\n signature extends `function ${string}(${infer parameters})`\n ? parameters extends InvalidFunctionParameters\n ? false\n : true\n : false\n : false\n : false\n/** @internal */\nexport type Scope = 'public' | 'external' // `internal` or `private` functions wouldn't make it to ABI so can ignore\n\n/** @internal */\nexport type Returns = `returns (${string})` | `returns(${string})`\n\n// Almost all valid function signatures, except `function ${string}(${infer parameters})` since `parameters` can absorb returns\n/** @internal */\nexport type ValidFunctionSignatures =\n | `function ${string}()`\n // basic\n | `function ${string}() ${Returns}`\n | `function ${string}() ${abitype.AbiStateMutability}`\n | `function ${string}() ${Scope}`\n // combinations\n | `function ${string}() ${abitype.AbiStateMutability} ${Returns}`\n | `function ${string}() ${Scope} ${Returns}`\n | `function ${string}() ${Scope} ${abitype.AbiStateMutability}`\n | `function ${string}() ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n // Parameters\n | `function ${string}(${string}) ${Returns}`\n | `function ${string}(${string}) ${abitype.AbiStateMutability}`\n | `function ${string}(${string}) ${Scope}`\n | `function ${string}(${string}) ${abitype.AbiStateMutability} ${Returns}`\n | `function ${string}(${string}) ${Scope} ${Returns}`\n | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability}`\n | `function ${string}(${string}) ${Scope} ${abitype.AbiStateMutability} ${Returns}`\n\n/** @internal */\nexport type StructSignature<\n name extends string = string,\n properties extends string = string,\n> = `struct ${name} {${properties}}`\n\n/** @internal */\nexport type IsStructSignature<signature extends string> =\n signature extends StructSignature<infer name> ? IsName<name> : false\n\n/** @internal */\nexport type ConstructorSignature<tail extends string = string> =\n `constructor(${tail}`\n\n/** @internal */\nexport type IsConstructorSignature<signature> =\n signature extends ConstructorSignature\n ? signature extends ValidConstructorSignatures\n ? true\n : false\n : false\n\n/** @internal */\nexport type ValidConstructorSignatures =\n | `constructor(${string})`\n | `constructor(${string}) payable`\n\n/** @internal */\nexport type FallbackSignature<abiStateMutability extends '' | ' payable' = ''> =\n `fallback() external${abiStateMutability}`\n\n/** @internal */\nexport type ReceiveSignature = 'receive() external payable'\n\n// TODO: Maybe use this for signature validation one day\n// https://twitter.com/devanshj__/status/1610423724708343808\n/** @internal */\nexport type IsSignature<type extends string> =\n | (IsErrorSignature<type> extends true ? true : never)\n | (IsEventSignature<type> extends true ? true : never)\n | (IsFunctionSignature<type> extends true ? true : never)\n | (IsStructSignature<type> extends true ? true : never)\n | (IsConstructorSignature<type> extends true ? true : never)\n | (type extends FallbackSignature ? true : never)\n | (type extends ReceiveSignature ? true : never) extends infer condition\n ? [condition] extends [never]\n ? false\n : true\n : false\n\n/** @internal */\nexport type Signature<\n string1 extends string,\n string2 extends string | unknown = unknown,\n> = IsSignature<string1> extends true\n ? string1\n : string extends string1 // if exactly `string` (not narrowed), then pass through as valid\n ? string1\n : TypeErrorMessage<`Signature \"${string1}\" is invalid${string2 extends string\n ? ` at position ${string2}`\n : ''}.`>\n\n/** @internal */\nexport type Signatures<signatures extends readonly string[]> = {\n [key in keyof signatures]: Signature<signatures[key], key>\n}\n\n/** @internal */\nexport type IsName<name extends string> = name extends ''\n ? false\n : ValidateName<name> extends name\n ? true\n : false\n\n/** @internal */\nexport type ValidateName<\n name extends string,\n checkCharacters extends boolean = false,\n> = name extends `${string}${' '}${string}`\n ? TypeErrorMessage<`Identifier \"${name}\" cannot contain whitespace.`>\n : IsSolidityKeyword<name> extends true\n ? TypeErrorMessage<`\"${name}\" is a protected Solidity keyword.`>\n : name extends `${number}`\n ? TypeErrorMessage<`Identifier \"${name}\" cannot be a number string.`>\n : name extends `${number}${string}`\n ? TypeErrorMessage<`Identifier \"${name}\" cannot start with a number.`>\n : checkCharacters extends true\n ? IsValidCharacter<name> extends true\n ? name\n : TypeErrorMessage<`\"${name}\" contains invalid character.`>\n : name\n\n/** @internal */\nexport type IsSolidityKeyword<type extends string> =\n type extends SolidityKeywords ? true : false\n\n/** @internal */\nexport type SolidityKeywords =\n | 'after'\n | 'alias'\n | 'anonymous'\n | 'apply'\n | 'auto'\n | 'byte'\n | 'calldata'\n | 'case'\n | 'catch'\n | 'constant'\n | 'copyof'\n | 'default'\n | 'defined'\n | 'error'\n | 'event'\n | 'external'\n | 'false'\n | 'final'\n | 'function'\n | 'immutable'\n | 'implements'\n | 'in'\n | 'indexed'\n | 'inline'\n | 'internal'\n | 'let'\n | 'mapping'\n | 'match'\n | 'memory'\n | 'mutable'\n | 'null'\n | 'of'\n | 'override'\n | 'partial'\n | 'private'\n | 'promise'\n | 'public'\n | 'pure'\n | 'reference'\n | 'relocatable'\n | 'return'\n | 'returns'\n | 'sizeof'\n | 'static'\n | 'storage'\n | 'struct'\n | 'super'\n | 'supports'\n | 'switch'\n | 'this'\n | 'true'\n | 'try'\n | 'typedef'\n | 'typeof'\n | 'var'\n | 'view'\n | 'virtual'\n | `address${`[${string}]` | ''}`\n | `bool${`[${string}]` | ''}`\n | `string${`[${string}]` | ''}`\n | `tuple${`[${string}]` | ''}`\n | `bytes${number | ''}${`[${string}]` | ''}`\n | `${'u' | ''}int${number | ''}${`[${string}]` | ''}`\n\n/** @internal */\nexport type IsValidCharacter<character extends string> =\n character extends `${ValidCharacters}${infer tail}`\n ? tail extends ''\n ? true\n : IsValidCharacter<tail>\n : false\n\n// biome-ignore format: no formatting\n/** @internal */\nexport type ValidCharacters =\n // uppercase letters\n | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z'\n // lowercase letters\n | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'\n // numbers\n | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'\n // special characters\n | '_' | '$'\n\n// Template string inference can absorb `returns`:\n// type Result = `function foo(string) return s (uint256)` extends `function ${string}(${infer Parameters})` ? Parameters : never\n// // ^? type Result = \"string ) return s (uint256\"\n// So we need to validate against `returns` keyword with all combinations of whitespace\n/** @internal */\nexport type InvalidFunctionParameters =\n | `${string}${MangledReturns} (${string}`\n | `${string}) ${MangledReturns}${string}`\n | `${string})${string}${MangledReturns}${string}(${string}`\n\n// r_e_t_u_r_n_s\n/** @internal */\nexport type MangledReturns =\n // Single\n | `r${string}eturns`\n | `re${string}turns`\n | `ret${string}urns`\n | `retu${string}rns`\n | `retur${string}ns`\n | `return${string}s`\n // Double\n // `r_e*`\n | `r${string}e${string}turns`\n | `r${string}et${string}urns`\n | `r${string}etu${string}rns`\n | `r${string}etur${string}ns`\n | `r${string}eturn${string}s`\n // `re_t*`\n | `re${string}t${string}urns`\n | `re${string}tu${string}rns`\n | `re${string}tur${string}ns`\n | `re${string}turn${string}s`\n // `ret_u*`\n | `ret${string}u${string}rns`\n | `ret${string}ur${string}ns`\n | `ret${string}urn${string}s`\n // `retu_r*`\n | `retu${string}r${string}ns`\n | `retu${string}rn${string}s`\n // `retur_n*`\n | `retur${string}n${string}s`\n // Triple\n // `r_e_t*`\n | `r${string}e${string}t${string}urns`\n | `r${string}e${string}tu${string}rns`\n | `r${string}e${string}tur${string}ns`\n | `r${string}e${string}turn${string}s`\n // `re_t_u*`\n | `re${string}t${string}u${string}rns`\n | `re${string}t${string}ur${string}ns`\n | `re${string}t${string}urn${string}s`\n // `ret_u_r*`\n | `ret${string}u${string}r${string}ns`\n | `ret${string}u${string}rn${string}s`\n // `retu_r_n*`\n | `retu${string}r${string}n${string}s`\n // Quadruple\n // `r_e_t_u*`\n | `r${string}e${string}t${string}u${string}rns`\n | `r${string}e${string}t${string}ur${string}ns`\n | `r${string}e${string}t${string}urn${string}s`\n // `re_t_u_r*`\n | `re${string}t${string}u${string}r${string}ns`\n | `re${string}t${string}u${string}rn${string}s`\n // `ret_u_r_n*`\n | `ret${string}u${string}r${string}n${string}s`\n // Quintuple\n // `r_e_t_u_r*`\n | `r${string}e${string}t${string}u${string}r${string}ns`\n | `r${string}e${string}t${string}u${string}rn${string}s`\n // `re_t_u_r_n*`\n | `re${string}t${string}u${string}r${string}n${string}s`\n // Sextuple\n // `r_e_t_u_r_n_s`\n | `r${string}e${string}t${string}u${string}r${string}n${string}s`\n\n/** @internal */\nexport type Widen<type> =\n | ([unknown] extends [type] ? unknown : never)\n | (type extends Function ? type : never)\n | (type extends abitype.ResolvedRegister['bigIntType'] ? bigint : never)\n | (type extends boolean ? boolean : never)\n | (type extends abitype.ResolvedRegister['intType'] ? number : never)\n | (type extends string\n ? type extends abitype.ResolvedRegister['addressType']\n ? abitype.ResolvedRegister['addressType']\n : type extends abitype.ResolvedRegister['bytesType']['inputs']\n ? abitype.ResolvedRegister['bytesType']\n : string\n : never)\n | (type extends readonly [] ? readonly [] : never)\n | (type extends Record<string, unknown>\n ? { [K in keyof type]: Widen<type[K]> }\n : never)\n | (type extends { length: number }\n ? {\n [K in keyof type]: Widen<type[K]>\n } extends infer Val extends readonly unknown[]\n ? readonly [...Val]\n : never\n : never)\n\n/** @internal */\nexport function normalizeSignature(signature: string): string {\n let active = true\n let current = ''\n let level = 0\n let result = ''\n let valid = false\n\n for (let i = 0; i < signature.length; i++) {\n const char = signature[i]!\n\n // If the character is a separator, we want to reactivate.\n if (['(', ')', ','].includes(char)) active = true\n\n // If the character is a \"level\" token, we want to increment/decrement.\n if (char === '(') level++\n if (char === ')') level--\n\n // If we aren't active, we don't want to mutate the result.\n if (!active) continue\n\n // If level === 0, we are at the definition level.\n if (level === 0) {\n if (char === ' ' && ['event', 'function', 'error', ''].includes(result))\n result = ''\n else {\n result += char\n\n // If we are at the end of the definition, we must be finished.\n if (char === ')') {\n valid = true\n break\n }\n }\n\n continue\n }\n\n // Ignore spaces\n if (char === ' ') {\n // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n current = ''\n active = false\n }\n continue\n }\n\n result += char\n current += char\n }\n\n if (!valid) throw new Errors.BaseError('Unable to normalize signature.')\n\n return result\n}\n\n/** @internal */\nexport declare namespace normalizeSignature {\n export type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function isArgOfType(\n arg: unknown,\n abiParameter: AbiParameters.Parameter,\n): boolean {\n const argType = typeof arg\n const abiParameterType = abiParameter.type\n switch (abiParameterType) {\n case 'address':\n return Address.validate(arg as Address.Address, { strict: false })\n case 'bool':\n return argType === 'boolean'\n case 'function':\n return argType === 'string'\n case 'string':\n return argType === 'string'\n default: {\n if (abiParameterType === 'tuple' && 'components' in abiParameter)\n return Object.values(abiParameter.components).every(\n (component, index) => {\n return isArgOfType(\n Object.values(arg as unknown[] | Record<string, unknown>)[index],\n component as AbiParameters.Parameter,\n )\n },\n )\n\n // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n // https://regexr.com/6v8hp\n if (\n /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(\n abiParameterType,\n )\n )\n return argType === 'number' || argType === 'bigint'\n\n // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n // https://regexr.com/6va55\n if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n return argType === 'string' || arg instanceof Uint8Array\n\n // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n // https://regexr.com/6va6i\n if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n return (\n Array.isArray(arg) &&\n arg.every((x: unknown) =>\n isArgOfType(x, {\n ...abiParameter,\n // Pop off `[]` or `[M]` from end of type\n type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n } as AbiParameters.Parameter),\n )\n )\n }\n\n return false\n }\n }\n}\n\n/** @internal */\nexport function getAmbiguousTypes(\n sourceParameters: readonly AbiParameters.Parameter[],\n targetParameters: readonly AbiParameters.Parameter[],\n args: ExtractArgs,\n): AbiParameters.Parameter['type'][] | undefined {\n for (const parameterIndex in sourceParameters) {\n const sourceParameter = sourceParameters[parameterIndex]!\n const targetParameter = targetParameters[parameterIndex]!\n\n if (\n sourceParameter.type === 'tuple' &&\n targetParameter.type === 'tuple' &&\n 'components' in sourceParameter &&\n 'components' in targetParameter\n )\n return getAmbiguousTypes(\n sourceParameter.components,\n targetParameter.components,\n (args as any)[parameterIndex],\n )\n\n const types = [sourceParameter.type, targetParameter.type]\n\n const ambiguous = (() => {\n if (types.includes('address') && types.includes('bytes20')) return true\n if (types.includes('address') && types.includes('string'))\n return Address.validate(args[parameterIndex] as Address.Address, {\n strict: false,\n })\n if (types.includes('address') && types.includes('bytes'))\n return Address.validate(args[parameterIndex] as Address.Address, {\n strict: false,\n })\n return false\n })()\n\n if (ambiguous) return types\n }\n\n return\n}\n", "import * as abitype from 'abitype'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Solidity from './Solidity.js'\nimport * as internal from './internal/abiParameters.js'\nimport * as Cursor from './internal/cursor.js'\n\n/** Root type for ABI parameters. */\nexport type AbiParameters = readonly abitype.AbiParameter[]\n\n/** A parameter on an {@link ox#AbiParameters.AbiParameters}. */\nexport type Parameter = abitype.AbiParameter\n\n/** A packed ABI type. */\nexport type PackedAbiType =\n | abitype.SolidityAddress\n | abitype.SolidityBool\n | abitype.SolidityBytes\n | abitype.SolidityInt\n | abitype.SolidityString\n | abitype.SolidityArrayWithoutTuple\n\n/**\n * Decodes ABI-encoded data into its respective primitive values based on ABI Parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n * AbiParameters.from(['string', 'uint', 'bool']),\n * '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * You can pass **JSON ABI** Parameters:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.decode(\n * [\n * { name: 'x', type: 'string' },\n * { name: 'y', type: 'uint' },\n * { name: 'z', type: 'bool' },\n * ],\n * '0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001a4000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000057761676d69000000000000000000000000000000000000000000000000000000',\n * )\n * // @log: ['wagmi', 420n, true]\n * ```\n *\n * @param parameters - The set of ABI parameters to decode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param data - ABI encoded data.\n * @param options - Decoding options.\n * @returns Array of decoded values.\n */\nexport function decode<\n const parameters extends AbiParameters,\n as extends 'Object' | 'Array' = 'Array',\n>(\n parameters: parameters,\n data: Bytes.Bytes | Hex.Hex,\n options?: decode.Options<as>,\n): decode.ReturnType<parameters, as>\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function decode(\n parameters: AbiParameters,\n data: Bytes.Bytes | Hex.Hex,\n options: {\n as?: 'Array' | 'Object' | undefined\n checksumAddress?: boolean | undefined\n } = {},\n): readonly unknown[] | Record<string, unknown> {\n const { as = 'Array', checksumAddress = false } = options\n\n const bytes = typeof data === 'string' ? Bytes.fromHex(data) : data\n const cursor = Cursor.create(bytes)\n\n if (Bytes.size(bytes) === 0 && parameters.length > 0)\n throw new ZeroDataError()\n if (Bytes.size(bytes) && Bytes.size(bytes) < 32)\n throw new DataSizeTooSmallError({\n data: typeof data === 'string' ? data : Hex.fromBytes(data),\n parameters: parameters as readonly Parameter[],\n size: Bytes.size(bytes),\n })\n\n let consumed = 0\n const values: any = as === 'Array' ? [] : {}\n for (let i = 0; i < parameters.length; ++i) {\n const param = parameters[i] as Parameter\n cursor.setPosition(consumed)\n const [data, consumed_] = internal.decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: 0,\n })\n consumed += consumed_\n if (as === 'Array') values.push(data)\n else values[param.name ?? i] = data\n }\n return values\n}\n\nexport declare namespace decode {\n type Options<as extends 'Object' | 'Array'> = {\n /**\n * Whether the decoded values should be returned as an `Object` or `Array`.\n *\n * @default \"Array\"\n */\n as?: as | 'Object' | 'Array' | undefined\n /**\n * Whether decoded addresses should be checksummed.\n *\n * @default false\n */\n checksumAddress?: boolean | undefined\n }\n\n type ReturnType<\n parameters extends AbiParameters = AbiParameters,\n as extends 'Object' | 'Array' = 'Array',\n > = parameters extends readonly []\n ? as extends 'Object'\n ? {}\n : []\n : as extends 'Object'\n ? internal.ToObject<parameters>\n : internal.ToPrimitiveTypes<parameters>\n\n type ErrorType =\n | Bytes.fromHex.ErrorType\n | internal.decodeParameter.ErrorType\n | ZeroDataError\n | DataSizeTooSmallError\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes primitive values into ABI encoded data as per the [Application Binary Interface (ABI) Specification](https://docs.soliditylang.org/en/latest/abi-spec).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n * AbiParameters.from(['string', 'uint', 'bool']),\n * ['wagmi', 420n, true],\n * )\n * ```\n *\n * @example\n * ### JSON Parameters\n *\n * Specify **JSON ABI** Parameters as schema:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const data = AbiParameters.encode(\n * [\n * { type: 'string', name: 'name' },\n * { type: 'uint', name: 'age' },\n * { type: 'bool', name: 'isOwner' },\n * ],\n * ['wagmi', 420n, true],\n * )\n * ```\n *\n * @param parameters - The set of ABI parameters to encode, in the shape of the `inputs` or `outputs` attribute of an ABI Item. These parameters must include valid [ABI types](https://docs.soliditylang.org/en/latest/types.html).\n * @param values - The set of primitive values that correspond to the ABI types defined in `parameters`.\n * @returns ABI encoded data.\n */\nexport function encode<\n const parameters extends AbiParameters | readonly unknown[],\n>(\n parameters: parameters,\n values: parameters extends AbiParameters\n ? internal.ToPrimitiveTypes<parameters>\n : never,\n options?: encode.Options,\n): Hex.Hex {\n const { checksumAddress = false } = options ?? {}\n\n if (parameters.length !== values.length)\n throw new LengthMismatchError({\n expectedLength: parameters.length as number,\n givenLength: values.length as any,\n })\n // Prepare the parameters to determine dynamic types to encode.\n const preparedParameters = internal.prepareParameters({\n checksumAddress,\n parameters: parameters as readonly Parameter[],\n values: values as any,\n })\n const data = internal.encode(preparedParameters)\n if (data.length === 0) return '0x'\n return data\n}\n\nexport declare namespace encode {\n type ErrorType =\n | LengthMismatchError\n | internal.encode.ErrorType\n | internal.prepareParameters.ErrorType\n | Errors.GlobalErrorType\n\n type Options = {\n /**\n * Whether addresses should be checked against their checksum.\n *\n * @default false\n */\n checksumAddress?: boolean | undefined\n }\n}\n\n/**\n * Encodes an array of primitive values to a [packed ABI encoding](https://docs.soliditylang.org/en/latest/abi-spec.html#non-standard-packed-mode).\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const encoded = AbiParameters.encodePacked(\n * ['address', 'string'],\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 'hello world'],\n * )\n * // @log: '0xd8da6bf26964af9d7eed9e03e53415d37aa9604568656c6c6f20776f726c64'\n * ```\n *\n * @param types - Set of ABI types to pack encode.\n * @param values - The set of primitive values that correspond to the ABI types defined in `types`.\n * @returns The encoded packed data.\n */\nexport function encodePacked<\n const packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n>(types: packedAbiTypes, values: encodePacked.Values<packedAbiTypes>): Hex.Hex {\n if (types.length !== values.length)\n throw new LengthMismatchError({\n expectedLength: types.length as number,\n givenLength: values.length as number,\n })\n\n const data: Hex.Hex[] = []\n for (let i = 0; i < (types as unknown[]).length; i++) {\n const type = types[i]\n const value = values[i]\n data.push(encodePacked.encode(type, value))\n }\n return Hex.concat(...data)\n}\n\nexport namespace encodePacked {\n export type ErrorType =\n | Hex.concat.ErrorType\n | LengthMismatchError\n | Errors.GlobalErrorType\n\n export type Values<\n packedAbiTypes extends readonly PackedAbiType[] | readonly unknown[],\n > = {\n [key in keyof packedAbiTypes]: packedAbiTypes[key] extends abitype.AbiType\n ? abitype.AbiParameterToPrimitiveType<{ type: packedAbiTypes[key] }>\n : unknown\n }\n\n // eslint-disable-next-line jsdoc/require-jsdoc\n export function encode<const packedAbiType extends PackedAbiType | unknown>(\n type: packedAbiType,\n value: Values<[packedAbiType]>[0],\n isArray = false,\n ): Hex.Hex {\n if (type === 'address') {\n const address = value as Address.Address\n Address.assert(address)\n return Hex.padLeft(\n address.toLowerCase() as Hex.Hex,\n isArray ? 32 : 0,\n ) as Address.Address\n }\n if (type === 'string') return Hex.fromString(value as string)\n if (type === 'bytes') return value as Hex.Hex\n if (type === 'bool')\n return Hex.padLeft(Hex.fromBoolean(value as boolean), isArray ? 32 : 1)\n\n const intMatch = (type as string).match(Solidity.integerRegex)\n if (intMatch) {\n const [_type, baseType, bits = '256'] = intMatch\n const size = Number.parseInt(bits) / 8\n return Hex.fromNumber(value as number, {\n size: isArray ? 32 : size,\n signed: baseType === 'int',\n })\n }\n\n const bytesMatch = (type as string).match(Solidity.bytesRegex)\n if (bytesMatch) {\n const [_type, size] = bytesMatch\n if (Number.parseInt(size!) !== ((value as Hex.Hex).length - 2) / 2)\n throw new BytesSizeMismatchError({\n expectedSize: Number.parseInt(size!),\n value: value as Hex.Hex,\n })\n return Hex.padRight(value as Hex.Hex, isArray ? 32 : 0) as Hex.Hex\n }\n\n const arrayMatch = (type as string).match(Solidity.arrayRegex)\n if (arrayMatch && Array.isArray(value)) {\n const [_type, childType] = arrayMatch\n const data: Hex.Hex[] = []\n for (let i = 0; i < value.length; i++) {\n data.push(encode(childType, value[i], true))\n }\n if (data.length === 0) return '0x'\n return Hex.concat(...data)\n }\n\n throw new InvalidTypeError(type as string)\n }\n}\n\n/**\n * Formats {@link ox#AbiParameters.AbiParameters} into **Human Readable ABI Parameters**.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const formatted = AbiParameters.format([\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ])\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param parameters - The ABI Parameters to format.\n * @returns The formatted ABI Parameters .\n */\nexport function format<\n const parameters extends readonly [\n Parameter | abitype.AbiEventParameter,\n ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n ],\n>(\n parameters:\n | parameters\n | readonly [\n Parameter | abitype.AbiEventParameter,\n ...(readonly (Parameter | abitype.AbiEventParameter)[]),\n ],\n): abitype.FormatAbiParameters<parameters> {\n return abitype.formatAbiParameters(parameters)\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses arbitrary **JSON ABI Parameters** or **Human Readable ABI Parameters** into typed {@link ox#AbiParameters.AbiParameters}.\n *\n * @example\n * ### JSON Parameters\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable Parameters\n *\n * Human Readable ABI Parameters can be parsed into a typed {@link ox#AbiParameters.AbiParameters}:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from('address spender, uint256 amount')\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * const parameters = AbiParameters.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'Foo foo, address bar',\n * ])\n *\n * parameters\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param parameters - The ABI Parameters to parse.\n * @returns The typed ABI Parameters.\n */\nexport function from<\n const parameters extends AbiParameters | string | readonly string[],\n>(\n parameters: parameters | AbiParameters | string | readonly string[],\n): from.ReturnType<parameters> {\n if (Array.isArray(parameters) && typeof parameters[0] === 'string')\n return abitype.parseAbiParameters(parameters) as never\n if (typeof parameters === 'string')\n return abitype.parseAbiParameters(parameters) as never\n return parameters as never\n}\n\nexport declare namespace from {\n type ReturnType<\n parameters extends AbiParameters | string | readonly string[],\n > = parameters extends string\n ? abitype.ParseAbiParameters<parameters>\n : parameters extends readonly string[]\n ? abitype.ParseAbiParameters<parameters>\n : parameters\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Throws when the data size is too small for the given parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x010f')\n * // ↑ ❌ 2 bytes\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data: 0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass a valid data size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // ↑ ✅ 32 bytes\n * ```\n */\nexport class DataSizeTooSmallError extends Errors.BaseError {\n override readonly name = 'AbiParameters.DataSizeTooSmallError'\n constructor({\n data,\n parameters,\n size,\n }: { data: Hex.Hex; parameters: readonly Parameter[]; size: number }) {\n super(`Data size of ${size} bytes is too small for given parameters.`, {\n metaMessages: [\n `Params: (${abitype.formatAbiParameters(parameters as readonly [Parameter])})`,\n `Data: ${data} (${size} bytes)`,\n ],\n })\n }\n}\n\n/**\n * Throws when zero data is provided, but data is expected.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x')\n * // ↑ ❌ zero data\n * // @error: AbiParameters.DataSizeTooSmallError: Data size of 2 bytes is too small for given parameters.\n * // @error: Params: (uint256)\n * // @error: Data: 0x010f (2 bytes)\n * ```\n *\n * ### Solution\n *\n * Pass valid data.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'uint256' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // ↑ ✅ 32 bytes\n * ```\n */\nexport class ZeroDataError extends Errors.BaseError {\n override readonly name = 'AbiParameters.ZeroDataError'\n constructor() {\n super('Cannot decode zero data (\"0x\") with ABI parameters.')\n }\n}\n\n/**\n * The length of the array value does not match the length specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('uint256[3]'), [[69n, 420n]])\n * // ↑ expected: 3 ↑ ❌ length: 2\n * // @error: AbiParameters.ArrayLengthMismatchError: ABI encoding array length mismatch\n * // @error: for type `uint256[3]`. Expected: `3`. Given: `2`.\n * ```\n *\n * ### Solution\n *\n * Pass an array of the correct length.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [[69n, 420n, 69n]])\n * // ↑ ✅ length: 3\n * ```\n */\nexport class ArrayLengthMismatchError extends Errors.BaseError {\n override readonly name = 'AbiParameters.ArrayLengthMismatchError'\n constructor({\n expectedLength,\n givenLength,\n type,\n }: { expectedLength: number; givenLength: number; type: string }) {\n super(\n `Array length mismatch for type \\`${type}\\`. Expected: \\`${expectedLength}\\`. Given: \\`${givenLength}\\`.`,\n )\n }\n}\n\n/**\n * The size of the bytes value does not match the size specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from('bytes8'), [['0xdeadbeefdeadbeefdeadbeef']])\n * // ↑ expected: 8 bytes ↑ ❌ size: 12 bytes\n * // @error: BytesSizeMismatchError: Size of bytes \"0xdeadbeefdeadbeefdeadbeef\"\n * // @error: (bytes12) does not match expected size (bytes8).\n * ```\n *\n * ### Solution\n *\n * Pass a bytes value of the correct size.\n *\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['bytes8']), ['0xdeadbeefdeadbeef'])\n * // ↑ ✅ size: 8 bytes\n * ```\n */\nexport class BytesSizeMismatchError extends Errors.BaseError {\n override readonly name = 'AbiParameters.BytesSizeMismatchError'\n constructor({\n expectedSize,\n value,\n }: { expectedSize: number; value: Hex.Hex }) {\n super(\n `Size of bytes \"${value}\" (bytes${Hex.size(\n value,\n )}) does not match expected size (bytes${expectedSize}).`,\n )\n }\n}\n\n/**\n * The length of the values to encode does not match the length of the ABI parameters.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['string', 'uint256']), ['hello'])\n * // @error: LengthMismatchError: ABI encoding params/values length mismatch.\n * // @error: Expected length (params): 2\n * // @error: Given length (values): 1\n * ```\n *\n * ### Solution\n *\n * Pass the correct number of values to encode.\n *\n * ### Solution\n *\n * Pass a [valid ABI type](https://docs.soliditylang.org/en/develop/abi-spec.html#types).\n */\nexport class LengthMismatchError extends Errors.BaseError {\n override readonly name = 'AbiParameters.LengthMismatchError'\n constructor({\n expectedLength,\n givenLength,\n }: { expectedLength: number; givenLength: number }) {\n super(\n [\n 'ABI encoding parameters/values length mismatch.',\n `Expected length (parameters): ${expectedLength}`,\n `Given length (values): ${givenLength}`,\n ].join('\\n'),\n )\n }\n}\n\n/**\n * The value provided is not a valid array as specified in the corresponding ABI parameter.\n *\n * ### Example\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiParameters } from 'ox'\n * // ---cut---\n * AbiParameters.encode(AbiParameters.from(['uint256[3]']), [69])\n * ```\n *\n * ### Solution\n *\n * Pass an array value.\n */\nexport class InvalidArrayError extends Errors.BaseError {\n override readonly name = 'AbiParameters.InvalidArrayError'\n constructor(value: unknown) {\n super(`Value \\`${value}\\` is not a valid array.`)\n }\n}\n\n/**\n * Throws when the ABI parameter type is invalid.\n *\n * @example\n * ```ts twoslash\n * import { AbiParameters } from 'ox'\n *\n * AbiParameters.decode([{ type: 'lol' }], '0x00000000000000000000000000000000000000000000000000000000000010f')\n * // ↑ ❌ invalid type\n * // @error: AbiParameters.InvalidTypeError: Type `lol` is not a valid ABI Type.\n * ```\n */\nexport class InvalidTypeError extends Errors.BaseError {\n override readonly name = 'AbiParameters.InvalidTypeError'\n constructor(type: string) {\n super(`Type \\`${type}\\` is not a valid ABI Type.`)\n }\n}\n", "export const arrayRegex = /^(.*)\\[([0-9]*)\\]$/\n\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nexport const bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nexport const integerRegex =\n /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/\n\nexport const maxInt8 = 2n ** (8n - 1n) - 1n\nexport const maxInt16 = 2n ** (16n - 1n) - 1n\nexport const maxInt24 = 2n ** (24n - 1n) - 1n\nexport const maxInt32 = 2n ** (32n - 1n) - 1n\nexport const maxInt40 = 2n ** (40n - 1n) - 1n\nexport const maxInt48 = 2n ** (48n - 1n) - 1n\nexport const maxInt56 = 2n ** (56n - 1n) - 1n\nexport const maxInt64 = 2n ** (64n - 1n) - 1n\nexport const maxInt72 = 2n ** (72n - 1n) - 1n\nexport const maxInt80 = 2n ** (80n - 1n) - 1n\nexport const maxInt88 = 2n ** (88n - 1n) - 1n\nexport const maxInt96 = 2n ** (96n - 1n) - 1n\nexport const maxInt104 = 2n ** (104n - 1n) - 1n\nexport const maxInt112 = 2n ** (112n - 1n) - 1n\nexport const maxInt120 = 2n ** (120n - 1n) - 1n\nexport const maxInt128 = 2n ** (128n - 1n) - 1n\nexport const maxInt136 = 2n ** (136n - 1n) - 1n\nexport const maxInt144 = 2n ** (144n - 1n) - 1n\nexport const maxInt152 = 2n ** (152n - 1n) - 1n\nexport const maxInt160 = 2n ** (160n - 1n) - 1n\nexport const maxInt168 = 2n ** (168n - 1n) - 1n\nexport const maxInt176 = 2n ** (176n - 1n) - 1n\nexport const maxInt184 = 2n ** (184n - 1n) - 1n\nexport const maxInt192 = 2n ** (192n - 1n) - 1n\nexport const maxInt200 = 2n ** (200n - 1n) - 1n\nexport const maxInt208 = 2n ** (208n - 1n) - 1n\nexport const maxInt216 = 2n ** (216n - 1n) - 1n\nexport const maxInt224 = 2n ** (224n - 1n) - 1n\nexport const maxInt232 = 2n ** (232n - 1n) - 1n\nexport const maxInt240 = 2n ** (240n - 1n) - 1n\nexport const maxInt248 = 2n ** (248n - 1n) - 1n\nexport const maxInt256 = 2n ** (256n - 1n) - 1n\n\nexport const minInt8 = -(2n ** (8n - 1n))\nexport const minInt16 = -(2n ** (16n - 1n))\nexport const minInt24 = -(2n ** (24n - 1n))\nexport const minInt32 = -(2n ** (32n - 1n))\nexport const minInt40 = -(2n ** (40n - 1n))\nexport const minInt48 = -(2n ** (48n - 1n))\nexport const minInt56 = -(2n ** (56n - 1n))\nexport const minInt64 = -(2n ** (64n - 1n))\nexport const minInt72 = -(2n ** (72n - 1n))\nexport const minInt80 = -(2n ** (80n - 1n))\nexport const minInt88 = -(2n ** (88n - 1n))\nexport const minInt96 = -(2n ** (96n - 1n))\nexport const minInt104 = -(2n ** (104n - 1n))\nexport const minInt112 = -(2n ** (112n - 1n))\nexport const minInt120 = -(2n ** (120n - 1n))\nexport const minInt128 = -(2n ** (128n - 1n))\nexport const minInt136 = -(2n ** (136n - 1n))\nexport const minInt144 = -(2n ** (144n - 1n))\nexport const minInt152 = -(2n ** (152n - 1n))\nexport const minInt160 = -(2n ** (160n - 1n))\nexport const minInt168 = -(2n ** (168n - 1n))\nexport const minInt176 = -(2n ** (176n - 1n))\nexport const minInt184 = -(2n ** (184n - 1n))\nexport const minInt192 = -(2n ** (192n - 1n))\nexport const minInt200 = -(2n ** (200n - 1n))\nexport const minInt208 = -(2n ** (208n - 1n))\nexport const minInt216 = -(2n ** (216n - 1n))\nexport const minInt224 = -(2n ** (224n - 1n))\nexport const minInt232 = -(2n ** (232n - 1n))\nexport const minInt240 = -(2n ** (240n - 1n))\nexport const minInt248 = -(2n ** (248n - 1n))\nexport const minInt256 = -(2n ** (256n - 1n))\n\nexport const maxUint8 = 2n ** 8n - 1n\nexport const maxUint16 = 2n ** 16n - 1n\nexport const maxUint24 = 2n ** 24n - 1n\nexport const maxUint32 = 2n ** 32n - 1n\nexport const maxUint40 = 2n ** 40n - 1n\nexport const maxUint48 = 2n ** 48n - 1n\nexport const maxUint56 = 2n ** 56n - 1n\nexport const maxUint64 = 2n ** 64n - 1n\nexport const maxUint72 = 2n ** 72n - 1n\nexport const maxUint80 = 2n ** 80n - 1n\nexport const maxUint88 = 2n ** 88n - 1n\nexport const maxUint96 = 2n ** 96n - 1n\nexport const maxUint104 = 2n ** 104n - 1n\nexport const maxUint112 = 2n ** 112n - 1n\nexport const maxUint120 = 2n ** 120n - 1n\nexport const maxUint128 = 2n ** 128n - 1n\nexport const maxUint136 = 2n ** 136n - 1n\nexport const maxUint144 = 2n ** 144n - 1n\nexport const maxUint152 = 2n ** 152n - 1n\nexport const maxUint160 = 2n ** 160n - 1n\nexport const maxUint168 = 2n ** 168n - 1n\nexport const maxUint176 = 2n ** 176n - 1n\nexport const maxUint184 = 2n ** 184n - 1n\nexport const maxUint192 = 2n ** 192n - 1n\nexport const maxUint200 = 2n ** 200n - 1n\nexport const maxUint208 = 2n ** 208n - 1n\nexport const maxUint216 = 2n ** 216n - 1n\nexport const maxUint224 = 2n ** 224n - 1n\nexport const maxUint232 = 2n ** 232n - 1n\nexport const maxUint240 = 2n ** 240n - 1n\nexport const maxUint248 = 2n ** 248n - 1n\nexport const maxUint256 = 2n ** 256n - 1n\n", "import type {\n AbiParameter,\n AbiParameterKind,\n AbiParameterToPrimitiveType,\n AbiParametersToPrimitiveTypes,\n} from 'abitype'\nimport * as AbiParameters from '../AbiParameters.js'\nimport * as Address from '../Address.js'\nimport * as Bytes from '../Bytes.js'\nimport * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\nimport { integerRegex } from '../Solidity.js'\nimport type * as Cursor from './cursor.js'\nimport type { Compute, IsNarrowable, UnionToIntersection } from './types.js'\n\n/** @internal */\nexport type ParameterToPrimitiveType<\n abiParameter extends AbiParameter | { name: string; type: unknown },\n abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParameterToPrimitiveType<abiParameter, abiParameterKind>\n\n/** @internal */\nexport type PreparedParameter = { dynamic: boolean; encoded: Hex.Hex }\n\n/** @internal */\nexport type ToObject<\n parameters extends readonly AbiParameter[],\n kind extends AbiParameterKind = AbiParameterKind,\n> = IsNarrowable<parameters, AbiParameters.AbiParameters> extends true\n ? Compute<\n UnionToIntersection<\n {\n [index in keyof parameters]: parameters[index] extends {\n name: infer name extends string\n }\n ? {\n [key in name]: AbiParameterToPrimitiveType<\n parameters[index],\n kind\n >\n }\n : {\n [key in index]: AbiParameterToPrimitiveType<\n parameters[index],\n kind\n >\n }\n }[number]\n >\n >\n : unknown\n\n/** @internal */\nexport type ToPrimitiveTypes<\n abiParameters extends readonly AbiParameter[],\n abiParameterKind extends AbiParameterKind = AbiParameterKind,\n> = AbiParametersToPrimitiveTypes<abiParameters, abiParameterKind>\n\n/** @internal */\nexport type Tuple = ParameterToPrimitiveType<TupleAbiParameter>\n\n/** @internal */\nexport function decodeParameter(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n const { checksumAddress, staticPosition } = options\n const arrayComponents = getArrayComponents(param.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return decodeArray(\n cursor,\n { ...param, type },\n { checksumAddress, length, staticPosition },\n )\n }\n if (param.type === 'tuple')\n return decodeTuple(cursor, param as TupleAbiParameter, {\n checksumAddress,\n staticPosition,\n })\n if (param.type === 'address')\n return decodeAddress(cursor, { checksum: checksumAddress })\n if (param.type === 'bool') return decodeBool(cursor)\n if (param.type.startsWith('bytes'))\n return decodeBytes(cursor, param, { staticPosition })\n if (param.type.startsWith('uint') || param.type.startsWith('int'))\n return decodeNumber(cursor, param)\n if (param.type === 'string') return decodeString(cursor, { staticPosition })\n throw new AbiParameters.InvalidTypeError(param.type)\n}\n\nexport declare namespace decodeParameter {\n type ErrorType =\n | decodeArray.ErrorType\n | decodeTuple.ErrorType\n | decodeAddress.ErrorType\n | decodeBool.ErrorType\n | decodeBytes.ErrorType\n | decodeNumber.ErrorType\n | decodeString.ErrorType\n | AbiParameters.InvalidTypeError\n | Errors.GlobalErrorType\n}\n\nconst sizeOfLength = 32\nconst sizeOfOffset = 32\n\n/** @internal */\nexport function decodeAddress(\n cursor: Cursor.Cursor,\n options: { checksum?: boolean | undefined } = {},\n) {\n const { checksum = false } = options\n const value = cursor.readBytes(32)\n const wrap = (address: Hex.Hex) =>\n checksum ? Address.checksum(address) : address\n return [wrap(Hex.fromBytes(Bytes.slice(value, -20))), 32]\n}\n\nexport declare namespace decodeAddress {\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Bytes.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeArray(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n options: {\n checksumAddress?: boolean | undefined\n length: number | null\n staticPosition: number\n },\n) {\n const { checksumAddress, length, staticPosition } = options\n\n // If the length of the array is not known in advance (dynamic array),\n // this means we will need to wonder off to the pointer and decode.\n if (!length) {\n // Dealing with a dynamic type, so get the offset of the array data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n const startOfData = start + sizeOfLength\n\n // Get the length of the array from the offset.\n cursor.setPosition(start)\n const length = Bytes.toNumber(cursor.readBytes(sizeOfLength))\n\n // Check if the array has any dynamic children.\n const dynamicChild = hasDynamicChild(param)\n\n let consumed = 0\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n // If any of the children is dynamic, then all elements will be offset pointer, thus size of one slot (32 bytes).\n // Otherwise, elements will be the size of their encoding (consumed bytes).\n cursor.setPosition(startOfData + (dynamicChild ? i * 32 : consumed))\n const [data, consumed_] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: startOfData,\n })\n consumed += consumed_\n value.push(data)\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the length of the array is known in advance,\n // and the length of an element deeply nested in the array is not known,\n // we need to decode the offset of the array data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the array data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n // Move cursor along to the next slot (next offset pointer).\n cursor.setPosition(start + i * 32)\n const [data] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: start,\n })\n value.push(data)\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the length of the array is known in advance and the array is deeply static,\n // then we can just decode each element in sequence.\n let consumed = 0\n const value: unknown[] = []\n for (let i = 0; i < length; ++i) {\n const [data, consumed_] = decodeParameter(cursor, param, {\n checksumAddress,\n staticPosition: staticPosition + consumed,\n })\n consumed += consumed_\n value.push(data)\n }\n return [value, consumed]\n}\n\nexport declare namespace decodeArray {\n type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBool(cursor: Cursor.Cursor) {\n return [Bytes.toBoolean(cursor.readBytes(32), { size: 32 }), 32]\n}\n\nexport declare namespace decodeBool {\n type ErrorType = Bytes.toBoolean.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeBytes(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n { staticPosition }: { staticPosition: number },\n) {\n const [_, size] = param.type.split('bytes')\n if (!size) {\n // Dealing with dynamic types, so get the offset of the bytes data.\n const offset = Bytes.toNumber(cursor.readBytes(32))\n\n // Set position of the cursor to start of bytes data.\n cursor.setPosition(staticPosition + offset)\n\n const length = Bytes.toNumber(cursor.readBytes(32))\n\n // If there is no length, we have zero data.\n if (length === 0) {\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return ['0x', 32]\n }\n\n const data = cursor.readBytes(length)\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [Hex.fromBytes(data), 32]\n }\n\n const value = Hex.fromBytes(cursor.readBytes(Number.parseInt(size), 32))\n return [value, 32]\n}\n\nexport declare namespace decodeBytes {\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Bytes.toNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeNumber(\n cursor: Cursor.Cursor,\n param: AbiParameters.Parameter,\n) {\n const signed = param.type.startsWith('int')\n const size = Number.parseInt(param.type.split('int')[1] || '256')\n const value = cursor.readBytes(32)\n return [\n size > 48\n ? Bytes.toBigInt(value, { signed })\n : Bytes.toNumber(value, { signed }),\n 32,\n ]\n}\n\nexport declare namespace decodeNumber {\n type ErrorType =\n | Bytes.toNumber.ErrorType\n | Bytes.toBigInt.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport type TupleAbiParameter = AbiParameters.Parameter & {\n components: readonly AbiParameters.Parameter[]\n}\n\n/** @internal */\nexport function decodeTuple(\n cursor: Cursor.Cursor,\n param: TupleAbiParameter,\n options: { checksumAddress?: boolean | undefined; staticPosition: number },\n) {\n const { checksumAddress, staticPosition } = options\n\n // Tuples can have unnamed components (i.e. they are arrays), so we must\n // determine whether the tuple is named or unnamed. In the case of a named\n // tuple, the value will be an object where each property is the name of the\n // component. In the case of an unnamed tuple, the value will be an array.\n const hasUnnamedChild =\n param.components.length === 0 || param.components.some(({ name }) => !name)\n\n // Initialize the value to an object or an array, depending on whether the\n // tuple is named or unnamed.\n const value: any = hasUnnamedChild ? [] : {}\n let consumed = 0\n\n // If the tuple has a dynamic child, we must first decode the offset to the\n // tuple data.\n if (hasDynamicChild(param)) {\n // Dealing with dynamic types, so get the offset of the tuple data.\n const offset = Bytes.toNumber(cursor.readBytes(sizeOfOffset))\n\n // Start is the static position of referencing slot + offset.\n const start = staticPosition + offset\n\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]!\n cursor.setPosition(start + consumed)\n const [data, consumed_] = decodeParameter(cursor, component, {\n checksumAddress,\n staticPosition: start,\n })\n consumed += consumed_\n value[hasUnnamedChild ? i : component?.name!] = data\n }\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n return [value, 32]\n }\n\n // If the tuple has static children, we can just decode each component\n // in sequence.\n for (let i = 0; i < param.components.length; ++i) {\n const component = param.components[i]!\n const [data, consumed_] = decodeParameter(cursor, component, {\n checksumAddress,\n staticPosition,\n })\n value[hasUnnamedChild ? i : component?.name!] = data\n consumed += consumed_\n }\n return [value, consumed]\n}\n\nexport declare namespace decodeTuple {\n type ErrorType = Bytes.toNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function decodeString(\n cursor: Cursor.Cursor,\n { staticPosition }: { staticPosition: number },\n) {\n // Get offset to start of string data.\n const offset = Bytes.toNumber(cursor.readBytes(32))\n\n // Start is the static position of current slot + offset.\n const start = staticPosition + offset\n cursor.setPosition(start)\n\n const length = Bytes.toNumber(cursor.readBytes(32))\n\n // If there is no length, we have zero data (empty string).\n if (length === 0) {\n cursor.setPosition(staticPosition + 32)\n return ['', 32]\n }\n\n const data = cursor.readBytes(length, 32)\n const value = Bytes.toString(Bytes.trimLeft(data))\n\n // As we have gone wondering, restore to the original position + next slot.\n cursor.setPosition(staticPosition + 32)\n\n return [value, 32]\n}\n\nexport declare namespace decodeString {\n type ErrorType =\n | Bytes.toNumber.ErrorType\n | Bytes.toString.ErrorType\n | Bytes.trimLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameters<\n const parameters extends AbiParameters.AbiParameters,\n>({\n checksumAddress,\n parameters,\n values,\n}: {\n checksumAddress?: boolean | undefined\n parameters: parameters\n values: parameters extends AbiParameters.AbiParameters\n ? ToPrimitiveTypes<parameters>\n : never\n}) {\n const preparedParameters: PreparedParameter[] = []\n for (let i = 0; i < parameters.length; i++) {\n preparedParameters.push(\n prepareParameter({\n checksumAddress,\n parameter: parameters[i]!,\n value: values[i],\n }),\n )\n }\n return preparedParameters\n}\n\n/** @internal */\nexport declare namespace prepareParameters {\n type ErrorType = prepareParameter.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function prepareParameter<\n const parameter extends AbiParameters.Parameter,\n>({\n checksumAddress = false,\n parameter: parameter_,\n value,\n}: {\n parameter: parameter\n value: parameter extends AbiParameters.Parameter\n ? ParameterToPrimitiveType<parameter>\n : never\n checksumAddress?: boolean | undefined\n}): PreparedParameter {\n const parameter = parameter_ as AbiParameters.Parameter\n\n const arrayComponents = getArrayComponents(parameter.type)\n if (arrayComponents) {\n const [length, type] = arrayComponents\n return encodeArray(value, {\n checksumAddress,\n length,\n parameter: {\n ...parameter,\n type,\n },\n })\n }\n if (parameter.type === 'tuple') {\n return encodeTuple(value as unknown as Tuple, {\n checksumAddress,\n parameter: parameter as TupleAbiParameter,\n })\n }\n if (parameter.type === 'address') {\n return encodeAddress(value as unknown as Hex.Hex, {\n checksum: checksumAddress,\n })\n }\n if (parameter.type === 'bool') {\n return encodeBoolean(value as unknown as boolean)\n }\n if (parameter.type.startsWith('uint') || parameter.type.startsWith('int')) {\n const signed = parameter.type.startsWith('int')\n const [, , size = '256'] = integerRegex.exec(parameter.type) ?? []\n return encodeNumber(value as unknown as number, {\n signed,\n size: Number(size),\n })\n }\n if (parameter.type.startsWith('bytes')) {\n return encodeBytes(value as unknown as Hex.Hex, { type: parameter.type })\n }\n if (parameter.type === 'string') {\n return encodeString(value as unknown as string)\n }\n throw new AbiParameters.InvalidTypeError(parameter.type)\n}\n\n/** @internal */\nexport declare namespace prepareParameter {\n type ErrorType =\n | encodeArray.ErrorType\n | encodeTuple.ErrorType\n | encodeAddress.ErrorType\n | encodeBoolean.ErrorType\n | encodeBytes.ErrorType\n | encodeString.ErrorType\n | AbiParameters.InvalidTypeError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encode(preparedParameters: PreparedParameter[]): Hex.Hex {\n // 1. Compute the size of the static part of the parameters.\n let staticSize = 0\n for (let i = 0; i < preparedParameters.length; i++) {\n const { dynamic, encoded } = preparedParameters[i]!\n if (dynamic) staticSize += 32\n else staticSize += Hex.size(encoded)\n }\n\n // 2. Split the parameters into static and dynamic parts.\n const staticParameters: Hex.Hex[] = []\n const dynamicParameters: Hex.Hex[] = []\n let dynamicSize = 0\n for (let i = 0; i < preparedParameters.length; i++) {\n const { dynamic, encoded } = preparedParameters[i]!\n if (dynamic) {\n staticParameters.push(\n Hex.fromNumber(staticSize + dynamicSize, { size: 32 }),\n )\n dynamicParameters.push(encoded)\n dynamicSize += Hex.size(encoded)\n } else {\n staticParameters.push(encoded)\n }\n }\n\n // 3. Concatenate static and dynamic parts.\n return Hex.concat(...staticParameters, ...dynamicParameters)\n}\n\n/** @internal */\nexport declare namespace encode {\n type ErrorType =\n | Hex.concat.ErrorType\n | Hex.fromNumber.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeAddress(\n value: Hex.Hex,\n options: { checksum: boolean },\n): PreparedParameter {\n const { checksum = false } = options\n Address.assert(value, { strict: checksum })\n return {\n dynamic: false,\n encoded: Hex.padLeft(value.toLowerCase() as Hex.Hex),\n }\n}\n\n/** @internal */\nexport declare namespace encodeAddress {\n type ErrorType =\n | Address.assert.ErrorType\n | Hex.padLeft.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeArray<const parameter extends AbiParameters.Parameter>(\n value: ParameterToPrimitiveType<parameter>,\n options: {\n checksumAddress?: boolean | undefined\n length: number | null\n parameter: parameter\n },\n): PreparedParameter {\n const { checksumAddress, length, parameter } = options\n\n const dynamic = length === null\n\n if (!Array.isArray(value)) throw new AbiParameters.InvalidArrayError(value)\n if (!dynamic && value.length !== length)\n throw new AbiParameters.ArrayLengthMismatchError({\n expectedLength: length!,\n givenLength: value.length,\n type: `${parameter.type}[${length}]`,\n })\n\n let dynamicChild = false\n const preparedParameters: PreparedParameter[] = []\n for (let i = 0; i < value.length; i++) {\n const preparedParam = prepareParameter({\n checksumAddress,\n parameter,\n value: value[i],\n })\n if (preparedParam.dynamic) dynamicChild = true\n preparedParameters.push(preparedParam)\n }\n\n if (dynamic || dynamicChild) {\n const data = encode(preparedParameters)\n if (dynamic) {\n const length = Hex.fromNumber(preparedParameters.length, { size: 32 })\n return {\n dynamic: true,\n encoded:\n preparedParameters.length > 0 ? Hex.concat(length, data) : length,\n }\n }\n if (dynamicChild) return { dynamic: true, encoded: data }\n }\n return {\n dynamic: false,\n encoded: Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n }\n}\n\n/** @internal */\nexport declare namespace encodeArray {\n type ErrorType =\n | AbiParameters.InvalidArrayError\n | AbiParameters.ArrayLengthMismatchError\n | Hex.concat.ErrorType\n | Hex.fromNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBytes(\n value: Hex.Hex,\n { type }: { type: string },\n): PreparedParameter {\n const [, parametersize] = type.split('bytes')\n const bytesSize = Hex.size(value)\n if (!parametersize) {\n let value_ = value\n // If the size is not divisible by 32 bytes, pad the end\n // with empty bytes to the ceiling 32 bytes.\n if (bytesSize % 32 !== 0)\n value_ = Hex.padRight(value_, Math.ceil((value.length - 2) / 2 / 32) * 32)\n return {\n dynamic: true,\n encoded: Hex.concat(\n Hex.padLeft(Hex.fromNumber(bytesSize, { size: 32 })),\n value_,\n ),\n }\n }\n if (bytesSize !== Number.parseInt(parametersize))\n throw new AbiParameters.BytesSizeMismatchError({\n expectedSize: Number.parseInt(parametersize),\n value,\n })\n return { dynamic: false, encoded: Hex.padRight(value) }\n}\n\n/** @internal */\nexport declare namespace encodeBytes {\n type ErrorType =\n | Hex.padLeft.ErrorType\n | Hex.padRight.ErrorType\n | Hex.fromNumber.ErrorType\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeBoolean(value: boolean): PreparedParameter {\n if (typeof value !== 'boolean')\n throw new Errors.BaseError(\n `Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`,\n )\n return { dynamic: false, encoded: Hex.padLeft(Hex.fromBoolean(value)) }\n}\n\n/** @internal */\nexport declare namespace encodeBoolean {\n type ErrorType =\n | Hex.padLeft.ErrorType\n | Hex.fromBoolean.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeNumber(\n value: number,\n { signed, size }: { signed: boolean; size: number },\n): PreparedParameter {\n if (typeof size === 'number') {\n const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n\n const min = signed ? -max - 1n : 0n\n if (value > max || value < min)\n throw new Hex.IntegerOutOfRangeError({\n max: max.toString(),\n min: min.toString(),\n signed,\n size: size / 8,\n value: value.toString(),\n })\n }\n return {\n dynamic: false,\n encoded: Hex.fromNumber(value, {\n size: 32,\n signed,\n }),\n }\n}\n\n/** @internal */\nexport declare namespace encodeNumber {\n type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeString(value: string): PreparedParameter {\n const hexValue = Hex.fromString(value)\n const partsLength = Math.ceil(Hex.size(hexValue) / 32)\n const parts: Hex.Hex[] = []\n for (let i = 0; i < partsLength; i++) {\n parts.push(Hex.padRight(Hex.slice(hexValue, i * 32, (i + 1) * 32)))\n }\n return {\n dynamic: true,\n encoded: Hex.concat(\n Hex.padRight(Hex.fromNumber(Hex.size(hexValue), { size: 32 })),\n ...parts,\n ),\n }\n}\n\n/** @internal */\nexport declare namespace encodeString {\n type ErrorType =\n | Hex.fromNumber.ErrorType\n | Hex.padRight.ErrorType\n | Hex.slice.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeTuple<\n const parameter extends AbiParameters.Parameter & {\n components: readonly AbiParameters.Parameter[]\n },\n>(\n value: ParameterToPrimitiveType<parameter>,\n options: {\n checksumAddress?: boolean | undefined\n parameter: parameter\n },\n): PreparedParameter {\n const { checksumAddress, parameter } = options\n\n let dynamic = false\n const preparedParameters: PreparedParameter[] = []\n for (let i = 0; i < parameter.components.length; i++) {\n const param_ = parameter.components[i]!\n const index = Array.isArray(value) ? i : param_.name\n const preparedParam = prepareParameter({\n checksumAddress,\n parameter: param_,\n value: (value as any)[index!] as readonly unknown[],\n })\n preparedParameters.push(preparedParam)\n if (preparedParam.dynamic) dynamic = true\n }\n return {\n dynamic,\n encoded: dynamic\n ? encode(preparedParameters)\n : Hex.concat(...preparedParameters.map(({ encoded }) => encoded)),\n }\n}\n\n/** @internal */\nexport declare namespace encodeTuple {\n type ErrorType = Hex.concat.ErrorType | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function getArrayComponents(\n type: string,\n): [length: number | null, innerType: string] | undefined {\n const matches = type.match(/^(.*)\\[(\\d+)?\\]$/)\n return matches\n ? // Return `null` if the array is dynamic.\n [matches[2]! ? Number(matches[2]!) : null, matches[1]!]\n : undefined\n}\n\n/** @internal */\nexport function hasDynamicChild(param: AbiParameters.Parameter) {\n const { type } = param\n if (type === 'string') return true\n if (type === 'bytes') return true\n if (type.endsWith('[]')) return true\n\n if (type === 'tuple') return (param as any).components?.some(hasDynamicChild)\n\n const arrayComponents = getArrayComponents(param.type)\n if (\n arrayComponents &&\n hasDynamicChild({\n ...param,\n type: arrayComponents[1],\n } as AbiParameters.Parameter)\n )\n return true\n\n return false\n}\n", "import type { Bytes } from '../Bytes.js'\nimport * as Errors from '../Errors.js'\n\n/** @internal */\nexport type Cursor = {\n bytes: Bytes\n dataView: DataView\n position: number\n positionReadCount: Map<number, number>\n recursiveReadCount: number\n recursiveReadLimit: number\n remaining: number\n assertReadLimit(position?: number): void\n assertPosition(position: number): void\n decrementPosition(offset: number): void\n getReadCount(position?: number): number\n incrementPosition(offset: number): void\n inspectByte(position?: number): Bytes[number]\n inspectBytes(length: number, position?: number): Bytes\n inspectUint8(position?: number): number\n inspectUint16(position?: number): number\n inspectUint24(position?: number): number\n inspectUint32(position?: number): number\n pushByte(byte: Bytes[number]): void\n pushBytes(bytes: Bytes): void\n pushUint8(value: number): void\n pushUint16(value: number): void\n pushUint24(value: number): void\n pushUint32(value: number): void\n readByte(): Bytes[number]\n readBytes(length: number, size?: number): Bytes\n readUint8(): number\n readUint16(): number\n readUint24(): number\n readUint32(): number\n setPosition(position: number): () => void\n _touch(): void\n}\n\nconst staticCursor: Cursor = /*#__PURE__*/ {\n bytes: new Uint8Array(),\n dataView: new DataView(new ArrayBuffer(0)),\n position: 0,\n positionReadCount: new Map(),\n recursiveReadCount: 0,\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n assertReadLimit() {\n if (this.recursiveReadCount >= this.recursiveReadLimit)\n throw new RecursiveReadLimitExceededError({\n count: this.recursiveReadCount + 1,\n limit: this.recursiveReadLimit,\n })\n },\n assertPosition(position) {\n if (position < 0 || position > this.bytes.length - 1)\n throw new PositionOutOfBoundsError({\n length: this.bytes.length,\n position,\n })\n },\n decrementPosition(offset) {\n if (offset < 0) throw new NegativeOffsetError({ offset })\n const position = this.position - offset\n this.assertPosition(position)\n this.position = position\n },\n getReadCount(position) {\n return this.positionReadCount.get(position || this.position) || 0\n },\n incrementPosition(offset) {\n if (offset < 0) throw new NegativeOffsetError({ offset })\n const position = this.position + offset\n this.assertPosition(position)\n this.position = position\n },\n inspectByte(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position)\n return this.bytes[position]!\n },\n inspectBytes(length, position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + length - 1)\n return this.bytes.subarray(position, position + length)\n },\n inspectUint8(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position)\n return this.bytes[position]!\n },\n inspectUint16(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 1)\n return this.dataView.getUint16(position)\n },\n inspectUint24(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 2)\n return (\n (this.dataView.getUint16(position) << 8) +\n this.dataView.getUint8(position + 2)\n )\n },\n inspectUint32(position_) {\n const position = position_ ?? this.position\n this.assertPosition(position + 3)\n return this.dataView.getUint32(position)\n },\n pushByte(byte: Bytes[number]) {\n this.assertPosition(this.position)\n this.bytes[this.position] = byte\n this.position++\n },\n pushBytes(bytes: Bytes) {\n this.assertPosition(this.position + bytes.length - 1)\n this.bytes.set(bytes, this.position)\n this.position += bytes.length\n },\n pushUint8(value: number) {\n this.assertPosition(this.position)\n this.bytes[this.position] = value\n this.position++\n },\n pushUint16(value: number) {\n this.assertPosition(this.position + 1)\n this.dataView.setUint16(this.position, value)\n this.position += 2\n },\n pushUint24(value: number) {\n this.assertPosition(this.position + 2)\n this.dataView.setUint16(this.position, value >> 8)\n this.dataView.setUint8(this.position + 2, value & ~4294967040)\n this.position += 3\n },\n pushUint32(value: number) {\n this.assertPosition(this.position + 3)\n this.dataView.setUint32(this.position, value)\n this.position += 4\n },\n readByte() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectByte()\n this.position++\n return value\n },\n readBytes(length, size) {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectBytes(length)\n this.position += size ?? length\n return value\n },\n readUint8() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint8()\n this.position += 1\n return value\n },\n readUint16() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint16()\n this.position += 2\n return value\n },\n readUint24() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint24()\n this.position += 3\n return value\n },\n readUint32() {\n this.assertReadLimit()\n this._touch()\n const value = this.inspectUint32()\n this.position += 4\n return value\n },\n get remaining() {\n return this.bytes.length - this.position\n },\n setPosition(position) {\n const oldPosition = this.position\n this.assertPosition(position)\n this.position = position\n return () => (this.position = oldPosition)\n },\n _touch() {\n if (this.recursiveReadLimit === Number.POSITIVE_INFINITY) return\n const count = this.getReadCount()\n this.positionReadCount.set(this.position, count + 1)\n if (count > 0) this.recursiveReadCount++\n },\n}\n\n/** @internal */\nexport function create(\n bytes: Bytes,\n { recursiveReadLimit = 8_192 }: create.Config = {},\n): Cursor {\n const cursor: Cursor = Object.create(staticCursor)\n cursor.bytes = bytes\n cursor.dataView = new DataView(\n bytes.buffer,\n bytes.byteOffset,\n bytes.byteLength,\n )\n cursor.positionReadCount = new Map()\n cursor.recursiveReadLimit = recursiveReadLimit\n return cursor\n}\n\n/** @internal */\nexport declare namespace create {\n type Config = { recursiveReadLimit?: number | undefined }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport class NegativeOffsetError extends Errors.BaseError {\n override readonly name = 'Cursor.NegativeOffsetError'\n\n constructor({ offset }: { offset: number }) {\n super(`Offset \\`${offset}\\` cannot be negative.`)\n }\n}\n\n/** @internal */\nexport class PositionOutOfBoundsError extends Errors.BaseError {\n override readonly name = 'Cursor.PositionOutOfBoundsError'\n\n constructor({ length, position }: { length: number; position: number }) {\n super(\n `Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`,\n )\n }\n}\n\n/** @internal */\nexport class RecursiveReadLimitExceededError extends Errors.BaseError {\n override readonly name = 'Cursor.RecursiveReadLimitExceededError'\n\n constructor({ count, limit }: { count: number; limit: number }) {\n super(\n `Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`,\n )\n }\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiError.js'\nimport type * as AbiItem_internal from './internal/abiItem.js'\nimport type { IsNarrowable, IsNever } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with an `error` type. */\nexport type AbiError = abitype.AbiError & {\n hash?: Hex.Hex | undefined\n overloads?: readonly AbiError[] | undefined\n}\n\n/** @internal */\nexport function decode<\n const abiError extends AbiError,\n as extends 'Object' | 'Array' = 'Array',\n>(\n abiError: abiError,\n data: Hex.Hex,\n options?: decode.Options<as> | undefined,\n): decode.ReturnType<abiError, as>\n/**\n * ABI-decodes the provided error input (`inputs`).\n *\n * :::tip\n *\n * This function is typically used to decode contract function reverts (e.g. a JSON-RPC error response).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const error = AbiError.from('error InvalidSignature(uint r, uint s, uint8 yParity)')\n *\n * const value = AbiError.decode(error, '0xecde634900000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001')\n * // @log: [420n, 69n, 1]\n * ```\n *\n * @example\n * You can extract an ABI Error from a JSON ABI with {@link ox#AbiError.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([...]) // [!code hl]\n * const error = AbiError.fromAbi(abi, 'InvalidSignature') // [!code hl]\n *\n * const value = AbiError.decode(error, '0xecde634900000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001')\n * // @log: [420n, 69n, 1]\n * ```\n *\n * @example\n * You can pass the error `data` to the `name` property of {@link ox#AbiError.(fromAbi:function)} to extract and infer the error by its 4-byte selector:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiError } from 'ox'\n *\n * const data = '0xecde634900000000000000000000000000000000000000000000000000000000000001a400000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001'\n *\n * const abi = Abi.from([...])\n * const error = AbiError.fromAbi(abi, data) // [!code hl]\n *\n * const value = AbiError.decode(error, data)\n * // @log: [420n, 69n, 1]\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiError.decode` to decode the revert error of an `approve` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * // @noErrors\n * import 'ox/window'\n * import { Abi, AbiError, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n * // ...\n * {\n * inputs: [\n * { name: 'to', type: 'address' },\n * { name: 'tokenId', type: 'uint256' },\n * ],\n * name: 'approve',\n * outputs: [],\n * stateMutability: 'nonpayable',\n * type: 'function',\n * },\n * // ...\n * ])\n * const approve = AbiFunction.fromAbi(abi, 'approve')\n *\n * // 2. Encode the Function Input.\n * const data = AbiFunction.encodeData(\n * approve,\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n *\n * try {\n * // 3. Attempt to perform the the Contract Call.\n * await window.ethereum!.request({\n * method: 'eth_call',\n * params: [\n * {\n * data,\n * to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * },\n * ],\n * })\n * } catch (e) { // [!code focus]\n * // 4. Extract and decode the Error. // [!code focus]\n * const error = AbiError.fromAbi(abi, e.data) // [!code focus]\n * const value = AbiError.decode(error, e.data) // [!code focus]\n * console.error(`${error.name}(${value})`) // [!code focus]\n * // @error: Error(ERC721: approve caller is not owner nor approved for all)\n * } // [!code focus]\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiError - The ABI Error to decode.\n * @param data - The error data.\n * @param options - Decoding options.\n * @returns The decoded error.\n */\nexport function decode(\n abiError: AbiError,\n data: Hex.Hex,\n options?: decode.Options | undefined,\n): unknown | readonly unknown[] | undefined\n/** @internal */\nexport function decode(\n abiError: AbiError,\n data: Hex.Hex,\n options: decode.Options = {},\n): decode.ReturnType {\n if (Hex.size(data) < 4) throw new AbiItem.InvalidSelectorSizeError({ data })\n if (abiError.inputs.length === 0) return undefined\n\n const values = AbiParameters.decode(\n abiError.inputs,\n Hex.slice(data, 4),\n options,\n )\n if (values && Object.keys(values).length === 1) {\n if (Array.isArray(values)) return values[0]\n return Object.values(values)[0]\n }\n return values\n}\n\nexport declare namespace decode {\n type Options<as extends 'Object' | 'Array' = 'Array'> = {\n /**\n * Whether the decoded values should be returned as an `Object` or `Array`.\n *\n * @default \"Array\"\n */\n as?: as | 'Array' | 'Object' | undefined\n }\n\n type ReturnType<\n abiError extends AbiError = AbiError,\n as extends 'Object' | 'Array' = 'Array',\n > = IsNarrowable<abiError, AbiError> extends true\n ? abiError['inputs'] extends readonly []\n ? undefined\n : abiError['inputs'] extends readonly [\n infer type extends abitype.AbiParameter,\n ]\n ? abitype.AbiParameterToPrimitiveType<type>\n : AbiParameters.decode.ReturnType<\n abiError['inputs'],\n as\n > extends infer types\n ? types extends readonly []\n ? undefined\n : types extends readonly [infer type]\n ? type\n : types\n : never\n : unknown | readonly unknown[] | undefined\n\n type ErrorType =\n | AbiParameters.decode.ErrorType\n | Hex.size.ErrorType\n | typeof AbiItem.InvalidSelectorSizeError\n | Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes the provided error input (`inputs`), prefixed with the 4 byte error selector.\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const error = AbiError.from(\n * 'error InvalidSignature(uint r, uint s, uint8 yParity)'\n * )\n *\n * const data = AbiError.encode( // [!code focus]\n * error, // [!code focus]\n * [1n, 2n, 0] // [!code focus]\n * ) // [!code focus]\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * You can extract an ABI Error from a JSON ABI with {@link ox#AbiError.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([ // [!code hl]\n * // ... // [!code hl]\n * { // [!code hl]\n * name: 'InvalidSignature', // [!code hl]\n * type: 'error', // [!code hl]\n * inputs: [ // [!code hl]\n * { name: 'r', type: 'uint256' }, // [!code hl]\n * { name: 's', type: 'uint256' }, // [!code hl]\n * { name: 'yParity', type: 'uint8' }, // [!code hl]\n * ], // [!code hl]\n * }, // [!code hl]\n * // ... // [!code hl]\n * ]) // [!code hl]\n * const error = AbiError.fromAbi(abi, 'InvalidSignature') // [!code hl]\n *\n * const data = AbiError.encode(\n * error,\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @param abiError - ABI Error to encode\n * @param args - Error arguments\n * @returns ABI-encoded error name and arguments\n */\nexport function encode<const abiError extends AbiError>(\n abiError: abiError,\n ...args: encode.Args<abiError>\n): encode.ReturnType {\n const selector = getSelector(abiError)\n\n const data =\n args.length > 0\n ? AbiParameters.encode(abiError.inputs, (args as any)[0])\n : undefined\n\n return data ? Hex.concat(selector, data) : selector\n}\n\nexport declare namespace encode {\n type Args<abiError extends AbiError = AbiError> = IsNarrowable<\n abiError,\n AbiError\n > extends true\n ? abitype.AbiParametersToPrimitiveTypes<\n abiError['inputs']\n > extends readonly []\n ? []\n : [abitype.AbiParametersToPrimitiveTypes<abiError['inputs']>]\n : readonly unknown[]\n\n type ReturnType = Hex.Hex\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Formats an {@link ox#AbiError.AbiError} into a **Human Readable ABI Error**.\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const formatted = AbiError.format({\n * type: 'error',\n * name: 'Example',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiError - The ABI Error to format.\n * @returns The formatted ABI Error.\n */\nexport function format<const abiError extends AbiError>(\n abiError: abiError | AbiError,\n): abitype.FormatAbiItem<abiError> {\n return abitype.formatAbiItem(abiError) as never\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Error** or **Human Readable ABI Error** into a typed {@link ox#AbiError.AbiError}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from({\n * inputs: [{ name: 'v', type: 'uint8' }],\n * name: 'BadSignatureV',\n * type: 'error',\n * })\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from(\n * 'error BadSignatureV(uint8 v)' // [!code hl]\n * )\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const badSignatureVError = AbiError.from([\n * 'struct Signature { uint8 v; }', // [!code hl]\n * 'error BadSignatureV(Signature signature)',\n * ])\n *\n * badSignatureVError\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiError - The ABI Error to parse.\n * @returns Typed ABI Error.\n */\nexport function from<\n const abiError extends AbiError | string | readonly string[],\n>(\n abiError: (abiError | AbiError | string | readonly string[]) &\n (\n | (abiError extends string ? internal.Signature<abiError> : never)\n | (abiError extends readonly string[]\n ? internal.Signatures<abiError>\n : never)\n | AbiError\n ),\n options: from.Options = {},\n): from.ReturnType<abiError> {\n return AbiItem.from(abiError as AbiError, options) as never\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether or not to prepare the extracted function (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n }\n\n type ReturnType<abiError extends AbiError | string | readonly string[]> =\n AbiItem.from.ReturnType<abiError>\n\n type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiError.AbiError} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Errors can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'error BadSignatureV(uint8 v)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiError.fromAbi(abi, 'BadSignatureV') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Errors can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'error BadSignatureV(uint8 v)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiError.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Error from JSON-RPC error data.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name<abi>,\n const args extends\n | AbiItem_internal.ExtractArgs<abi, name>\n | undefined = undefined,\n //\n allNames = Name<abi>,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n options?: AbiItem.fromAbi.Options<\n abi,\n name,\n args,\n AbiItem_internal.ExtractArgs<abi, name>\n >,\n): fromAbi.ReturnType<abi, name, args> {\n if (name === 'Error') return solidityError as never\n if (name === 'Panic') return solidityPanic as never\n if (Hex.validate(name, { strict: false })) {\n const selector = Hex.slice(name, 0, 4)\n if (selector === solidityErrorSelector) return solidityError as never\n if (selector === solidityPanicSelector) return solidityPanic as never\n }\n\n const item = AbiItem.fromAbi(abi, name, options as any)\n if (item.type !== 'error')\n throw new AbiItem.NotFoundError({ name, type: 'error' })\n return item as never\n}\n\nexport declare namespace fromAbi {\n type ReturnType<\n abi extends Abi.Abi | readonly unknown[] = Abi.Abi,\n name extends Name<abi> = Name<abi>,\n args extends\n | AbiItem_internal.ExtractArgs<abi, name>\n | undefined = AbiItem_internal.ExtractArgs<abi, name>,\n > = IsNarrowable<name, Name<abi>> extends true\n ?\n | (name extends 'Error' ? typeof solidityError : never)\n | (name extends 'Panic'\n ? typeof solidityPanic\n : never) extends infer result\n ? IsNever<result> extends true\n ? AbiItem.fromAbi.ReturnType<abi, name, args, AbiError>\n : result\n : never\n :\n | AbiItem.fromAbi.ReturnType<abi, name, args, AbiError>\n | typeof solidityError\n | typeof solidityPanic\n\n type ErrorType = AbiItem.fromAbi.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiError.AbiError}.\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const selector = AbiError.getSelector('error BadSignatureV(uint8 v)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiError } from 'ox'\n *\n * const selector = AbiError.getSelector({\n * inputs: [{ name: 'v', type: 'uint8' }],\n * name: 'BadSignatureV',\n * type: 'error'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the error signature.\n */\nexport function getSelector(abiItem: string | AbiError): Hex.Hex {\n return AbiItem.getSelector(abiItem)\n}\n\nexport declare namespace getSelector {\n type ErrorType = AbiItem.getSelector.ErrorType | Errors.GlobalErrorType\n}\n\n// https://docs.soliditylang.org/en/v0.8.16/control-structures.html#panic-via-assert-and-error-via-require\nexport const panicReasons = {\n 1: 'An `assert` condition failed.',\n 17: 'Arithmetic operation resulted in underflow or overflow.',\n 18: 'Division or modulo by zero (e.g. `5 / 0` or `23 % 0`).',\n 33: 'Attempted to convert to an invalid type.',\n 34: 'Attempted to access a storage byte array that is incorrectly encoded.',\n 49: 'Performed `.pop()` on an empty array',\n 50: 'Array index is out of bounds.',\n 65: 'Allocated too much memory or created an array which is too large.',\n 81: 'Attempted to call a zero-initialized variable of internal function type.',\n} as Record<number, string>\n\nexport const solidityError = /*#__PURE__*/ from({\n inputs: [\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'Error',\n type: 'error',\n})\n\nexport const solidityErrorSelector = '0x08c379a0'\n\nexport const solidityPanic = /*#__PURE__*/ from({\n inputs: [\n {\n name: 'reason',\n type: 'uint8',\n },\n ],\n name: 'Panic',\n type: 'error',\n})\n\nexport const solidityPanicSelector = '0x4e487b71'\n\n/**\n * Extracts an {@link ox#AbiError.AbiError} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'error Foo(string)',\n * 'error Bar(uint256)',\n * ])\n *\n * type Foo = AbiError.FromAbi<typeof abi, 'Foo'>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n abi extends Abi.Abi,\n name extends ExtractNames<abi>,\n> = abitype.ExtractAbiError<abi, name>\n\n/**\n * Extracts the names of all {@link ox#AbiError.AbiError} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiError } from 'ox'\n *\n * const abi = Abi.from([\n * 'error Foo(string)',\n * 'error Bar(uint256)',\n * ])\n *\n * type names = AbiError.Name<typeof abi>\n * // ^?\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<abi extends Abi.Abi> =\n | abitype.ExtractAbiErrorNames<abi>\n | 'Panic'\n | 'Error'\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiEvent.js'\nimport type * as AbiItem_internal from './internal/abiItem.js'\nimport * as Cursor from './internal/cursor.js'\nimport { prettyPrint } from './internal/errors.js'\nimport type { Compute } from './internal/types.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with an `event` type. */\nexport type AbiEvent = abitype.AbiEvent & {\n hash?: Hex.Hex | undefined\n overloads?: readonly AbiEvent[] | undefined\n}\n\n/**\n * Extracts an {@link ox#AbiEvent.AbiEvent} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiEvent } from 'ox'\n *\n * const abi = Abi.from([\n * 'event Foo(string)',\n * 'event Bar(uint256)',\n * ])\n *\n * type Foo = AbiEvent.FromAbi<typeof abi, 'Foo'>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n abi extends Abi.Abi,\n name extends ExtractNames<abi>,\n> = abitype.ExtractAbiEvent<abi, name>\n\n/**\n * Extracts the names of all {@link ox#AbiError.AbiError} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiEvent } from 'ox'\n *\n * const abi = Abi.from([\n * 'event Foo(string)',\n * 'event Bar(uint256)',\n * ])\n *\n * type names = AbiEvent.Name<typeof abi>\n * // ^?\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<abi extends Abi.Abi> =\n abitype.ExtractAbiEventNames<abi>\n\n/**\n * Asserts that the provided arguments match the decoded log arguments.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from('event Transfer(address indexed from, address indexed to, uint256 value)')\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * ],\n * })\n *\n * AbiEvent.assertArgs(abiEvent, args, {\n * from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * value: 1n,\n * })\n *\n * // @error: AbiEvent.ArgsMismatchError: Given arguments to not match the arguments decoded from the log.\n * // @error: Event: event Transfer(address indexed from, address indexed to, uint256 value)\n * // @error: Expected Arguments:\n * // @error: from: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac\n * // @error: to: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad\n * // @error: value: 1\n * // @error: Given Arguments:\n * // @error: from: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad\n * // @error: to: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac\n * // @error: value: 1\n * ```\n *\n * @param abiEvent - ABI Event to check.\n * @param args - Decoded arguments.\n * @param matchArgs - The arguments to check.\n */\nexport function assertArgs<const abiEvent extends AbiEvent>(\n abiEvent: abiEvent | AbiEvent,\n args: unknown,\n matchArgs: IsNarrowable<abiEvent, AbiEvent> extends true\n ? abiEvent['inputs'] extends readonly []\n ? never\n : internal.ParametersToPrimitiveTypes<\n abiEvent['inputs'],\n { EnableUnion: true; IndexedOnly: false; Required: false }\n >\n : unknown,\n) {\n if (!args || !matchArgs)\n throw new ArgsMismatchError({\n abiEvent,\n expected: args,\n given: matchArgs,\n })\n\n function isEqual(\n input: abitype.AbiEventParameter,\n value: unknown,\n arg: unknown,\n ) {\n if (input.type === 'address')\n return Address.isEqual(value as Address.Address, arg as Address.Address)\n if (input.type === 'string')\n return Hash.keccak256(Bytes.fromString(value as string)) === arg\n if (input.type === 'bytes') return Hash.keccak256(value as Hex.Hex) === arg\n return value === arg\n }\n\n if (Array.isArray(args) && Array.isArray(matchArgs)) {\n for (const [index, value] of matchArgs.entries()) {\n if (value === null || value === undefined) continue\n const input = abiEvent.inputs[index]\n if (!input)\n throw new InputNotFoundError({\n abiEvent,\n name: `${index}`,\n })\n const value_ = Array.isArray(value) ? value : [value]\n let equal = false\n for (const value of value_) {\n if (isEqual(input, value, args[index])) equal = true\n }\n if (!equal)\n throw new ArgsMismatchError({\n abiEvent,\n expected: args,\n given: matchArgs,\n })\n }\n }\n\n if (\n typeof args === 'object' &&\n !Array.isArray(args) &&\n typeof matchArgs === 'object' &&\n !Array.isArray(matchArgs)\n )\n for (const [key, value] of Object.entries(matchArgs)) {\n if (value === null || value === undefined) continue\n const input = abiEvent.inputs.find((input) => input.name === key)\n if (!input) throw new InputNotFoundError({ abiEvent, name: key })\n const value_ = Array.isArray(value) ? value : [value]\n let equal = false\n for (const value of value_) {\n if (isEqual(input, value, (args as Record<string, unknown>)[key]))\n equal = true\n }\n if (!equal)\n throw new ArgsMismatchError({\n abiEvent,\n expected: args,\n given: matchArgs,\n })\n }\n}\n\nexport declare namespace assertArgs {\n type ErrorType =\n | Address.isEqual.ErrorType\n | Bytes.fromString.ErrorType\n | Hash.keccak256.ErrorType\n | ArgsMismatchError\n | Errors.GlobalErrorType\n}\n\n/**\n * ABI-Decodes the provided [Log Topics and Data](https://info.etherscan.com/what-is-event-logs/) according to the ABI Event's parameter types (`input`).\n *\n * :::tip\n *\n * This function is typically used to decode an [Event Log](https://info.etherscan.com/what-is-event-logs/) that may be returned from a Log Query (e.g. `eth_getLogs`) or Transaction Receipt.\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)'\n * )\n *\n * const log = {\n * // ...\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * ],\n * } as const\n *\n * const decoded = AbiEvent.decode(transfer, log)\n * // @log: {\n * // @log: from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * // @log: to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * // @log: value: 1n\n * // @log: }\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiEvent.decode` to decode the topics of a `Transfer` event on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { AbiEvent, Hex } from 'ox'\n *\n * // 1. Instantiate the `Transfer` ABI Event.\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * // 2. Encode the ABI Event into Event Topics.\n * const { topics } = AbiEvent.encode(transfer)\n *\n * // 3. Query for events matching the encoded Topics.\n * const logs = await window.ethereum!.request({\n * method: 'eth_getLogs',\n * params: [\n * {\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * fromBlock: Hex.fromNumber(19760235n),\n * toBlock: Hex.fromNumber(19760240n),\n * topics,\n * },\n * ],\n * })\n *\n * // 4. Decode the Log. // [!code focus]\n * const decoded = AbiEvent.decode(transfer, logs[0]!) // [!code focus]\n * // @log: {\n * // @log: from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * // @log: to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * // @log: value: 603n\n * // @log: }\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiEvent - The ABI Event to decode.\n * @param log - `topics` & `data` to decode.\n * @returns The decoded event.\n */\nexport function decode<const abiEvent extends AbiEvent>(\n abiEvent: abiEvent | AbiEvent,\n log: decode.Log,\n): decode.ReturnType<abiEvent> {\n const { data, topics } = log\n\n const [selector_, ...argTopics] = topics\n\n const selector = getSelector(abiEvent)\n if (selector_ !== selector)\n throw new SelectorTopicMismatchError({\n abiEvent,\n actual: selector_,\n expected: selector,\n })\n\n const { inputs } = abiEvent\n const isUnnamed = inputs?.every((x) => !('name' in x && x.name))\n\n let args: any = isUnnamed ? [] : {}\n\n // Decode topics (indexed args).\n const indexedInputs = inputs.filter((x) => 'indexed' in x && x.indexed)\n for (let i = 0; i < indexedInputs.length; i++) {\n const param = indexedInputs[i]!\n const topic = argTopics[i]\n if (!topic)\n throw new TopicsMismatchError({\n abiEvent,\n param: param as abitype.AbiParameter & { indexed: boolean },\n })\n args[isUnnamed ? i : param.name || i] = (() => {\n if (\n param.type === 'string' ||\n param.type === 'bytes' ||\n param.type === 'tuple' ||\n param.type.match(/^(.*)\\[(\\d+)?\\]$/)\n )\n return topic\n const decoded = AbiParameters.decode([param], topic) || []\n return decoded[0]\n })()\n }\n\n // Decode data (non-indexed args).\n const nonIndexedInputs = inputs.filter((x) => !('indexed' in x && x.indexed))\n if (nonIndexedInputs.length > 0) {\n if (data && data !== '0x') {\n try {\n const decodedData = AbiParameters.decode(nonIndexedInputs, data)\n if (decodedData) {\n if (isUnnamed) args = [...args, ...decodedData]\n else {\n for (let i = 0; i < nonIndexedInputs.length; i++) {\n const index = inputs.indexOf(nonIndexedInputs[i]!)\n args[nonIndexedInputs[i]!.name! || index] = decodedData[i]\n }\n }\n }\n } catch (err) {\n if (\n err instanceof AbiParameters.DataSizeTooSmallError ||\n err instanceof Cursor.PositionOutOfBoundsError\n )\n throw new DataMismatchError({\n abiEvent,\n data: data,\n parameters: nonIndexedInputs,\n size: Hex.size(data),\n })\n throw err\n }\n } else {\n throw new DataMismatchError({\n abiEvent,\n data: '0x',\n parameters: nonIndexedInputs,\n size: 0,\n })\n }\n }\n\n return Object.values(args).length > 0 ? args : undefined\n}\n\nexport declare namespace decode {\n type Log = {\n data?: Hex.Hex | undefined\n topics: readonly Hex.Hex[]\n }\n\n type ReturnType<abiEvent extends AbiEvent = AbiEvent> = IsNarrowable<\n abiEvent,\n AbiEvent\n > extends true\n ? abiEvent['inputs'] extends readonly []\n ? undefined\n : internal.ParametersToPrimitiveTypes<\n abiEvent['inputs'],\n { EnableUnion: false; IndexedOnly: false; Required: true }\n >\n : unknown\n\n type ErrorType =\n | AbiParameters.decode.ErrorType\n | getSelector.ErrorType\n | DataMismatchError\n | SelectorTopicMismatchError\n | TopicsMismatchError\n | Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes the provided event input (`inputs`) into an array of [Event Topics](https://info.etherscan.com/what-is-event-logs/).\n *\n * :::tip\n *\n * This function is typically used to encode event arguments into [Event Topics](https://info.etherscan.com/what-is-event-logs/).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)'\n * )\n *\n * const { topics } = AbiEvent.encode(transfer)\n * // @log: ['0x406dade31f7ae4b5dbc276258c28dde5ae6d5c2773c5745802c493a2360e55e0']\n * ```\n *\n * @example\n * ### Passing Arguments\n *\n * You can pass `indexed` parameter values to `AbiEvent.encode`.\n *\n * TypeScript types will be inferred from the ABI Event, to guard you from inserting the wrong values.\n *\n * For example, the `Transfer` event below accepts an `address` type for the `from` and `to` attributes.\n *\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)'\n * )\n *\n * const { topics } = AbiEvent.encode(transfer, {\n * from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // [!code hl]\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8' // [!code hl]\n * })\n * // @log: [\n * // @log: '0x406dade31f7ae4b5dbc276258c28dde5ae6d5c2773c5745802c493a2360e55e0',\n * // @log: '0x00000000000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * // @log: '0x0000000000000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c8'\n * // @log: ]\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiEvent.encode` to encode the topics of a `Transfer` event and query for events matching the encoded topics on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { AbiEvent, Hex } from 'ox'\n *\n * // 1. Instantiate the `Transfer` ABI Event.\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * // 2. Encode the ABI Event into Event Topics.\n * const { topics } = AbiEvent.encode(transfer)\n *\n * // 3. Query for events matching the encoded Topics.\n * const logs = await window.ethereum!.request({\n * method: 'eth_getLogs',\n * params: [\n * {\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * fromBlock: Hex.fromNumber(19760235n),\n * toBlock: Hex.fromNumber(19760240n),\n * topics,\n * },\n * ],\n * })\n * // @log: [\n * // @log: \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n * // @log: \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n * // @log: \"0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1\",\n * // @log: \"0x000000000000000000000000000000000000000000000000000000000000025b\",\n * // @log: ]\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiEvent - The event to encode.\n * @param args - The arguments to encode.\n * @returns The encoded event topics.\n */\nexport function encode<const abiEvent extends AbiEvent>(\n abiEvent: abiEvent | AbiEvent,\n ...[args]: encode.Args<abiEvent>\n): encode.ReturnType {\n let topics: (Hex.Hex | Hex.Hex[] | null)[] = []\n if (args && abiEvent.inputs) {\n const indexedInputs = abiEvent.inputs.filter(\n (param) => 'indexed' in param && param.indexed,\n )\n const args_ = Array.isArray(args)\n ? args\n : Object.values(args).length > 0\n ? indexedInputs?.map(\n (x: any, i: number) => (args as any)[x.name ?? i],\n ) ?? []\n : []\n\n if (args_.length > 0) {\n const encode = (param: abitype.AbiParameter, value: unknown) => {\n if (param.type === 'string')\n return Hash.keccak256(Hex.fromString(value as string))\n if (param.type === 'bytes') return Hash.keccak256(value as Hex.Hex)\n if (param.type === 'tuple' || param.type.match(/^(.*)\\[(\\d+)?\\]$/))\n throw new FilterTypeNotSupportedError(param.type)\n return AbiParameters.encode([param], [value])\n }\n\n topics =\n indexedInputs?.map((param, i) => {\n if (Array.isArray(args_[i]))\n return args_[i].map((_: any, j: number) =>\n encode(param, args_[i][j]),\n )\n return args_[i] ? encode(param, args_[i]) : null\n }) ?? []\n }\n }\n\n const selector = (() => {\n if (abiEvent.hash) return abiEvent.hash\n return getSelector(abiEvent)\n })()\n\n return { topics: [selector, ...topics] }\n}\n\nexport declare namespace encode {\n type Args<abiEvent extends AbiEvent> = IsNarrowable<\n abiEvent,\n AbiEvent\n > extends true\n ? abiEvent['inputs'] extends readonly []\n ? []\n : internal.ParametersToPrimitiveTypes<\n abiEvent['inputs']\n > extends infer result\n ? result extends readonly []\n ? []\n : [result] | []\n : []\n : [readonly unknown[] | Record<string, unknown>] | []\n\n type ReturnType = {\n topics: Compute<\n [selector: Hex.Hex, ...(Hex.Hex | readonly Hex.Hex[] | null)[]]\n >\n }\n\n type ErrorType =\n | AbiParameters.encode.ErrorType\n | getSelector.ErrorType\n | Hex.fromString.ErrorType\n | Hash.keccak256.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Formats an {@link ox#AbiEvent.AbiEvent} into a **Human Readable ABI Error**.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const formatted = AbiEvent.format({\n * type: 'event',\n * name: 'Transfer',\n * inputs: [\n * { name: 'from', type: 'address', indexed: true },\n * { name: 'to', type: 'address', indexed: true },\n * { name: 'value', type: 'uint256' },\n * ],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiEvent - The ABI Event to format.\n * @returns The formatted ABI Event.\n */\nexport function format<const abiEvent extends AbiEvent>(\n abiEvent: abiEvent | AbiEvent,\n): abitype.FormatAbiItem<abiEvent> {\n return abitype.formatAbiItem(abiEvent) as never\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Event** or **Human Readable ABI Event** into a typed {@link ox#AbiEvent.AbiEvent}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from({\n * name: 'Transfer',\n * type: 'event',\n * inputs: [\n * { name: 'from', type: 'address', indexed: true },\n * { name: 'to', type: 'address', indexed: true },\n * { name: 'value', type: 'uint256' },\n * ],\n * })\n *\n * transfer\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)' // [!code hl]\n * )\n *\n * transfer\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @param abiEvent - The ABI Event to parse.\n * @returns Typed ABI Event.\n */\nexport function from<\n const abiEvent extends AbiEvent | string | readonly string[],\n>(\n abiEvent: (abiEvent | AbiEvent | string | readonly string[]) &\n (\n | (abiEvent extends string ? internal.Signature<abiEvent> : never)\n | (abiEvent extends readonly string[]\n ? internal.Signatures<abiEvent>\n : never)\n | AbiEvent\n ),\n options: from.Options = {},\n): from.ReturnType<abiEvent> {\n return AbiItem.from(abiEvent as AbiEvent, options) as never\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether or not to prepare the extracted event (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n }\n\n type ReturnType<abiEvent extends AbiEvent | string | readonly string[]> =\n AbiItem.from.ReturnType<abiEvent>\n\n type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiEvent.AbiEvent} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Events can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiEvent } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiEvent.fromAbi(abi, 'Transfer') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Events can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiEvent } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiEvent.fromAbi(abi, '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Event from the first topic of a Log.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name<abi>,\n const args extends\n | AbiItem_internal.ExtractArgs<abi, name>\n | undefined = undefined,\n //\n allNames = Name<abi>,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n options?: AbiItem.fromAbi.Options<\n abi,\n name,\n args,\n AbiItem_internal.ExtractArgs<abi, name>\n >,\n): AbiItem.fromAbi.ReturnType<abi, name, args, AbiEvent> {\n const item = AbiItem.fromAbi(abi, name, options as any)\n if (item.type !== 'event')\n throw new AbiItem.NotFoundError({ name, type: 'event' })\n return item as never\n}\n\nexport declare namespace fromAbi {\n type ErrorType = AbiItem.fromAbi.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the event selector (hash of event signature) for an {@link ox#AbiEvent.AbiEvent}.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const selector = AbiEvent.getSelector('event Transfer(address indexed from, address indexed to, uint256 value)')\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f556a2'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const selector = AbiEvent.getSelector({\n * name: 'Transfer',\n * type: 'event',\n * inputs: [\n * { name: 'from', type: 'address', indexed: true },\n * { name: 'to', type: 'address', indexed: true },\n * { name: 'value', type: 'uint256' }\n * ]\n * })\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f556a2'\n * ```\n *\n * @param abiItem - The ABI event to compute the selector for.\n * @returns The {@link ox#Hash.(keccak256:function)} hash of the event signature.\n */\nexport function getSelector(abiItem: string | AbiEvent): Hex.Hex {\n return AbiItem.getSignatureHash(abiItem)\n}\n\nexport declare namespace getSelector {\n type ErrorType = AbiItem.getSignatureHash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Thrown when the provided arguments do not match the expected arguments.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * ],\n * })\n *\n * AbiEvent.assertArgs(abiEvent, args, {\n * from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * value: 1n,\n * })\n * // @error: AbiEvent.ArgsMismatchError: Given arguments do not match the expected arguments.\n * // @error: Event: event Transfer(address indexed from, address indexed to, uint256 value)\n * // @error: Expected Arguments:\n * // @error: from: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac\n * // @error: to: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad\n * // @error: value: 1\n * // @error: Given Arguments:\n * // @error: from: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad\n * // @error: to: 0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac\n * // @error: value: 1\n * ```\n *\n * ### Solution\n *\n * The provided arguments need to match the expected arguments.\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * ],\n * })\n *\n * AbiEvent.assertArgs(abiEvent, args, {\n * from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad', // [!code --]\n * from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac', // [!code ++]\n * to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac', // [!code --]\n * to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad', // [!code ++]\n * value: 1n,\n * })\n * ```\n */\nexport class ArgsMismatchError extends Errors.BaseError {\n override readonly name = 'AbiEvent.ArgsMismatchError'\n\n constructor({\n abiEvent,\n expected,\n given,\n }: {\n abiEvent: AbiEvent\n expected: unknown\n given: unknown\n }) {\n super('Given arguments do not match the expected arguments.', {\n metaMessages: [\n `Event: ${format(abiEvent)}`,\n `Expected Arguments: ${!expected ? 'None' : ''}`,\n expected ? prettyPrint(expected) : undefined,\n `Given Arguments: ${!given ? 'None' : ''}`,\n given ? prettyPrint(given) : undefined,\n ],\n })\n }\n}\n\n/**\n * Thrown when no argument was found on the event signature.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * ],\n * })\n *\n * AbiEvent.assertArgs(abiEvent, args, {\n * a: 'b',\n * from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * value: 1n,\n * })\n * // @error: AbiEvent.InputNotFoundError: Parameter \"a\" not found on `event Transfer(address indexed from, address indexed to, uint256 value)`.\n * ```\n *\n * ### Solution\n *\n * Ensure the arguments match the event signature.\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * ],\n * })\n *\n * AbiEvent.assertArgs(abiEvent, args, {\n * a: 'b', // [!code --]\n * from: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * to: '0xa5cc3c03994db5b0d9a5eedd10cabab0813678ad',\n * value: 1n,\n * })\n * ```\n */\nexport class InputNotFoundError extends Errors.BaseError {\n override readonly name = 'AbiEvent.InputNotFoundError'\n\n constructor({\n abiEvent,\n name,\n }: {\n abiEvent: AbiEvent\n name: string\n }) {\n super(`Parameter \"${name}\" not found on \\`${format(abiEvent)}\\`.`)\n }\n}\n\n/**\n * Thrown when the provided data size does not match the expected size from the non-indexed parameters.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address to, uint256 value)',\n * // ↑ 32 bytes + ↑ 32 bytes = 64 bytes\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000023c34600',\n * // ↑ 32 bytes ❌\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * ],\n * })\n * // @error: AbiEvent.DataMismatchError: Data size of 32 bytes is too small for non-indexed event parameters.\n * // @error: Non-indexed Parameters: (address to, uint256 value)\n * // @error: Data: 0x0000000000000000000000000000000000000000000000000000000023c34600 (32 bytes)\n * ```\n *\n * ### Solution\n *\n * Ensure that the data size matches the expected size.\n *\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address to, uint256 value)',\n * // ↑ 32 bytes + ↑ 32 bytes = 64 bytes\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660000000000000000000000000000000000000000000000000000000023c34600',\n * // ↑ 64 bytes ✅\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * ],\n * })\n * ```\n */\nexport class DataMismatchError extends Errors.BaseError {\n override readonly name = 'AbiEvent.DataMismatchError'\n\n abiEvent: AbiEvent\n data: Hex.Hex\n parameters: readonly abitype.AbiParameter[]\n size: number\n\n constructor({\n abiEvent,\n data,\n parameters,\n size,\n }: {\n abiEvent: AbiEvent\n data: Hex.Hex\n parameters: readonly abitype.AbiParameter[]\n size: number\n }) {\n super(\n [\n `Data size of ${size} bytes is too small for non-indexed event parameters.`,\n ].join('\\n'),\n {\n metaMessages: [\n `Non-indexed Parameters: (${AbiParameters.format(parameters as any)})`,\n `Data: ${data} (${size} bytes)`,\n ],\n },\n )\n\n this.abiEvent = abiEvent\n this.data = data\n this.parameters = parameters\n this.size = size\n }\n}\n\n/**\n * Thrown when the provided topics do not match the expected number of topics.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * ],\n * })\n * // @error: AbiEvent.TopicsMismatchError: Expected a topic for indexed event parameter \"to\" for \"event Transfer(address indexed from, address indexed to, uint256 value)\".\n * ```\n *\n * ### Solution\n *\n * Ensure that the topics match the expected number of topics.\n *\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const abiEvent = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 value)',\n * )\n *\n * const args = AbiEvent.decode(abiEvent, {\n * data: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000a5cc3c03994db5b0d9a5eedd10cabab0813678ac',\n * '0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266', // [!code ++]\n * ],\n * })\n * ```\n *\n */\nexport class TopicsMismatchError extends Errors.BaseError {\n override readonly name = 'AbiEvent.TopicsMismatchError'\n\n abiEvent: AbiEvent\n\n constructor({\n abiEvent,\n param,\n }: {\n abiEvent: AbiEvent\n param: abitype.AbiParameter & { indexed: boolean }\n }) {\n super(\n [\n `Expected a topic for indexed event parameter${\n param.name ? ` \"${param.name}\"` : ''\n } for \"${format(abiEvent)}\".`,\n ].join('\\n'),\n )\n\n this.abiEvent = abiEvent\n }\n}\n\n/**\n * Thrown when the provided selector does not match the expected selector.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, bool sender)',\n * )\n *\n * AbiEvent.decode(transfer, {\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045',\n * '0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * ],\n * })\n * // @error: AbiEvent.SelectorTopicMismatchError: topics[0]=\"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\" does not match the expected topics[0]=\"0x3da3cd3cf420c78f8981e7afeefa0eab1f0de0eb56e78ad9ba918ed01c0b402f\".\n * // @error: Event: event Transfer(address indexed from, address indexed to, bool sender)\n * // @error: Selector: 0x3da3cd3cf420c78f8981e7afeefa0eab1f0de0eb56e78ad9ba918ed01c0b402f\n * ```\n *\n * ### Solution\n *\n * Ensure that the provided selector matches the selector of the event signature.\n *\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, bool sender)',\n * )\n *\n * AbiEvent.decode(transfer, {\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', // [!code --]\n * '0x3da3cd3cf420c78f8981e7afeefa0eab1f0de0eb56e78ad9ba918ed01c0b402f', // [!code ++]\n * '0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045',\n * '0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * ],\n * })\n * ```\n */\nexport class SelectorTopicMismatchError extends Errors.BaseError {\n override readonly name = 'AbiEvent.SelectorTopicMismatchError'\n\n constructor({\n abiEvent,\n actual,\n expected,\n }: {\n abiEvent: AbiEvent\n actual: Hex.Hex | undefined\n expected: Hex.Hex\n }) {\n super(\n `topics[0]=\"${actual}\" does not match the expected topics[0]=\"${expected}\".`,\n {\n metaMessages: [`Event: ${format(abiEvent)}`, `Selector: ${expected}`],\n },\n )\n }\n}\n\n/**\n * Thrown when the provided filter type is not supported.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from('event Transfer((string) indexed a, string b)')\n *\n * AbiEvent.encode(transfer, {\n * a: ['hello'],\n * })\n * // @error: AbiEvent.FilterTypeNotSupportedError: Filter type \"tuple\" is not supported.\n * ```\n *\n * ### Solution\n *\n * Provide a valid event input type.\n *\n * ```ts twoslash\n * // @noErrors\n * import { AbiEvent } from 'ox'\n *\n * const transfer = AbiEvent.from('event Transfer((string) indexed a, string b)') // [!code --]\n * const transfer = AbiEvent.from('event Transfer(string indexed a, string b)') // [!code ++]\n * ```\n *\n *\n */\nexport class FilterTypeNotSupportedError extends Errors.BaseError {\n override readonly name = 'AbiEvent.FilterTypeNotSupportedError'\n constructor(type: string) {\n super(`Filter type \"${type}\" is not supported.`)\n }\n}\n", "import * as abitype from 'abitype'\nimport type * as Abi from './Abi.js'\nimport * as AbiItem from './AbiItem.js'\nimport * as AbiParameters from './AbiParameters.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type * as internal from './internal/abiFunction.js'\nimport type * as AbiItem_internal from './internal/abiItem.js'\nimport type * as AbiParameters_internal from './internal/abiParameters.js'\nimport type { IsNarrowable } from './internal/types.js'\n\n/** Root type for an {@link ox#AbiItem.AbiItem} with a `function` type. */\nexport type AbiFunction = abitype.AbiFunction & {\n hash?: Hex.Hex | undefined\n overloads?: readonly AbiFunction[] | undefined\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} item from an {@link ox#Abi.Abi}, given a name.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo(string)',\n * 'function bar(uint256)',\n * ])\n *\n * type Foo = AbiFunction.FromAbi<typeof abi, 'foo'>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type FromAbi<\n abi extends Abi.Abi,\n name extends ExtractNames<abi>,\n> = abitype.ExtractAbiFunction<abi, name>\n\n/**\n * Extracts the names of all {@link ox#AbiFunction.AbiFunction} items in an {@link ox#Abi.Abi}.\n *\n * @example\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo(string)',\n * 'function bar(uint256)',\n * ])\n *\n * type names = AbiFunction.Name<typeof abi>\n * // ^?\n *\n *\n * ```\n */\nexport type Name<abi extends Abi.Abi | readonly unknown[] = Abi.Abi> =\n abi extends Abi.Abi ? ExtractNames<abi> : string\n\nexport type ExtractNames<\n abi extends Abi.Abi,\n abiStateMutability extends\n abitype.AbiStateMutability = abitype.AbiStateMutability,\n> = abitype.ExtractAbiFunctionNames<abi, abiStateMutability>\n\n/**\n * ABI-decodes function arguments according to the ABI Item's input types (`inputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData(\n * approve,\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n *\n * const input = AbiFunction.decodeData(approve, data) // [!code focus]\n * // @log: ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * ```\n *\n * @param abiFunction - The ABI Item to decode.\n * @param data - The data to decode.\n */\nexport function decodeData<const abiItem extends AbiFunction>(\n abiFunction: abiItem | AbiFunction,\n data: Hex.Hex,\n): decodeData.ReturnType<abiItem> {\n const { overloads } = abiFunction\n\n if (Hex.size(data) < 4) throw new AbiItem.InvalidSelectorSizeError({ data })\n if (abiFunction.inputs.length === 0) return undefined\n\n const item = overloads\n ? fromAbi([abiFunction, ...overloads], data as never)\n : abiFunction\n\n if (Hex.size(data) <= 4) return undefined\n return AbiParameters.decode(item.inputs, Hex.slice(data, 4))\n}\n\nexport declare namespace decodeData {\n type ReturnType<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<\n abiFunction,\n AbiFunction\n > extends true\n ? abiFunction['inputs'] extends readonly []\n ? undefined\n :\n | AbiParameters_internal.ToPrimitiveTypes<abiFunction['inputs']>\n | (abiFunction['overloads'] extends readonly AbiFunction[]\n ? AbiParameters_internal.ToPrimitiveTypes<\n abiFunction['overloads'][number]['inputs']\n >\n : never)\n : unknown\n\n type ErrorType =\n | fromAbi.ErrorType\n | AbiParameters.decode.ErrorType\n | Hex.size.ErrorType\n | Hex.slice.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * ABI-decodes a function's result according to the ABI Item's output types (`outputs`).\n *\n * :::tip\n *\n * This function is typically used to decode contract function return values (e.g. the response of an `eth_call` or the `input` property of a Transaction).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const data = '0x000000000000000000000000000000000000000000000000000000000000002a'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const totalSupply = AbiFunction.fromAbi(erc20Abi, 'totalSupply') // [!code hl]\n *\n * const output = AbiFunction.decodeResult(totalSupply, data)\n * // @log: 42n\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.decodeResult` to decode the result of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n * // ...\n * {\n * name: 'balanceOf',\n * type: 'function',\n * inputs: [{ name: 'account', type: 'address' }],\n * outputs: [{ name: 'balance', type: 'uint256' }],\n * stateMutability: 'view',\n * },\n * // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input.\n * const data = AbiFunction.encodeData(\n * balanceOf,\n * ['0xd2135CfB216b74109775236E36d4b433F1DF507B']\n * )\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n * method: 'eth_call',\n * params: [\n * {\n * data,\n * to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * },\n * ],\n * })\n *\n * // 4. Decode the Function Output. // [!code focus]\n * const balance = AbiFunction.decodeResult(balanceOf, response) // [!code focus]\n * // @log: 42n\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to decode\n * @param data - ABI-encoded function output\n * @param options - Decoding options\n * @returns Decoded function output\n */\nexport function decodeResult<\n const abiFunction extends AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n>(\n abiFunction: abiFunction | AbiFunction,\n data: Hex.Hex,\n options: decodeResult.Options<as> = {},\n): decodeResult.ReturnType<abiFunction, as> {\n const values = AbiParameters.decode(abiFunction.outputs, data, options)\n if (values && Object.keys(values).length === 0) return undefined\n if (values && Object.keys(values).length === 1) {\n if (Array.isArray(values)) return values[0]\n return Object.values(values)[0]\n }\n return values\n}\n\nexport declare namespace decodeResult {\n type Options<as extends 'Object' | 'Array'> = {\n /**\n * Whether the decoded values should be returned as an `Object` or `Array`.\n *\n * @default \"Array\"\n */\n as?: as | 'Array' | 'Object' | undefined\n }\n\n type ReturnType<\n abiFunction extends AbiFunction = AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n > = IsNarrowable<abiFunction, AbiFunction> extends true\n ? abiFunction['outputs'] extends readonly []\n ? undefined\n : abiFunction['outputs'] extends readonly [\n infer type extends abitype.AbiParameter,\n ]\n ? abitype.AbiParameterToPrimitiveType<type>\n : AbiParameters.decode.ReturnType<\n abiFunction['outputs'],\n as\n > extends infer types\n ? types extends readonly []\n ? undefined\n : types extends readonly [infer type]\n ? type\n : types\n : never\n : unknown\n\n type ErrorType = AbiParameters.decode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes function arguments (`inputs`), prefixed with the 4 byte function selector.\n *\n * :::tip\n *\n * This function is typically used to encode a contract function and its arguments for contract calls (e.g. `data` parameter of an `eth_call` or `eth_sendTransaction`).\n *\n * See the [End-to-end Example](#end-to-end).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from('function approve(address, uint256)')\n *\n * const data = AbiFunction.encodeData( // [!code focus]\n * approve, // [!code focus]\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n] // [!code focus]\n * ) // [!code focus]\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * You can extract an ABI Function from a JSON ABI with {@link ox#AbiFunction.(fromAbi:function)}:\n *\n * ```ts twoslash\n * // @noErrors\n * import { Abi, AbiFunction } from 'ox'\n *\n * const erc20Abi = Abi.from([...]) // [!code hl]\n * const approve = AbiFunction.fromAbi(erc20Abi, 'approve') // [!code hl]\n *\n * const data = AbiFunction.encodeData(\n * approve,\n * ['0xd8da6bf26964af9d7eed9e03e53415d37aa96045', 69420n]\n * )\n * // @log: '0x095ea7b3000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000010f2c'\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `AbiFunction.encodeData` to encode the input of a `balanceOf` contract call on the [Wagmi Mint Example contract](https://etherscan.io/address/0xfba3912ca04dd458c843e2ee08967fc04f3579c2).\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Abi, AbiFunction } from 'ox'\n *\n * // 1. Extract the Function from the Contract's ABI.\n * const abi = Abi.from([\n * // ...\n * {\n * name: 'balanceOf',\n * type: 'function',\n * inputs: [{ name: 'account', type: 'address' }],\n * outputs: [{ name: 'balance', type: 'uint256' }],\n * stateMutability: 'view',\n * },\n * // ...\n * ])\n * const balanceOf = AbiFunction.fromAbi(abi, 'balanceOf')\n *\n * // 2. Encode the Function Input. // [!code focus]\n * const data = AbiFunction.encodeData( // [!code focus]\n * balanceOf, // [!code focus]\n * ['0xd2135CfB216b74109775236E36d4b433F1DF507B'] // [!code focus]\n * ) // [!code focus]\n *\n * // 3. Perform the Contract Call.\n * const response = await window.ethereum!.request({\n * method: 'eth_call',\n * params: [\n * {\n * data,\n * to: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * },\n * ],\n * })\n *\n * // 4. Decode the Function Output.\n * const balance = AbiFunction.decodeResult(balanceOf, response)\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param abiFunction - ABI Function to encode\n * @param args - Function arguments\n * @returns ABI-encoded function name and arguments\n */\nexport function encodeData<const abiFunction extends AbiFunction>(\n abiFunction: abiFunction | AbiFunction,\n ...args: encodeData.Args<abiFunction>\n): Hex.Hex {\n const { overloads } = abiFunction\n\n const item = overloads\n ? (fromAbi([abiFunction as AbiFunction, ...overloads], abiFunction.name, {\n args: (args as any)[0],\n }) as AbiFunction)\n : abiFunction\n\n const selector = getSelector(item)\n\n const data =\n args.length > 0\n ? AbiParameters.encode(item.inputs, (args as any)[0])\n : undefined\n\n return data ? Hex.concat(selector, data) : selector\n}\n\nexport declare namespace encodeData {\n type Args<abiFunction extends AbiFunction = AbiFunction> = IsNarrowable<\n abiFunction,\n AbiFunction\n > extends true\n ?\n | (abitype.AbiParametersToPrimitiveTypes<\n abiFunction['inputs']\n > extends readonly []\n ? []\n : [abitype.AbiParametersToPrimitiveTypes<abiFunction['inputs']>])\n | (abiFunction['overloads'] extends readonly AbiFunction[]\n ? [\n abitype.AbiParametersToPrimitiveTypes<\n abiFunction['overloads'][number]['inputs']\n >,\n ]\n : [])\n : readonly unknown[]\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * ABI-encodes a function's result (`outputs`).\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const totalSupply = AbiFunction.from('function totalSupply() returns (uint256)')\n * const output = AbiFunction.decodeResult(totalSupply, '0x000000000000000000000000000000000000000000000000000000000000002a')\n * // 42n\n *\n * const data = AbiFunction.encodeResult(totalSupply, 42n) // [!code focus]\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000002a'\n * ```\n *\n * @param abiFunction - The ABI item to encode the function output for.\n * @param output - The function output to encode.\n * @param options - Encoding options.\n * @returns The encoded function output.\n */\nexport function encodeResult<\n const abiFunction extends AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n>(\n abiFunction: abiFunction | AbiFunction,\n output: encodeResult.Output<abiFunction, as>,\n options: encodeResult.Options<as> = {},\n): Hex.Hex {\n const { as = 'Array' } = options\n\n const values = (() => {\n if (abiFunction.outputs.length === 1) return [output]\n if (Array.isArray(output)) return output\n if (as === 'Object') return Object.values(output as any)\n return [output]\n })()\n\n return AbiParameters.encode(abiFunction.outputs, values)\n}\n\nexport declare namespace encodeResult {\n type Output<\n abiFunction extends AbiFunction = AbiFunction,\n as extends 'Object' | 'Array' = 'Array',\n > = abiFunction['outputs'] extends readonly []\n ? never\n : abiFunction['outputs']['length'] extends 1\n ? AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>[0]\n : as extends 'Object'\n ? AbiParameters_internal.ToObject<abiFunction['outputs']>\n : AbiParameters_internal.ToPrimitiveTypes<abiFunction['outputs']>\n\n type Options<as extends 'Object' | 'Array'> = {\n as?: as | 'Object' | 'Array' | undefined\n }\n\n type ErrorType = AbiParameters.encode.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Formats an {@link ox#AbiFunction.AbiFunction} into a **Human Readable ABI Function**.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const formatted = AbiFunction.format({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * formatted\n * // ^?\n *\n *\n * ```\n *\n * @param abiFunction - The ABI Function to format.\n * @returns The formatted ABI Function.\n */\nexport function format<const abiFunction extends AbiFunction>(\n abiFunction: abiFunction | AbiFunction,\n): abitype.FormatAbiItem<abiFunction> {\n return abitype.formatAbiItem(abiFunction) as never\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses an arbitrary **JSON ABI Function** or **Human Readable ABI Function** into a typed {@link ox#AbiFunction.AbiFunction}.\n *\n * @example\n * ### JSON ABIs\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from({\n * type: 'function',\n * name: 'approve',\n * stateMutability: 'nonpayable',\n * inputs: [\n * {\n * name: 'spender',\n * type: 'address',\n * },\n * {\n * name: 'amount',\n * type: 'uint256',\n * },\n * ],\n * outputs: [{ type: 'bool' }],\n * })\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Human Readable ABIs\n *\n * A Human Readable ABI can be parsed into a typed ABI object:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from(\n * 'function approve(address spender, uint256 amount) returns (bool)' // [!code hl]\n * )\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * It is possible to specify `struct`s along with your definitions:\n *\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const approve = AbiFunction.from([\n * 'struct Foo { address spender; uint256 amount; }', // [!code hl]\n * 'function approve(Foo foo) returns (bool)',\n * ])\n *\n * approve\n * //^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n *\n *\n * @param abiFunction - The ABI Function to parse.\n * @returns Typed ABI Function.\n */\nexport function from<\n const abiFunction extends AbiFunction | string | readonly string[],\n>(\n abiFunction: (abiFunction | AbiFunction | string | readonly string[]) &\n (\n | (abiFunction extends string ? internal.Signature<abiFunction> : never)\n | (abiFunction extends readonly string[]\n ? internal.Signatures<abiFunction>\n : never)\n | AbiFunction\n ),\n options: from.Options = {},\n): from.ReturnType<abiFunction> {\n return AbiItem.from(abiFunction as AbiFunction, options) as never\n}\n\nexport declare namespace from {\n type Options = {\n /**\n * Whether or not to prepare the extracted function (optimization for encoding performance).\n * When `true`, the `hash` property is computed and included in the returned value.\n *\n * @default true\n */\n prepare?: boolean | undefined\n }\n\n type ReturnType<\n abiFunction extends AbiFunction | string | readonly string[],\n > = AbiItem.from.ReturnType<abiFunction>\n\n type ErrorType = AbiItem.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Extracts an {@link ox#AbiFunction.AbiFunction} from an {@link ox#Abi.Abi} given a name and optional arguments.\n *\n * @example\n * ### Extracting by Name\n *\n * ABI Functions can be extracted by their name using the `name` option:\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n *\n * const item = AbiFunction.fromAbi(abi, 'foo') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Extracting by Selector\n *\n * ABI Functions can be extract by their selector when {@link ox#Hex.Hex} is provided to `name`.\n *\n * ```ts twoslash\n * import { Abi, AbiFunction } from 'ox'\n *\n * const abi = Abi.from([\n * 'function foo()',\n * 'event Transfer(address owner, address to, uint256 tokenId)',\n * 'function bar(string a) returns (uint256 x)',\n * ])\n * const item = AbiFunction.fromAbi(abi, '0x095ea7b3') // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::note\n *\n * Extracting via a hex selector is useful when extracting an ABI Function from an `eth_call` RPC response or\n * from a Transaction `input`.\n *\n * :::\n *\n * @param abi - The ABI to extract from.\n * @param name - The name (or selector) of the ABI item to extract.\n * @param options - Extraction options.\n * @returns The ABI item.\n */\nexport function fromAbi<\n const abi extends Abi.Abi | readonly unknown[],\n name extends Name<abi>,\n const args extends\n | AbiItem_internal.ExtractArgs<abi, name>\n | undefined = undefined,\n //\n allNames = Name<abi>,\n>(\n abi: abi | Abi.Abi | readonly unknown[],\n name: Hex.Hex | (name extends allNames ? name : never),\n options?: AbiItem.fromAbi.Options<\n abi,\n name,\n args,\n AbiItem_internal.ExtractArgs<abi, name>\n >,\n): AbiItem.fromAbi.ReturnType<abi, name, args, AbiFunction> {\n const item = AbiItem.fromAbi(abi, name, options as any)\n if (item.type !== 'function')\n throw new AbiItem.NotFoundError({ name, type: 'function' })\n return item as never\n}\n\nexport declare namespace fromAbi {\n type ErrorType = AbiItem.fromAbi.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the [4-byte selector](https://solidity-by-example.org/function-selector/) for an {@link ox#AbiFunction.AbiFunction}.\n *\n * Useful for computing function selectors for calldata.\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector('function ownerOf(uint256 tokenId)')\n * // @log: '0x6352211e'\n * ```\n *\n * @example\n * ```ts twoslash\n * import { AbiFunction } from 'ox'\n *\n * const selector = AbiFunction.getSelector({\n * inputs: [{ type: 'uint256' }],\n * name: 'ownerOf',\n * outputs: [],\n * stateMutability: 'view',\n * type: 'function'\n * })\n * // @log: '0x6352211e'\n * ```\n *\n * @param abiItem - The ABI item to compute the selector for.\n * @returns The first 4 bytes of the {@link ox#Hash.(keccak256:function)} hash of the function signature.\n */\nexport function getSelector(abiItem: string | AbiFunction): Hex.Hex {\n return AbiItem.getSelector(abiItem)\n}\n\nexport declare namespace getSelector {\n type ErrorType = AbiItem.getSelector.ErrorType | Errors.GlobalErrorType\n}\n", "import * as Address from './Address.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport type { Compute, Mutable } from './internal/types.js'\n\nexport type AccessList = Compute<readonly Item[]>\n\nexport type Item = Compute<{\n address: Address.Address\n storageKeys: readonly Hex.Hex[]\n}>\n\nexport type ItemTuple = Compute<\n [address: Address.Address, storageKeys: readonly Hex.Hex[]]\n>\n\nexport type Tuple = readonly ItemTuple[]\n\n/**\n * Converts a list of Access List tuples into a object-formatted list.\n *\n * @example\n * ```ts twoslash\n * import { AccessList } from 'ox'\n *\n * const accessList = AccessList.fromTupleList([\n * [\n * '0x0000000000000000000000000000000000000000',\n * [\n * '0x0000000000000000000000000000000000000000000000000000000000000001',\n * '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe',\n * ],\n * ],\n * ])\n * // @log: [\n * // @log: {\n * // @log: address: '0x0000000000000000000000000000000000000000',\n * // @log: storageKeys: [\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * // @log: '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe',\n * // @log: ],\n * // @log: },\n * // @log: ]\n * ```\n *\n * @param accessList - List of tuples.\n * @returns Access list.\n */\nexport function fromTupleList(accessList: Tuple): AccessList {\n const list: Mutable<AccessList> = []\n for (let i = 0; i < accessList.length; i++) {\n const [address, storageKeys] = accessList[i] as [Hex.Hex, Hex.Hex[]]\n\n if (address) Address.assert(address, { strict: false })\n\n list.push({\n address: address,\n storageKeys: storageKeys.map((key) =>\n Hash.validate(key) ? key : Hex.trimLeft(key),\n ),\n })\n }\n return list\n}\n\n/**\n * Converts a structured Access List into a list of tuples.\n *\n * @example\n * ```ts twoslash\n * import { AccessList } from 'ox'\n *\n * const accessList = AccessList.toTupleList([\n * {\n * address: '0x0000000000000000000000000000000000000000',\n * storageKeys: [\n * '0x0000000000000000000000000000000000000000000000000000000000000001',\n * '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe'],\n * },\n * ])\n * // @log: [\n * // @log: [\n * // @log: '0x0000000000000000000000000000000000000000',\n * // @log: [\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * // @log: '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe',\n * // @log: ],\n * // @log: ],\n * // @log: ]\n * ```\n *\n * @param accessList - Access list.\n * @returns List of tuples.\n */\nexport function toTupleList(\n accessList?: AccessList | undefined,\n): Compute<Tuple> {\n if (!accessList || accessList.length === 0) return []\n\n const tuple: Mutable<Tuple> = []\n for (const { address, storageKeys } of accessList) {\n for (let j = 0; j < storageKeys.length; j++)\n if (Hex.size(storageKeys[j]!) !== 32)\n throw new InvalidStorageKeySizeError({\n storageKey: storageKeys[j]!,\n })\n\n if (address) Address.assert(address, { strict: false })\n\n tuple.push([address, storageKeys])\n }\n return tuple\n}\n\n/** Thrown when the size of a storage key is invalid. */\nexport class InvalidStorageKeySizeError extends Errors.BaseError {\n override readonly name = 'AccessList.InvalidStorageKeySizeError'\n constructor({ storageKey }: { storageKey: Hex.Hex }) {\n super(\n `Size for storage key \"${storageKey}\" is invalid. Expected 32 bytes. Got ${Hex.size(storageKey)} bytes.`,\n )\n }\n}\n", "export {};\n//# sourceMappingURL=AccountProof.js.map", "import * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\nexport const ivLength = 16\n\n/**\n * Decrypts encrypted data using AES-GCM.\n *\n * @example\n * ```ts twoslash\n * import { AesGcm, Hex } from 'ox'\n *\n * const key = await AesGcm.getKey({ password: 'qwerty' })\n * const secret = Hex.fromString('i am a secret message')\n *\n * const encrypted = await AesGcm.encrypt(secret, key)\n *\n * const decrypted = await AesGcm.decrypt(encrypted, key) // [!code focus]\n * // @log: Hex.fromString('i am a secret message')\n * ```\n *\n * @param value - The data to encrypt.\n * @param key - The `CryptoKey` to use for encryption.\n * @param options - Decryption options.\n * @returns The decrypted data.\n */\nexport async function decrypt<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Bytes.Bytes | Hex.Hex,\n key: CryptoKey,\n options: decrypt.Options<as> = {},\n): Promise<decrypt.ReturnType<as>> {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const encrypted = Bytes.from(value)\n const iv = encrypted.slice(0, ivLength)\n const data = encrypted.slice(ivLength)\n const decrypted = await globalThis.crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n Bytes.from(data),\n )\n const result = new Uint8Array(decrypted)\n if (as === 'Bytes') return result as never\n return Hex.from(result) as never\n}\n\nexport declare namespace decrypt {\n type Options<as extends 'Bytes' | 'Hex' = 'Bytes' | 'Hex'> = {\n /** The output format. @default 'Bytes' */\n as?: as | 'Bytes' | 'Hex' | undefined\n }\n\n type ReturnType<as extends 'Bytes' | 'Hex' = 'Bytes' | 'Hex'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.from.ErrorType\n | Hex.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encrypts data using AES-GCM.\n *\n * @example\n * ```ts twoslash\n * import { AesGcm, Hex } from 'ox'\n *\n * const key = await AesGcm.getKey({ password: 'qwerty' })\n * const secret = Hex.fromString('i am a secret message')\n *\n * const encrypted = await AesGcm.encrypt(secret, key) // [!code focus]\n * // @log: '0x5e257b25bcf53d5431e54e5a68ca0138306d31bb6154f35a97bb8ea18111e7d82bcf619d3c76c4650688bc5310eed80b8fc86d1e3e'\n * ```\n *\n * @param value - The data to encrypt.\n * @param key - The `CryptoKey` to use for encryption.\n * @param options - Encryption options.\n * @returns The encrypted data.\n */\nexport async function encrypt<\n value extends Hex.Hex | Bytes.Bytes,\n as extends 'Bytes' | 'Hex' =\n | (value extends Hex.Hex ? 'Hex' : never)\n | (value extends Bytes.Bytes ? 'Bytes' : never),\n>(\n value: value | Bytes.Bytes | Hex.Hex,\n key: CryptoKey,\n options: encrypt.Options<as> = {},\n): Promise<encrypt.ReturnType<as>> {\n const { as = typeof value === 'string' ? 'Hex' : 'Bytes' } = options\n const iv = Bytes.random(ivLength)\n const encrypted = await globalThis.crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n Bytes.from(value),\n )\n const result = Bytes.concat(iv, new Uint8Array(encrypted))\n if (as === 'Bytes') return result as never\n return Hex.from(result) as never\n}\n\nexport declare namespace encrypt {\n type Options<as extends 'Bytes' | 'Hex' = 'Bytes' | 'Hex'> = {\n /** The output format. @default 'Hex' */\n as?: as | 'Bytes' | 'Hex' | undefined\n }\n\n type ReturnType<as extends 'Bytes' | 'Hex' = 'Bytes' | 'Hex'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Bytes.concat.ErrorType\n | Bytes.from.ErrorType\n | Bytes.random.ErrorType\n | Hex.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Derives an AES-GCM key from a password using PBKDF2.\n *\n * @example\n * ```ts twoslash\n * import { AesGcm } from 'ox'\n *\n * const key = await AesGcm.getKey({ password: 'qwerty' })\n * // @log: CryptoKey {}\n * ```\n *\n * @param options - Options for key derivation.\n * @returns The derived key.\n */\nexport async function getKey(options: getKey.Options): Promise<CryptoKey> {\n const { iterations = 900_000, password, salt = randomSalt(32) } = options\n const baseKey = await globalThis.crypto.subtle.importKey(\n 'raw',\n Bytes.fromString(password),\n { name: 'PBKDF2' },\n false,\n ['deriveBits', 'deriveKey'],\n )\n const key = await globalThis.crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt,\n iterations,\n hash: 'SHA-256',\n },\n baseKey,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt'],\n )\n return key\n}\n\nexport declare namespace getKey {\n type Options = {\n /** The number of iterations to use. @default 900_000 */\n iterations?: number | undefined\n /** Password to derive key from. */\n password: string\n /** Salt to use for key derivation. @default `AesGcm.randomSalt(32)` */\n salt?: Bytes.Bytes | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Generates a random salt of the specified size.\n *\n * @example\n * ```ts twoslash\n * import { AesGcm } from 'ox'\n *\n * const salt = AesGcm.randomSalt()\n * // @log: Uint8Array [123, 79, 183, 167, 163, 136, 136, 16, 168, 126, 13, 165, 170, 166, 136, 136, 16, 168, 126, 13, 165, 170, 166, 136, 136, 16, 168, 126, 13, 165, 170, 166]\n * ```\n *\n * @param size - The size of the salt to generate. Defaults to `32`.\n * @returns A random salt of the specified size.\n */\nexport function randomSalt(size = 32): Bytes.Bytes {\n return Bytes.random(size)\n}\n\nexport declare namespace randomSalt {\n type ErrorType = Bytes.random.ErrorType | Errors.GlobalErrorType\n}\n", "import type * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\nimport type { Compute, Mutable, Undefined } from './internal/types.js'\n\n/** Root type for an EIP-7702 Authorization. */\nexport type Authorization<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n> = Compute<\n {\n /** Address of the contract to set as code for the Authority. */\n address: Address.Address\n /** Chain ID to authorize. */\n chainId: numberType\n /** Nonce of the Authority to authorize. */\n nonce: bigintType\n } & (signed extends true\n ? Signature.Signature<true, bigintType, numberType>\n : Undefined<Signature.Signature>)\n>\n\n/** RPC representation of an {@link ox#Authorization.Authorization}. */\nexport type Rpc = Authorization<true, Hex.Hex, Hex.Hex>\n\n/** List of {@link ox#Authorization.Authorization}. */\nexport type List<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n> = Compute<readonly Authorization<signed, bigintType, numberType>[]>\n\n/** RPC representation of an {@link ox#Authorization.List}. */\nexport type ListRpc = List<true, Hex.Hex, Hex.Hex>\n\n/** Signed representation of a list of {@link ox#Authorization.Authorization}. */\nexport type ListSigned<bigintType = bigint, numberType = number> = List<\n true,\n bigintType,\n numberType\n>\n\n/** Signed representation of an {@link ox#Authorization.Authorization}. */\nexport type Signed<bigintType = bigint, numberType = number> = Authorization<\n true,\n bigintType,\n numberType\n>\n\n/** Tuple representation of an {@link ox#Authorization.Authorization}. */\nexport type Tuple<signed extends boolean = boolean> = signed extends true\n ? readonly [\n chainId: Hex.Hex,\n address: Hex.Hex,\n nonce: Hex.Hex,\n yParity: Hex.Hex,\n r: Hex.Hex,\n s: Hex.Hex,\n ]\n : readonly [chainId: Hex.Hex, address: Hex.Hex, nonce: Hex.Hex]\n\n/** Tuple representation of a signed {@link ox#Authorization.Authorization}. */\nexport type TupleSigned = Tuple<true>\n\n/** Tuple representation of a list of {@link ox#Authorization.Authorization}. */\nexport type TupleList<signed extends boolean = boolean> =\n readonly Tuple<signed>[]\n\n/** Tuple representation of a list of signed {@link ox#Authorization.Authorization}. */\nexport type TupleListSigned = TupleList<true>\n\n/**\n * Converts an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization object into a typed {@link ox#Authorization.Authorization}.\n *\n * @example\n * An Authorization can be instantiated from an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * A {@link ox#Signature.Signature} can be attached with the `signature` option. The example below demonstrates signing\n * an Authorization with {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * chainId: 1,\n * nonce: 40n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: Authorization.getSignPayload(authorization),\n * privateKey: '0x...',\n * })\n *\n * const authorization_signed = Authorization.from(authorization, { signature }) // [!code focus]\n * ```\n *\n * @param authorization - An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple in object format.\n * @param options - Authorization options.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function from<\n const authorization extends Authorization | Rpc,\n const signature extends Signature.Signature | undefined = undefined,\n>(\n authorization: authorization | Authorization,\n options: from.Options<signature> = {},\n): from.ReturnType<authorization, signature> {\n if (typeof authorization.chainId === 'string')\n return fromRpc(authorization) as never\n return { ...authorization, ...options.signature } as never\n}\n\nexport declare namespace from {\n type Options<\n signature extends Signature.Signature | undefined =\n | Signature.Signature\n | undefined,\n > = {\n /** The {@link ox#Signature.Signature} to attach to the Authorization. */\n signature?: signature | Signature.Signature | undefined\n }\n\n type ReturnType<\n authorization extends Authorization | Rpc = Authorization,\n signature extends Signature.Signature | undefined =\n | Signature.Signature\n | undefined,\n > = Compute<\n authorization extends Rpc\n ? Signed\n : authorization &\n (signature extends Signature.Signature ? Readonly<signature> : {})\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Rpc} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromRpc({\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: '0x1',\n * nonce: '0x1',\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * })\n * ```\n *\n * @param authorization - The RPC-formatted Authorization.\n * @returns A signed {@link ox#Authorization.Authorization}.\n */\nexport function fromRpc(authorization: Rpc): Signed {\n const { address, chainId, nonce } = authorization\n const signature = Signature.extract(authorization)!\n\n return {\n address,\n chainId: Number(chainId),\n nonce: BigInt(nonce),\n ...signature,\n }\n}\n\nexport declare namespace fromRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.ListRpc} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromRpcList([{\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: '0x1',\n * nonce: '0x1',\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * }])\n * ```\n *\n * @param authorizationList - The RPC-formatted Authorization list.\n * @returns A signed {@link ox#Authorization.List}.\n */\nexport function fromRpcList(authorizationList: ListRpc): ListSigned {\n return authorizationList.map(fromRpc)\n}\n\nexport declare namespace fromRpcList {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Tuple} to an {@link ox#Authorization.Authorization}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n * '0x1',\n * '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * '0x3'\n * ])\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n\n * // @log: }\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.fromTuple([\n * '0x1',\n * '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * '0x3',\n * '0x1',\n * '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90',\n * '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064',\n * ])\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @param tuple - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n * @returns The {@link ox#Authorization.Authorization}.\n */\nexport function fromTuple<const tuple extends Tuple>(\n tuple: tuple,\n): fromTuple.ReturnType<tuple> {\n const [chainId, address, nonce, yParity, r, s] = tuple\n const signature =\n yParity && r && s ? Signature.fromTuple([yParity, r, s]) : undefined\n return from({\n address,\n chainId: Number(chainId),\n nonce: BigInt(nonce),\n ...signature,\n }) as never\n}\n\nexport declare namespace fromTuple {\n type ReturnType<authorization extends Tuple = Tuple> = Compute<\n Authorization<authorization extends Tuple<true> ? true : false>\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.TupleList} to an {@link ox#Authorization.List}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n * ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3'],\n * ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14'],\n * ])\n * // @log: [\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n,\n * // @log: },\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: },\n * // @log: ]\n * ```\n *\n * @example\n * It is also possible to append a Signature tuple to the end of an Authorization tuple.\n *\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorizationList = Authorization.fromTupleList([\n * ['0x1', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x3', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ['0x3', '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c', '0x14', '0x1', '0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90', '0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'],\n * ])\n * // @log: [\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 1,\n * // @log: nonce: 3n,\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: },\n * // @log: {\n * // @log: address: '0xbe95c3f554e9fc85ec51be69a3d807a0d55bcf2c',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: r: BigInt('0x68a020a209d3d56c46f38cc50a33f704f4a9a10a59377f8dd762ac66910e9b90'),\n * // @log: s: BigInt('0x7e865ad05c4035ab5792787d4a0297a43617ae897930a6fe4d822b8faea52064'),\n * // @log: yParity: 0,\n * // @log: },\n * // @log: ]\n * ```\n *\n * @param tupleList - The [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n * @returns An {@link ox#Authorization.List}.\n */\nexport function fromTupleList<const tupleList extends TupleList>(\n tupleList: tupleList,\n): fromTupleList.ReturnType<tupleList> {\n const list: Mutable<List> = []\n for (const tuple of tupleList) list.push(fromTuple(tuple))\n return list as never\n}\n\nexport declare namespace fromTupleList {\n type ReturnType<tupleList extends TupleList> = Compute<\n TupleList<tupleList extends TupleList<true> ? true : false>\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the sign payload for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * The example below demonstrates computing the sign payload for an {@link ox#Authorization.Authorization}. This payload\n * can then be passed to signing functions like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Authorization, Secp256k1 } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const payload = Authorization.getSignPayload(authorization) // [!code focus]\n *\n * const signature = Secp256k1.sign({\n * payload,\n * privateKey: '0x...',\n * })\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The sign payload.\n */\nexport function getSignPayload(authorization: Authorization): Hex.Hex {\n return hash(authorization)\n}\n\nexport declare namespace getSignPayload {\n type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Computes the hash for an {@link ox#Authorization.Authorization} in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const hash = Authorization.hash(authorization) // [!code focus]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns The hash.\n */\nexport function hash(authorization: Authorization): Hex.Hex {\n return Hash.keccak256(Hex.concat('0x05', Rlp.fromHex(toTuple(authorization))))\n}\n\nexport declare namespace hash {\n type ErrorType =\n | toTuple.ErrorType\n | Hash.keccak256.ErrorType\n | Hex.concat.ErrorType\n | Rlp.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpc({\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: 1,\n * nonce: 1n,\n * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n * yParity: 0,\n * })\n * ```\n *\n * @param authorization - An Authorization.\n * @returns An RPC-formatted Authorization.\n */\nexport function toRpc(authorization: Signed): Rpc {\n const { address, chainId, nonce, ...signature } = authorization\n\n return {\n address,\n chainId: Hex.fromNumber(chainId),\n nonce: Hex.fromNumber(nonce),\n ...Signature.toRpc(signature),\n }\n}\n\nexport declare namespace toRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.ListRpc}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.toRpcList([{\n * address: '0x0000000000000000000000000000000000000000',\n * chainId: 1,\n * nonce: 1n,\n * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n * yParity: 0,\n * }])\n * ```\n *\n * @param authorizationList - An Authorization List.\n * @returns An RPC-formatted Authorization List.\n */\nexport function toRpcList(authorizationList: ListSigned): ListRpc {\n return authorizationList.map(toRpc)\n}\n\nexport declare namespace toRpcList {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.Authorization} to an {@link ox#Authorization.Tuple}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n *\n * const tuple = Authorization.toTuple(authorization) // [!code focus]\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 1,\n * // @log: nonce: 69n,\n * // @log: ]\n * ```\n *\n * @param authorization - The {@link ox#Authorization.Authorization}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple.\n */\nexport function toTuple<const authorization extends Authorization>(\n authorization: authorization,\n): toTuple.ReturnType<authorization> {\n const { address, chainId, nonce } = authorization\n const signature = Signature.extract(authorization)\n return [\n chainId ? Hex.fromNumber(chainId) : '0x',\n address,\n nonce ? Hex.fromNumber(nonce) : '0x',\n ...(signature ? Signature.toTuple(signature) : []),\n ] as never\n}\n\nexport declare namespace toTuple {\n type ReturnType<authorization extends Authorization = Authorization> =\n Compute<Tuple<authorization extends Signature.Signature ? true : false>>\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Authorization.List} to an {@link ox#Authorization.TupleList}.\n *\n * @example\n * ```ts twoslash\n * import { Authorization } from 'ox'\n *\n * const authorization_1 = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 1,\n * nonce: 69n,\n * })\n * const authorization_2 = Authorization.from({\n * address: '0x1234567890abcdef1234567890abcdef12345678',\n * chainId: 3,\n * nonce: 20n,\n * })\n *\n * const tuple = Authorization.toTupleList([authorization_1, authorization_2]) // [!code focus]\n * // @log: [\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 1,\n * // @log: nonce: 69n,\n * // @log: ],\n * // @log: [\n * // @log: address: '0x1234567890abcdef1234567890abcdef12345678',\n * // @log: chainId: 3,\n * // @log: nonce: 20n,\n * // @log: ],\n * // @log: ]\n * ```\n *\n * @param list - An {@link ox#Authorization.List}.\n * @returns An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Authorization tuple list.\n */\nexport function toTupleList<\n const list extends\n | readonly Authorization<true>[]\n | readonly Authorization<false>[],\n>(list?: list | undefined): toTupleList.ReturnType<list> {\n if (!list || list.length === 0) return []\n\n const tupleList: Mutable<TupleList> = []\n for (const authorization of list) tupleList.push(toTuple(authorization))\n\n return tupleList as never\n}\n\nexport declare namespace toTupleList {\n type ReturnType<\n list extends\n | readonly Authorization<true>[]\n | readonly Authorization<false>[],\n > = Compute<\n TupleList<list extends readonly Authorization<true>[] ? true : false>\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Cursor from './internal/cursor.js'\nimport type { ExactPartial, RecursiveArray } from './internal/types.js'\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Bytes.Bytes} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toBytes('0x8b68656c6c6f20776f726c64')\n * // Uint8Array([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Bytes.Bytes} value.\n */\nexport function toBytes(\n value: Bytes.Bytes | Hex.Hex,\n): RecursiveArray<Bytes.Bytes> {\n return to(value, 'Bytes')\n}\n\nexport declare namespace toBytes {\n type ErrorType = to.ErrorType\n}\n\n/**\n * Decodes a Recursive-Length Prefix (RLP) value into a {@link ox#Hex.Hex} value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n * Rlp.toHex('0x8b68656c6c6f20776f726c64')\n * // 0x68656c6c6f20776f726c64\n * ```\n *\n * @param value - The value to decode.\n * @returns The decoded {@link ox#Hex.Hex} value.\n */\nexport function toHex(value: Bytes.Bytes | Hex.Hex): RecursiveArray<Hex.Hex> {\n return to(value, 'Hex')\n}\n\nexport declare namespace toHex {\n type ErrorType = to.ErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\n/** @internal */\nexport function to<\n value extends Bytes.Bytes | Hex.Hex,\n to extends 'Hex' | 'Bytes',\n>(value: value, to: to | 'Hex' | 'Bytes'): to.ReturnType<to> {\n const to_ = to ?? (typeof value === 'string' ? 'Hex' : 'Bytes')\n\n const bytes = (() => {\n if (typeof value === 'string') {\n if (value.length > 3 && value.length % 2 !== 0)\n throw new Hex.InvalidLengthError(value)\n return Bytes.fromHex(value)\n }\n return value as Bytes.Bytes\n })()\n\n const cursor = Cursor.create(bytes, {\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n })\n const result = decodeRlpCursor(cursor, to_)\n\n return result as to.ReturnType<to>\n}\n\n/** @internal */\nexport declare namespace to {\n type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (to extends 'Bytes' ? RecursiveArray<Bytes.Bytes> : never)\n | (to extends 'Hex' ? RecursiveArray<Hex.Hex> : never)\n\n type ErrorType =\n | Bytes.fromHex.ErrorType\n | decodeRlpCursor.ErrorType\n | Cursor.create.ErrorType\n | Hex.InvalidLengthError\n | Errors.GlobalErrorType\n}\n\n/** @internal */\n\n/** @internal */\nexport function decodeRlpCursor<to extends 'Hex' | 'Bytes' = 'Hex'>(\n cursor: Cursor.Cursor,\n to: to | 'Hex' | 'Bytes' | undefined = 'Hex',\n): decodeRlpCursor.ReturnType<to> {\n if (cursor.bytes.length === 0)\n return (\n to === 'Hex' ? Hex.fromBytes(cursor.bytes) : cursor.bytes\n ) as decodeRlpCursor.ReturnType<to>\n\n const prefix = cursor.readByte()\n if (prefix < 0x80) cursor.decrementPosition(1)\n\n // bytes\n if (prefix < 0xc0) {\n const length = readLength(cursor, prefix, 0x80)\n const bytes = cursor.readBytes(length)\n return (\n to === 'Hex' ? Hex.fromBytes(bytes) : bytes\n ) as decodeRlpCursor.ReturnType<to>\n }\n\n // list\n const length = readLength(cursor, prefix, 0xc0)\n return readList(cursor, length, to) as {} as decodeRlpCursor.ReturnType<to>\n}\n\n/** @internal */\nexport declare namespace decodeRlpCursor {\n type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex'> = to.ReturnType<to>\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | readLength.ErrorType\n | readList.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readLength(\n cursor: Cursor.Cursor,\n prefix: number,\n offset: number,\n) {\n if (offset === 0x80 && prefix < 0x80) return 1\n if (prefix <= offset + 55) return prefix - offset\n if (prefix === offset + 55 + 1) return cursor.readUint8()\n if (prefix === offset + 55 + 2) return cursor.readUint16()\n if (prefix === offset + 55 + 3) return cursor.readUint24()\n if (prefix === offset + 55 + 4) return cursor.readUint32()\n throw new Errors.BaseError('Invalid RLP prefix')\n}\n\n/** @internal */\nexport declare namespace readLength {\n type ErrorType = Errors.BaseError | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function readList<to extends 'Hex' | 'Bytes'>(\n cursor: Cursor.Cursor,\n length: number,\n to: to | 'Hex' | 'Bytes',\n) {\n const position = cursor.position\n const value: decodeRlpCursor.ReturnType<to>[] = []\n while (cursor.position - position < length)\n value.push(decodeRlpCursor(cursor, to))\n return value\n}\n\n/** @internal */\nexport declare namespace readList {\n type ErrorType = Errors.GlobalErrorType\n}\n\ntype Encodable = {\n length: number\n encode(cursor: Cursor.Cursor): void\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.from('0x68656c6c6f20776f726c64', { as: 'Hex' })\n * // @log: 0x8b68656c6c6f20776f726c64\n *\n * Rlp.from(Bytes.from([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]), { as: 'Bytes' })\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The {@link ox#Bytes.Bytes} or {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function from<as extends 'Hex' | 'Bytes'>(\n value: RecursiveArray<Bytes.Bytes> | RecursiveArray<Hex.Hex>,\n options: from.Options<as>,\n): from.ReturnType<as> {\n const { as } = options\n\n const encodable = getEncodable(value)\n const cursor = Cursor.create(new Uint8Array(encodable.length))\n encodable.encode(cursor)\n\n if (as === 'Hex') return Hex.fromBytes(cursor.bytes) as from.ReturnType<as>\n return cursor.bytes as from.ReturnType<as>\n}\n\nexport declare namespace from {\n type Options<as extends 'Hex' | 'Bytes'> = {\n /** The type to convert the RLP value to. */\n as: as | 'Hex' | 'Bytes'\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Cursor.create.ErrorType\n | Hex.fromBytes.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Bytes, Rlp } from 'ox'\n *\n * Rlp.fromBytes(Bytes.from([139, 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]))\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param bytes - The {@link ox#Bytes.Bytes} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromBytes<as extends 'Hex' | 'Bytes' = 'Bytes'>(\n bytes: RecursiveArray<Bytes.Bytes>,\n options: fromBytes.Options<as> = {},\n): fromBytes.ReturnType<as> {\n const { as = 'Bytes' } = options\n return from(bytes, { as }) as never\n}\n\nexport declare namespace fromBytes {\n type Options<as extends 'Hex' | 'Bytes' = 'Bytes'> = ExactPartial<\n from.Options<as>\n >\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Bytes'> = from.ReturnType<as>\n\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} value into a Recursive-Length Prefix (RLP) value.\n *\n * @example\n * ```ts twoslash\n * import { Rlp } from 'ox'\n *\n * Rlp.fromHex('0x68656c6c6f20776f726c64')\n * // @log: 0x8b68656c6c6f20776f726c64\n * ```\n *\n * @param hex - The {@link ox#Hex.Hex} value to encode.\n * @param options - Options.\n * @returns The RLP value.\n */\nexport function fromHex<as extends 'Hex' | 'Bytes' = 'Hex'>(\n hex: RecursiveArray<Hex.Hex>,\n options: fromHex.Options<as> = {},\n): fromHex.ReturnType<as> {\n const { as = 'Hex' } = options\n return from(hex, { as }) as never\n}\n\nexport declare namespace fromHex {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = ExactPartial<\n from.Options<as>\n >\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> = from.ReturnType<as>\n\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/////////////////////////////////////////////////////////////////////////////////\n// Internal\n/////////////////////////////////////////////////////////////////////////////////\n\nfunction getEncodable(\n bytes: RecursiveArray<Bytes.Bytes> | RecursiveArray<Hex.Hex>,\n): Encodable {\n if (Array.isArray(bytes))\n return getEncodableList(bytes.map((x) => getEncodable(x)))\n return getEncodableBytes(bytes as any)\n}\n\nfunction getEncodableList(list: Encodable[]): Encodable {\n const bodyLength = list.reduce((acc, x) => acc + x.length, 0)\n\n const sizeOfBodyLength = getSizeOfLength(bodyLength)\n const length = (() => {\n if (bodyLength <= 55) return 1 + bodyLength\n return 1 + sizeOfBodyLength + bodyLength\n })()\n\n return {\n length,\n encode(cursor: Cursor.Cursor) {\n if (bodyLength <= 55) {\n cursor.pushByte(0xc0 + bodyLength)\n } else {\n cursor.pushByte(0xc0 + 55 + sizeOfBodyLength)\n if (sizeOfBodyLength === 1) cursor.pushUint8(bodyLength)\n else if (sizeOfBodyLength === 2) cursor.pushUint16(bodyLength)\n else if (sizeOfBodyLength === 3) cursor.pushUint24(bodyLength)\n else cursor.pushUint32(bodyLength)\n }\n for (const { encode } of list) {\n encode(cursor)\n }\n },\n }\n}\n\nfunction getEncodableBytes(bytesOrHex: Bytes.Bytes | Hex.Hex): Encodable {\n const bytes =\n typeof bytesOrHex === 'string' ? Bytes.fromHex(bytesOrHex) : bytesOrHex\n\n const sizeOfBytesLength = getSizeOfLength(bytes.length)\n const length = (() => {\n if (bytes.length === 1 && bytes[0]! < 0x80) return 1\n if (bytes.length <= 55) return 1 + bytes.length\n return 1 + sizeOfBytesLength + bytes.length\n })()\n\n return {\n length,\n encode(cursor: Cursor.Cursor) {\n if (bytes.length === 1 && bytes[0]! < 0x80) {\n cursor.pushBytes(bytes)\n } else if (bytes.length <= 55) {\n cursor.pushByte(0x80 + bytes.length)\n cursor.pushBytes(bytes)\n } else {\n cursor.pushByte(0x80 + 55 + sizeOfBytesLength)\n if (sizeOfBytesLength === 1) cursor.pushUint8(bytes.length)\n else if (sizeOfBytesLength === 2) cursor.pushUint16(bytes.length)\n else if (sizeOfBytesLength === 3) cursor.pushUint24(bytes.length)\n else cursor.pushUint32(bytes.length)\n cursor.pushBytes(bytes)\n }\n },\n }\n}\n\nfunction getSizeOfLength(length: number) {\n if (length < 2 ** 8) return 1\n if (length < 2 ** 16) return 2\n if (length < 2 ** 24) return 3\n if (length < 2 ** 32) return 4\n throw new Errors.BaseError('Length is too large.')\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Json from './Json.js'\nimport * as Solidity from './Solidity.js'\nimport type { Compute, ExactPartial, OneOf } from './internal/types.js'\n\n/** Root type for an ECDSA signature. */\nexport type Signature<\n recovered extends boolean = true,\n bigintType = bigint,\n numberType = number,\n> = Compute<\n recovered extends true\n ? {\n r: bigintType\n s: bigintType\n yParity: numberType\n }\n : {\n r: bigintType\n s: bigintType\n yParity?: numberType | undefined\n }\n>\n\n/** RPC-formatted ECDSA signature. */\nexport type Rpc<recovered extends boolean = true> = Signature<\n recovered,\n Hex.Hex,\n Hex.Hex\n>\n\n/** (Legacy) ECDSA signature. */\nexport type Legacy<bigintType = bigint, numberType = number> = {\n r: bigintType\n s: bigintType\n v: numberType\n}\n\n/** RPC-formatted (Legacy) ECDSA signature. */\nexport type LegacyRpc = Legacy<Hex.Hex, Hex.Hex>\n\nexport type Tuple = readonly [yParity: Hex.Hex, r: Hex.Hex, s: Hex.Hex]\n\n/**\n * Asserts that a Signature is valid.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.assert({\n * r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @error: InvalidSignatureRError:\n * // @error: Value `-549...n` is an invalid r value.\n * // @error: r must be a positive integer less than 2^256.\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function assert(\n signature: ExactPartial<Signature>,\n options: assert.Options = {},\n): asserts signature is Signature {\n const { recovered } = options\n if (typeof signature.r === 'undefined')\n throw new MissingPropertiesError({ signature })\n if (typeof signature.s === 'undefined')\n throw new MissingPropertiesError({ signature })\n if (recovered && typeof signature.yParity === 'undefined')\n throw new MissingPropertiesError({ signature })\n if (signature.r < 0n || signature.r > Solidity.maxUint256)\n throw new InvalidRError({ value: signature.r })\n if (signature.s < 0n || signature.s > Solidity.maxUint256)\n throw new InvalidSError({ value: signature.s })\n if (\n typeof signature.yParity === 'number' &&\n signature.yParity !== 0 &&\n signature.yParity !== 1\n )\n throw new InvalidYParityError({ value: signature.yParity })\n}\n\nexport declare namespace assert {\n type Options = {\n /** Whether or not the signature should be recovered (contain `yParity`). */\n recovered?: boolean\n }\n\n type ErrorType =\n | MissingPropertiesError\n | InvalidRError\n | InvalidSError\n | InvalidYParityError\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Bytes.Bytes} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.fromBytes(new Uint8Array([128, 3, 131, ...]))\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param signature - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromBytes(signature: Bytes.Bytes): Signature {\n return fromHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#Hex.Hex} signature into a structured {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.fromHex('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c')\n * // @log: { r: 5231...n, s: 3522...n, yParity: 0 }\n * ```\n *\n * @param serialized - The serialized signature.\n * @returns The deserialized {@link ox#Signature.Signature}.\n */\nexport function fromHex(signature: Hex.Hex): Signature {\n if (signature.length !== 130 && signature.length !== 132)\n throw new InvalidSerializedSizeError({ signature })\n\n const r = BigInt(Hex.slice(signature, 0, 32))\n const s = BigInt(Hex.slice(signature, 32, 64))\n\n const yParity = (() => {\n const yParity = Number(`0x${signature.slice(130)}`)\n if (Number.isNaN(yParity)) return undefined\n try {\n return vToYParity(yParity)\n } catch {\n throw new InvalidYParityError({ value: yParity })\n }\n })()\n\n if (typeof yParity === 'undefined')\n return {\n r,\n s,\n } as never\n return {\n r,\n s,\n yParity,\n } as never\n}\n\nexport declare namespace fromHex {\n type ErrorType =\n | Hex.from.ErrorType\n | InvalidSerializedSizeError\n | Errors.GlobalErrorType\n}\n\n/**\n * Extracts a {@link ox#Signature.Signature} from an arbitrary object that may include signature properties.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * Signature.extract({\n * baz: 'barry',\n * foo: 'bar',\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * zebra: 'stripes',\n * })\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1\n * // @log: }\n * ```\n *\n * @param value - The arbitrary object to extract the signature from.\n * @returns The extracted {@link ox#Signature.Signature}.\n */\nexport function extract(value: extract.Value): Signature | undefined {\n if (typeof value.r === 'undefined') return undefined\n if (typeof value.s === 'undefined') return undefined\n return from(value as any)\n}\n\nexport declare namespace extract {\n type Value = {\n r?: bigint | Hex.Hex | undefined\n s?: bigint | Hex.Hex | undefined\n yParity?: number | Hex.Hex | undefined\n v?: number | Hex.Hex | undefined\n }\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates a typed {@link ox#Signature.Signature} object from a {@link ox#Signature.Signature}, {@link ox#Signature.Legacy}, {@link ox#Bytes.Bytes}, or {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from('0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db801')\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: yParity: 1,\n * // @log: }\n * ```\n *\n * @example\n * ### From Legacy\n *\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * Signature.from({\n * r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * v: 27,\n * })\n * // @log: {\n * // @log: r: 47323457007453657207889730243826965761922296599680473886588287015755652701072n,\n * // @log: s: 57228803202727131502949358313456071280488184270258293674242124340113824882788n,\n * // @log: yParity: 0\n * // @log: }\n * ```\n *\n * @param signature - The signature value to instantiate.\n * @returns The instantiated {@link ox#Signature.Signature}.\n */\nexport function from<\n const signature extends\n | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n | Hex.Hex\n | Bytes.Bytes,\n>(\n signature:\n | signature\n | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n | Hex.Hex\n | Bytes.Bytes,\n): from.ReturnType<signature> {\n const signature_ = (() => {\n if (typeof signature === 'string') return fromHex(signature)\n if (signature instanceof Uint8Array) return fromBytes(signature)\n if (typeof signature.r === 'string') return fromRpc(signature)\n if (signature.v) return fromLegacy(signature)\n return {\n r: signature.r,\n s: signature.s,\n ...(typeof signature.yParity !== 'undefined'\n ? { yParity: signature.yParity }\n : {}),\n }\n })()\n assert(signature_)\n return signature_ as never\n}\n\nexport declare namespace from {\n type ReturnType<\n signature extends\n | OneOf<Signature<boolean> | Rpc<boolean> | Legacy | LegacyRpc>\n | Hex.Hex\n | Bytes.Bytes,\n > = signature extends Signature<boolean> & { v?: undefined }\n ? signature\n : Signature\n\n type ErrorType =\n | assert.ErrorType\n | fromBytes.ErrorType\n | fromHex.ErrorType\n | vToYParity.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerBytes(new Uint8Array([132, 51, 23, ...]))\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerBytes(signature: Bytes.Bytes): Signature<false> {\n return fromDerHex(Hex.fromBytes(signature))\n}\n\nexport declare namespace fromDerBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a DER-encoded signature to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromDerHex('0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8')\n * // @log: {\n * // @log: r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * // @log: s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * // @log: }\n * ```\n *\n * @param signature - The DER-encoded signature to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromDerHex(signature: Hex.Hex): Signature<false> {\n const { r, s } = secp256k1.Signature.fromDER(Hex.from(signature).slice(2))\n return { r, s }\n}\n\nexport declare namespace fromDerHex {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Legacy} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.fromLegacy({ r: 1n, s: 2n, v: 28 })\n * // @log: { r: 1n, s: 2n, yParity: 1 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Legacy} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromLegacy(signature: Legacy): Signature {\n return {\n r: signature.r,\n s: signature.s,\n yParity: vToYParity(signature.v),\n }\n}\n\nexport declare namespace fromLegacy {\n type ErrorType = vToYParity.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Rpc} into a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromRpc({\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Rpc} to convert.\n * @returns The converted {@link ox#Signature.Signature}.\n */\nexport function fromRpc(signature: {\n r: Hex.Hex\n s: Hex.Hex\n yParity?: Hex.Hex | undefined\n v?: Hex.Hex | undefined\n}): Signature {\n const yParity = (() => {\n const v = signature.v ? Number(signature.v) : undefined\n let yParity = signature.yParity ? Number(signature.yParity) : undefined\n if (typeof v === 'number' && typeof yParity !== 'number')\n yParity = vToYParity(v)\n if (typeof yParity !== 'number')\n throw new InvalidYParityError({ value: signature.yParity })\n return yParity\n })()\n\n return {\n r: BigInt(signature.r),\n s: BigInt(signature.s),\n yParity,\n }\n}\n\nexport declare namespace fromRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Tuple} to a {@link ox#Signature.Signature}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.fromTuple(['0x01', '0x7b', '0x1c8'])\n * // @log: {\n * // @log: r: 123n,\n * // @log: s: 456n,\n * // @log: yParity: 1,\n * // @log: }\n * ```\n *\n * @param tuple - The {@link ox#Signature.Tuple} to convert.\n * @returns The {@link ox#Signature.Signature}.\n */\nexport function fromTuple(tuple: Tuple): Signature {\n const [yParity, r, s] = tuple\n return from({\n r: r === '0x' ? 0n : BigInt(r),\n s: s === '0x' ? 0n : BigInt(s),\n yParity: yParity === '0x' ? 0 : Number(yParity),\n })\n}\n\nexport declare namespace fromTuple {\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toBytes({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * // @log: Uint8Array [102, 16, 10, ...]\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toBytes(signature: Signature<boolean>): Bytes.Bytes {\n return Bytes.fromHex(toHex(signature))\n}\n\nexport declare namespace toBytes {\n type ErrorType =\n | toHex.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#Signature.Signature} to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toHex({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * // @log: '0x6e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf4a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db81c'\n * ```\n *\n * @param signature - The signature to serialize.\n * @returns The serialized signature.\n */\nexport function toHex(signature: Signature<boolean>): Hex.Hex {\n assert(signature)\n\n const r = signature.r\n const s = signature.s\n\n const signature_ = Hex.concat(\n Hex.fromNumber(r, { size: 32 }),\n Hex.fromNumber(s, { size: 32 }),\n // If the signature is recovered, add the recovery byte to the signature.\n typeof signature.yParity === 'number'\n ? Hex.fromNumber(yParityToV(signature.yParity), { size: 1 })\n : '0x',\n )\n\n return signature_\n}\n\nexport declare namespace toHex {\n type ErrorType =\n | Hex.concat.ErrorType\n | Hex.fromNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerBytes(signature)\n * // @log: Uint8Array [132, 51, 23, ...]\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerBytes(signature: Signature<boolean>): Bytes.Bytes {\n const sig = new secp256k1.Signature(signature.r, signature.s)\n return sig.toDERRawBytes()\n}\n\nexport declare namespace toDerBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to DER-encoded format.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.from({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * })\n *\n * const signature_der = Signature.toDerHex(signature)\n * // @log: '0x304402206e100a352ec6ad1b70802290e18aeed190704973570f3b8ed42cb9808e2ea6bf02204a90a229a244495b41890987806fcbd2d5d23fc0dbe5f5256c2613c039d76db8'\n * ```\n *\n * @param signature - The signature to convert.\n * @returns The DER-encoded signature.\n */\nexport function toDerHex(signature: Signature<boolean>): Hex.Hex {\n const sig = new secp256k1.Signature(signature.r, signature.s)\n return `0x${sig.toDERHex()}`\n}\n\nexport declare namespace toDerHex {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Legacy}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const legacy = Signature.toLegacy({ r: 1n, s: 2n, yParity: 1 })\n * // @log: { r: 1n, s: 2n, v: 28 }\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Legacy}.\n */\nexport function toLegacy(signature: Signature): Legacy {\n return {\n r: signature.r,\n s: signature.s,\n v: yParityToV(signature.yParity),\n }\n}\n\nexport declare namespace toLegacy {\n type ErrorType = yParityToV.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} into a {@link ox#Signature.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signature = Signature.toRpc({\n * r: 49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1\n * })\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The converted {@link ox#Signature.Rpc}.\n */\nexport function toRpc(signature: Signature): Rpc {\n const { r, s, yParity } = signature\n return {\n r: Hex.fromNumber(r, { size: 32 }),\n s: Hex.fromNumber(s, { size: 32 }),\n yParity: yParity === 0 ? '0x0' : '0x1',\n }\n}\n\nexport declare namespace toRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Signature.Signature} to a serialized {@link ox#Signature.Tuple} to be used for signatures in Transaction Envelopes, EIP-7702 Authorization Lists, etc.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const signatureTuple = Signature.toTuple({\n * r: 123n,\n * s: 456n,\n * yParity: 1,\n * })\n * // @log: [yParity: '0x01', r: '0x7b', s: '0x1c8']\n * ```\n *\n * @param signature - The {@link ox#Signature.Signature} to convert.\n * @returns The {@link ox#Signature.Tuple}.\n */\nexport function toTuple(signature: Signature): Tuple {\n const { r, s, yParity } = signature\n\n return [\n yParity ? '0x01' : '0x',\n r === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(r!)),\n s === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(s!)),\n ] as const\n}\n\nexport declare namespace toTuple {\n type ErrorType =\n | Hex.trimLeft.ErrorType\n | Hex.fromNumber.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Validates a Signature. Returns `true` if the signature is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const valid = Signature.validate({\n * r: -49782753348462494199823712700004552394425719014458918871452329774910450607807n,\n * s: 33726695977844476214676913201140481102225469284307016937915595756355928419768n,\n * yParity: 1,\n * })\n * // @log: false\n * ```\n *\n * @param signature - The signature object to assert.\n */\nexport function validate(\n signature: ExactPartial<Signature>,\n options: validate.Options = {},\n): boolean {\n try {\n assert(signature, options)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type Options = {\n /** Whether or not the signature should be recovered (contain `yParity`). */\n recovered?: boolean\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const yParity = Signature.vToYParity(28)\n * // @log: 1\n * ```\n *\n * @param v - The ECDSA `v` value to convert.\n * @returns The `yParity` value.\n */\nexport function vToYParity(v: number): Signature['yParity'] {\n if (v === 0 || v === 27) return 0\n if (v === 1 || v === 28) return 1\n if (v >= 35) return v % 2 === 0 ? 1 : 0\n throw new InvalidVError({ value: v })\n}\n\nexport declare namespace vToYParity {\n type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/**\n * Converts a ECDSA `v` value to a `yParity` value.\n *\n * @example\n * ```ts twoslash\n * import { Signature } from 'ox'\n *\n * const v = Signature.yParityToV(1)\n * // @log: 28\n * ```\n *\n * @param yParity - The ECDSA `yParity` value to convert.\n * @returns The `v` value.\n */\nexport function yParityToV(yParity: number): number {\n if (yParity === 0) return 27\n if (yParity === 1) return 28\n throw new InvalidYParityError({ value: yParity })\n}\n\nexport declare namespace yParityToV {\n type ErrorType = InvalidVError | Errors.GlobalErrorType\n}\n\n/** Thrown when the serialized signature is of an invalid size. */\nexport class InvalidSerializedSizeError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidSerializedSizeError'\n\n constructor({ signature }: { signature: Hex.Hex | Bytes.Bytes }) {\n super(`Value \\`${signature}\\` is an invalid signature size.`, {\n metaMessages: [\n 'Expected: 64 bytes or 65 bytes.',\n `Received ${Hex.size(Hex.from(signature))} bytes.`,\n ],\n })\n }\n}\n\n/** Thrown when the signature is missing either an `r`, `s`, or `yParity` property. */\nexport class MissingPropertiesError extends Errors.BaseError {\n override readonly name = 'Signature.MissingPropertiesError'\n\n constructor({ signature }: { signature: unknown }) {\n super(\n `Signature \\`${Json.stringify(signature)}\\` is missing either an \\`r\\`, \\`s\\`, or \\`yParity\\` property.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `r` value. */\nexport class InvalidRError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidRError'\n\n constructor({ value }: { value: unknown }) {\n super(\n `Value \\`${value}\\` is an invalid r value. r must be a positive integer less than 2^256.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `s` value. */\nexport class InvalidSError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidSError'\n\n constructor({ value }: { value: unknown }) {\n super(\n `Value \\`${value}\\` is an invalid s value. s must be a positive integer less than 2^256.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `yParity` value. */\nexport class InvalidYParityError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidYParityError'\n\n constructor({ value }: { value: unknown }) {\n super(\n `Value \\`${value}\\` is an invalid y-parity value. Y-parity must be 0 or 1.`,\n )\n }\n}\n\n/** Thrown when the signature has an invalid `v` value. */\nexport class InvalidVError extends Errors.BaseError {\n override readonly name = 'Signature.InvalidVError'\n\n constructor({ value }: { value: number }) {\n super(`Value \\`${value}\\` is an invalid v value. v must be 27, 28 or >=35.`)\n }\n}\n", "import * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/base58.js'\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} to a Base58-encoded string.\n *\n * @example\n * ```ts twoslash\n * import { Base58, Bytes } from 'ox'\n *\n * const value = Base58.fromBytes(Bytes.fromString('Hello World!'))\n * // @log: '2NEpo7TZRRrLZSi2U'\n * ```\n *\n * @param value - The byte array to encode.\n * @returns The Base58 encoded string.\n */\nexport function fromBytes(value: Bytes.Bytes) {\n return internal.from(value)\n}\n\nexport declare namespace fromBytes {\n type ErrorType = internal.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} to a Base58-encoded string.\n *\n * @example\n * ```ts twoslash\n * import { Base58, Hex } from 'ox'\n *\n * const value = Base58.fromHex(Hex.fromString('Hello World!'))\n * // @log: '2NEpo7TZRRrLZSi2U'\n * ```\n *\n * @param value - The byte array to encode.\n * @returns The Base58 encoded string.\n */\nexport function fromHex(value: Hex.Hex) {\n return internal.from(value)\n}\n\nexport declare namespace fromHex {\n type ErrorType = internal.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string to a Base58-encoded string.\n *\n * @example\n * ```ts twoslash\n * import { Base58 } from 'ox'\n *\n * const value = Base58.fromString('Hello World!')\n * // @log: '2NEpo7TZRRrLZSi2U'\n * ```\n *\n * @param value - The string to encode.\n * @returns The Base58 encoded string.\n */\nexport function fromString(value: string) {\n return internal.from(Bytes.fromString(value))\n}\n\nexport declare namespace fromString {\n type ErrorType = internal.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a Base58-encoded string to a {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Base58 } from 'ox'\n *\n * const value = Base58.toBytes('2NEpo7TZRRrLZSi2U')\n * // @log: Uint8Array [ 72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33 ]\n * ```\n *\n * @param value - The Base58 encoded string.\n * @returns The decoded byte array.\n */\nexport function toBytes(value: string): Bytes.Bytes {\n return Bytes.fromHex(toHex(value))\n}\n\nexport declare namespace toBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Decodes a Base58-encoded string to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Base58 } from 'ox'\n *\n * const value = Base58.toHex('2NEpo7TZRRrLZSi2U')\n * // @log: '0x48656c6c6f20576f726c6421'\n * ```\n *\n * @param value - The Base58 encoded string.\n * @returns The decoded hex string.\n */\nexport function toHex(value: string): Hex.Hex {\n let integer = BigInt(0)\n let pad = 0\n let checkPad = true\n\n for (let i = 0; i < value.length; i++) {\n const char = value[i]!\n\n // check for leading 1s\n if (checkPad && char === '1') pad++\n else checkPad = false\n\n // check for invalid characters\n if (typeof internal.alphabetToInteger[char] !== 'bigint')\n throw new Error('invalid base58 character: ' + char)\n\n integer = integer * 58n\n integer = integer + internal.alphabetToInteger[char]!\n }\n\n if (!pad) return `0x${integer.toString(16)}` as Hex.Hex\n return `0x${'0'.repeat(pad * 2)}${integer.toString(16)}` as Hex.Hex\n}\n\nexport declare namespace toHex {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Decodes a Base58-encoded string to a string.\n *\n * @example\n * ```ts twoslash\n * import { Base58 } from 'ox'\n *\n * const value = Base58.toString('2NEpo7TZRRrLZSi2U')\n * // @log: 'Hello World!'\n * ```\n *\n * @param value - The Base58 encoded string.\n * @returns The decoded string.\n */\nexport function toString(value: string): string {\n return Hex.toString(toHex(value))\n}\n\nexport declare namespace toString {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Bytes from '../Bytes.js'\nimport type * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\n\n/** @internal */\nexport const integerToAlphabet =\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\n/** @internal */\nexport const alphabetToInteger = /* __PURE__ */ Object.freeze<\n Record<string, bigint>\n>({\n 1: 0n,\n 2: 1n,\n 3: 2n,\n 4: 3n,\n 5: 4n,\n 6: 5n,\n 7: 6n,\n 8: 7n,\n 9: 8n,\n A: 9n,\n B: 10n,\n C: 11n,\n D: 12n,\n E: 13n,\n F: 14n,\n G: 15n,\n H: 16n,\n J: 17n,\n K: 18n,\n L: 19n,\n M: 20n,\n N: 21n,\n P: 22n,\n Q: 23n,\n R: 24n,\n S: 25n,\n T: 26n,\n U: 27n,\n V: 28n,\n W: 29n,\n X: 30n,\n Y: 31n,\n Z: 32n,\n a: 33n,\n b: 34n,\n c: 35n,\n d: 36n,\n e: 37n,\n f: 38n,\n g: 39n,\n h: 40n,\n i: 41n,\n j: 42n,\n k: 43n,\n m: 44n,\n n: 45n,\n o: 46n,\n p: 47n,\n q: 48n,\n r: 49n,\n s: 50n,\n t: 51n,\n u: 52n,\n v: 53n,\n w: 54n,\n x: 55n,\n y: 56n,\n z: 57n,\n})\n\n/** @internal */\nexport function from(value: Hex.Hex | Bytes.Bytes) {\n let bytes = Bytes.from(value)\n\n let integer = (() => {\n let hex = value\n if (value instanceof Uint8Array) hex = Hex.fromBytes(bytes)\n return BigInt(hex as string)\n })()\n\n let result = ''\n while (integer > 0n) {\n const remainder = Number(integer % 58n)\n integer = integer / 58n\n result = integerToAlphabet[remainder] + result\n }\n\n while (bytes.length > 1 && bytes[0] === 0) {\n result = '1' + result\n bytes = bytes.slice(1)\n }\n\n return result\n}\n\n/** @internal */\nexport declare namespace from {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\n", "import * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\nconst encoder = /*#__PURE__*/ new TextEncoder()\nconst decoder = /*#__PURE__*/ new TextDecoder()\n\nconst integerToCharacter = /*#__PURE__*/ Object.fromEntries(\n Array.from(\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n ).map((a, i) => [i, a.charCodeAt(0)]),\n)\n\nconst characterToInteger = /*#__PURE__*/ {\n ...Object.fromEntries(\n Array.from(\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n ).map((a, i) => [a.charCodeAt(0), i]),\n ),\n ['='.charCodeAt(0)]: 0,\n ['-'.charCodeAt(0)]: 62,\n ['_'.charCodeAt(0)]: 63,\n} as Record<number, number>\n\n/**\n * Encodes a {@link ox#Bytes.Bytes} to a Base64-encoded string (with optional padding and/or URL-safe characters).\n *\n * @example\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.fromBytes(Bytes.fromString('hello world'))\n * // @log: 'aGVsbG8gd29ybGQ='\n * ```\n *\n * @example\n * ### No Padding\n *\n * Turn off [padding of encoded data](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) with the `pad` option:\n *\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.fromBytes(Bytes.fromString('hello world'), { pad: false })\n * // @log: 'aGVsbG8gd29ybGQ'\n * ```\n *\n * ### URL-safe Encoding\n *\n * Turn on [URL-safe encoding](https://datatracker.ietf.org/doc/html/rfc4648#section-5) (Base64 URL) with the `url` option:\n *\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.fromBytes(Bytes.fromString('hello wod'), { url: true })\n * // @log: 'aGVsbG8gd29_77-9ZA=='\n * ```\n *\n * @param value - The byte array to encode.\n * @param options - Encoding options.\n * @returns The Base64 encoded string.\n */\nexport function fromBytes(value: Bytes.Bytes, options: fromBytes.Options = {}) {\n const { pad = true, url = false } = options\n\n const encoded = new Uint8Array(Math.ceil(value.length / 3) * 4)\n\n for (let i = 0, j = 0; j < value.length; i += 4, j += 3) {\n const y = (value[j]! << 16) + (value[j + 1]! << 8) + (value[j + 2]! | 0)\n encoded[i] = integerToCharacter[y >> 18]!\n encoded[i + 1] = integerToCharacter[(y >> 12) & 0x3f]!\n encoded[i + 2] = integerToCharacter[(y >> 6) & 0x3f]!\n encoded[i + 3] = integerToCharacter[y & 0x3f]!\n }\n\n const k = value.length % 3\n const end = Math.floor(value.length / 3) * 4 + (k && k + 1)\n let base64 = decoder.decode(new Uint8Array(encoded.buffer, 0, end))\n if (pad && k === 1) base64 += '=='\n if (pad && k === 2) base64 += '='\n if (url) base64 = base64.replaceAll('+', '-').replaceAll('/', '_')\n return base64\n}\n\nexport declare namespace fromBytes {\n type Options = {\n /**\n * Whether to [pad](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) the Base64 encoded string.\n *\n * @default true\n */\n pad?: boolean | undefined\n /**\n * Whether to Base64 encode with [URL safe characters](https://datatracker.ietf.org/doc/html/rfc4648#section-5).\n *\n * @default false\n */\n url?: boolean | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Encodes a {@link ox#Hex.Hex} to a Base64-encoded string (with optional padding and/or URL-safe characters).\n *\n * @example\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.fromHex(Hex.fromString('hello world'))\n * // @log: 'aGVsbG8gd29ybGQ='\n * ```\n *\n * @example\n * ### No Padding\n *\n * Turn off [padding of encoded data](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) with the `pad` option:\n *\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.fromHex(Hex.fromString('hello world'), { pad: false })\n * // @log: 'aGVsbG8gd29ybGQ'\n * ```\n *\n * ### URL-safe Encoding\n *\n * Turn on [URL-safe encoding](https://datatracker.ietf.org/doc/html/rfc4648#section-5) (Base64 URL) with the `url` option:\n *\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.fromHex(Hex.fromString('hello wod'), { url: true })\n * // @log: 'aGVsbG8gd29_77-9ZA=='\n * ```\n *\n * @param value - The hex value to encode.\n * @param options - Encoding options.\n * @returns The Base64 encoded string.\n */\nexport function fromHex(value: Hex.Hex, options: fromHex.Options = {}) {\n return fromBytes(Bytes.fromHex(value), options)\n}\n\nexport declare namespace fromHex {\n type Options = {\n /**\n * Whether to [pad](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) the Base64 encoded string.\n *\n * @default true\n */\n pad?: boolean | undefined\n /**\n * Whether to Base64 encode with [URL safe characters](https://datatracker.ietf.org/doc/html/rfc4648#section-5).\n *\n * @default false\n */\n url?: boolean | undefined\n }\n\n type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes a string to a Base64-encoded string (with optional padding and/or URL-safe characters).\n *\n * @example\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.fromString('hello world')\n * // @log: 'aGVsbG8gd29ybGQ='\n * ```\n *\n * @example\n * ### No Padding\n *\n * Turn off [padding of encoded data](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) with the `pad` option:\n *\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.fromString('hello world', { pad: false })\n * // @log: 'aGVsbG8gd29ybGQ'\n * ```\n *\n * ### URL-safe Encoding\n *\n * Turn on [URL-safe encoding](https://datatracker.ietf.org/doc/html/rfc4648#section-5) (Base64 URL) with the `url` option:\n *\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.fromString('hello wod', { url: true })\n * // @log: 'aGVsbG8gd29_77-9ZA=='\n * ```\n *\n * @param value - The string to encode.\n * @param options - Encoding options.\n * @returns The Base64 encoded string.\n */\nexport function fromString(value: string, options: fromString.Options = {}) {\n return fromBytes(Bytes.fromString(value), options)\n}\n\nexport declare namespace fromString {\n type Options = {\n /**\n * Whether to [pad](https://datatracker.ietf.org/doc/html/rfc4648#section-3.2) the Base64 encoded string.\n *\n * @default true\n */\n pad?: boolean | undefined\n /**\n * Whether to Base64 encode with [URL safe characters](https://datatracker.ietf.org/doc/html/rfc4648#section-5).\n *\n * @default false\n */\n url?: boolean | undefined\n }\n\n type ErrorType = fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a Base64-encoded string (with optional padding and/or URL-safe characters) to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ```ts twoslash\n * import { Base64, Bytes } from 'ox'\n *\n * const value = Base64.toBytes('aGVsbG8gd29ybGQ=')\n * // @log: Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100])\n * ```\n *\n * @param value - The string, hex value, or byte array to encode.\n * @returns The Base64 decoded {@link ox#Bytes.Bytes}.\n */\nexport function toBytes(value: string): Bytes.Bytes {\n const base64 = value.replace(/=+$/, '')\n\n const size = base64.length\n\n const decoded = new Uint8Array(size + 3)\n encoder.encodeInto(base64 + '===', decoded)\n\n for (let i = 0, j = 0; i < base64.length; i += 4, j += 3) {\n const x =\n (characterToInteger[decoded[i]!]! << 18) +\n (characterToInteger[decoded[i + 1]!]! << 12) +\n (characterToInteger[decoded[i + 2]!]! << 6) +\n characterToInteger[decoded[i + 3]!]!\n decoded[j] = x >> 16\n decoded[j + 1] = (x >> 8) & 0xff\n decoded[j + 2] = x & 0xff\n }\n\n const decodedSize = (size >> 2) * 3 + (size % 4 && (size % 4) - 1)\n return new Uint8Array(decoded.buffer, 0, decodedSize)\n}\n\nexport declare namespace toBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Decodes a Base64-encoded string (with optional padding and/or URL-safe characters) to {@link ox#Hex.Hex}.\n *\n * @example\n * ```ts twoslash\n * import { Base64, Hex } from 'ox'\n *\n * const value = Base64.toHex('aGVsbG8gd29ybGQ=')\n * // @log: 0x68656c6c6f20776f726c64\n * ```\n *\n * @param value - The string, hex value, or byte array to encode.\n * @returns The Base64 decoded {@link ox#Hex.Hex}.\n */\nexport function toHex(value: string): Hex.Hex {\n return Hex.fromBytes(toBytes(value))\n}\n\nexport declare namespace toHex {\n type ErrorType = toBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Decodes a Base64-encoded string (with optional padding and/or URL-safe characters) to a string.\n *\n * @example\n * ```ts twoslash\n * import { Base64 } from 'ox'\n *\n * const value = Base64.toString('aGVsbG8gd29ybGQ=')\n * // @log: 'hello world'\n * ```\n *\n * @param value - The string, hex value, or byte array to encode.\n * @returns The Base64 decoded string.\n */\nexport function toString(value: string): string {\n return Bytes.toString(toBytes(value))\n}\n\nexport declare namespace toString {\n type ErrorType = toBytes.ErrorType | Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Kzg from './Kzg.js'\nimport * as Cursor from './internal/cursor.js'\nimport type { Compute, Mutable, OneOf, UnionCompute } from './internal/types.js'\n\n/** Blob limit per transaction. */\nconst blobsPerTransaction = 6\n\n/** The number of bytes in a BLS scalar field element. */\nexport const bytesPerFieldElement = 32\n\n/** The number of field elements in a blob. */\nexport const fieldElementsPerBlob = 4096\n\n/** The number of bytes in a blob. */\nexport const bytesPerBlob = bytesPerFieldElement * fieldElementsPerBlob\n\n/** Blob bytes limit per transaction. */\nexport const maxBytesPerTransaction =\n bytesPerBlob * blobsPerTransaction -\n // terminator byte (0x80).\n 1 -\n // zero byte (0x00) appended to each field element.\n 1 * fieldElementsPerBlob * blobsPerTransaction\n\n/** Root type for a Blob. */\nexport type Blob<type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes> =\n type\n\n/** A list of {@link ox#Blobs.Blob}. */\nexport type Blobs<type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes> =\n readonly Blob<type>[]\n\n/** Type for a Blob Sidecar that contains a blob, as well as its KZG commitment and proof. */\nexport type BlobSidecar<\n type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes,\n> = Compute<{\n /** The blob associated with the transaction. */\n blob: type\n /** The KZG commitment corresponding to this blob. */\n commitment: type\n /** The KZG proof corresponding to this blob and commitment. */\n proof: type\n}>\n\n/**\n * Transform a list of Commitments to Blob Versioned Hashes.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const commitments = Blobs.toCommitments(blobs, { kzg })\n * const versionedHashes = Blobs.commitmentsToVersionedHashes(commitments) // [!code focus]\n * // @log: ['0x...', '0x...']\n * ```\n *\n * @example\n * ### Configuring Return Type\n *\n * It is possible to configure the return type for the Versioned Hashes with the `as` option.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const commitments = Blobs.toCommitments(blobs, { kzg })\n * const versionedHashes = Blobs.commitmentsToVersionedHashes(commitments, {\n * as: 'Bytes', // [!code focus]\n * })\n * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]\n * ```\n *\n * @example\n * ### Versioning Hashes\n *\n * It is possible to configure the version for the Versioned Hashes with the `version` option.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const commitments = Blobs.toCommitments(blobs, { kzg })\n * const versionedHashes = Blobs.commitmentsToVersionedHashes(commitments, {\n * version: 2, // [!code focus]\n * })\n * ```\n *\n * @param commitments - A list of commitments.\n * @param options - Options.\n * @returns A list of Blob Versioned Hashes.\n */\nexport function commitmentsToVersionedHashes<\n const commitments extends readonly Bytes.Bytes[] | readonly Hex.Hex[],\n as extends 'Hex' | 'Bytes' =\n | (commitments extends readonly Hex.Hex[] ? 'Hex' : never)\n | (commitments extends readonly Bytes.Bytes[] ? 'Bytes' : never),\n>(\n commitments: commitments | readonly Bytes.Bytes[] | readonly Hex.Hex[],\n options: commitmentsToVersionedHashes.Options<as> = {},\n): commitmentsToVersionedHashes.ReturnType<as> {\n const { version } = options\n\n const as =\n options.as ?? (typeof commitments[0] === 'string' ? 'Hex' : 'Bytes')\n\n const hashes: Uint8Array[] | Hex.Hex[] = []\n for (const commitment of commitments) {\n hashes.push(\n commitmentToVersionedHash(commitment, {\n as,\n version,\n }) as never,\n )\n }\n return hashes as never\n}\n\nexport declare namespace commitmentsToVersionedHashes {\n type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {\n /** Return type. */\n as?: as | 'Hex' | 'Bytes' | undefined\n /** Version to tag onto the hashes. */\n version?: number | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)\n | (as extends 'Hex' ? readonly Hex.Hex[] : never)\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Transform a Commitment to its Blob Versioned Hash.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const [commitment] = Blobs.toCommitments(blobs, { kzg })\n * const versionedHash = Blobs.commitmentToVersionedHash(commitment) // [!code focus]\n * ```\n *\n * @example\n * ### Configuring Return Type\n *\n * It is possible to configure the return type for the Versioned Hash with the `as` option.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const [commitment] = Blobs.toCommitments(blobs, { kzg })\n * const versionedHashes = Blobs.commitmentToVersionedHash(commitment, {\n * as: 'Bytes', // [!code focus]\n * })\n * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]\n * ```\n *\n * @example\n * ### Versioning Hashes\n *\n * It is possible to configure the version for the Versioned Hash with the `version` option.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const [commitment] = Blobs.toCommitments(blobs, { kzg })\n * const versionedHashes = Blobs.commitmentToVersionedHash(commitment, {\n * version: 2, // [!code focus]\n * })\n * ```\n *\n * @param commitment - The commitment.\n * @param options - Options.\n * @returns The Blob Versioned Hash.\n */\nexport function commitmentToVersionedHash<\n const commitment extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (commitment extends Hex.Hex ? 'Hex' : never)\n | (commitment extends Bytes.Bytes ? 'Bytes' : never),\n>(\n commitment: commitment | Hex.Hex | Bytes.Bytes,\n options: commitmentToVersionedHash.Options<as> = {},\n): commitmentToVersionedHash.ReturnType<as> {\n const { version = 1 } = options\n const as = options.as ?? (typeof commitment === 'string' ? 'Hex' : 'Bytes')\n\n const versionedHash = Hash.sha256(commitment, { as: 'Bytes' })\n versionedHash.set([version], 0)\n return (\n as === 'Bytes' ? versionedHash : Hex.fromBytes(versionedHash)\n ) as commitmentToVersionedHash.ReturnType<as>\n}\n\nexport declare namespace commitmentToVersionedHash {\n type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {\n /** Return type. */\n as?: as | 'Hex' | 'Bytes' | undefined\n /** Version to tag onto the hash. */\n version?: number | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Transforms arbitrary data to {@link ox#Blobs.Blobs}.\n *\n * @example\n * ```ts twoslash\n * import { Blobs } from 'ox'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * ```\n *\n * @example\n * ### Creating Blobs from a String\n *\n * An example of creating Blobs from a string using {@link ox#Hex.(from:function)}:\n *\n * ```ts twoslash\n * import { Blobs, Hex } from 'ox'\n *\n * const blobs = Blobs.from(Hex.fromString('Hello world!'))\n * ```\n *\n * @example\n * ### Configuring Return Type\n *\n * It is possible to configure the return type for the Blobs with the `as` option.\n *\n * ```ts twoslash\n * import { Blobs } from 'ox'\n *\n * const blobs = Blobs.from('0xdeadbeef', { as: 'Bytes' })\n * // ^?\n *\n *\n * ```\n *\n * @param data - The data to convert to {@link ox#Blobs.Blobs}.\n * @param options - Options.\n * @returns The {@link ox#Blobs.Blobs}.\n */\nexport function from<\n const data extends Hex.Hex | Bytes.Bytes,\n as extends 'Hex' | 'Bytes' =\n | (data extends Hex.Hex ? 'Hex' : never)\n | (data extends Bytes.Bytes ? 'Bytes' : never),\n>(\n data: data | Hex.Hex | Bytes.Bytes,\n options: from.Options<as> = {},\n): from.ReturnType<as> {\n const as = options.as ?? (typeof data === 'string' ? 'Hex' : 'Bytes')\n const data_ = (\n typeof data === 'string' ? Bytes.fromHex(data) : data\n ) as Bytes.Bytes\n\n const size_ = Bytes.size(data_)\n if (!size_) throw new EmptyBlobError()\n if (size_ > maxBytesPerTransaction)\n throw new BlobSizeTooLargeError({\n maxSize: maxBytesPerTransaction,\n size: size_,\n })\n\n const blobs = []\n\n let active = true\n let position = 0\n while (active) {\n const blob = Cursor.create(new Uint8Array(bytesPerBlob))\n\n let size = 0\n while (size < fieldElementsPerBlob) {\n const bytes = data_.slice(position, position + (bytesPerFieldElement - 1))\n\n // Push a zero byte so the field element doesn't overflow the BLS modulus.\n blob.pushByte(0x00)\n\n // Push the current segment of data bytes.\n blob.pushBytes(bytes)\n\n // If we detect that the current segment of data bytes is less than 31 bytes,\n // we can stop processing and push a terminator byte to indicate the end of the blob.\n if (bytes.length < 31) {\n blob.pushByte(0x80)\n active = false\n break\n }\n\n size++\n position += 31\n }\n\n blobs.push(blob)\n }\n\n return (\n as === 'Bytes'\n ? blobs.map((x) => x.bytes)\n : blobs.map((x) => Hex.fromBytes(x.bytes))\n ) as never\n}\n\nexport declare namespace from {\n type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {\n /** Return type. */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)\n | (as extends 'Hex' ? readonly Hex.Hex[] : never)\n\n type ErrorType =\n | BlobSizeTooLargeError\n | EmptyBlobError\n | Bytes.fromHex.ErrorType\n | Hex.fromBytes.ErrorType\n | Cursor.create.ErrorType\n | Bytes.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Transforms a list of {@link ox#Blobs.BlobSidecars} to their Blob Versioned Hashes.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'ox'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const sidecars = Blobs.toSidecars(blobs, { kzg })\n * const versionedHashes = Blobs.sidecarsToVersionedHashes(sidecars) // [!code focus]\n * ```\n *\n * @example\n * ### Configuring Return Type\n *\n * It is possible to configure the return type for the Versioned Hashes with the `as` option.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const sidecars = Blobs.toSidecars(blobs, { kzg })\n * const versionedHashes = Blobs.sidecarsToVersionedHashes(sidecars, {\n * as: 'Bytes', // [!code focus]\n * })\n * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]\n * ```\n *\n * @example\n * ### Versioning Hashes\n *\n * It is possible to configure the version for the Versioned Hashes with the `version` option.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const sidecars = Blobs.toSidecars(blobs, { kzg })\n * const versionedHashes = Blobs.sidecarsToVersionedHashes(sidecars, {\n * version: 2, // [!code focus]\n * })\n * ```\n *\n * @param sidecars - The {@link ox#Blobs.BlobSidecars} to transform to Blob Versioned Hashes.\n * @param options - Options.\n * @returns The versioned hashes.\n */\nexport function sidecarsToVersionedHashes<\n const sidecars extends BlobSidecars,\n as extends 'Hex' | 'Bytes' =\n | (sidecars extends BlobSidecars<Hex.Hex> ? 'Hex' : never)\n | (sidecars extends BlobSidecars<Bytes.Bytes> ? 'Bytes' : never),\n>(\n sidecars: sidecars | BlobSidecars,\n options: sidecarsToVersionedHashes.Options<as> = {},\n): sidecarsToVersionedHashes.ReturnType<as> {\n const { version } = options\n\n const as =\n options.as ?? (typeof sidecars[0]!.blob === 'string' ? 'Hex' : 'Bytes')\n\n const hashes: Uint8Array[] | Hex.Hex[] = []\n for (const { commitment } of sidecars) {\n hashes.push(\n commitmentToVersionedHash(commitment, {\n as,\n version,\n }) as any,\n )\n }\n return hashes as any\n}\n\nexport declare namespace sidecarsToVersionedHashes {\n type Options<as extends 'Hex' | 'Bytes' | undefined = undefined> = {\n /** Return type. */\n as?: as | 'Hex' | 'Bytes' | undefined\n /** Version to tag onto the hashes. */\n version?: number | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)\n | (as extends 'Hex' ? readonly Hex.Hex[] : never)\n\n type ErrorType = commitmentToVersionedHash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Transforms Ox-shaped {@link ox#Blobs.Blobs} into the originating data.\n *\n * @example\n * ```ts twoslash\n * import { Blobs, Hex } from 'ox'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const data = Blobs.to(blobs) // [!code focus]\n * // @log: '0xdeadbeef'\n * ```\n *\n * @example\n * ### Configuring Return Type\n *\n * It is possible to configure the return type with second argument.\n *\n * ```ts twoslash\n * import { Blobs } from 'ox'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const data = Blobs.to(blobs, 'Bytes')\n * // @log: Uint8Array [ 13, 174, 190, 239 ]\n * ```\n *\n * @param blobs - The {@link ox#Blobs.Blobs} to transform.\n * @param to - The type to transform to.\n * @returns The originating data.\n */\nexport function to<\n const blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,\n to extends 'Hex' | 'Bytes' =\n | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)\n | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),\n>(\n blobs: blobs | Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,\n to?: to | 'Hex' | 'Bytes' | undefined,\n): to.ReturnType<to> {\n const to_ = to ?? (typeof blobs[0] === 'string' ? 'Hex' : 'Bytes')\n const blobs_ = (\n typeof blobs[0] === 'string'\n ? blobs.map((x) => Bytes.fromHex(x as Hex.Hex))\n : blobs\n ) as Bytes.Bytes[]\n\n const length = blobs_.reduce((length, blob) => length + blob.length, 0)\n const data = Cursor.create(new Uint8Array(length))\n let active = true\n\n for (const blob of blobs_) {\n const cursor = Cursor.create(blob)\n while (active && cursor.position < blob.length) {\n // First byte will be a zero 0x00 byte – we can skip.\n cursor.incrementPosition(1)\n\n let consume = 31\n if (blob.length - cursor.position < 31)\n consume = blob.length - cursor.position\n\n for (const _ in Array.from({ length: consume })) {\n const byte = cursor.readByte()\n const isTerminator =\n byte === 0x80 && !cursor.inspectBytes(cursor.remaining).includes(0x80)\n if (isTerminator) {\n active = false\n break\n }\n data.pushByte(byte)\n }\n }\n }\n\n const trimmedData = data.bytes.slice(0, data.position)\n return (to_ === 'Hex' ? Hex.fromBytes(trimmedData) : trimmedData) as never\n}\n\nexport declare namespace to {\n type ReturnType<to extends 'Hex' | 'Bytes' = 'Hex'> =\n | (to extends 'Bytes' ? Bytes.Bytes : never)\n | (to extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Bytes.fromHex.ErrorType\n | Cursor.create.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Transforms Ox-shaped {@link ox#Blobs.Blobs} into the originating data.\n *\n * @example\n * ```ts twoslash\n * import { Blobs, Hex } from 'ox'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const data = Blobs.toHex(blobs) // [!code focus]\n * // @log: '0xdeadbeef'\n * ```\n */\nexport function toHex(\n blobs: Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,\n): toHex.ReturnType {\n return to(blobs, 'Hex')\n}\n\nexport declare namespace toHex {\n type ReturnType = to.ReturnType<'Hex'>\n type ErrorType = to.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Transforms Ox-shaped {@link ox#Blobs.Blobs} into the originating data.\n *\n * @example\n * ```ts\n * import { Blobs, Hex } from 'ox'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const data = Blobs.toBytes(blobs) // [!code focus]\n * // @log: Uint8Array [ 13, 174, 190, 239 ]\n * ```\n */\nexport function toBytes(\n blobs: Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,\n): toBytes.ReturnType {\n return to(blobs, 'Bytes')\n}\n\n/**\n * Compute commitments from a list of {@link ox#Blobs.Blobs}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const commitments = Blobs.toCommitments(blobs, { kzg }) // [!code focus]\n * ```\n *\n * @example\n * ### Configuring Return Type\n *\n * It is possible to configure the return type with the `as` option.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const commitments = Blobs.toCommitments(blobs, {\n * as: 'Bytes', // [!code focus]\n * kzg,\n * })\n * // @log: [Uint8Array [ ... ], Uint8Array [ ... ]]\n * ```\n *\n * @param blobs - The {@link ox#Blobs.Blobs} to transform to commitments.\n * @param options - Options.\n * @returns The commitments.\n */\nexport function toCommitments<\n const blobs extends Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,\n as extends 'Hex' | 'Bytes' =\n | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)\n | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),\n>(\n blobs: blobs | Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,\n options: toCommitments.Options<as>,\n): toCommitments.ReturnType<as> {\n const { kzg } = options\n\n const as = options.as ?? (typeof blobs[0] === 'string' ? 'Hex' : 'Bytes')\n const blobs_ = (\n typeof blobs[0] === 'string'\n ? blobs.map((x) => Bytes.fromHex(x as any))\n : blobs\n ) as Bytes.Bytes[]\n\n const commitments: Bytes.Bytes[] = []\n for (const blob of blobs_)\n commitments.push(Uint8Array.from(kzg.blobToKzgCommitment(blob)))\n\n return (\n as === 'Bytes' ? commitments : commitments.map((x) => Hex.fromBytes(x))\n ) as never\n}\n\nexport declare namespace toCommitments {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n /** KZG implementation. */\n kzg: Pick<Kzg.Kzg, 'blobToKzgCommitment'>\n /** Return type. */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> = Compute<\n | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)\n | (as extends 'Hex' ? readonly Hex.Hex[] : never)\n >\n\n type ErrorType =\n | Bytes.fromHex.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\nexport declare namespace toBytes {\n type ReturnType = to.ReturnType<'Bytes'>\n type ErrorType = to.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Compute the proofs for a list of {@link ox#Blobs.Blobs} and their commitments.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const commitments = Blobs.toCommitments(blobs, { kzg })\n * const proofs = Blobs.toProofs(blobs, { commitments, kzg }) // [!code focus]\n * ```\n *\n * @param blobs - The {@link ox#Blobs.Blobs} to compute proofs for.\n * @param options - Options.\n * @returns The Blob proofs.\n */\nexport function toProofs<\n const blobs extends readonly Bytes.Bytes[] | readonly Hex.Hex[],\n const commitments extends readonly Bytes.Bytes[] | readonly Hex.Hex[],\n as extends 'Hex' | 'Bytes' =\n | (blobs extends readonly Hex.Hex[] ? 'Hex' : never)\n | (blobs extends readonly Bytes.Bytes[] ? 'Bytes' : never),\n>(\n blobs: blobs | Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,\n options: toProofs.Options<blobs, commitments, as>,\n): toProofs.ReturnType<as> {\n const { kzg } = options\n\n const as = options.as ?? (typeof blobs[0] === 'string' ? 'Hex' : 'Bytes')\n\n const blobs_ = (\n typeof blobs[0] === 'string'\n ? blobs.map((x) => Bytes.fromHex(x as any))\n : blobs\n ) as Bytes.Bytes[]\n const commitments = (\n typeof options.commitments[0] === 'string'\n ? options.commitments.map((x) => Bytes.fromHex(x as any))\n : options.commitments\n ) as Bytes.Bytes[]\n\n const proofs: Bytes.Bytes[] = []\n for (let i = 0; i < blobs_.length; i++) {\n const blob = blobs_[i]!\n const commitment = commitments[i]!\n proofs.push(Uint8Array.from(kzg.computeBlobKzgProof(blob, commitment)))\n }\n\n return (\n as === 'Bytes' ? proofs : proofs.map((x) => Hex.fromBytes(x))\n ) as never\n}\n\nexport declare namespace toProofs {\n type Options<\n blobs extends Blobs<Bytes.Bytes> | Blobs<Hex.Hex> =\n | Blobs<Bytes.Bytes>\n | Blobs<Hex.Hex>,\n commitments extends readonly Bytes.Bytes[] | readonly Hex.Hex[] =\n | readonly Bytes.Bytes[]\n | readonly Hex.Hex[],\n as extends 'Hex' | 'Bytes' =\n | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)\n | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),\n > = {\n /** Commitments for the blobs. */\n commitments: (commitments | readonly Bytes.Bytes[] | readonly Hex.Hex[]) &\n (commitments extends blobs\n ? {}\n : `commitments must be the same type as blobs`)\n /** KZG implementation. */\n kzg: Pick<Kzg.Kzg, 'computeBlobKzgProof'>\n /** Return type. */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)\n | (as extends 'Hex' ? readonly Hex.Hex[] : never)\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Transforms {@link ox#Blobs.Blobs} into a {@link ox#Blobs.BlobSidecars} array.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const sidecars = Blobs.toSidecars(blobs, { kzg }) // [!code focus]\n * ```\n *\n * @example\n * You can also provide your own commitments and proofs if you do not want `toSidecars`\n * to compute them.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const commitments = Blobs.toCommitments(blobs, { kzg })\n * const proofs = Blobs.toProofs(blobs, { commitments, kzg })\n *\n * const sidecars = Blobs.toSidecars(blobs, { commitments, kzg, proofs }) // [!code focus]\n * ```\n *\n * @param blobs - The {@link ox#Blobs.Blobs} to transform into {@link ox#Blobs.BlobSidecars}.\n * @param options - Options.\n * @returns The {@link ox#Blobs.BlobSidecars}.\n */\nexport function toSidecars<\n const blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes>,\n>(\n blobs: blobs,\n options: toSidecars.Options<blobs>,\n): toSidecars.ReturnType<blobs> {\n const { kzg } = options\n\n const commitments = options.commitments ?? toCommitments(blobs, { kzg: kzg! })\n const proofs =\n options.proofs ??\n toProofs(blobs, { commitments: commitments as any, kzg: kzg! })\n\n const sidecars: Mutable<BlobSidecars> = []\n for (let i = 0; i < blobs.length; i++)\n sidecars.push({\n blob: blobs[i]!,\n commitment: commitments[i]!,\n proof: proofs[i]!,\n })\n\n return sidecars as never\n}\n\nexport declare namespace toSidecars {\n type Options<\n blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes> =\n | Blobs<Hex.Hex>\n | Blobs<Bytes.Bytes>,\n > = {\n kzg?: Kzg.Kzg | undefined\n } & OneOf<\n | {}\n | {\n /** Commitment for each blob. */\n commitments: blobs | readonly Hex.Hex[] | readonly Bytes.Bytes[]\n /** Proof for each blob. */\n proofs: blobs | readonly Hex.Hex[] | readonly Bytes.Bytes[]\n }\n >\n\n type ReturnType<blobs extends Blobs<Hex.Hex> | Blobs<Bytes.Bytes>> =\n UnionCompute<\n | (blobs extends Blobs<Hex.Hex> ? BlobSidecars<Hex.Hex> : never)\n | (blobs extends Blobs<Bytes.Bytes> ? BlobSidecars<Bytes.Bytes> : never)\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Compute Blob Versioned Hashes from a list of {@link ox#Blobs.Blobs}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const versionedHashes = Blobs.toVersionedHashes(blobs, { kzg }) // [!code focus]\n * ```\n *\n * @param blobs - The {@link ox#Blobs.Blobs} to transform into Blob Versioned Hashes.\n * @param options - Options.\n * @returns The Blob Versioned Hashes.\n */\nexport function toVersionedHashes<\n const blobs extends Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,\n as extends 'Hex' | 'Bytes' =\n | (blobs extends Blobs<Hex.Hex> ? 'Hex' : never)\n | (blobs extends Blobs<Bytes.Bytes> ? 'Bytes' : never),\n>(\n blobs: blobs | Blobs<Bytes.Bytes> | Blobs<Hex.Hex>,\n options: toVersionedHashes.Options<as>,\n): toVersionedHashes.ReturnType<as> {\n const commitments = toCommitments(blobs, options)\n return commitmentsToVersionedHashes(commitments, options)\n}\n\nexport declare namespace toVersionedHashes {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n /** KZG implementation. */\n kzg: Pick<Kzg.Kzg, 'blobToKzgCommitment'>\n /** Return type. */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes' = 'Hex'> = Compute<\n | (as extends 'Bytes' ? readonly Bytes.Bytes[] : never)\n | (as extends 'Hex' ? readonly Hex.Hex[] : never)\n >\n\n type ErrorType =\n | toCommitments.ErrorType\n | commitmentsToVersionedHashes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** A list of {@link ox#Blobs.BlobSidecar}. */\nexport type BlobSidecars<\n type extends Hex.Hex | Bytes.Bytes = Hex.Hex | Bytes.Bytes,\n> = readonly Compute<BlobSidecar<type>>[]\n\n/** Thrown when the blob size is too large. */\nexport class BlobSizeTooLargeError extends Errors.BaseError {\n override readonly name = 'Blobs.BlobSizeTooLargeError'\n constructor({ maxSize, size }: { maxSize: number; size: number }) {\n super('Blob size is too large.', {\n metaMessages: [`Max: ${maxSize} bytes`, `Given: ${size} bytes`],\n })\n }\n}\n\n/** Thrown when the blob is empty. */\nexport class EmptyBlobError extends Errors.BaseError {\n override readonly name = 'Blobs.EmptyBlobError'\n constructor() {\n super('Blob data must not be empty.')\n }\n}\n\n/** Thrown when the blob versioned hashes are empty. */\nexport class EmptyBlobVersionedHashesError extends Errors.BaseError {\n override readonly name = 'Blobs.EmptyBlobVersionedHashesError'\n constructor() {\n super('Blob versioned hashes must not be empty.')\n }\n}\n\n/** Thrown when the blob versioned hash size is invalid. */\nexport class InvalidVersionedHashSizeError extends Errors.BaseError {\n override readonly name = 'Blobs.InvalidVersionedHashSizeError'\n constructor({\n hash,\n size,\n }: {\n hash: Hex.Hex\n size: number\n }) {\n super(`Versioned hash \"${hash}\" size is invalid.`, {\n metaMessages: ['Expected: 32', `Received: ${size}`],\n })\n }\n}\n\n/** Thrown when the blob versioned hash version is invalid. */\nexport class InvalidVersionedHashVersionError extends Errors.BaseError {\n override readonly name = 'Blobs.InvalidVersionedHashVersionError'\n constructor({\n hash,\n version,\n }: {\n hash: Hex.Hex\n version: number\n }) {\n super(`Versioned hash \"${hash}\" version is invalid.`, {\n metaMessages: [\n `Expected: ${Kzg.versionedHashVersion}`,\n `Received: ${version}`,\n ],\n })\n }\n}\n", "import type * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\n\n/** @see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters */\nexport const versionedHashVersion = 1\n\n/** Root type for a KZG interface. */\nexport type Kzg = {\n /**\n * Convert a blob to a KZG commitment.\n */\n blobToKzgCommitment(blob: Bytes.Bytes): Bytes.Bytes\n /**\n * Given a blob, return the KZG proof that is used to verify it against the\n * commitment.\n */\n computeBlobKzgProof(blob: Bytes.Bytes, commitment: Bytes.Bytes): Bytes.Bytes\n}\n\n/**\n * Defines a KZG interface.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import * as cKzg from 'c-kzg'\n * import { Kzg } from 'ox'\n * import { Paths } from 'ox/trusted-setups'\n *\n * cKzg.loadTrustedSetup(Paths.mainnet)\n *\n * const kzg = Kzg.from(cKzg)\n * ```\n *\n * @param value - The KZG object to convert.\n * @returns The KZG interface object.\n */\nexport function from(value: Kzg): Kzg {\n const { blobToKzgCommitment, computeBlobKzgProof } = value\n return {\n blobToKzgCommitment,\n computeBlobKzgProof,\n }\n}\n\nexport declare namespace from {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Transaction from './Transaction.js'\nimport * as Withdrawal from './Withdrawal.js'\nimport type { Compute, OneOf } from './internal/types.js'\n\n/** A Block as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/block.yaml). */\nexport type Block<\n includeTransactions extends boolean = false,\n blockTag extends Tag = 'latest',\n bigintType = bigint,\n numberType = number,\n transaction = Transaction.Transaction<\n blockTag extends 'pending' ? true : false,\n bigintType,\n numberType\n >,\n> = Compute<{\n /** Base fee per gas */\n baseFeePerGas?: bigintType | undefined\n /** Total used blob gas by all transactions in this block */\n blobGasUsed?: bigintType | undefined\n /** Difficulty for this block */\n difficulty?: bigintType | undefined\n /** Excess blob gas */\n excessBlobGas?: bigintType | undefined\n /** \"Extra data\" field of this block */\n extraData?: Hex.Hex | undefined\n /** Maximum gas allowed in this block */\n gasLimit: bigintType\n /** Total used gas by all transactions in this block */\n gasUsed: bigintType\n /** Block hash or `null` if pending */\n hash: blockTag extends 'pending' ? null : Hex.Hex\n /** Logs bloom filter or `null` if pending */\n logsBloom: blockTag extends 'pending' ? null : Hex.Hex\n /** Address that received this block’s mining rewards */\n miner: Address.Address\n /** Unique identifier for the block. */\n mixHash: Hex.Hex\n /** Proof-of-work hash or `null` if pending */\n nonce: blockTag extends 'pending' ? null : Hex.Hex\n /** Block number or `null` if pending */\n number: blockTag extends 'pending' ? null : bigintType\n parentBeaconBlockRoot?: Hex.Hex | undefined\n /** Parent block hash */\n parentHash: Hex.Hex\n /** Root of the this block’s receipts trie */\n receiptsRoot: Hex.Hex\n sealFields?: readonly Hex.Hex[] | undefined\n /** SHA3 of the uncles data in this block */\n sha3Uncles: Hex.Hex\n /** Size of this block in bytes */\n size: bigintType\n /** Root of this block’s final state trie */\n stateRoot: Hex.Hex\n /** Unix timestamp of when this block was collated */\n timestamp: bigintType\n /** Total difficulty of the chain until this block */\n totalDifficulty?: bigintType | undefined\n /** List of transaction objects or hashes */\n transactions: includeTransactions extends true\n ? readonly transaction[]\n : readonly Hex.Hex[]\n /** Root of this block’s transaction trie */\n transactionsRoot: Hex.Hex\n /** List of uncle hashes */\n uncles: readonly Hex.Hex[]\n /** List of withdrawal objects */\n withdrawals?:\n | readonly Withdrawal.Withdrawal<bigintType, numberType>[]\n | undefined\n /** Root of the this block’s withdrawals trie */\n withdrawalsRoot?: Hex.Hex | undefined\n}>\n\n/** A Block hash. */\nexport type Hash = Hex.Hex\n\n/** A Block identifier. */\nexport type Identifier<bigintType = bigint> = {\n /** Whether or not to throw an error if the block is not in the canonical chain as described below. Only allowed in conjunction with the blockHash tag. Defaults to false. */\n requireCanonical?: boolean | undefined\n} & OneOf<\n | {\n /** The block in the canonical chain with this number */\n blockNumber: Number<bigintType>\n }\n | {\n /** The block uniquely identified by this hash. The `blockNumber` and `blockHash` properties are mutually exclusive; exactly one of them must be set. */\n blockHash: Hash\n }\n>\n\n/** A Block number. */\nexport type Number<bigintType = bigint> = bigintType\n\n/** An RPC Block as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/block.yaml). */\nexport type Rpc<\n includeTransactions extends boolean = boolean,\n blockTag extends Tag = 'latest',\n transaction = Transaction.Rpc<blockTag extends 'pending' ? true : false>,\n> = Block<includeTransactions, blockTag, Hex.Hex, Hex.Hex, transaction>\n\n/**\n * A Block Tag as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/block.yaml).\n *\n * - `earliest`: The lowest numbered block the client has available;\n * - `finalized`: The most recent crypto-economically secure block, cannot be re-orged outside of manual intervention driven by community coordination;\n * - `safe`: The most recent block that is safe from re-orgs under honest majority and certain synchronicity assumptions;\n * - `latest`: The most recent block in the canonical chain observed by the client, this block may be re-orged out of the canonical chain even under healthy/normal conditions;\n * - `pending`: A sample next block built by the client on top of `latest` and containing the set of transactions usually taken from local mempool.\n */\nexport type Tag = 'latest' | 'earliest' | 'pending' | 'safe' | 'finalized'\n\n/**\n * Converts a {@link ox#Block.Block} to an {@link ox#Block.Rpc}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Block } from 'ox'\n *\n * const block = Block.toRpc({\n * // ...\n * hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',\n * number: 19868020n,\n * size: 520n\n * timestamp: 1662222222n,\n * // ...\n * })\n * // @log: {\n * // @log: // ...\n * // @log: hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',\n * // @log: number: '0xec6fc6',\n * // @log: size: '0x208',\n * // @log: timestamp: '0x63198f6f',\n * // @log: // ...\n * // @log: }\n * ```\n *\n * @param block - The Block to convert.\n * @returns An RPC Block.\n */\nexport function toRpc<\n includeTransactions extends boolean = false,\n blockTag extends Tag = 'latest',\n>(\n block: Block<includeTransactions, blockTag>,\n _options: toRpc.Options<includeTransactions, blockTag> = {},\n): Rpc<boolean, blockTag> {\n const transactions = block.transactions.map((transaction) => {\n if (typeof transaction === 'string') return transaction\n return Transaction.toRpc(transaction as any) as any\n })\n return {\n baseFeePerGas:\n typeof block.baseFeePerGas === 'bigint'\n ? Hex.fromNumber(block.baseFeePerGas)\n : undefined,\n blobGasUsed:\n typeof block.blobGasUsed === 'bigint'\n ? Hex.fromNumber(block.blobGasUsed)\n : undefined,\n excessBlobGas:\n typeof block.excessBlobGas === 'bigint'\n ? Hex.fromNumber(block.excessBlobGas)\n : undefined,\n extraData: block.extraData,\n difficulty:\n typeof block.difficulty === 'bigint'\n ? Hex.fromNumber(block.difficulty)\n : undefined,\n gasLimit: Hex.fromNumber(block.gasLimit),\n gasUsed: Hex.fromNumber(block.gasUsed),\n hash: block.hash,\n logsBloom: block.logsBloom,\n miner: block.miner,\n mixHash: block.mixHash,\n nonce: block.nonce,\n number: (typeof block.number === 'bigint'\n ? Hex.fromNumber(block.number)\n : null) as never,\n parentBeaconBlockRoot: block.parentBeaconBlockRoot,\n parentHash: block.parentHash,\n receiptsRoot: block.receiptsRoot,\n sealFields: block.sealFields,\n sha3Uncles: block.sha3Uncles,\n size: Hex.fromNumber(block.size),\n stateRoot: block.stateRoot,\n timestamp: Hex.fromNumber(block.timestamp),\n totalDifficulty:\n typeof block.totalDifficulty === 'bigint'\n ? Hex.fromNumber(block.totalDifficulty)\n : undefined,\n transactions,\n transactionsRoot: block.transactionsRoot,\n uncles: block.uncles,\n withdrawals: block.withdrawals?.map(Withdrawal.toRpc),\n withdrawalsRoot: block.withdrawalsRoot,\n }\n}\n\nexport declare namespace toRpc {\n type Options<\n includeTransactions extends boolean = false,\n blockTag extends Tag = 'latest',\n > = {\n blockTag?: blockTag | Tag | undefined\n includeTransactions?: includeTransactions | boolean | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Block.Rpc} to an {@link ox#Block.Block}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Block } from 'ox'\n *\n * const block = Block.fromRpc({\n * // ...\n * hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',\n * number: '0xec6fc6',\n * size: '0x208',\n * timestamp: '0x63198f6f',\n * // ...\n * })\n * // @log: {\n * // @log: // ...\n * // @log: hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',\n * // @log: number: 19868020n,\n * // @log: size: 520n,\n * // @log: timestamp: 1662222222n,\n * // @log: // ...\n * // @log: }\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an end-to-end example of using `Block.fromRpc` to fetch a block from the network and convert it to an {@link ox#Block.Block}.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Block } from 'ox'\n *\n * const block = await window.ethereum!\n * .request({\n * method: 'eth_getBlockByNumber',\n * params: ['latest', false],\n * })\n * .then(Block.fromRpc) // [!code hl]\n * // @log: {\n * // @log: // ...\n * // @log: hash: '0xebc3644804e4040c0a74c5a5bbbc6b46a71a5d4010fe0c92ebb2fdf4a43ea5dd',\n * // @log: number: 19868020n,\n * // @log: size: 520n,\n * // @log: timestamp: 1662222222n,\n * // @log: // ...\n * // @log: }\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param block - The RPC block to convert.\n * @returns An instantiated {@link ox#Block.Block}.\n */\nexport function fromRpc<\n const block extends Rpc | null,\n includeTransactions extends boolean = false,\n blockTag extends Tag = 'latest',\n>(\n block: block | Rpc | null,\n _options: fromRpc.Options<includeTransactions, blockTag> = {},\n): block extends Rpc ? Block<includeTransactions, blockTag> : null {\n if (!block) return null as never\n\n const transactions = block.transactions.map((transaction) => {\n if (typeof transaction === 'string') return transaction\n return Transaction.fromRpc(transaction) as any\n })\n return {\n ...block,\n baseFeePerGas: block.baseFeePerGas\n ? BigInt(block.baseFeePerGas)\n : undefined,\n blobGasUsed: block.blobGasUsed ? BigInt(block.blobGasUsed) : undefined,\n difficulty: block.difficulty ? BigInt(block.difficulty) : undefined,\n excessBlobGas: block.excessBlobGas\n ? BigInt(block.excessBlobGas)\n : undefined,\n gasLimit: BigInt(block.gasLimit ?? 0n),\n gasUsed: BigInt(block.gasUsed ?? 0n),\n number: block.number ? BigInt(block.number) : null,\n size: BigInt(block.size ?? 0n),\n stateRoot: block.stateRoot,\n timestamp: BigInt(block.timestamp ?? 0n),\n totalDifficulty: BigInt(block.totalDifficulty ?? 0n),\n transactions,\n withdrawals: block.withdrawals?.map(Withdrawal.fromRpc),\n } as Block as never\n}\n\nexport declare namespace fromRpc {\n type Options<\n includeTransactions extends boolean = false,\n blockTag extends Tag = 'latest',\n > = {\n blockTag?: blockTag | Tag | undefined\n includeTransactions?: includeTransactions | boolean | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as AccessList from './AccessList.js'\nimport type * as Address from './Address.js'\nimport * as Authorization from './Authorization.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Signature from './Signature.js'\nimport type { Compute, UnionCompute } from './internal/types.js'\nimport type { OneOf } from './internal/types.js'\n\n/**\n * A Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml).\n */\nexport type Transaction<\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n> = UnionCompute<\n OneOf<\n | Legacy<pending, bigintType, numberType>\n | Eip1559<pending, bigintType, numberType>\n | Eip2930<pending, bigintType, numberType>\n | Eip4844<pending, bigintType, numberType>\n | Eip7702<pending, bigintType, numberType>\n | (Base & { type: Hex.Hex })\n >\n>\n\n/**\n * An RPC Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml).\n */\nexport type Rpc<pending extends boolean = false> = UnionCompute<\n OneOf<\n | LegacyRpc<pending>\n | Eip1559Rpc<pending>\n | Eip2930Rpc<pending>\n | Eip4844Rpc<pending>\n | Eip7702Rpc<pending>\n | (BaseRpc & { type: Hex.Hex })\n >\n>\n\n/** Base properties of a Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Base<\n type extends string = string,\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n> = Compute<{\n /** Hash of the block that contains this transaction, or `null` if pending. */\n blockHash: pending extends true ? null : Hex.Hex\n /** Number of block containing this transaction or `null` if pending */\n blockNumber: pending extends true ? null : bigintType\n /** Chain ID that this transaction is valid on. */\n chainId: numberType\n /** @alias `input` Added for TransactionEnvelope - Transaction compatibility. */\n data?: Hex.Hex | undefined\n /** Sender of this transaction */\n from: Address.Address\n /** Hash of this transaction */\n hash: Hex.Hex\n /** Contract code or a hashed method call with encoded args */\n input: Hex.Hex\n /** Gas provided for transaction execution */\n gas: bigintType\n /** Unique number identifying this transaction */\n nonce: bigintType\n /** Transaction recipient. `null` if the transaction is a contract creation. */\n to: Address.Address | null\n /** Index of this transaction in the block or `null` if pending */\n transactionIndex: pending extends true ? null : numberType\n /** Transaction type */\n type: type\n /** Value in wei sent with this transaction */\n value: bigintType\n /** ECDSA signature r. */\n r: bigintType\n /** ECDSA signature s. */\n s: bigintType\n /** ECDSA signature yParity. */\n yParity: numberType\n /** @deprecated ECDSA signature v (for backwards compatibility). */\n v?: numberType | undefined\n}>\n\n/** Base properties of an RPC Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type BaseRpc<\n type extends string = string,\n pending extends boolean = false,\n> = Base<type, pending, Hex.Hex, Hex.Hex>\n\n/** An [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip1559<\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n type extends string = 'eip1559',\n> = Compute<\n Base<type, pending, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList: AccessList.AccessList\n /** Effective gas price paid by the sender in wei. */\n gasPrice?: bigintType | undefined\n /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */\n maxFeePerGas: bigintType\n /** Max priority fee per gas (in wei). */\n maxPriorityFeePerGas: bigintType\n }\n>\n\n/** An [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) RPC Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip1559Rpc<pending extends boolean = false> = Compute<\n Eip1559<pending, Hex.Hex, Hex.Hex, ToRpcType['eip1559']>\n>\n\n/** An [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip2930<\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n type extends string = 'eip2930',\n> = Compute<\n Base<type, pending, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList: AccessList.AccessList\n /** The gas price willing to be paid by the sender (in wei). */\n gasPrice: bigintType\n }\n>\n\n/** An RPC [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip2930Rpc<pending extends boolean = false> = Compute<\n Eip2930<pending, Hex.Hex, Hex.Hex, ToRpcType['eip2930']>\n>\n\n/** An [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip4844<\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n type extends string = 'eip4844',\n> = Compute<\n Base<type, pending, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList: AccessList.AccessList\n /** List of versioned blob hashes associated with the transaction's blobs. */\n blobVersionedHashes: readonly Hex.Hex[]\n /** Total fee per blob gas in wei. */\n maxFeePerBlobGas: bigintType\n /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */\n maxFeePerGas: bigintType\n /** Max priority fee per gas (in wei). */\n maxPriorityFeePerGas: bigintType\n }\n>\n\n/** An RPC [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip4844Rpc<pending extends boolean = false> = Compute<\n Eip4844<pending, Hex.Hex, Hex.Hex, ToRpcType['eip4844']>\n>\n\n/** An [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip7702<\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n type extends string = 'eip7702',\n> = Compute<\n Base<type, pending, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList: AccessList.AccessList\n /** EIP-7702 Authorization list for the transaction. */\n authorizationList: Authorization.ListSigned<bigintType, numberType>\n /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */\n maxFeePerGas: bigintType\n /** Max priority fee per gas (in wei). */\n maxPriorityFeePerGas: bigintType\n }\n>\n\n/** An RPC [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Eip7702Rpc<pending extends boolean = false> = Compute<\n Eip7702<pending, Hex.Hex, Hex.Hex, ToRpcType['eip7702']>\n>\n\n/** An legacy Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type Legacy<\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n type extends string = 'legacy',\n> = Compute<\n Omit<\n Base<type, pending, bigintType, numberType>,\n 'chainId' | 'v' | 'yParity'\n > & {\n chainId?: numberType | undefined\n /** The gas price willing to be paid by the sender (in wei). */\n gasPrice: bigintType\n /** ECDSA signature v. */\n v: numberType\n /** ECDSA signature yParity. */\n yParity?: numberType | undefined\n }\n>\n\n/** A legacy RPC Transaction as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.yaml). */\nexport type LegacyRpc<pending extends boolean = false> = Compute<\n Legacy<pending, Hex.Hex, Hex.Hex, ToRpcType['legacy']>\n>\n\n/** Type to RPC Type mapping. */\nexport const toRpcType = {\n legacy: '0x0',\n eip2930: '0x1',\n eip1559: '0x2',\n eip4844: '0x3',\n eip7702: '0x4',\n} as const\n\n/** Type to RPC Type mapping. */\nexport type ToRpcType = typeof toRpcType & {\n [type: string]: `0x${string}`\n}\n\n/** RPC Type to Type mapping. */\nexport const fromRpcType = {\n '0x0': 'legacy',\n '0x1': 'eip2930',\n '0x2': 'eip1559',\n '0x3': 'eip4844',\n '0x4': 'eip7702',\n} as const\n\n/** RPC Type to Type mapping. */\n\nexport type FromRpcType = typeof fromRpcType & {\n [type: `0x${string}`]: string\n}\n\n/**\n * Converts an {@link ox#Transaction.Rpc} to an {@link ox#Transaction.Transaction}.\n *\n * @example\n * ```ts twoslash\n * import { Transaction } from 'ox'\n *\n * const transaction = Transaction.fromRpc({\n * hash: '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',\n * nonce: '0x357',\n * blockHash:\n * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',\n * blockNumber: '0x12f296f',\n * transactionIndex: '0x2',\n * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',\n * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',\n * value: '0x9b6e64a8ec60000',\n * gas: '0x43f5d',\n * maxFeePerGas: '0x2ca6ae494',\n * maxPriorityFeePerGas: '0x41cc3c0',\n * input:\n * '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006643504700000000000000000000000000000000000000000000000000000000000000040b080604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec600000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec60000000000000000000000000000000000000000000000000000019124bb5ae978c000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b80000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b8000000000000000000000000000000fee13a103a10d593b9ae06b3e05f2e7e1c00000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000190240001b9872b',\n * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',\n * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',\n * yParity: '0x0',\n * chainId: '0x1',\n * accessList: [],\n * type: '0x2',\n * })\n * ```\n *\n * @param transaction - The RPC transaction to convert.\n * @returns An instantiated {@link ox#Transaction.Transaction}.\n */\nexport function fromRpc<\n const transaction extends Rpc | null,\n pending extends boolean = false,\n>(\n transaction: transaction | Rpc<pending> | null,\n _options: fromRpc.Options<pending> = {},\n): transaction extends Rpc<pending> ? Transaction<pending> : null {\n if (!transaction) return null as never\n\n const signature = Signature.extract(transaction)\n\n const transaction_ = {\n ...transaction,\n ...signature,\n } as unknown as Transaction<boolean>\n\n transaction_.blockNumber = transaction.blockNumber\n ? BigInt(transaction.blockNumber)\n : null\n transaction_.data = transaction.input\n transaction_.gas = BigInt(transaction.gas ?? 0n)\n transaction_.nonce = BigInt(transaction.nonce ?? 0n)\n transaction_.transactionIndex = transaction.transactionIndex\n ? Number(transaction.transactionIndex)\n : null\n transaction_.value = BigInt(transaction.value ?? 0n)\n\n if (transaction.authorizationList)\n transaction_.authorizationList = Authorization.fromRpcList(\n transaction.authorizationList,\n )\n if (transaction.chainId) transaction_.chainId = Number(transaction.chainId)\n if (transaction.gasPrice) transaction_.gasPrice = BigInt(transaction.gasPrice)\n if (transaction.maxFeePerBlobGas)\n transaction_.maxFeePerBlobGas = BigInt(transaction.maxFeePerBlobGas)\n if (transaction.maxFeePerGas)\n transaction_.maxFeePerGas = BigInt(transaction.maxFeePerGas)\n if (transaction.maxPriorityFeePerGas)\n transaction_.maxPriorityFeePerGas = BigInt(transaction.maxPriorityFeePerGas)\n if (transaction.type)\n transaction_.type =\n (fromRpcType as any)[transaction.type] ?? transaction.type\n if (signature) transaction_.v = Signature.yParityToV(signature.yParity)\n\n return transaction_ as never\n}\n\nexport declare namespace fromRpc {\n type Options<pending extends boolean = false> = {\n pending?: pending | boolean | undefined\n }\n\n type ErrorType = Signature.extract.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#Transaction.Transaction} to an {@link ox#Transaction.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Transaction } from 'ox'\n *\n * const transaction = Transaction.toRpc({\n * accessList: [],\n * blockHash:\n * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',\n * blockNumber: 19868015n,\n * chainId: 1,\n * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',\n * gas: 278365n,\n * hash: '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',\n * input:\n * '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006643504700000000000000000000000000000000000000000000000000000000000000040b080604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec600000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec60000000000000000000000000000000000000000000000000000019124bb5ae978c000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b80000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b8000000000000000000000000000000fee13a103a10d593b9ae06b3e05f2e7e1c00000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000190240001b9872b',\n * maxFeePerGas: 11985937556n,\n * maxPriorityFeePerGas: 68993984n,\n * nonce: 855n,\n * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,\n * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,\n * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',\n * transactionIndex: 2,\n * type: 'eip1559',\n * v: 27,\n * value: 700000000000000000n,\n * yParity: 0,\n * })\n * ```\n *\n * @param transaction - The transaction to convert.\n * @returns An RPC-formatted transaction.\n */\nexport function toRpc<pending extends boolean = false>(\n transaction: Transaction<pending>,\n _options?: toRpc.Options<pending>,\n): Rpc<pending> {\n const rpc = {} as Rpc<boolean>\n\n rpc.blockHash = transaction.blockHash\n rpc.blockNumber =\n typeof transaction.blockNumber === 'bigint'\n ? Hex.fromNumber(transaction.blockNumber)\n : null\n rpc.from = transaction.from\n rpc.gas = Hex.fromNumber(transaction.gas ?? 0n)\n rpc.hash = transaction.hash\n rpc.input = transaction.input\n rpc.nonce = Hex.fromNumber(transaction.nonce ?? 0n)\n rpc.to = transaction.to\n rpc.transactionIndex = transaction.transactionIndex\n ? Hex.fromNumber(transaction.transactionIndex)\n : null\n rpc.type = (toRpcType as any)[transaction.type] ?? transaction.type\n rpc.value = Hex.fromNumber(transaction.value ?? 0n)\n\n if (transaction.accessList) rpc.accessList = transaction.accessList\n if (transaction.authorizationList)\n rpc.authorizationList = Authorization.toRpcList(\n transaction.authorizationList,\n )\n if (transaction.blobVersionedHashes)\n rpc.blobVersionedHashes = transaction.blobVersionedHashes\n if (transaction.chainId) rpc.chainId = Hex.fromNumber(transaction.chainId)\n if (typeof transaction.gasPrice === 'bigint')\n rpc.gasPrice = Hex.fromNumber(transaction.gasPrice)\n if (typeof transaction.maxFeePerBlobGas === 'bigint')\n rpc.maxFeePerBlobGas = Hex.fromNumber(transaction.maxFeePerBlobGas)\n if (typeof transaction.maxFeePerGas === 'bigint')\n rpc.maxFeePerGas = Hex.fromNumber(transaction.maxFeePerGas)\n if (typeof transaction.maxPriorityFeePerGas === 'bigint')\n rpc.maxPriorityFeePerGas = Hex.fromNumber(transaction.maxPriorityFeePerGas)\n if (typeof transaction.r === 'bigint')\n rpc.r = Hex.fromNumber(transaction.r, { size: 32 })\n if (typeof transaction.s === 'bigint')\n rpc.s = Hex.fromNumber(transaction.s, { size: 32 })\n if (typeof transaction.v === 'number')\n rpc.v = Hex.fromNumber(transaction.v, { size: 1 })\n if (typeof transaction.yParity === 'number')\n rpc.yParity = transaction.yParity === 0 ? '0x0' : '0x1'\n\n return rpc as Rpc<pending>\n}\n\nexport declare namespace toRpc {\n type Options<pending extends boolean = false> = {\n pending?: pending | boolean | undefined\n }\n\n type ErrorType = Signature.extract.ErrorType | Errors.GlobalErrorType\n}\n", "import type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\n\n/** A Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Withdrawal<bigintType = bigint, numberType = number> = {\n address: Hex.Hex\n amount: bigintType\n index: numberType\n validatorIndex: numberType\n}\n\n/** An RPC Withdrawal as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/withdrawal.yaml). */\nexport type Rpc = Withdrawal<Hex.Hex, Hex.Hex>\n\n/**\n * Converts a {@link ox#Withdrawal.Rpc} to an {@link ox#Withdrawal.Withdrawal}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.fromRpc({\n * address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * amount: '0x620323',\n * index: '0x0',\n * validatorIndex: '0x1',\n * })\n * // @log: {\n * // @log: address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log: amount: 6423331n,\n * // @log: index: 0,\n * // @log: validatorIndex: 1\n * // @log: }\n * ```\n *\n * @param withdrawal - The RPC withdrawal to convert.\n * @returns An instantiated {@link ox#Withdrawal.Withdrawal}.\n */\nexport function fromRpc(withdrawal: Rpc): Withdrawal {\n return {\n ...withdrawal,\n amount: BigInt(withdrawal.amount),\n index: Number(withdrawal.index),\n validatorIndex: Number(withdrawal.validatorIndex),\n }\n}\n\nexport declare namespace fromRpc {\n export type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Withdrawal.Withdrawal} to an {@link ox#Withdrawal.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Withdrawal } from 'ox'\n *\n * const withdrawal = Withdrawal.toRpc({\n * address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * amount: 6423331n,\n * index: 0,\n * validatorIndex: 1,\n * })\n * // @log: {\n * // @log: address: '0x00000000219ab540356cBB839Cbe05303d7705Fa',\n * // @log: amount: '0x620323',\n * // @log: index: '0x0',\n * // @log: validatorIndex: '0x1',\n * // @log: }\n * ```\n *\n * @param withdrawal - The Withdrawal to convert.\n * @returns An RPC Withdrawal.\n */\nexport function toRpc(withdrawal: Withdrawal): Rpc {\n return {\n address: withdrawal.address,\n amount: Hex.fromNumber(withdrawal.amount),\n index: Hex.fromNumber(withdrawal.index),\n validatorIndex: Hex.fromNumber(withdrawal.validatorIndex),\n }\n}\n\nexport declare namespace toRpc {\n export type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\n\n/**\n * Checks if an input is matched in the bloom filter.\n *\n * @example\n * ```ts twoslash\n * import { Bloom } from 'ox'\n *\n * Bloom.contains(\n * '0x00000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000008000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',\n * '0xef2d6d194084c2de36e0dabfce45d046b37d1106',\n * )\n * // @log: true\n * ```\n *\n * @param bloom - Bloom filter value.\n * @param input - Input to check.\n * @returns Whether the input is matched in the bloom filter.\n */\nexport function contains(\n bloom: Hex.Hex,\n input: Hex.Hex | Bytes.Bytes,\n): boolean {\n const filter = Bytes.fromHex(bloom)\n const hash = Hash.keccak256(input, { as: 'Bytes' })\n\n for (const i of [0, 2, 4]) {\n const bit = (hash[i + 1]! + (hash[i]! << 8)) & 0x7ff\n if ((filter[256 - 1 - Math.floor(bit / 8)]! & (1 << (bit % 8))) === 0)\n return false\n }\n\n return true\n}\n\nexport declare namespace contains {\n type ErrorType =\n | Bytes.fromHex.ErrorType\n | Hash.keccak256.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Checks if a string is a valid bloom filter value.\n *\n * @example\n * ```ts twoslash\n * import { Bloom } from 'ox'\n *\n * Bloom.validate('0x')\n * // @log: false\n *\n * Bloom.validate('0x00000000000000000000008000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000044000200000000000000000002000000000000000000000040000000000000000000000000000020000000000000000000800000000000800000000000800000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000808002000000000400000000000000000000000060000000000000000000000000000000000000000000000100000000000002000000')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns Whether the value is a valid bloom filter.\n */\nexport function validate(value: string): value is Hex.Hex {\n return Hex.validate(value) && Hex.size(value) === 256\n}\n\nexport declare namespace validate {\n type ErrorType =\n | Hex.validate.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n", "import type { ProjPointType } from '@noble/curves/abstract/weierstrass'\nimport { bls12_381 as bls } from '@noble/curves/bls12-381'\n\nimport type * as BlsPoint from './BlsPoint.js'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { OneOf } from './internal/types.js'\n\nexport type Size = 'short-key:long-sig' | 'long-key:short-sig'\n\n/** Re-export of noble/curves BLS12-381 utilities. */\nexport const noble = bls\n\n/**\n * Aggregates a set of BLS points that are either on the G1 or G2 curves (ie. public keys or signatures).\n *\n * @example\n * ### Aggregating Signatures\n *\n * ```ts twoslash\n * import { Bls, Hex } from 'ox'\n *\n * const payload = Hex.random(32)\n *\n * const signatures = [\n * Bls.sign({ payload, privateKey: '0x...' }),\n * Bls.sign({ payload, privateKey: '0x...' }),\n * ]\n * const signature = Bls.aggregate(signatures)\n * ```\n *\n * @example\n * ### Aggregating Public Keys\n *\n * ```ts twoslash\n * import { Bls } from 'ox'\n *\n * const publicKeys = [\n * Bls.getPublicKey({ privateKey: '0x...' }),\n * Bls.getPublicKey({ privateKey: '0x...' }),\n * ]\n * const publicKey = Bls.aggregate(publicKeys)\n * ```\n *\n * @param points - The points to aggregate.\n * @returns The aggregated point.\n */\nexport function aggregate<const points extends readonly BlsPoint.BlsPoint[]>(\n points: points,\n): points extends readonly BlsPoint.G1[] ? BlsPoint.G1 : BlsPoint.G2\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function aggregate(\n points: readonly BlsPoint.BlsPoint[],\n): BlsPoint.BlsPoint {\n const group = typeof points[0]?.x === 'bigint' ? bls.G1 : bls.G2\n const point = points.reduce(\n (acc, point) =>\n acc.add(new (group as any).ProjectivePoint(point.x, point.y, point.z)),\n group.ProjectivePoint.ZERO,\n )\n return {\n x: point.px,\n y: point.py,\n z: point.pz,\n }\n}\n\nexport declare namespace aggregate {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Computes the BLS12-381 public key from a provided private key.\n *\n * Public Keys can be derived as a point on one of the BLS12-381 groups:\n *\n * - G1 Point (Default):\n * - short (48 bytes)\n * - computes longer G2 Signatures (96 bytes)\n * - G2 Point:\n * - long (96 bytes)\n * - computes short G1 Signatures (48 bytes)\n *\n * @example\n * ### Short G1 Public Keys (Default)\n *\n * ```ts twoslash\n * import { Bls } from 'ox'\n *\n * const publicKey = Bls.getPublicKey({ privateKey: '0x...' })\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Long G2 Public Keys\n *\n * A G2 Public Key can be derived as a G2 point (96 bytes) using `size: 'long-key:short-sig'`.\n *\n * This will allow you to compute G1 Signatures (48 bytes) with {@link ox#Bls.(sign:function)}.\n *\n * ```ts twoslash\n * import { Bls } from 'ox'\n *\n * const publicKey = Bls.getPublicKey({\n * privateKey: '0x...',\n * size: 'long-key:short-sig',\n * })\n *\n * publicKey\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * ### Serializing\n *\n * Public Keys can be serialized to hex or bytes using {@link ox#BlsPoint.(toHex:function)} or {@link ox#BlsPoint.(toBytes:function)}:\n *\n * ```ts twoslash\n * import { Bls, BlsPoint } from 'ox'\n *\n * const publicKey = Bls.getPublicKey({ privateKey: '0x...' })\n *\n * const publicKeyHex = BlsPoint.toHex(publicKey)\n * // ^?\n *\n *\n * const publicKeyBytes = BlsPoint.toBytes(publicKey)\n * // ^?\n *\n * ```\n *\n * They can also be deserialized from hex or bytes using {@link ox#BlsPoint.(fromHex:function)} or {@link ox#BlsPoint.(fromBytes:function)}:\n *\n * ```ts twoslash\n * import { Bls, BlsPoint } from 'ox'\n *\n * const publicKeyHex = '0x...'\n *\n * const publicKey = BlsPoint.fromHex(publicKeyHex, 'G1')\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey<size extends Size = 'short-key:long-sig'>(\n options: getPublicKey.Options<size>,\n): size extends 'short-key:long-sig' ? BlsPoint.G1 : BlsPoint.G2\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function getPublicKey(options: getPublicKey.Options): BlsPoint.BlsPoint {\n const { privateKey, size = 'short-key:long-sig' } = options\n const group = size === 'short-key:long-sig' ? bls.G1 : bls.G2\n const { px, py, pz } = group.ProjectivePoint.fromPrivateKey(\n Hex.from(privateKey).slice(2),\n )\n return { x: px, y: py, z: pz }\n}\n\nexport declare namespace getPublicKey {\n type Options<size extends Size = 'short-key:long-sig'> = {\n /**\n * Private key to compute the public key from.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n /**\n * Size of the public key to compute.\n *\n * - `'short-key:long-sig'`: 48 bytes; computes long signatures (96 bytes)\n * - `'long-key:short-sig'`: 96 bytes; computes short signatures (48 bytes)\n *\n * @default 'short-key:long-sig'\n */\n size?: size | Size | undefined\n }\n\n type ErrorType = Hex.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random BLS12-381 private key.\n *\n * @example\n * ```ts twoslash\n * import { Bls } from 'ox'\n *\n * const privateKey = Bls.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(\n options: randomPrivateKey.Options<as> = {},\n): randomPrivateKey.ReturnType<as> {\n const { as = 'Hex' } = options\n const bytes = bls.utils.randomPrivateKey()\n if (as === 'Hex') return Hex.fromBytes(bytes) as never\n return bytes as never\n}\n\nexport declare namespace randomPrivateKey {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n /**\n * Format of the returned private key.\n * @default 'Hex'\n */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Signs the payload with the provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Bls, Hex } from 'ox'\n *\n * const signature = Bls.sign({ // [!code focus]\n * payload: Hex.random(32), // [!code focus]\n * privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Serializing\n *\n * Signatures can be serialized to hex or bytes using {@link ox#BlsPoint.(toHex:function)} or {@link ox#BlsPoint.(toBytes:function)}:\n *\n * ```ts twoslash\n * import { Bls, BlsPoint, Hex } from 'ox'\n *\n * const signature = Bls.sign({ payload: Hex.random(32), privateKey: '0x...' })\n *\n * const signatureHex = BlsPoint.toHex(signature)\n * // ^?\n *\n *\n *\n * const signatureBytes = BlsPoint.toBytes(signature)\n * // ^?\n *\n *\n * ```\n *\n * They can also be deserialized from hex or bytes using {@link ox#BlsPoint.(fromHex:function)} or {@link ox#BlsPoint.(fromBytes:function)}:\n *\n * ```ts twoslash\n * import { Bls, BlsPoint } from 'ox'\n *\n * const signatureHex = '0x...'\n *\n * const signature = BlsPoint.fromHex(signatureHex, 'G2')\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * @param options - The signing options.\n * @returns BLS Point.\n */\nexport function sign<size extends Size = 'short-key:long-sig'>(\n options: sign.Options<size>,\n): size extends 'short-key:long-sig' ? BlsPoint.G2 : BlsPoint.G1\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function sign(options: sign.Options): BlsPoint.BlsPoint {\n const { payload, privateKey, suite, size = 'short-key:long-sig' } = options\n\n const payloadGroup = size === 'short-key:long-sig' ? bls.G2 : bls.G1\n const payloadPoint = payloadGroup.hashToCurve(\n Bytes.from(payload),\n suite ? { DST: Bytes.fromString(suite) } : undefined,\n )\n\n const privateKeyGroup = size === 'short-key:long-sig' ? bls.G1 : bls.G2\n const signature = payloadPoint.multiply(\n privateKeyGroup.normPrivateKeyToScalar(privateKey.slice(2)),\n ) as ProjPointType<any>\n\n return {\n x: signature.px,\n y: signature.py,\n z: signature.pz,\n }\n}\n\nexport declare namespace sign {\n type Options<size extends Size = 'short-key:long-sig'> = {\n /**\n * Payload to sign.\n */\n payload: Hex.Hex | Bytes.Bytes\n /**\n * BLS private key.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n /**\n * Ciphersuite to use for signing. Defaults to \"Basic\".\n *\n * @see https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-05#section-4\n * @default 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_'\n */\n suite?: string | undefined\n /**\n * Size of the signature to compute.\n *\n * - `'long-key:short-sig'`: 48 bytes\n * - `'short-key:long-sig'`: 96 bytes\n *\n * @default 'short-key:long-sig'\n */\n size?: size | Size | undefined\n }\n\n type ErrorType = Bytes.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a payload was signed by the provided public key(s).\n *\n * @example\n *\n * ```ts twoslash\n * import { Bls, Hex } from 'ox'\n *\n * const payload = Hex.random(32)\n * const privateKey = Bls.randomPrivateKey()\n *\n * const publicKey = Bls.getPublicKey({ privateKey })\n * const signature = Bls.sign({ payload, privateKey })\n *\n * const verified = Bls.verify({ // [!code focus]\n * payload, // [!code focus]\n * publicKey, // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Verify Aggregated Signatures\n *\n * We can also pass a public key and signature that was aggregated with {@link ox#Bls.(aggregate:function)} to `Bls.verify`.\n *\n * ```ts twoslash\n * import { Bls, Hex } from 'ox'\n *\n * const payload = Hex.random(32)\n * const privateKeys = Array.from({ length: 100 }, () => Bls.randomPrivateKey())\n *\n * const publicKeys = privateKeys.map((privateKey) =>\n * Bls.getPublicKey({ privateKey }),\n * )\n * const signatures = privateKeys.map((privateKey) =>\n * Bls.sign({ payload, privateKey }),\n * )\n *\n * const publicKey = Bls.aggregate(publicKeys) // [!code focus]\n * const signature = Bls.aggregate(signatures) // [!code focus]\n *\n * const valid = Bls.verify({ payload, publicKey, signature }) // [!code focus]\n * ```\n *\n * @param options - Verification options.\n * @returns Whether the payload was signed by the provided public key.\n */\nexport function verify(options: verify.Options): boolean {\n const { payload, suite } = options\n\n const publicKey = options.publicKey as unknown as BlsPoint.BlsPoint<any>\n const signature = options.signature as unknown as BlsPoint.BlsPoint<any>\n\n const isShortSig = typeof signature.x === 'bigint'\n\n const group = isShortSig ? bls.G1 : bls.G2\n const payloadPoint = group.hashToCurve(\n Bytes.from(payload),\n suite ? { DST: Bytes.fromString(suite) } : undefined,\n ) as ProjPointType<any>\n\n const shortSigPairing = () =>\n bls.pairingBatch([\n {\n g1: payloadPoint,\n g2: new bls.G2.ProjectivePoint(publicKey.x, publicKey.y, publicKey.z),\n },\n {\n g1: new bls.G1.ProjectivePoint(signature.x, signature.y, signature.z),\n g2: bls.G2.ProjectivePoint.BASE.negate(),\n },\n ])\n\n const longSigPairing = () =>\n bls.pairingBatch([\n {\n g1: new bls.G1.ProjectivePoint(\n publicKey.x,\n publicKey.y,\n publicKey.z,\n ).negate(),\n g2: payloadPoint,\n },\n {\n g1: bls.G1.ProjectivePoint.BASE,\n g2: new bls.G2.ProjectivePoint(signature.x, signature.y, signature.z),\n },\n ])\n\n return bls.fields.Fp12.eql(\n isShortSig ? shortSigPairing() : longSigPairing(),\n bls.fields.Fp12.ONE,\n )\n}\n\nexport declare namespace verify {\n type Options = {\n /**\n * Payload that was signed.\n */\n payload: Hex.Hex | Bytes.Bytes\n /**\n * Ciphersuite to use for verification. Defaults to \"Basic\".\n *\n * @see https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-05#section-4\n * @default 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_'\n */\n suite?: string | undefined\n } & OneOf<\n | {\n publicKey: BlsPoint.G1\n signature: BlsPoint.G2\n }\n | {\n publicKey: BlsPoint.G2\n signature: BlsPoint.G1\n }\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// BLS (Barreto-Lynn-Scott) family of pairing-friendly curves.\n// TODO: import { AffinePoint } from './curve.js';\nimport { IField, getMinHashLength, mapHashToField } from './modular.js';\nimport { Hex, PrivKey, CHash, ensureBytes, memoized } from './utils.js';\n// prettier-ignore\nimport {\n MapToCurve, Opts as HTFOpts, H2CPointConstructor, htfBasicOpts,\n createHasher\n} from './hash-to-curve.js';\nimport {\n CurvePointsType,\n ProjPointType as ProjPointType,\n CurvePointsRes,\n weierstrassPoints,\n} from './weierstrass.js';\nimport type { Fp2, Fp6, Fp12, Fp2Bls, Fp12Bls } from './tower.js';\n\n/**\n * BLS != BLS.\n * The file implements BLS (Boneh-Lynn-Shacham) signatures.\n * Used in both BLS (Barreto-Lynn-Scott) and BN (Barreto-Naehrig)\n * families of pairing-friendly curves.\n * Consists of two curves: G1 and G2:\n * - G1 is a subgroup of (x, y) E(Fq) over y² = x³ + 4.\n * - G2 is a subgroup of ((x₁, x₂+i), (y₁, y₂+i)) E(Fq²) over y² = x³ + 4(1 + i) where i is √-1\n * - Gt, created by bilinear (ate) pairing e(G1, G2), consists of p-th roots of unity in\n * Fq^k where k is embedding degree. Only degree 12 is currently supported, 24 is not.\n * Pairing is used to aggregate and verify signatures.\n * There are two main ways to use it:\n * 1. Fp for short private keys, Fp₂ for signatures\n * 2. Fp for short signatures, Fp₂ for private keys\n **/\n\ntype Fp = bigint; // Can be different field?\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\nexport type TwistType = 'multiplicative' | 'divisive';\n\nexport type ShortSignatureCoder<Fp> = {\n fromHex(hex: Hex): ProjPointType<Fp>;\n toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type SignatureCoder<Fp> = {\n fromHex(hex: Hex): ProjPointType<Fp>;\n toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type PostPrecomputePointAddFn = (\n Rx: Fp2,\n Ry: Fp2,\n Rz: Fp2,\n Qx: Fp2,\n Qy: Fp2\n) => { Rx: Fp2; Ry: Fp2; Rz: Fp2 };\nexport type PostPrecomputeFn = (\n Rx: Fp2,\n Ry: Fp2,\n Rz: Fp2,\n Qx: Fp2,\n Qy: Fp2,\n pointAdd: PostPrecomputePointAddFn\n) => void;\nexport type CurveType = {\n G1: Omit<CurvePointsType<Fp>, 'n'> & {\n ShortSignature: SignatureCoder<Fp>;\n mapToCurve: MapToCurve<Fp>;\n htfDefaults: HTFOpts;\n };\n G2: Omit<CurvePointsType<Fp2>, 'n'> & {\n Signature: SignatureCoder<Fp2>;\n mapToCurve: MapToCurve<Fp2>;\n htfDefaults: HTFOpts;\n };\n fields: {\n Fp: IField<Fp>;\n Fr: IField<bigint>;\n Fp2: Fp2Bls;\n Fp6: IField<Fp6>;\n Fp12: Fp12Bls;\n };\n params: {\n // NOTE: MSB is always ignored and used as marker for length,\n // otherwise leading zeros will be lost.\n // Can be different from 'X' (seed) param!\n ateLoopSize: bigint;\n xNegative: boolean;\n r: bigint;\n twistType: TwistType; // BLS12-381: Multiplicative, BN254: Divisive\n };\n htfDefaults: HTFOpts;\n hash: CHash; // Because we need outputLen for DRBG\n randomBytes: (bytesLength?: number) => Uint8Array;\n // This is super ugly hack for untwist point in BN254 after miller loop\n postPrecompute?: PostPrecomputeFn;\n};\n\ntype PrecomputeSingle = [Fp2, Fp2, Fp2][];\ntype Precompute = PrecomputeSingle[];\n\nexport type CurveFn = {\n getPublicKey: (privateKey: PrivKey) => Uint8Array;\n getPublicKeyForShortSignatures: (privateKey: PrivKey) => Uint8Array;\n sign: {\n (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n (message: ProjPointType<Fp2>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp2>;\n };\n signShortSignature: {\n (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n (message: ProjPointType<Fp>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp>;\n };\n verify: (\n signature: Hex | ProjPointType<Fp2>,\n message: Hex | ProjPointType<Fp2>,\n publicKey: Hex | ProjPointType<Fp>,\n htfOpts?: htfBasicOpts\n ) => boolean;\n verifyShortSignature: (\n signature: Hex | ProjPointType<Fp>,\n message: Hex | ProjPointType<Fp>,\n publicKey: Hex | ProjPointType<Fp2>,\n htfOpts?: htfBasicOpts\n ) => boolean;\n verifyBatch: (\n signature: Hex | ProjPointType<Fp2>,\n messages: (Hex | ProjPointType<Fp2>)[],\n publicKeys: (Hex | ProjPointType<Fp>)[],\n htfOpts?: htfBasicOpts\n ) => boolean;\n aggregatePublicKeys: {\n (publicKeys: Hex[]): Uint8Array;\n (publicKeys: ProjPointType<Fp>[]): ProjPointType<Fp>;\n };\n aggregateSignatures: {\n (signatures: Hex[]): Uint8Array;\n (signatures: ProjPointType<Fp2>[]): ProjPointType<Fp2>;\n };\n aggregateShortSignatures: {\n (signatures: Hex[]): Uint8Array;\n (signatures: ProjPointType<Fp>[]): ProjPointType<Fp>;\n };\n millerLoopBatch: (pairs: [Precompute, Fp, Fp][]) => Fp12;\n pairing: (P: ProjPointType<Fp>, Q: ProjPointType<Fp2>, withFinalExponent?: boolean) => Fp12;\n pairingBatch: (\n pairs: { g1: ProjPointType<Fp>; g2: ProjPointType<Fp2> }[],\n withFinalExponent?: boolean\n ) => Fp12;\n G1: CurvePointsRes<Fp> & ReturnType<typeof createHasher<Fp>>;\n G2: CurvePointsRes<Fp2> & ReturnType<typeof createHasher<Fp2>>;\n Signature: SignatureCoder<Fp2>;\n ShortSignature: ShortSignatureCoder<Fp>;\n params: {\n ateLoopSize: bigint;\n r: bigint;\n G1b: bigint;\n G2b: Fp2;\n };\n fields: {\n Fp: IField<Fp>;\n Fp2: Fp2Bls;\n Fp6: IField<Fp6>;\n Fp12: Fp12Bls;\n Fr: IField<bigint>;\n };\n utils: {\n randomPrivateKey: () => Uint8Array;\n calcPairingPrecomputes: (p: ProjPointType<Fp2>) => Precompute;\n };\n};\n\n// Not used with BLS12-381 (no sequential `11` in X). Useful for other curves.\nfunction NAfDecomposition(a: bigint) {\n const res = [];\n // a>1 because of marker bit\n for (; a > _1n; a >>= _1n) {\n if ((a & _1n) === _0n) res.unshift(0);\n else if ((a & _3n) === _3n) {\n res.unshift(-1);\n a += _1n;\n } else res.unshift(1);\n }\n return res;\n}\n\nexport function bls(CURVE: CurveType): CurveFn {\n // Fields are specific for curve, so for now we'll need to pass them with opts\n const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields;\n const BLS_X_IS_NEGATIVE = CURVE.params.xNegative;\n const TWIST: TwistType = CURVE.params.twistType;\n // Point on G1 curve: (x, y)\n const G1_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G1 });\n const G1 = Object.assign(\n G1_,\n createHasher(G1_.ProjectivePoint, CURVE.G1.mapToCurve, {\n ...CURVE.htfDefaults,\n ...CURVE.G1.htfDefaults,\n })\n );\n // Point on G2 curve (complex numbers): (x₁, x₂+i), (y₁, y₂+i)\n const G2_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G2 });\n const G2 = Object.assign(\n G2_,\n createHasher(G2_.ProjectivePoint as H2CPointConstructor<Fp2>, CURVE.G2.mapToCurve, {\n ...CURVE.htfDefaults,\n ...CURVE.G2.htfDefaults,\n })\n );\n type G1 = typeof G1.ProjectivePoint.BASE;\n type G2 = typeof G2.ProjectivePoint.BASE;\n\n // Applies sparse multiplication as line function\n let lineFunction: (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) => Fp12;\n if (TWIST === 'multiplicative') {\n lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n Fp12.mul014(f, c0, Fp2.mul(c1, Px), Fp2.mul(c2, Py));\n } else if (TWIST === 'divisive') {\n // NOTE: it should be [c0, c1, c2], but we use different order here to reduce complexity of\n // precompute calculations.\n lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n Fp12.mul034(f, Fp2.mul(c2, Py), Fp2.mul(c1, Px), c0);\n } else throw new Error('bls: unknown twist type');\n\n const Fp2div2 = Fp2.div(Fp2.ONE, Fp2.mul(Fp2.ONE, _2n));\n function pointDouble(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2) {\n const t0 = Fp2.sqr(Ry); // Ry²\n const t1 = Fp2.sqr(Rz); // Rz²\n const t2 = Fp2.mulByB(Fp2.mul(t1, _3n)); // 3 * T1 * B\n const t3 = Fp2.mul(t2, _3n); // 3 * T2\n const t4 = Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(Ry, Rz)), t1), t0); // (Ry + Rz)² - T1 - T0\n const c0 = Fp2.sub(t2, t0); // T2 - T0 (i)\n const c1 = Fp2.mul(Fp2.sqr(Rx), _3n); // 3 * Rx²\n const c2 = Fp2.neg(t4); // -T4 (-h)\n\n ell.push([c0, c1, c2]);\n\n Rx = Fp2.mul(Fp2.mul(Fp2.mul(Fp2.sub(t0, t3), Rx), Ry), Fp2div2); // ((T0 - T3) * Rx * Ry) / 2\n Ry = Fp2.sub(Fp2.sqr(Fp2.mul(Fp2.add(t0, t3), Fp2div2)), Fp2.mul(Fp2.sqr(t2), _3n)); // ((T0 + T3) / 2)² - 3 * T2²\n Rz = Fp2.mul(t0, t4); // T0 * T4\n return { Rx, Ry, Rz };\n }\n function pointAdd(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2) {\n // Addition\n const t0 = Fp2.sub(Ry, Fp2.mul(Qy, Rz)); // Ry - Qy * Rz\n const t1 = Fp2.sub(Rx, Fp2.mul(Qx, Rz)); // Rx - Qx * Rz\n const c0 = Fp2.sub(Fp2.mul(t0, Qx), Fp2.mul(t1, Qy)); // T0 * Qx - T1 * Qy == Ry * Qx - Rx * Qy\n const c1 = Fp2.neg(t0); // -T0 == Qy * Rz - Ry\n const c2 = t1; // == Rx - Qx * Rz\n\n ell.push([c0, c1, c2]);\n\n const t2 = Fp2.sqr(t1); // T1²\n const t3 = Fp2.mul(t2, t1); // T2 * T1\n const t4 = Fp2.mul(t2, Rx); // T2 * Rx\n const t5 = Fp2.add(Fp2.sub(t3, Fp2.mul(t4, _2n)), Fp2.mul(Fp2.sqr(t0), Rz)); // T3 - 2 * T4 + T0² * Rz\n Rx = Fp2.mul(t1, t5); // T1 * T5\n Ry = Fp2.sub(Fp2.mul(Fp2.sub(t4, t5), t0), Fp2.mul(t3, Ry)); // (T4 - T5) * T0 - T3 * Ry\n Rz = Fp2.mul(Rz, t3); // Rz * T3\n return { Rx, Ry, Rz };\n }\n\n // Pre-compute coefficients for sparse multiplication\n // Point addition and point double calculations is reused for coefficients\n // pointAdd happens only if bit set, so wNAF is reasonable. Unfortunately we cannot combine\n // add + double in windowed precomputes here, otherwise it would be single op (since X is static)\n const ATE_NAF = NAfDecomposition(CURVE.params.ateLoopSize);\n\n const calcPairingPrecomputes = memoized((point: G2) => {\n const p = point;\n const { x, y } = p.toAffine();\n // prettier-ignore\n const Qx = x, Qy = y, negQy = Fp2.neg(y);\n // prettier-ignore\n let Rx = Qx, Ry = Qy, Rz = Fp2.ONE;\n const ell: Precompute = [];\n for (const bit of ATE_NAF) {\n const cur: PrecomputeSingle = [];\n ({ Rx, Ry, Rz } = pointDouble(cur, Rx, Ry, Rz));\n if (bit) ({ Rx, Ry, Rz } = pointAdd(cur, Rx, Ry, Rz, Qx, bit === -1 ? negQy : Qy));\n ell.push(cur);\n }\n if (CURVE.postPrecompute) {\n const last = ell[ell.length - 1];\n CURVE.postPrecompute(Rx, Ry, Rz, Qx, Qy, pointAdd.bind(null, last));\n }\n return ell;\n });\n\n // Main pairing logic is here. Computes product of miller loops + final exponentiate\n // Applies calculated precomputes\n type MillerInput = [Precompute, Fp, Fp][];\n function millerLoopBatch(pairs: MillerInput, withFinalExponent: boolean = false) {\n let f12 = Fp12.ONE;\n if (pairs.length) {\n const ellLen = pairs[0][0].length;\n for (let i = 0; i < ellLen; i++) {\n f12 = Fp12.sqr(f12); // This allows us to do sqr only one time for all pairings\n // NOTE: we apply multiple pairings in parallel here\n for (const [ell, Px, Py] of pairs) {\n for (const [c0, c1, c2] of ell[i]) f12 = lineFunction(c0, c1, c2, f12, Px, Py);\n }\n }\n }\n if (BLS_X_IS_NEGATIVE) f12 = Fp12.conjugate(f12);\n return withFinalExponent ? Fp12.finalExponentiate(f12) : f12;\n }\n type PairingInput = { g1: G1; g2: G2 };\n // Calculates product of multiple pairings\n // This up to x2 faster than just `map(({g1, g2})=>pairing({g1,g2}))`\n function pairingBatch(pairs: PairingInput[], withFinalExponent: boolean = true) {\n const res: MillerInput = [];\n // This cache precomputed toAffine for all points\n G1.ProjectivePoint.normalizeZ(pairs.map(({ g1 }) => g1));\n G2.ProjectivePoint.normalizeZ(pairs.map(({ g2 }) => g2));\n for (const { g1, g2 } of pairs) {\n if (g1.equals(G1.ProjectivePoint.ZERO) || g2.equals(G2.ProjectivePoint.ZERO))\n throw new Error('pairing is not available for ZERO point');\n // This uses toAffine inside\n g1.assertValidity();\n g2.assertValidity();\n const Qa = g1.toAffine();\n res.push([calcPairingPrecomputes(g2), Qa.x, Qa.y]);\n }\n return millerLoopBatch(res, withFinalExponent);\n }\n // Calculates bilinear pairing\n function pairing(Q: G1, P: G2, withFinalExponent: boolean = true): Fp12 {\n return pairingBatch([{ g1: Q, g2: P }], withFinalExponent);\n }\n\n const utils = {\n randomPrivateKey: (): Uint8Array => {\n const length = getMinHashLength(Fr.ORDER);\n return mapHashToField(CURVE.randomBytes(length), Fr.ORDER);\n },\n calcPairingPrecomputes,\n };\n\n const { ShortSignature } = CURVE.G1;\n const { Signature } = CURVE.G2;\n\n type G1Hex = Hex | G1;\n type G2Hex = Hex | G2;\n function normP1(point: G1Hex): G1 {\n return point instanceof G1.ProjectivePoint ? (point as G1) : G1.ProjectivePoint.fromHex(point);\n }\n function normP1Hash(point: G1Hex, htfOpts?: htfBasicOpts): G1 {\n return point instanceof G1.ProjectivePoint\n ? point\n : (G1.hashToCurve(ensureBytes('point', point), htfOpts) as G1);\n }\n function normP2(point: G2Hex): G2 {\n return point instanceof G2.ProjectivePoint ? point : Signature.fromHex(point);\n }\n function normP2Hash(point: G2Hex, htfOpts?: htfBasicOpts): G2 {\n return point instanceof G2.ProjectivePoint\n ? point\n : (G2.hashToCurve(ensureBytes('point', point), htfOpts) as G2);\n }\n\n // Multiplies generator (G1) by private key.\n // P = pk x G\n function getPublicKey(privateKey: PrivKey): Uint8Array {\n return G1.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n }\n\n // Multiplies generator (G2) by private key.\n // P = pk x G\n function getPublicKeyForShortSignatures(privateKey: PrivKey): Uint8Array {\n return G2.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n }\n\n // Executes `hashToCurve` on the message and then multiplies the result by private key.\n // S = pk x H(m)\n function sign(message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n function sign(message: G2, privateKey: PrivKey, htfOpts?: htfBasicOpts): G2;\n function sign(message: G2Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array | G2 {\n const msgPoint = normP2Hash(message, htfOpts);\n msgPoint.assertValidity();\n const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n if (message instanceof G2.ProjectivePoint) return sigPoint;\n return Signature.toRawBytes(sigPoint);\n }\n\n function signShortSignature(\n message: Hex,\n privateKey: PrivKey,\n htfOpts?: htfBasicOpts\n ): Uint8Array;\n function signShortSignature(message: G1, privateKey: PrivKey, htfOpts?: htfBasicOpts): G1;\n function signShortSignature(\n message: G1Hex,\n privateKey: PrivKey,\n htfOpts?: htfBasicOpts\n ): Uint8Array | G1 {\n const msgPoint = normP1Hash(message, htfOpts);\n msgPoint.assertValidity();\n const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n if (message instanceof G1.ProjectivePoint) return sigPoint;\n return ShortSignature.toRawBytes(sigPoint);\n }\n\n // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n // e(P, H(m)) == e(G, S)\n function verify(\n signature: G2Hex,\n message: G2Hex,\n publicKey: G1Hex,\n htfOpts?: htfBasicOpts\n ): boolean {\n const P = normP1(publicKey);\n const Hm = normP2Hash(message, htfOpts);\n const G = G1.ProjectivePoint.BASE;\n const S = normP2(signature);\n const exp = pairingBatch([\n { g1: P.negate(), g2: Hm }, // ePHM = pairing(P.negate(), Hm, false);\n { g1: G, g2: S }, // eGS = pairing(G, S, false);\n ]);\n return Fp12.eql(exp, Fp12.ONE);\n }\n\n // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n // e(S, G) == e(H(m), P)\n function verifyShortSignature(\n signature: G1Hex,\n message: G1Hex,\n publicKey: G2Hex,\n htfOpts?: htfBasicOpts\n ): boolean {\n const P = normP2(publicKey);\n const Hm = normP1Hash(message, htfOpts);\n const G = G2.ProjectivePoint.BASE;\n const S = normP1(signature);\n const exp = pairingBatch([\n { g1: Hm, g2: P }, // eHmP = pairing(Hm, P, false);\n { g1: S, g2: G.negate() }, // eSG = pairing(S, G.negate(), false);\n ]);\n return Fp12.eql(exp, Fp12.ONE);\n }\n\n function aNonEmpty(arr: any[]) {\n if (!Array.isArray(arr) || arr.length === 0) throw new Error('expected non-empty array');\n }\n\n // Adds a bunch of public key points together.\n // pk1 + pk2 + pk3 = pkA\n function aggregatePublicKeys(publicKeys: Hex[]): Uint8Array;\n function aggregatePublicKeys(publicKeys: G1[]): G1;\n function aggregatePublicKeys(publicKeys: G1Hex[]): Uint8Array | G1 {\n aNonEmpty(publicKeys);\n const agg = publicKeys.map(normP1).reduce((sum, p) => sum.add(p), G1.ProjectivePoint.ZERO);\n const aggAffine = agg; //.toAffine();\n if (publicKeys[0] instanceof G1.ProjectivePoint) {\n aggAffine.assertValidity();\n return aggAffine;\n }\n // toRawBytes ensures point validity\n return aggAffine.toRawBytes(true);\n }\n\n // Adds a bunch of signature points together.\n function aggregateSignatures(signatures: Hex[]): Uint8Array;\n function aggregateSignatures(signatures: G2[]): G2;\n function aggregateSignatures(signatures: G2Hex[]): Uint8Array | G2 {\n aNonEmpty(signatures);\n const agg = signatures.map(normP2).reduce((sum, s) => sum.add(s), G2.ProjectivePoint.ZERO);\n const aggAffine = agg; //.toAffine();\n if (signatures[0] instanceof G2.ProjectivePoint) {\n aggAffine.assertValidity();\n return aggAffine;\n }\n return Signature.toRawBytes(aggAffine);\n }\n\n // Adds a bunch of signature points together.\n function aggregateShortSignatures(signatures: Hex[]): Uint8Array;\n function aggregateShortSignatures(signatures: G1[]): G1;\n function aggregateShortSignatures(signatures: G1Hex[]): Uint8Array | G1 {\n aNonEmpty(signatures);\n const agg = signatures.map(normP1).reduce((sum, s) => sum.add(s), G1.ProjectivePoint.ZERO);\n const aggAffine = agg; //.toAffine();\n if (signatures[0] instanceof G1.ProjectivePoint) {\n aggAffine.assertValidity();\n return aggAffine;\n }\n return ShortSignature.toRawBytes(aggAffine);\n }\n\n // https://ethresear.ch/t/fast-verification-of-multiple-bls-signatures/5407\n // e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))\n function verifyBatch(\n signature: G2Hex,\n // TODO: maybe `{message: G2Hex, publicKey: G1Hex}[]` instead?\n messages: G2Hex[],\n publicKeys: G1Hex[],\n htfOpts?: htfBasicOpts\n ): boolean {\n aNonEmpty(messages);\n if (publicKeys.length !== messages.length)\n throw new Error('amount of public keys and messages should be equal');\n const sig = normP2(signature);\n const nMessages = messages.map((i) => normP2Hash(i, htfOpts));\n const nPublicKeys = publicKeys.map(normP1);\n // NOTE: this works only for exact same object\n const messagePubKeyMap = new Map<G2, G1[]>();\n for (let i = 0; i < nPublicKeys.length; i++) {\n const pub = nPublicKeys[i];\n const msg = nMessages[i];\n let keys = messagePubKeyMap.get(msg);\n if (keys === undefined) {\n keys = [];\n messagePubKeyMap.set(msg, keys);\n }\n keys.push(pub);\n }\n const paired = [];\n try {\n for (const [msg, keys] of messagePubKeyMap) {\n const groupPublicKey = keys.reduce((acc, msg) => acc.add(msg));\n paired.push({ g1: groupPublicKey, g2: msg });\n }\n paired.push({ g1: G1.ProjectivePoint.BASE.negate(), g2: sig });\n return Fp12.eql(pairingBatch(paired), Fp12.ONE);\n } catch {\n return false;\n }\n }\n\n G1.ProjectivePoint.BASE._setWindowSize(4);\n\n return {\n getPublicKey,\n getPublicKeyForShortSignatures,\n sign,\n signShortSignature,\n verify,\n verifyBatch,\n verifyShortSignature,\n aggregatePublicKeys,\n aggregateSignatures,\n aggregateShortSignatures,\n millerLoopBatch,\n pairing,\n pairingBatch,\n G1,\n G2,\n Signature,\n ShortSignature,\n fields: {\n Fr,\n Fp,\n Fp2,\n Fp6,\n Fp12,\n },\n params: {\n ateLoopSize: CURVE.params.ateLoopSize,\n r: CURVE.params.r,\n G1b: CURVE.G1.b,\n G2b: CURVE.G2.b,\n },\n utils,\n };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport * as mod from './modular.js';\nimport { bitLen, bitMask, concatBytes, notImplemented } from './utils.js';\nimport type { ProjConstructor, ProjPointType } from './weierstrass.js';\n\n/*\nTowered extension fields\n\nRather than implementing a massive 12th-degree extension directly, it is more efficient\nto build it up from smaller extensions: a tower of extensions.\n\nFor BLS12-381, the Fp12 field is implemented as a quadratic (degree two) extension,\non top of a cubic (degree three) extension, on top of a quadratic extension of Fp.\n\nFor more info: \"Pairings for beginners\" by Costello, section 7.3.\n*/\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\n// Fp₂ over complex plane\nexport type BigintTuple = [bigint, bigint];\nexport type Fp = bigint;\n// Finite extension field over irreducible polynominal.\n// Fp(u) / (u² - β) where β = -1\nexport type Fp2 = { c0: bigint; c1: bigint };\nexport type BigintSix = [bigint, bigint, bigint, bigint, bigint, bigint];\nexport type Fp6 = { c0: Fp2; c1: Fp2; c2: Fp2 };\nexport type Fp12 = { c0: Fp6; c1: Fp6 }; // Fp₁₂ = Fp₆² => Fp₂³, Fp₆(w) / (w² - γ) where γ = v\n// prettier-ignore\nexport type BigintTwelve = [\n bigint, bigint, bigint, bigint, bigint, bigint,\n bigint, bigint, bigint, bigint, bigint, bigint\n];\n\nexport type Fp2Bls = mod.IField<Fp2> & {\n reim: (num: Fp2) => { re: Fp; im: Fp };\n mulByB: (num: Fp2) => Fp2;\n frobeniusMap(num: Fp2, power: number): Fp2;\n fromBigTuple(num: [bigint, bigint]): Fp2;\n};\n\nexport type Fp12Bls = mod.IField<Fp12> & {\n frobeniusMap(num: Fp12, power: number): Fp12;\n mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n conjugate(num: Fp12): Fp12;\n finalExponentiate(num: Fp12): Fp12;\n fromBigTwelve(num: BigintTwelve): Fp12;\n};\n\nfunction calcFrobeniusCoefficients<T>(\n Fp: mod.IField<T>,\n nonResidue: T,\n modulus: bigint,\n degree: number,\n num: number = 1,\n divisor?: number\n) {\n const _divisor = BigInt(divisor === undefined ? degree : divisor);\n const towerModulus: any = modulus ** BigInt(degree);\n const res: T[][] = [];\n for (let i = 0; i < num; i++) {\n const a = BigInt(i + 1);\n const powers: T[] = [];\n for (let j = 0, qPower = _1n; j < degree; j++) {\n const power = ((a * qPower - a) / _divisor) % towerModulus;\n powers.push(Fp.pow(nonResidue, power));\n qPower *= modulus;\n }\n res.push(powers);\n }\n return res;\n}\n\n// This works same at least for bls12-381, bn254 and bls12-377\nexport function psiFrobenius(Fp: mod.IField<Fp>, Fp2: Fp2Bls, base: Fp2) {\n // Ψ endomorphism\n const PSI_X = Fp2.pow(base, (Fp.ORDER - _1n) / _3n); // u^((p-1)/3)\n const PSI_Y = Fp2.pow(base, (Fp.ORDER - _1n) / _2n); // u^((p-1)/2)\n function psi(x: Fp2, y: Fp2): [Fp2, Fp2] {\n // This x10 faster than previous version in bls12-381\n const x2 = Fp2.mul(Fp2.frobeniusMap(x, 1), PSI_X);\n const y2 = Fp2.mul(Fp2.frobeniusMap(y, 1), PSI_Y);\n return [x2, y2];\n }\n // Ψ²(P) endomorphism (psi2(x) = psi(psi(x)))\n const PSI2_X = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _3n); // u^((p^2 - 1)/3)\n // This equals -1, which causes y to be Fp2.neg(y).\n // But not sure if there are case when this is not true?\n const PSI2_Y = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _2n); // u^((p^2 - 1)/3)\n if (!Fp2.eql(PSI2_Y, Fp2.neg(Fp2.ONE))) throw new Error('psiFrobenius: PSI2_Y!==-1');\n function psi2(x: Fp2, y: Fp2): [Fp2, Fp2] {\n return [Fp2.mul(x, PSI2_X), Fp2.neg(y)];\n }\n // Map points\n const mapAffine =\n <T>(fn: (x: T, y: T) => [T, T]) =>\n (c: ProjConstructor<T>, P: ProjPointType<T>) => {\n const affine = P.toAffine();\n const p = fn(affine.x, affine.y);\n return c.fromAffine({ x: p[0], y: p[1] });\n };\n const G2psi = mapAffine(psi);\n const G2psi2 = mapAffine(psi2);\n return { psi, psi2, G2psi, G2psi2, PSI_X, PSI_Y, PSI2_X, PSI2_Y };\n}\n\nexport type Tower12Opts = {\n ORDER: bigint;\n NONRESIDUE?: Fp;\n // Fp2\n FP2_NONRESIDUE: BigintTuple;\n Fp2sqrt?: (num: Fp2) => Fp2;\n Fp2mulByB: (num: Fp2) => Fp2;\n // Fp12\n Fp12cyclotomicSquare: (num: Fp12) => Fp12;\n Fp12cyclotomicExp: (num: Fp12, n: bigint) => Fp12;\n Fp12finalExponentiate: (num: Fp12) => Fp12;\n};\n\nexport function tower12(opts: Tower12Opts) {\n const { ORDER } = opts;\n // Fp\n const Fp = mod.Field(ORDER);\n const FpNONRESIDUE = Fp.create(opts.NONRESIDUE || BigInt(-1));\n const FpLegendre = mod.FpLegendre(ORDER);\n const Fpdiv2 = Fp.div(Fp.ONE, _2n); // 1/2\n\n // Fp2\n const FP2_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(Fp, FpNONRESIDUE, Fp.ORDER, 2)[0];\n const Fp2Add = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n c0: Fp.add(c0, r0),\n c1: Fp.add(c1, r1),\n });\n const Fp2Subtract = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n c0: Fp.sub(c0, r0),\n c1: Fp.sub(c1, r1),\n });\n const Fp2Multiply = ({ c0, c1 }: Fp2, rhs: Fp2) => {\n if (typeof rhs === 'bigint') return { c0: Fp.mul(c0, rhs), c1: Fp.mul(c1, rhs) };\n // (a+bi)(c+di) = (ac−bd) + (ad+bc)i\n const { c0: r0, c1: r1 } = rhs;\n let t1 = Fp.mul(c0, r0); // c0 * o0\n let t2 = Fp.mul(c1, r1); // c1 * o1\n // (T1 - T2) + ((c0 + c1) * (r0 + r1) - (T1 + T2))*i\n const o0 = Fp.sub(t1, t2);\n const o1 = Fp.sub(Fp.mul(Fp.add(c0, c1), Fp.add(r0, r1)), Fp.add(t1, t2));\n return { c0: o0, c1: o1 };\n };\n const Fp2Square = ({ c0, c1 }: Fp2) => {\n const a = Fp.add(c0, c1);\n const b = Fp.sub(c0, c1);\n const c = Fp.add(c0, c0);\n return { c0: Fp.mul(a, b), c1: Fp.mul(c, c1) };\n };\n type Fp2Utils = {\n NONRESIDUE: Fp2;\n fromBigTuple: (tuple: BigintTuple | bigint[]) => Fp2;\n reim: (num: Fp2) => { re: bigint; im: bigint };\n mulByNonresidue: (num: Fp2) => Fp2;\n mulByB: (num: Fp2) => Fp2;\n frobeniusMap(num: Fp2, power: number): Fp2;\n };\n const Fp2fromBigTuple = (tuple: BigintTuple | bigint[]) => {\n if (tuple.length !== 2) throw new Error('invalid tuple');\n const fps = tuple.map((n) => Fp.create(n)) as [Fp, Fp];\n return { c0: fps[0], c1: fps[1] };\n };\n\n const FP2_ORDER = ORDER * ORDER;\n const Fp2Nonresidue = Fp2fromBigTuple(opts.FP2_NONRESIDUE);\n const Fp2: mod.IField<Fp2> & Fp2Utils = {\n ORDER: FP2_ORDER,\n NONRESIDUE: Fp2Nonresidue,\n BITS: bitLen(FP2_ORDER),\n BYTES: Math.ceil(bitLen(FP2_ORDER) / 8),\n MASK: bitMask(bitLen(FP2_ORDER)),\n ZERO: { c0: Fp.ZERO, c1: Fp.ZERO },\n ONE: { c0: Fp.ONE, c1: Fp.ZERO },\n create: (num) => num,\n isValid: ({ c0, c1 }) => typeof c0 === 'bigint' && typeof c1 === 'bigint',\n is0: ({ c0, c1 }) => Fp.is0(c0) && Fp.is0(c1),\n eql: ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => Fp.eql(c0, r0) && Fp.eql(c1, r1),\n neg: ({ c0, c1 }) => ({ c0: Fp.neg(c0), c1: Fp.neg(c1) }),\n pow: (num, power) => mod.FpPow(Fp2, num, power),\n invertBatch: (nums) => mod.FpInvertBatch(Fp2, nums),\n // Normalized\n add: Fp2Add,\n sub: Fp2Subtract,\n mul: Fp2Multiply,\n sqr: Fp2Square,\n // NonNormalized stuff\n addN: Fp2Add,\n subN: Fp2Subtract,\n mulN: Fp2Multiply,\n sqrN: Fp2Square,\n // Why inversion for bigint inside Fp instead of Fp2? it is even used in that context?\n div: (lhs, rhs) =>\n Fp2.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp2.inv(rhs)),\n inv: ({ c0: a, c1: b }) => {\n // We wish to find the multiplicative inverse of a nonzero\n // element a + bu in Fp2. We leverage an identity\n //\n // (a + bu)(a - bu) = a² + b²\n //\n // which holds because u² = -1. This can be rewritten as\n //\n // (a + bu)(a - bu)/(a² + b²) = 1\n //\n // because a² + b² = 0 has no nonzero solutions for (a, b).\n // This gives that (a - bu)/(a² + b²) is the inverse\n // of (a + bu). Importantly, this can be computing using\n // only a single inversion in Fp.\n const factor = Fp.inv(Fp.create(a * a + b * b));\n return { c0: Fp.mul(factor, Fp.create(a)), c1: Fp.mul(factor, Fp.create(-b)) };\n },\n sqrt: (num) => {\n if (opts.Fp2sqrt) return opts.Fp2sqrt(num);\n // This is generic for all quadratic extensions (Fp2)\n const { c0, c1 } = num;\n if (Fp.is0(c1)) {\n // if c0 is quadratic residue\n if (Fp.eql(FpLegendre(Fp, c0), Fp.ONE)) return Fp2.create({ c0: Fp.sqrt(c0), c1: Fp.ZERO });\n else return Fp2.create({ c0: Fp.ZERO, c1: Fp.sqrt(Fp.div(c0, FpNONRESIDUE)) });\n }\n const a = Fp.sqrt(Fp.sub(Fp.sqr(c0), Fp.mul(Fp.sqr(c1), FpNONRESIDUE)));\n let d = Fp.mul(Fp.add(a, c0), Fpdiv2);\n const legendre = FpLegendre(Fp, d);\n // -1, Quadratic non residue\n if (!Fp.is0(legendre) && !Fp.eql(legendre, Fp.ONE)) d = Fp.sub(d, a);\n const a0 = Fp.sqrt(d);\n const candidateSqrt = Fp2.create({ c0: a0, c1: Fp.div(Fp.mul(c1, Fpdiv2), a0) });\n if (!Fp2.eql(Fp2.sqr(candidateSqrt), num)) throw new Error('Cannot find square root');\n // Normalize root: at this point candidateSqrt ** 2 = num, but also -candidateSqrt ** 2 = num\n const x1 = candidateSqrt;\n const x2 = Fp2.neg(x1);\n const { re: re1, im: im1 } = Fp2.reim(x1);\n const { re: re2, im: im2 } = Fp2.reim(x2);\n if (im1 > im2 || (im1 === im2 && re1 > re2)) return x1;\n return x2;\n },\n // Same as sgn0_m_eq_2 in RFC 9380\n isOdd: (x: Fp2) => {\n const { re: x0, im: x1 } = Fp2.reim(x);\n const sign_0 = x0 % _2n;\n const zero_0 = x0 === _0n;\n const sign_1 = x1 % _2n;\n return BigInt(sign_0 || (zero_0 && sign_1)) == _1n;\n },\n // Bytes util\n fromBytes(b: Uint8Array): Fp2 {\n if (b.length !== Fp2.BYTES) throw new Error('fromBytes invalid length=' + b.length);\n return { c0: Fp.fromBytes(b.subarray(0, Fp.BYTES)), c1: Fp.fromBytes(b.subarray(Fp.BYTES)) };\n },\n toBytes: ({ c0, c1 }) => concatBytes(Fp.toBytes(c0), Fp.toBytes(c1)),\n cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n c0: Fp.cmov(c0, r0, c),\n c1: Fp.cmov(c1, r1, c),\n }),\n reim: ({ c0, c1 }) => ({ re: c0, im: c1 }),\n // multiply by u + 1\n mulByNonresidue: ({ c0, c1 }) => Fp2.mul({ c0, c1 }, Fp2Nonresidue),\n mulByB: opts.Fp2mulByB,\n fromBigTuple: Fp2fromBigTuple,\n frobeniusMap: ({ c0, c1 }, power: number): Fp2 => ({\n c0,\n c1: Fp.mul(c1, FP2_FROBENIUS_COEFFICIENTS[power % 2]),\n }),\n };\n // Fp6\n const Fp6Add = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n c0: Fp2.add(c0, r0),\n c1: Fp2.add(c1, r1),\n c2: Fp2.add(c2, r2),\n });\n const Fp6Subtract = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n c0: Fp2.sub(c0, r0),\n c1: Fp2.sub(c1, r1),\n c2: Fp2.sub(c2, r2),\n });\n const Fp6Multiply = ({ c0, c1, c2 }: Fp6, rhs: Fp6 | bigint) => {\n if (typeof rhs === 'bigint') {\n return {\n c0: Fp2.mul(c0, rhs),\n c1: Fp2.mul(c1, rhs),\n c2: Fp2.mul(c2, rhs),\n };\n }\n const { c0: r0, c1: r1, c2: r2 } = rhs;\n const t0 = Fp2.mul(c0, r0); // c0 * o0\n const t1 = Fp2.mul(c1, r1); // c1 * o1\n const t2 = Fp2.mul(c2, r2); // c2 * o2\n return {\n // t0 + (c1 + c2) * (r1 * r2) - (T1 + T2) * (u + 1)\n c0: Fp2.add(\n t0,\n Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), Fp2.add(r1, r2)), Fp2.add(t1, t2)))\n ),\n // (c0 + c1) * (r0 + r1) - (T0 + T1) + T2 * (u + 1)\n c1: Fp2.add(\n Fp2.sub(Fp2.mul(Fp2.add(c0, c1), Fp2.add(r0, r1)), Fp2.add(t0, t1)),\n Fp2.mulByNonresidue(t2)\n ),\n // T1 + (c0 + c2) * (r0 + r2) - T0 + T2\n c2: Fp2.sub(Fp2.add(t1, Fp2.mul(Fp2.add(c0, c2), Fp2.add(r0, r2))), Fp2.add(t0, t2)),\n };\n };\n const Fp6Square = ({ c0, c1, c2 }: Fp6) => {\n let t0 = Fp2.sqr(c0); // c0²\n let t1 = Fp2.mul(Fp2.mul(c0, c1), _2n); // 2 * c0 * c1\n let t3 = Fp2.mul(Fp2.mul(c1, c2), _2n); // 2 * c1 * c2\n let t4 = Fp2.sqr(c2); // c2²\n return {\n c0: Fp2.add(Fp2.mulByNonresidue(t3), t0), // T3 * (u + 1) + T0\n c1: Fp2.add(Fp2.mulByNonresidue(t4), t1), // T4 * (u + 1) + T1\n // T1 + (c0 - c1 + c2)² + T3 - T0 - T4\n c2: Fp2.sub(Fp2.sub(Fp2.add(Fp2.add(t1, Fp2.sqr(Fp2.add(Fp2.sub(c0, c1), c2))), t3), t0), t4),\n };\n };\n type Fp6Utils = {\n fromBigSix: (tuple: BigintSix) => Fp6;\n mulByNonresidue: (num: Fp6) => Fp6;\n frobeniusMap(num: Fp6, power: number): Fp6;\n mul1(num: Fp6, b1: Fp2): Fp6;\n mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6;\n mulByFp2(lhs: Fp6, rhs: Fp2): Fp6;\n };\n\n const [FP6_FROBENIUS_COEFFICIENTS_1, FP6_FROBENIUS_COEFFICIENTS_2] = calcFrobeniusCoefficients(\n Fp2,\n Fp2Nonresidue,\n Fp.ORDER,\n 6,\n 2,\n 3\n );\n\n const Fp6: mod.IField<Fp6> & Fp6Utils = {\n ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n BITS: 3 * Fp2.BITS,\n BYTES: 3 * Fp2.BYTES,\n MASK: bitMask(3 * Fp2.BITS),\n ZERO: { c0: Fp2.ZERO, c1: Fp2.ZERO, c2: Fp2.ZERO },\n ONE: { c0: Fp2.ONE, c1: Fp2.ZERO, c2: Fp2.ZERO },\n create: (num) => num,\n isValid: ({ c0, c1, c2 }) => Fp2.isValid(c0) && Fp2.isValid(c1) && Fp2.isValid(c2),\n is0: ({ c0, c1, c2 }) => Fp2.is0(c0) && Fp2.is0(c1) && Fp2.is0(c2),\n neg: ({ c0, c1, c2 }) => ({ c0: Fp2.neg(c0), c1: Fp2.neg(c1), c2: Fp2.neg(c2) }),\n eql: ({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }) =>\n Fp2.eql(c0, r0) && Fp2.eql(c1, r1) && Fp2.eql(c2, r2),\n sqrt: notImplemented,\n // Do we need division by bigint at all? Should be done via order:\n div: (lhs, rhs) =>\n Fp6.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp6.inv(rhs)),\n pow: (num, power) => mod.FpPow(Fp6, num, power),\n invertBatch: (nums) => mod.FpInvertBatch(Fp6, nums),\n // Normalized\n add: Fp6Add,\n sub: Fp6Subtract,\n mul: Fp6Multiply,\n sqr: Fp6Square,\n // NonNormalized stuff\n addN: Fp6Add,\n subN: Fp6Subtract,\n mulN: Fp6Multiply,\n sqrN: Fp6Square,\n\n inv: ({ c0, c1, c2 }) => {\n let t0 = Fp2.sub(Fp2.sqr(c0), Fp2.mulByNonresidue(Fp2.mul(c2, c1))); // c0² - c2 * c1 * (u + 1)\n let t1 = Fp2.sub(Fp2.mulByNonresidue(Fp2.sqr(c2)), Fp2.mul(c0, c1)); // c2² * (u + 1) - c0 * c1\n let t2 = Fp2.sub(Fp2.sqr(c1), Fp2.mul(c0, c2)); // c1² - c0 * c2\n // 1/(((c2 * T1 + c1 * T2) * v) + c0 * T0)\n let t4 = Fp2.inv(\n Fp2.add(Fp2.mulByNonresidue(Fp2.add(Fp2.mul(c2, t1), Fp2.mul(c1, t2))), Fp2.mul(c0, t0))\n );\n return { c0: Fp2.mul(t4, t0), c1: Fp2.mul(t4, t1), c2: Fp2.mul(t4, t2) };\n },\n // Bytes utils\n fromBytes: (b: Uint8Array): Fp6 => {\n if (b.length !== Fp6.BYTES) throw new Error('fromBytes invalid length=' + b.length);\n return {\n c0: Fp2.fromBytes(b.subarray(0, Fp2.BYTES)),\n c1: Fp2.fromBytes(b.subarray(Fp2.BYTES, 2 * Fp2.BYTES)),\n c2: Fp2.fromBytes(b.subarray(2 * Fp2.BYTES)),\n };\n },\n toBytes: ({ c0, c1, c2 }): Uint8Array =>\n concatBytes(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2)),\n cmov: ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6, c) => ({\n c0: Fp2.cmov(c0, r0, c),\n c1: Fp2.cmov(c1, r1, c),\n c2: Fp2.cmov(c2, r2, c),\n }),\n fromBigSix: (t: BigintSix): Fp6 => {\n if (!Array.isArray(t) || t.length !== 6) throw new Error('invalid Fp6 usage');\n return {\n c0: Fp2.fromBigTuple(t.slice(0, 2)),\n c1: Fp2.fromBigTuple(t.slice(2, 4)),\n c2: Fp2.fromBigTuple(t.slice(4, 6)),\n };\n },\n frobeniusMap: ({ c0, c1, c2 }, power: number) => ({\n c0: Fp2.frobeniusMap(c0, power),\n c1: Fp2.mul(Fp2.frobeniusMap(c1, power), FP6_FROBENIUS_COEFFICIENTS_1[power % 6]),\n c2: Fp2.mul(Fp2.frobeniusMap(c2, power), FP6_FROBENIUS_COEFFICIENTS_2[power % 6]),\n }),\n mulByFp2: ({ c0, c1, c2 }, rhs: Fp2): Fp6 => ({\n c0: Fp2.mul(c0, rhs),\n c1: Fp2.mul(c1, rhs),\n c2: Fp2.mul(c2, rhs),\n }),\n mulByNonresidue: ({ c0, c1, c2 }) => ({ c0: Fp2.mulByNonresidue(c2), c1: c0, c2: c1 }),\n // Sparse multiplication\n mul1: ({ c0, c1, c2 }, b1: Fp2): Fp6 => ({\n c0: Fp2.mulByNonresidue(Fp2.mul(c2, b1)),\n c1: Fp2.mul(c0, b1),\n c2: Fp2.mul(c1, b1),\n }),\n // Sparse multiplication\n mul01({ c0, c1, c2 }, b0: Fp2, b1: Fp2): Fp6 {\n let t0 = Fp2.mul(c0, b0); // c0 * b0\n let t1 = Fp2.mul(c1, b1); // c1 * b1\n return {\n // ((c1 + c2) * b1 - T1) * (u + 1) + T0\n c0: Fp2.add(Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), b1), t1)), t0),\n // (b0 + b1) * (c0 + c1) - T0 - T1\n c1: Fp2.sub(Fp2.sub(Fp2.mul(Fp2.add(b0, b1), Fp2.add(c0, c1)), t0), t1),\n // (c0 + c2) * b0 - T0 + T1\n c2: Fp2.add(Fp2.sub(Fp2.mul(Fp2.add(c0, c2), b0), t0), t1),\n };\n },\n };\n\n // Fp12\n const FP12_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(\n Fp2,\n Fp2Nonresidue,\n Fp.ORDER,\n 12,\n 1,\n 6\n )[0];\n\n const Fp12Add = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n c0: Fp6.add(c0, r0),\n c1: Fp6.add(c1, r1),\n });\n const Fp12Subtract = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n c0: Fp6.sub(c0, r0),\n c1: Fp6.sub(c1, r1),\n });\n const Fp12Multiply = ({ c0, c1 }: Fp12, rhs: Fp12 | bigint) => {\n if (typeof rhs === 'bigint') return { c0: Fp6.mul(c0, rhs), c1: Fp6.mul(c1, rhs) };\n let { c0: r0, c1: r1 } = rhs;\n let t1 = Fp6.mul(c0, r0); // c0 * r0\n let t2 = Fp6.mul(c1, r1); // c1 * r1\n return {\n c0: Fp6.add(t1, Fp6.mulByNonresidue(t2)), // T1 + T2 * v\n // (c0 + c1) * (r0 + r1) - (T1 + T2)\n c1: Fp6.sub(Fp6.mul(Fp6.add(c0, c1), Fp6.add(r0, r1)), Fp6.add(t1, t2)),\n };\n };\n const Fp12Square = ({ c0, c1 }: Fp12) => {\n let ab = Fp6.mul(c0, c1); // c0 * c1\n return {\n // (c1 * v + c0) * (c0 + c1) - AB - AB * v\n c0: Fp6.sub(\n Fp6.sub(Fp6.mul(Fp6.add(Fp6.mulByNonresidue(c1), c0), Fp6.add(c0, c1)), ab),\n Fp6.mulByNonresidue(ab)\n ),\n c1: Fp6.add(ab, ab),\n }; // AB + AB\n };\n function Fp4Square(a: Fp2, b: Fp2): { first: Fp2; second: Fp2 } {\n const a2 = Fp2.sqr(a);\n const b2 = Fp2.sqr(b);\n return {\n first: Fp2.add(Fp2.mulByNonresidue(b2), a2), // b² * Nonresidue + a²\n second: Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(a, b)), a2), b2), // (a + b)² - a² - b²\n };\n }\n type Fp12Utils = {\n fromBigTwelve: (t: BigintTwelve) => Fp12;\n frobeniusMap(num: Fp12, power: number): Fp12;\n mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n mulByFp2(lhs: Fp12, rhs: Fp2): Fp12;\n conjugate(num: Fp12): Fp12;\n finalExponentiate(num: Fp12): Fp12;\n _cyclotomicSquare(num: Fp12): Fp12;\n _cyclotomicExp(num: Fp12, n: bigint): Fp12;\n };\n\n const Fp12: mod.IField<Fp12> & Fp12Utils = {\n ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n BITS: 2 * Fp2.BITS,\n BYTES: 2 * Fp2.BYTES,\n MASK: bitMask(2 * Fp2.BITS),\n ZERO: { c0: Fp6.ZERO, c1: Fp6.ZERO },\n ONE: { c0: Fp6.ONE, c1: Fp6.ZERO },\n create: (num) => num,\n isValid: ({ c0, c1 }) => Fp6.isValid(c0) && Fp6.isValid(c1),\n is0: ({ c0, c1 }) => Fp6.is0(c0) && Fp6.is0(c1),\n neg: ({ c0, c1 }) => ({ c0: Fp6.neg(c0), c1: Fp6.neg(c1) }),\n eql: ({ c0, c1 }, { c0: r0, c1: r1 }) => Fp6.eql(c0, r0) && Fp6.eql(c1, r1),\n sqrt: notImplemented,\n inv: ({ c0, c1 }) => {\n let t = Fp6.inv(Fp6.sub(Fp6.sqr(c0), Fp6.mulByNonresidue(Fp6.sqr(c1)))); // 1 / (c0² - c1² * v)\n return { c0: Fp6.mul(c0, t), c1: Fp6.neg(Fp6.mul(c1, t)) }; // ((C0 * T) * T) + (-C1 * T) * w\n },\n div: (lhs, rhs) =>\n Fp12.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp12.inv(rhs)),\n pow: (num, power) => mod.FpPow(Fp12, num, power),\n invertBatch: (nums) => mod.FpInvertBatch(Fp12, nums),\n // Normalized\n add: Fp12Add,\n sub: Fp12Subtract,\n mul: Fp12Multiply,\n sqr: Fp12Square,\n // NonNormalized stuff\n addN: Fp12Add,\n subN: Fp12Subtract,\n mulN: Fp12Multiply,\n sqrN: Fp12Square,\n\n // Bytes utils\n fromBytes: (b: Uint8Array): Fp12 => {\n if (b.length !== Fp12.BYTES) throw new Error('fromBytes invalid length=' + b.length);\n return {\n c0: Fp6.fromBytes(b.subarray(0, Fp6.BYTES)),\n c1: Fp6.fromBytes(b.subarray(Fp6.BYTES)),\n };\n },\n toBytes: ({ c0, c1 }): Uint8Array => concatBytes(Fp6.toBytes(c0), Fp6.toBytes(c1)),\n cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n c0: Fp6.cmov(c0, r0, c),\n c1: Fp6.cmov(c1, r1, c),\n }),\n // Utils\n // toString() {\n // return '' + 'Fp12(' + this.c0 + this.c1 + '* w');\n // },\n // fromTuple(c: [Fp6, Fp6]) {\n // return new Fp12(...c);\n // }\n fromBigTwelve: (t: BigintTwelve): Fp12 => ({\n c0: Fp6.fromBigSix(t.slice(0, 6) as BigintSix),\n c1: Fp6.fromBigSix(t.slice(6, 12) as BigintSix),\n }),\n // Raises to q**i -th power\n frobeniusMap(lhs, power: number) {\n const { c0, c1, c2 } = Fp6.frobeniusMap(lhs.c1, power);\n const coeff = FP12_FROBENIUS_COEFFICIENTS[power % 12];\n return {\n c0: Fp6.frobeniusMap(lhs.c0, power),\n c1: Fp6.create({\n c0: Fp2.mul(c0, coeff),\n c1: Fp2.mul(c1, coeff),\n c2: Fp2.mul(c2, coeff),\n }),\n };\n },\n mulByFp2: ({ c0, c1 }, rhs: Fp2): Fp12 => ({\n c0: Fp6.mulByFp2(c0, rhs),\n c1: Fp6.mulByFp2(c1, rhs),\n }),\n conjugate: ({ c0, c1 }): Fp12 => ({ c0, c1: Fp6.neg(c1) }),\n // Sparse multiplication\n mul014: ({ c0, c1 }, o0: Fp2, o1: Fp2, o4: Fp2) => {\n let t0 = Fp6.mul01(c0, o0, o1);\n let t1 = Fp6.mul1(c1, o4);\n return {\n c0: Fp6.add(Fp6.mulByNonresidue(t1), t0), // T1 * v + T0\n // (c1 + c0) * [o0, o1+o4] - T0 - T1\n c1: Fp6.sub(Fp6.sub(Fp6.mul01(Fp6.add(c1, c0), o0, Fp2.add(o1, o4)), t0), t1),\n };\n },\n mul034: ({ c0, c1 }, o0: Fp2, o3: Fp2, o4: Fp2) => {\n const a = Fp6.create({\n c0: Fp2.mul(c0.c0, o0),\n c1: Fp2.mul(c0.c1, o0),\n c2: Fp2.mul(c0.c2, o0),\n });\n const b = Fp6.mul01(c1, o3, o4);\n const e = Fp6.mul01(Fp6.add(c0, c1), Fp2.add(o0, o3), o4);\n return {\n c0: Fp6.add(Fp6.mulByNonresidue(b), a),\n c1: Fp6.sub(e, Fp6.add(a, b)),\n };\n },\n\n // A cyclotomic group is a subgroup of Fp^n defined by\n // GΦₙ(p) = {α ∈ Fpⁿ : α^Φₙ(p) = 1}\n // The result of any pairing is in a cyclotomic subgroup\n // https://eprint.iacr.org/2009/565.pdf\n _cyclotomicSquare: opts.Fp12cyclotomicSquare,\n _cyclotomicExp: opts.Fp12cyclotomicExp,\n // https://eprint.iacr.org/2010/354.pdf\n // https://eprint.iacr.org/2009/565.pdf\n finalExponentiate: opts.Fp12finalExponentiate,\n };\n\n return { Fp, Fp2, Fp6, Fp4Square, Fp12 };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { bls, CurveFn } from './abstract/bls.js';\nimport * as mod from './abstract/modular.js';\nimport {\n bitGet,\n bitLen,\n bytesToHex,\n bytesToNumberBE,\n concatBytes as concatB,\n ensureBytes,\n Hex,\n numberToBytesBE,\n} from './abstract/utils.js';\n// Types\nimport { isogenyMap } from './abstract/hash-to-curve.js';\nimport { AffinePoint, mapToCurveSimpleSWU, ProjPointType } from './abstract/weierstrass.js';\nimport { tower12, psiFrobenius } from './abstract/tower.js';\nimport type { Fp, Fp2, Fp6, Fp12 } from './abstract/tower.js';\n\n/*\nbls12-381 is pairing-friendly Barreto-Lynn-Scott elliptic curve construction allowing to:\n- Construct zk-SNARKs at the 120-bit security\n- Efficiently verify N aggregate signatures with 1 pairing and N ec additions:\n the Boneh-Lynn-Shacham signature scheme is orders of magnitude more efficient than Schnorr\n\n### Summary\n1. BLS Relies on Bilinear Pairing (expensive)\n2. Private Keys: 32 bytes\n3. Public Keys: 48 bytes: 381 bit affine x coordinate, encoded into 48 big-endian bytes.\n4. Signatures: 96 bytes: two 381 bit integers (affine x coordinate), encoded into two 48 big-endian byte arrays.\n - The signature is a point on the G2 subgroup, which is defined over a finite field\n with elements twice as big as the G1 curve (G2 is over Fp2 rather than Fp. Fp2 is analogous to the complex numbers).\n5. The 12 stands for the Embedding degree.\n\n### Formulas\n- `P = pk x G` - public keys\n- `S = pk x H(m)` - signing\n- `e(P, H(m)) == e(G, S)` - verification using pairings\n- `e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))` - signature aggregation\n\n### Compatibility and notes\n1. It is compatible with Algorand, Chia, Dfinity, Ethereum, Filecoin, ZEC\n Filecoin uses little endian byte arrays for private keys - make sure to reverse byte order.\n2. Some projects use G2 for public keys and G1 for signatures. It's called \"short signature\"\n3. Curve security level is about 120 bits as per Barbulescu-Duquesne 2017\n https://hal.science/hal-01534101/file/main.pdf\n4. Compatible with specs:\n[cfrg-pairing-friendly-curves-11](https://tools.ietf.org/html/draft-irtf-cfrg-pairing-friendly-curves-11),\n[cfrg-bls-signature-05](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature-05),\n[RFC 9380](https://www.rfc-editor.org/rfc/rfc9380).\n*/\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\n/*\nEmbedding degree (k): 12\nSeed (X): -15132376222941642752\nFr: (x⁴-x²+1)\nFp: ((x-1)² ⋅ r(x)/3+x)\n(E/Fp): Y²=X³+4\n(Eₜ/Fp²): Y² = X³+4(u+1) (M-type twist)\nAte loop size: X\n\nTowers:\n- Fp²[u] = Fp/u²+1\n- Fp⁶[v] = Fp²/v³-1-u\n- Fp¹²[w] = Fp⁶/w²-v\n\n\nTODO: BLS & BN Fp/Fr can be constructed from seed.\n*/\n\n// The BLS parameter x (seed) for BLS12-381. NOTE: it is negative!\nconst BLS_X = BigInt('0xd201000000010000');\nconst BLS_X_LEN = bitLen(BLS_X);\n\n// CURVE FIELDS\nconst { Fp, Fp2, Fp6, Fp4Square, Fp12 } = tower12({\n // Order of Fp\n ORDER: BigInt(\n '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'\n ),\n // Finite extension field over irreducible polynominal.\n // Fp(u) / (u² - β) where β = -1\n FP2_NONRESIDUE: [_1n, _1n],\n Fp2mulByB: ({ c0, c1 }) => {\n const t0 = Fp.mul(c0, _4n); // 4 * c0\n const t1 = Fp.mul(c1, _4n); // 4 * c1\n // (T0-T1) + (T0+T1)*i\n return { c0: Fp.sub(t0, t1), c1: Fp.add(t0, t1) };\n },\n // Fp12\n // A cyclotomic group is a subgroup of Fp^n defined by\n // GΦₙ(p) = {α ∈ Fpⁿ : α^Φₙ(p) = 1}\n // The result of any pairing is in a cyclotomic subgroup\n // https://eprint.iacr.org/2009/565.pdf\n Fp12cyclotomicSquare: ({ c0, c1 }): Fp12 => {\n const { c0: c0c0, c1: c0c1, c2: c0c2 } = c0;\n const { c0: c1c0, c1: c1c1, c2: c1c2 } = c1;\n const { first: t3, second: t4 } = Fp4Square(c0c0, c1c1);\n const { first: t5, second: t6 } = Fp4Square(c1c0, c0c2);\n const { first: t7, second: t8 } = Fp4Square(c0c1, c1c2);\n const t9 = Fp2.mulByNonresidue(t8); // T8 * (u + 1)\n return {\n c0: Fp6.create({\n c0: Fp2.add(Fp2.mul(Fp2.sub(t3, c0c0), _2n), t3), // 2 * (T3 - c0c0) + T3\n c1: Fp2.add(Fp2.mul(Fp2.sub(t5, c0c1), _2n), t5), // 2 * (T5 - c0c1) + T5\n c2: Fp2.add(Fp2.mul(Fp2.sub(t7, c0c2), _2n), t7),\n }), // 2 * (T7 - c0c2) + T7\n c1: Fp6.create({\n c0: Fp2.add(Fp2.mul(Fp2.add(t9, c1c0), _2n), t9), // 2 * (T9 + c1c0) + T9\n c1: Fp2.add(Fp2.mul(Fp2.add(t4, c1c1), _2n), t4), // 2 * (T4 + c1c1) + T4\n c2: Fp2.add(Fp2.mul(Fp2.add(t6, c1c2), _2n), t6),\n }),\n }; // 2 * (T6 + c1c2) + T6\n },\n Fp12cyclotomicExp(num, n) {\n let z = Fp12.ONE;\n for (let i = BLS_X_LEN - 1; i >= 0; i--) {\n z = Fp12._cyclotomicSquare(z);\n if (bitGet(n, i)) z = Fp12.mul(z, num);\n }\n return z;\n },\n // https://eprint.iacr.org/2010/354.pdf\n // https://eprint.iacr.org/2009/565.pdf\n Fp12finalExponentiate: (num) => {\n const x = BLS_X;\n // this^(q⁶) / this\n const t0 = Fp12.div(Fp12.frobeniusMap(num, 6), num);\n // t0^(q²) * t0\n const t1 = Fp12.mul(Fp12.frobeniusMap(t0, 2), t0);\n const t2 = Fp12.conjugate(Fp12._cyclotomicExp(t1, x));\n const t3 = Fp12.mul(Fp12.conjugate(Fp12._cyclotomicSquare(t1)), t2);\n const t4 = Fp12.conjugate(Fp12._cyclotomicExp(t3, x));\n const t5 = Fp12.conjugate(Fp12._cyclotomicExp(t4, x));\n const t6 = Fp12.mul(Fp12.conjugate(Fp12._cyclotomicExp(t5, x)), Fp12._cyclotomicSquare(t2));\n const t7 = Fp12.conjugate(Fp12._cyclotomicExp(t6, x));\n const t2_t5_pow_q2 = Fp12.frobeniusMap(Fp12.mul(t2, t5), 2);\n const t4_t1_pow_q3 = Fp12.frobeniusMap(Fp12.mul(t4, t1), 3);\n const t6_t1c_pow_q1 = Fp12.frobeniusMap(Fp12.mul(t6, Fp12.conjugate(t1)), 1);\n const t7_t3c_t1 = Fp12.mul(Fp12.mul(t7, Fp12.conjugate(t3)), t1);\n // (t2 * t5)^(q²) * (t4 * t1)^(q³) * (t6 * t1.conj)^(q^1) * t7 * t3.conj * t1\n return Fp12.mul(Fp12.mul(Fp12.mul(t2_t5_pow_q2, t4_t1_pow_q3), t6_t1c_pow_q1), t7_t3c_t1);\n },\n});\n\n// Finite field over r.\n// This particular field is not used anywhere in bls12-381, but it is still useful.\nconst Fr = mod.Field(BigInt('0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001'));\n\n// END OF CURVE FIELDS\n\n// HashToCurve\n\n// 3-isogeny map from E' to E https://www.rfc-editor.org/rfc/rfc9380#appendix-E.3\nconst isogenyMapG2 = isogenyMap(\n Fp2,\n [\n // xNum\n [\n [\n '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6',\n '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6',\n ],\n [\n '0x0',\n '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a',\n ],\n [\n '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e',\n '0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d',\n ],\n [\n '0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1',\n '0x0',\n ],\n ],\n // xDen\n [\n [\n '0x0',\n '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63',\n ],\n [\n '0xc',\n '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f',\n ],\n ['0x1', '0x0'], // LAST 1\n ],\n // yNum\n [\n [\n '0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706',\n '0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706',\n ],\n [\n '0x0',\n '0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be',\n ],\n [\n '0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c',\n '0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f',\n ],\n [\n '0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10',\n '0x0',\n ],\n ],\n // yDen\n [\n [\n '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb',\n '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb',\n ],\n [\n '0x0',\n '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3',\n ],\n [\n '0x12',\n '0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99',\n ],\n ['0x1', '0x0'], // LAST 1\n ],\n ].map((i) => i.map((pair) => Fp2.fromBigTuple(pair.map(BigInt)))) as [Fp2[], Fp2[], Fp2[], Fp2[]]\n);\n// 11-isogeny map from E' to E\nconst isogenyMapG1 = isogenyMap(\n Fp,\n [\n // xNum\n [\n '0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7',\n '0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb',\n '0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0',\n '0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861',\n '0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9',\n '0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983',\n '0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84',\n '0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e',\n '0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317',\n '0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e',\n '0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b',\n '0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229',\n ],\n // xDen\n [\n '0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c',\n '0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff',\n '0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19',\n '0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8',\n '0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e',\n '0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5',\n '0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a',\n '0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e',\n '0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641',\n '0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a',\n '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33',\n '0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696',\n '0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6',\n '0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb',\n '0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb',\n '0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0',\n '0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2',\n '0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29',\n '0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587',\n '0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30',\n '0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132',\n '0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e',\n '0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8',\n '0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133',\n '0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b',\n '0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604',\n ],\n // yDen\n [\n '0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1',\n '0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d',\n '0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2',\n '0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416',\n '0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d',\n '0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac',\n '0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c',\n '0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9',\n '0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a',\n '0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55',\n '0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8',\n '0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092',\n '0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc',\n '0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7',\n '0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f',\n '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n ].map((i) => i.map((j) => BigInt(j))) as [Fp[], Fp[], Fp[], Fp[]]\n);\n\n// SWU Map - Fp2 to G2': y² = x³ + 240i * x + 1012 + 1012i\nconst G2_SWU = mapToCurveSimpleSWU(Fp2, {\n A: Fp2.create({ c0: Fp.create(_0n), c1: Fp.create(BigInt(240)) }), // A' = 240 * I\n B: Fp2.create({ c0: Fp.create(BigInt(1012)), c1: Fp.create(BigInt(1012)) }), // B' = 1012 * (1 + I)\n Z: Fp2.create({ c0: Fp.create(BigInt(-2)), c1: Fp.create(BigInt(-1)) }), // Z: -(2 + I)\n});\n// Optimized SWU Map - Fp to G1\nconst G1_SWU = mapToCurveSimpleSWU(Fp, {\n A: Fp.create(\n BigInt(\n '0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d'\n )\n ),\n B: Fp.create(\n BigInt(\n '0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0'\n )\n ),\n Z: Fp.create(BigInt(11)),\n});\n\n// Endomorphisms (for fast cofactor clearing)\n// Ψ(P) endomorphism\nconst { G2psi, G2psi2 } = psiFrobenius(Fp, Fp2, Fp2.div(Fp2.ONE, Fp2.NONRESIDUE)); // 1/(u+1)\n\n// Default hash_to_field options are for hash to G2.\n//\n// Parameter definitions are in section 5.3 of the spec unless otherwise noted.\n// Parameter values come from section 8.8.2 of the spec.\n// https://www.rfc-editor.org/rfc/rfc9380#section-8.8.2\n//\n// Base field F is GF(p^m)\n// p = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab\n// m = 2 (or 1 for G1 see section 8.8.1)\n// k = 128\nconst htfDefaults = Object.freeze({\n // DST: a domain separation tag\n // defined in section 2.2.5\n // Use utils.getDSTLabel(), utils.setDSTLabel(value)\n DST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_',\n encodeDST: 'BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_',\n // p: the characteristic of F\n // where F is a finite field of characteristic p and order q = p^m\n p: Fp.ORDER,\n // m: the extension degree of F, m >= 1\n // where F is a finite field of characteristic p and order q = p^m\n m: 2,\n // k: the target security level for the suite in bits\n // defined in section 5.1\n k: 128,\n // option to use a message that has already been processed by\n // expand_message_xmd\n expand: 'xmd',\n // Hash functions for: expand_message_xmd is appropriate for use with a\n // wide range of hash functions, including SHA-2, SHA-3, BLAKE2, and others.\n // BBS+ uses blake2: https://github.com/hyperledger/aries-framework-go/issues/2247\n hash: sha256,\n} as const);\n\n// Encoding utils\n// Point on G1 curve: (x, y)\n\n// Compressed point of infinity\nconst COMPRESSED_ZERO = setMask(Fp.toBytes(_0n), { infinity: true, compressed: true }); // set compressed & point-at-infinity bits\n\nfunction parseMask(bytes: Uint8Array) {\n // Copy, so we can remove mask data. It will be removed also later, when Fp.create will call modulo.\n bytes = bytes.slice();\n const mask = bytes[0] & 0b1110_0000;\n const compressed = !!((mask >> 7) & 1); // compression bit (0b1000_0000)\n const infinity = !!((mask >> 6) & 1); // point at infinity bit (0b0100_0000)\n const sort = !!((mask >> 5) & 1); // sort bit (0b0010_0000)\n bytes[0] &= 0b0001_1111; // clear mask (zero first 3 bits)\n return { compressed, infinity, sort, value: bytes };\n}\n\nfunction setMask(\n bytes: Uint8Array,\n mask: { compressed?: boolean; infinity?: boolean; sort?: boolean }\n) {\n if (bytes[0] & 0b1110_0000) throw new Error('setMask: non-empty mask');\n if (mask.compressed) bytes[0] |= 0b1000_0000;\n if (mask.infinity) bytes[0] |= 0b0100_0000;\n if (mask.sort) bytes[0] |= 0b0010_0000;\n return bytes;\n}\n\nfunction signatureG1ToRawBytes(point: ProjPointType<Fp>) {\n point.assertValidity();\n const isZero = point.equals(bls12_381.G1.ProjectivePoint.ZERO);\n const { x, y } = point.toAffine();\n if (isZero) return COMPRESSED_ZERO.slice();\n const P = Fp.ORDER;\n const sort = Boolean((y * _2n) / P);\n return setMask(numberToBytesBE(x, Fp.BYTES), { compressed: true, sort });\n}\n\nfunction signatureG2ToRawBytes(point: ProjPointType<Fp2>) {\n // NOTE: by some reasons it was missed in bls12-381, looks like bug\n point.assertValidity();\n const len = Fp.BYTES;\n if (point.equals(bls12_381.G2.ProjectivePoint.ZERO))\n return concatB(COMPRESSED_ZERO, numberToBytesBE(_0n, len));\n const { x, y } = point.toAffine();\n const { re: x0, im: x1 } = Fp2.reim(x);\n const { re: y0, im: y1 } = Fp2.reim(y);\n const tmp = y1 > _0n ? y1 * _2n : y0 * _2n;\n const sort = Boolean((tmp / Fp.ORDER) & _1n);\n const z2 = x0;\n return concatB(\n setMask(numberToBytesBE(x1, len), { sort, compressed: true }),\n numberToBytesBE(z2, len)\n );\n}\n\n// To verify curve parameters, see pairing-friendly-curves spec:\n// https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-11\n// Basic math is done over finite fields over p.\n// More complicated math is done over polynominal extension fields.\n// To simplify calculations in Fp12, we construct extension tower:\n// Fp₁₂ = Fp₆² => Fp₂³\n// Fp(u) / (u² - β) where β = -1\n// Fp₂(v) / (v³ - ξ) where ξ = u + 1\n// Fp₆(w) / (w² - γ) where γ = v\n// Here goes constants && point encoding format\nexport const bls12_381: CurveFn = bls({\n // Fields\n fields: {\n Fp,\n Fp2,\n Fp6,\n Fp12,\n Fr,\n },\n // G1 is the order-q subgroup of E1(Fp) : y² = x³ + 4, #E1(Fp) = h1q, where\n // characteristic; z + (z⁴ - z² + 1)(z - 1)²/3\n G1: {\n Fp,\n // cofactor; (z - 1)²/3\n h: BigInt('0x396c8c005555e1568c00aaab0000aaab'),\n // generator's coordinates\n // x = 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507\n // y = 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569\n Gx: BigInt(\n '0x17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb'\n ),\n Gy: BigInt(\n '0x08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1'\n ),\n a: Fp.ZERO,\n b: _4n,\n htfDefaults: { ...htfDefaults, m: 1, DST: 'BLS_SIG_BLS12381G1_XMD:SHA-256_SSWU_RO_NUL_' },\n wrapPrivateKey: true,\n allowInfinityPoint: true,\n // Checks is the point resides in prime-order subgroup.\n // point.isTorsionFree() should return true for valid points\n // It returns false for shitty points.\n // https://eprint.iacr.org/2021/1130.pdf\n isTorsionFree: (c, point): boolean => {\n // φ endomorphism\n const cubicRootOfUnityModP = BigInt(\n '0x5f19672fdf76ce51ba69c6076a0f77eaddb3a93be6f89688de17d813620a00022e01fffffffefffe'\n );\n const phi = new c(Fp.mul(point.px, cubicRootOfUnityModP), point.py, point.pz);\n\n // todo: unroll\n const xP = point.multiplyUnsafe(BLS_X).negate(); // [x]P\n const u2P = xP.multiplyUnsafe(BLS_X); // [u2]P\n return u2P.equals(phi);\n\n // https://eprint.iacr.org/2019/814.pdf\n // (z² − 1)/3\n // const c1 = BigInt('0x396c8c005555e1560000000055555555');\n // const P = this;\n // const S = P.sigma();\n // const Q = S.double();\n // const S2 = S.sigma();\n // // [(z² − 1)/3](2σ(P) − P − σ²(P)) − σ²(P) = O\n // const left = Q.subtract(P).subtract(S2).multiplyUnsafe(c1);\n // const C = left.subtract(S2);\n // return C.isZero();\n },\n // Clear cofactor of G1\n // https://eprint.iacr.org/2019/403\n clearCofactor: (_c, point) => {\n // return this.multiplyUnsafe(CURVE.h);\n return point.multiplyUnsafe(BLS_X).add(point); // x*P + P\n },\n mapToCurve: (scalars: bigint[]) => {\n const { x, y } = G1_SWU(Fp.create(scalars[0]));\n return isogenyMapG1(x, y);\n },\n fromBytes: (bytes: Uint8Array): AffinePoint<Fp> => {\n const { compressed, infinity, sort, value } = parseMask(bytes);\n if (value.length === 48 && compressed) {\n // TODO: Fp.bytes\n const P = Fp.ORDER;\n const compressedValue = bytesToNumberBE(value);\n // Zero\n const x = Fp.create(compressedValue & Fp.MASK);\n if (infinity) {\n if (x !== _0n) throw new Error('G1: non-empty compressed point at infinity');\n return { x: _0n, y: _0n };\n }\n const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381.params.G1b)); // y² = x³ + b\n let y = Fp.sqrt(right);\n if (!y) throw new Error('invalid compressed G1 point');\n if ((y * _2n) / P !== BigInt(sort)) y = Fp.neg(y);\n return { x: Fp.create(x), y: Fp.create(y) };\n } else if (value.length === 96 && !compressed) {\n // Check if the infinity flag is set\n const x = bytesToNumberBE(value.subarray(0, Fp.BYTES));\n const y = bytesToNumberBE(value.subarray(Fp.BYTES));\n if (infinity) {\n if (x !== _0n || y !== _0n) throw new Error('G1: non-empty point at infinity');\n return bls12_381.G1.ProjectivePoint.ZERO.toAffine();\n }\n return { x: Fp.create(x), y: Fp.create(y) };\n } else {\n throw new Error('invalid point G1, expected 48/96 bytes');\n }\n },\n toBytes: (c, point, isCompressed) => {\n const isZero = point.equals(c.ZERO);\n const { x, y } = point.toAffine();\n if (isCompressed) {\n if (isZero) return COMPRESSED_ZERO.slice();\n const P = Fp.ORDER;\n const sort = Boolean((y * _2n) / P);\n return setMask(numberToBytesBE(x, Fp.BYTES), { compressed: true, sort });\n } else {\n if (isZero) {\n // 2x PUBLIC_KEY_LENGTH\n const x = concatB(new Uint8Array([0x40]), new Uint8Array(2 * Fp.BYTES - 1));\n return x;\n } else {\n return concatB(numberToBytesBE(x, Fp.BYTES), numberToBytesBE(y, Fp.BYTES));\n }\n }\n },\n ShortSignature: {\n fromHex(hex: Hex): ProjPointType<Fp> {\n const { infinity, sort, value } = parseMask(ensureBytes('signatureHex', hex, 48));\n const P = Fp.ORDER;\n const compressedValue = bytesToNumberBE(value);\n // Zero\n if (infinity) return bls12_381.G1.ProjectivePoint.ZERO;\n const x = Fp.create(compressedValue & Fp.MASK);\n const right = Fp.add(Fp.pow(x, _3n), Fp.create(bls12_381.params.G1b)); // y² = x³ + b\n let y = Fp.sqrt(right);\n if (!y) throw new Error('invalid compressed G1 point');\n const aflag = BigInt(sort);\n if ((y * _2n) / P !== aflag) y = Fp.neg(y);\n const point = bls12_381.G1.ProjectivePoint.fromAffine({ x, y });\n point.assertValidity();\n return point;\n },\n toRawBytes(point: ProjPointType<Fp>) {\n return signatureG1ToRawBytes(point);\n },\n toHex(point: ProjPointType<Fp>) {\n return bytesToHex(signatureG1ToRawBytes(point));\n },\n },\n },\n // G2 is the order-q subgroup of E2(Fp²) : y² = x³+4(1+√−1),\n // where Fp2 is Fp[√−1]/(x2+1). #E2(Fp2 ) = h2q, where\n // G² - 1\n // h2q\n G2: {\n Fp: Fp2,\n // cofactor\n h: BigInt(\n '0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5'\n ),\n Gx: Fp2.fromBigTuple([\n BigInt(\n '0x024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8'\n ),\n BigInt(\n '0x13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e'\n ),\n ]),\n // y =\n // 927553665492332455747201965776037880757740193453592970025027978793976877002675564980949289727957565575433344219582,\n // 1985150602287291935568054521177171638300868978215655730859378665066344726373823718423869104263333984641494340347905\n Gy: Fp2.fromBigTuple([\n BigInt(\n '0x0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801'\n ),\n BigInt(\n '0x0606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be'\n ),\n ]),\n a: Fp2.ZERO,\n b: Fp2.fromBigTuple([_4n, _4n]),\n hEff: BigInt(\n '0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551'\n ),\n htfDefaults: { ...htfDefaults },\n wrapPrivateKey: true,\n allowInfinityPoint: true,\n mapToCurve: (scalars: bigint[]) => {\n const { x, y } = G2_SWU(Fp2.fromBigTuple(scalars));\n return isogenyMapG2(x, y);\n },\n // Checks is the point resides in prime-order subgroup.\n // point.isTorsionFree() should return true for valid points\n // It returns false for shitty points.\n // https://eprint.iacr.org/2021/1130.pdf\n isTorsionFree: (c, P): boolean => {\n return P.multiplyUnsafe(BLS_X).negate().equals(G2psi(c, P)); // ψ(P) == [u](P)\n // Older version: https://eprint.iacr.org/2019/814.pdf\n // Ψ²(P) => Ψ³(P) => [z]Ψ³(P) where z = -x => [z]Ψ³(P) - Ψ²(P) + P == O\n // return P.psi2().psi().mulNegX().subtract(psi2).add(P).isZero();\n },\n // Maps the point into the prime-order subgroup G2.\n // clear_cofactor_bls12381_g2 from cfrg-hash-to-curve-11\n // https://eprint.iacr.org/2017/419.pdf\n // prettier-ignore\n clearCofactor: (c, P) => {\n const x = BLS_X;\n let t1 = P.multiplyUnsafe(x).negate(); // [-x]P\n let t2 = G2psi(c, P); // Ψ(P)\n let t3 = P.double(); // 2P\n t3 = G2psi2(c, t3); // Ψ²(2P)\n t3 = t3.subtract(t2); // Ψ²(2P) - Ψ(P)\n t2 = t1.add(t2); // [-x]P + Ψ(P)\n t2 = t2.multiplyUnsafe(x).negate(); // [x²]P - [x]Ψ(P)\n t3 = t3.add(t2); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P)\n t3 = t3.subtract(t1); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P\n const Q = t3.subtract(P); // Ψ²(2P) - Ψ(P) + [x²]P - [x]Ψ(P) + [x]P - 1P\n return Q; // [x²-x-1]P + [x-1]Ψ(P) + Ψ²(2P)\n },\n fromBytes: (bytes: Uint8Array): AffinePoint<Fp2> => {\n const { compressed, infinity, sort, value } = parseMask(bytes);\n if (\n (!compressed && !infinity && sort) || // 00100000\n (!compressed && infinity && sort) || // 01100000\n (sort && infinity && compressed) // 11100000\n ) {\n throw new Error('invalid encoding flag: ' + (bytes[0] & 0b1110_0000));\n }\n const L = Fp.BYTES;\n const slc = (b: Uint8Array, from: number, to?: number) => bytesToNumberBE(b.slice(from, to));\n if (value.length === 96 && compressed) {\n const b = bls12_381.params.G2b;\n const P = Fp.ORDER;\n if (infinity) {\n // check that all bytes are 0\n if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) {\n throw new Error('invalid compressed G2 point');\n }\n return { x: Fp2.ZERO, y: Fp2.ZERO };\n }\n const x_1 = slc(value, 0, L);\n const x_0 = slc(value, L, 2 * L);\n const x = Fp2.create({ c0: Fp.create(x_0), c1: Fp.create(x_1) });\n const right = Fp2.add(Fp2.pow(x, _3n), b); // y² = x³ + 4 * (u+1) = x³ + b\n let y = Fp2.sqrt(right);\n const Y_bit = y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P ? _1n : _0n;\n y = sort && Y_bit > 0 ? y : Fp2.neg(y);\n return { x, y };\n } else if (value.length === 192 && !compressed) {\n if (infinity) {\n if (value.reduce((p, c) => (p !== 0 ? c + 1 : c), 0) > 0) {\n throw new Error('invalid uncompressed G2 point');\n }\n return { x: Fp2.ZERO, y: Fp2.ZERO };\n }\n const x1 = slc(value, 0, L);\n const x0 = slc(value, L, 2 * L);\n const y1 = slc(value, 2 * L, 3 * L);\n const y0 = slc(value, 3 * L, 4 * L);\n return { x: Fp2.fromBigTuple([x0, x1]), y: Fp2.fromBigTuple([y0, y1]) };\n } else {\n throw new Error('invalid point G2, expected 96/192 bytes');\n }\n },\n toBytes: (c, point, isCompressed) => {\n const { BYTES: len, ORDER: P } = Fp;\n const isZero = point.equals(c.ZERO);\n const { x, y } = point.toAffine();\n if (isCompressed) {\n if (isZero) return concatB(COMPRESSED_ZERO, numberToBytesBE(_0n, len));\n const flag = Boolean(y.c1 === _0n ? (y.c0 * _2n) / P : (y.c1 * _2n) / P);\n return concatB(\n setMask(numberToBytesBE(x.c1, len), { compressed: true, sort: flag }),\n numberToBytesBE(x.c0, len)\n );\n } else {\n if (isZero) return concatB(new Uint8Array([0x40]), new Uint8Array(4 * len - 1)); // bytes[0] |= 1 << 6;\n const { re: x0, im: x1 } = Fp2.reim(x);\n const { re: y0, im: y1 } = Fp2.reim(y);\n return concatB(\n numberToBytesBE(x1, len),\n numberToBytesBE(x0, len),\n numberToBytesBE(y1, len),\n numberToBytesBE(y0, len)\n );\n }\n },\n Signature: {\n // TODO: Optimize, it's very slow because of sqrt.\n fromHex(hex: Hex): ProjPointType<Fp2> {\n const { infinity, sort, value } = parseMask(ensureBytes('signatureHex', hex));\n const P = Fp.ORDER;\n const half = value.length / 2;\n if (half !== 48 && half !== 96)\n throw new Error('invalid compressed signature length, must be 96 or 192');\n const z1 = bytesToNumberBE(value.slice(0, half));\n const z2 = bytesToNumberBE(value.slice(half));\n // Indicates the infinity point\n if (infinity) return bls12_381.G2.ProjectivePoint.ZERO;\n const x1 = Fp.create(z1 & Fp.MASK);\n const x2 = Fp.create(z2);\n const x = Fp2.create({ c0: x2, c1: x1 });\n const y2 = Fp2.add(Fp2.pow(x, _3n), bls12_381.params.G2b); // y² = x³ + 4\n // The slow part\n let y = Fp2.sqrt(y2);\n if (!y) throw new Error('Failed to find a square root');\n\n // Choose the y whose leftmost bit of the imaginary part is equal to the a_flag1\n // If y1 happens to be zero, then use the bit of y0\n const { re: y0, im: y1 } = Fp2.reim(y);\n const aflag1 = BigInt(sort);\n const isGreater = y1 > _0n && (y1 * _2n) / P !== aflag1;\n const isZero = y1 === _0n && (y0 * _2n) / P !== aflag1;\n if (isGreater || isZero) y = Fp2.neg(y);\n const point = bls12_381.G2.ProjectivePoint.fromAffine({ x, y });\n point.assertValidity();\n return point;\n },\n toRawBytes(point: ProjPointType<Fp2>) {\n return signatureG2ToRawBytes(point);\n },\n toHex(point: ProjPointType<Fp2>) {\n return bytesToHex(signatureG2ToRawBytes(point));\n },\n },\n },\n params: {\n ateLoopSize: BLS_X, // The BLS parameter x for BLS12-381\n r: Fr.ORDER, // order; z⁴ − z² + 1; CURVE.n from other curves\n xNegative: true,\n twistType: 'multiplicative',\n },\n htfDefaults,\n hash: sha256,\n randomBytes,\n});\n", "import { bls12_381 as bls } from '@noble/curves/bls12-381'\n\nimport type * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Branded, Compute } from './internal/types.js'\n\n/** Type for a field element in the base field of the BLS12-381 curve. */\nexport type Fp = bigint\n/** Type for a field element in the extension field of the BLS12-381 curve. */\nexport type Fp2 = Compute<{ c0: bigint; c1: bigint }>\n\n/** Root type for a BLS point on the G1 or G2 curve. */\nexport type BlsPoint<type = Fp | Fp2> = Compute<{\n x: type\n y: type\n z: type\n}>\n\n/** Type for a BLS point on the G1 curve. */\nexport type G1 = BlsPoint<Fp>\n/** Branded type for a bytes representation of a G1 point. */\nexport type G1Bytes = Branded<Bytes.Bytes, 'G1'>\n/** Branded type for a hex representation of a G1 point. */\nexport type G1Hex = Branded<Hex.Hex, 'G1'>\n\n/** Type for a BLS point on the G2 curve. */\nexport type G2 = BlsPoint<Fp2>\n/** Branded type for a bytes representation of a G2 point. */\nexport type G2Bytes = Branded<Bytes.Bytes, 'G2'>\n/** Branded type for a hex representation of a G2 point. */\nexport type G2Hex = Branded<Hex.Hex, 'G2'>\n\n/**\n * Converts a BLS point to {@link ox#Bytes.Bytes}.\n *\n * @example\n * ### Public Key to Bytes\n * ```ts twoslash\n * import { Bls, BlsPoint } from 'ox'\n *\n * const publicKey = Bls.getPublicKey({ privateKey: '0x...' })\n * const publicKeyBytes = BlsPoint.toBytes(publicKey)\n * // @log: Uint8Array [172, 175, 255, ...]\n * ```\n *\n * @example\n * ### Signature to Bytes\n * ```ts twoslash\n * import { Bls, BlsPoint } from 'ox'\n *\n * const signature = Bls.sign({ payload: '0x...', privateKey: '0x...' })\n * const signatureBytes = BlsPoint.toBytes(signature)\n * // @log: Uint8Array [172, 175, 255, ...]\n * ```\n *\n * @param point - The BLS point to convert.\n * @returns The bytes representation of the BLS point.\n */\nexport function toBytes<point extends G1 | G2>(\n point: point,\n): point extends G1 ? G1Bytes : G2Bytes {\n const group = typeof point.z === 'bigint' ? bls.G1 : bls.G2\n return new (group as any).ProjectivePoint(\n point.x,\n point.y,\n point.z,\n ).toRawBytes()\n}\n\nexport declare namespace toBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a BLS point to {@link ox#Hex.Hex}.\n *\n * @example\n * ### Public Key to Hex\n *\n * ```ts twoslash\n * import { Bls, BlsPoint } from 'ox'\n *\n * const publicKey = Bls.getPublicKey({ privateKey: '0x...' })\n * const publicKeyHex = BlsPoint.toHex(publicKey)\n * // @log: '0xacafff52270773ad1728df2807c0f1b0b271fa6b37dfb8b2f75448573c76c81bcd6790328a60e40ef5a13343b32d9e66'\n * ```\n *\n * @example\n * ### Signature to Hex\n *\n * ```ts twoslash\n * import { Bls, BlsPoint } from 'ox'\n *\n * const signature = Bls.sign({ payload: '0x...', privateKey: '0x...' })\n * const signatureHex = BlsPoint.toHex(signature)\n * // @log: '0xb4698f7611999fba87033b9cf72312c76c683bbc48175e2d4cb275907d6a267ab9840a66e3051e5ed36fd13aa712f9a9024f9fa9b67f716dfb74ae4efb7d9f1b7b43b4679abed6644cf476c12e79f309351ea8452487cd93f66e29e04ebe427c'\n * ```\n *\n * @param point - The BLS point to convert.\n * @returns The hex representation of the BLS point.\n */\nexport function toHex<point extends G1 | G2>(\n point: point,\n): point extends G1 ? G1Hex : G2Hex\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function toHex(point: G1 | G2): Hex.Hex {\n return Hex.fromBytes(toBytes(point))\n}\n\nexport declare namespace toHex {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts {@link ox#Bytes.Bytes} to a BLS point.\n *\n * @example\n * ### Bytes to Public Key\n *\n * ```ts twoslash\n * // @noErrors\n * import { BlsPoint } from 'ox'\n *\n * const publicKey = BlsPoint.fromBytes(Bytes.from([172, 175, 255, ...]), 'G1')\n * // @log: {\n * // @log: x: 172...n,\n * // @log: y: 175...n,\n * // @log: z: 1n,\n * // @log: }\n * ```\n *\n * @example\n * ### Bytes to Signature\n *\n * ```ts twoslash\n * // @noErrors\n * import { BlsPoint } from 'ox'\n *\n * const signature = BlsPoint.fromBytes(Bytes.from([172, 175, 255, ...]), 'G2')\n * // @log: {\n * // @log: x: 511...n,\n * // @log: y: 234...n,\n * // @log: z: 1n,\n * // @log: }\n * ```\n *\n * @param bytes - The bytes to convert.\n * @returns The BLS point.\n */\nexport function fromBytes<group extends 'G1' | 'G2'>(\n bytes: Bytes.Bytes,\n group: group,\n): group extends 'G1' ? G1 : G2\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function fromBytes(bytes: Bytes.Bytes): BlsPoint<any> {\n const group = bytes.length === 48 ? bls.G1 : bls.G2\n const point = group.ProjectivePoint.fromHex(bytes)\n return {\n x: point.px,\n y: point.py,\n z: point.pz,\n }\n}\n\nexport declare namespace fromBytes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts {@link ox#Hex.Hex} to a BLS point.\n *\n * @example\n * ### Hex to Public Key\n *\n * ```ts twoslash\n * // @noErrors\n * import { BlsPoint } from 'ox'\n *\n * const publicKey = BlsPoint.fromHex('0xacafff52270773ad1728df2807c0f1b0b271fa6b37dfb8b2f75448573c76c81bcd6790328a60e40ef5a13343b32d9e66', 'G1')\n * // @log: {\n * // @log: x: 172...n,\n * // @log: y: 175...n,\n * // @log: z: 1n,\n * // @log: }\n * ```\n *\n * @example\n * ### Hex to Signature\n *\n * ```ts twoslash\n * // @noErrors\n * import { BlsPoint } from 'ox'\n *\n * const signature = BlsPoint.fromHex(\n * '0xb4698f7611999fba87033b9cf72312c76c683bbc48175e2d4cb275907d6a267ab9840a66e3051e5ed36fd13aa712f9a9024f9fa9b67f716dfb74ae4efb7d9f1b7b43b4679abed6644cf476c12e79f309351ea8452487cd93f66e29e04ebe427c',\n * 'G2',\n * )\n * // @log: {\n * // @log: x: 511...n,\n * // @log: y: 234...n,\n * // @log: z: 1n,\n * // @log: }\n * ```\n *\n * @param bytes - The bytes to convert.\n * @returns The BLS point.\n */\nexport function fromHex<group extends 'G1' | 'G2'>(\n hex: Hex.Hex,\n group: group,\n): group extends 'G1' ? G1 : G2\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function fromHex(hex: Hex.Hex, group: 'G1' | 'G2'): BlsPoint<any> {\n return fromBytes(Hex.toBytes(hex), group)\n}\n\nexport declare namespace fromHex {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Rlp from './Rlp.js'\nimport type { OneOf } from './internal/types.js'\n\n/**\n * Computes Contract Address generated by the [CREATE](https://ethereum.stackexchange.com/questions/68943/create-opcode-what-does-it-really-do/68945#68945) or [CREATE2](https://eips.ethereum.org/EIPS/eip-1014) opcode.\n *\n * @example\n * ### CREATE\n *\n * Computes via the [CREATE](https://ethereum.stackexchange.com/questions/68943/create-opcode-what-does-it-really-do/68945#68945) opcode. Shorthand for {@link ox#ContractAddress.(fromCreate:function)}.\n *\n * ```ts twoslash\n * import { ContractAddress } from 'ox'\n * ContractAddress.from({\n * from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',\n * nonce: 0n,\n * })\n * // @log: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2'\n * ```\n *\n * @example\n * ### CREATE2\n *\n * Computes via the [CREATE2](https://eips.ethereum.org/EIPS/eip-1014) opcode. Shorthand for {@link ox#ContractAddress.(fromCreate2:function)}.\n *\n * ```ts twoslash\n * import { ContractAddress, Hex } from 'ox'\n * ContractAddress.from({\n * from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',\n * bytecode: '0x6394198df16000526103ff60206004601c335afa6040516060f3',\n * salt: Hex.fromString('hello world'),\n * })\n * // @log: '0x59fbB593ABe27Cb193b6ee5C5DC7bbde312290aB'\n * ```\n *\n * @param options - Options.\n * @returns Contract Address.\n */\nexport function from(options: from.Options): Address.Address {\n if (options.salt) return fromCreate2(options)\n return fromCreate(options)\n}\n\nexport declare namespace from {\n export type Options = OneOf<fromCreate.Options | fromCreate2.Options>\n\n type ErrorType =\n | fromCreate.ErrorType\n | fromCreate2.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes contract address via [CREATE](https://ethereum.stackexchange.com/questions/68943/create-opcode-what-does-it-really-do/68945#68945) opcode.\n *\n * @example\n * ```ts twoslash\n * import { ContractAddress } from 'ox'\n *\n * ContractAddress.fromCreate({\n * from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',\n * nonce: 0n,\n * })\n * // @log: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2'\n * ```\n *\n * @param options - Options for retrieving address.\n * @returns Contract Address.\n */\nexport function fromCreate(options: fromCreate.Options): Address.Address {\n const from = Bytes.fromHex(Address.from(options.from))\n\n let nonce = Bytes.fromNumber(options.nonce)\n if (nonce[0] === 0) nonce = new Uint8Array([])\n\n return Address.from(\n `0x${Hash.keccak256(Rlp.fromBytes([from, nonce], { as: 'Hex' })).slice(26)}` as Address.Address,\n )\n}\n\nexport declare namespace fromCreate {\n type Options = {\n /** The address the contract was deployed from. */\n from: Address.Address\n /** The nonce of the transaction which deployed the contract. */\n nonce: bigint\n }\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | Address.from.ErrorType\n | Bytes.fromHex.ErrorType\n | Bytes.fromNumber.ErrorType\n | Rlp.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Computes contract address via [CREATE2](https://eips.ethereum.org/EIPS/eip-1014) opcode.\n *\n * @example\n * ```ts twoslash\n * import { ContractAddress, Hex } from 'ox'\n *\n * ContractAddress.fromCreate2({\n * from: '0x1a1e021a302c237453d3d45c7b82b19ceeb7e2e6',\n * bytecode: '0x6394198df16000526103ff60206004601c335afa6040516060f3',\n * salt: Hex.fromString('hello world'),\n * })\n * // @log: '0x59fbB593ABe27Cb193b6ee5C5DC7bbde312290aB'\n * ```\n *\n * @param options - Options for retrieving address.\n * @returns Contract Address.\n */\nexport function fromCreate2(options: fromCreate2.Options): Address.Address {\n const from = Bytes.fromHex(Address.from(options.from))\n const salt = Bytes.padLeft(\n Bytes.validate(options.salt) ? options.salt : Bytes.fromHex(options.salt),\n 32,\n )\n\n const bytecodeHash = (() => {\n if ('bytecodeHash' in options) {\n if (Bytes.validate(options.bytecodeHash)) return options.bytecodeHash\n return Bytes.fromHex(options.bytecodeHash)\n }\n return Hash.keccak256(options.bytecode, { as: 'Bytes' })\n })()\n\n return Address.from(\n Hex.slice(\n Hash.keccak256(\n Bytes.concat(Bytes.fromHex('0xff'), from, salt, bytecodeHash),\n { as: 'Hex' },\n ),\n 12,\n ),\n )\n}\n\nexport declare namespace fromCreate2 {\n type Options =\n | {\n bytecode: Bytes.Bytes | Hex.Hex\n from: Address.Address\n salt: Bytes.Bytes | Hex.Hex\n }\n | {\n bytecodeHash: Bytes.Bytes | Hex.Hex\n from: Address.Address\n salt: Bytes.Bytes | Hex.Hex\n }\n\n type ErrorType =\n | Address.from.ErrorType\n | Bytes.concat.ErrorType\n | Bytes.validate.ErrorType\n | Bytes.padLeft.ErrorType\n | Hash.keccak256.ErrorType\n | Hex.slice.ErrorType\n | Bytes.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n", "import { ens_normalize } from '@adraffy/ens-normalize'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as internal from './internal/ens.js'\n\n/**\n * Hashes ENS label.\n *\n * Since ENS labels prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS labels](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `labelhash`. You can use the built-in {@link ox#Ens.(normalize:function)} function for this.\n *\n * @example\n * ```ts twoslash\n * import { Ens } from 'ox'\n * Ens.labelhash('eth')\n * '0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0'\n * ```\n *\n * @param label - ENS label.\n * @returns ENS labelhash.\n */\nexport function labelhash(label: string) {\n const result = new Uint8Array(32).fill(0)\n if (!label) return Hex.fromBytes(result)\n return (\n internal.unwrapLabelhash(label) || Hash.keccak256(Hex.fromString(label))\n )\n}\n\nexport declare namespace labelhash {\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | internal.unwrapLabelhash.ErrorType\n | Hash.keccak256.ErrorType\n | Hex.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Hashes ENS name.\n *\n * Since ENS names prohibit certain forbidden characters (e.g. underscore) and have other validation rules, you likely want to [normalize ENS names](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) with [UTS-46 normalization](https://unicode.org/reports/tr46) before passing them to `namehash`. You can use the built-in {@link ox#Ens.(normalize:function)} function for this.\n *\n * @example\n * ```ts twoslash\n * import { Ens } from 'ox'\n * Ens.namehash('wevm.eth')\n * // @log: '0xf246651c1b9a6b141d19c2604e9a58f567973833990f830d882534a747801359'\n * ```\n *\n * @param name - ENS name.\n * @returns ENS namehash.\n */\nexport function namehash(name: string) {\n let result = new Uint8Array(32).fill(0)\n if (!name) return Hex.fromBytes(result)\n\n const labels = name.split('.')\n // Iterate in reverse order building up hash\n for (let i = labels.length - 1; i >= 0; i -= 1) {\n const hashFromEncodedLabel = internal.unwrapLabelhash(labels[i]!)\n const hashed = hashFromEncodedLabel\n ? Bytes.fromHex(hashFromEncodedLabel)\n : Hash.keccak256(Bytes.fromString(labels[i]!), { as: 'Bytes' })\n result = Hash.keccak256(Bytes.concat(result, hashed), { as: 'Bytes' })\n }\n\n return Hex.fromBytes(result)\n}\n\nexport declare namespace namehash {\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | internal.unwrapLabelhash.ErrorType\n | Bytes.fromHex.ErrorType\n | Hash.keccak256.ErrorType\n | Bytes.fromString.ErrorType\n | Bytes.concat.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Normalizes ENS name according to [ENSIP-15](https://github.com/ensdomains/docs/blob/9edf9443de4333a0ea7ec658a870672d5d180d53/ens-improvement-proposals/ensip-15-normalization-standard.md).\n *\n * For more info see [ENS documentation](https://docs.ens.domains/contract-api-reference/name-processing#normalising-names) on name processing.\n *\n * @example\n * ```ts twoslash\n * import { Ens } from 'ox'\n * Ens.normalize('wevm.eth')\n * // @log: 'wevm.eth'\n * ```\n *\n * @param name - ENS name.\n * @returns Normalized ENS name.\n */\nexport function normalize(name: string): string {\n return ens_normalize(name)\n}\n\nexport declare namespace normalize {\n type ErrorType = Errors.GlobalErrorType\n}\n", "// created 2024-09-13T06:42:45.675Z\n// compressed base64-encoded blob for include-ens data\n// source: https://github.com/adraffy/ens-normalize.js/blob/main/src/make.js\n// see: https://github.com/adraffy/ens-normalize.js#security\n// SHA-256: 0ca3917bee1eee342d64c631cb1dbaac37b167d848887d59f6d68328dc99ac09\nvar COMPRESSED$1 = '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';\nconst FENCED = new Map([[8217,\"apostrophe\"],[8260,\"fraction slash\"],[12539,\"middle dot\"]]);\nconst NSM_MAX = 4;\n\nfunction decode_arithmetic(bytes) {\r\n\tlet pos = 0;\r\n\tfunction u16() { return (bytes[pos++] << 8) | bytes[pos++]; }\r\n\t\r\n\t// decode the frequency table\r\n\tlet symbol_count = u16();\r\n\tlet total = 1;\r\n\tlet acc = [0, 1]; // first symbol has frequency 1\r\n\tfor (let i = 1; i < symbol_count; i++) {\r\n\t\tacc.push(total += u16());\r\n\t}\r\n\r\n\t// skip the sized-payload that the last 3 symbols index into\r\n\tlet skip = u16();\r\n\tlet pos_payload = pos;\r\n\tpos += skip;\r\n\r\n\tlet read_width = 0;\r\n\tlet read_buffer = 0; \r\n\tfunction read_bit() {\r\n\t\tif (read_width == 0) {\r\n\t\t\t// this will read beyond end of buffer\r\n\t\t\t// but (undefined|0) => zero pad\r\n\t\t\tread_buffer = (read_buffer << 8) | bytes[pos++];\r\n\t\t\tread_width = 8;\r\n\t\t}\r\n\t\treturn (read_buffer >> --read_width) & 1;\r\n\t}\r\n\r\n\tconst N = 31;\r\n\tconst FULL = 2**N;\r\n\tconst HALF = FULL >>> 1;\r\n\tconst QRTR = HALF >> 1;\r\n\tconst MASK = FULL - 1;\r\n\r\n\t// fill register\r\n\tlet register = 0;\r\n\tfor (let i = 0; i < N; i++) register = (register << 1) | read_bit();\r\n\r\n\tlet symbols = [];\r\n\tlet low = 0;\r\n\tlet range = FULL; // treat like a float\r\n\twhile (true) {\r\n\t\tlet value = Math.floor((((register - low + 1) * total) - 1) / range);\r\n\t\tlet start = 0;\r\n\t\tlet end = symbol_count;\r\n\t\twhile (end - start > 1) { // binary search\r\n\t\t\tlet mid = (start + end) >>> 1;\r\n\t\t\tif (value < acc[mid]) {\r\n\t\t\t\tend = mid;\r\n\t\t\t} else {\r\n\t\t\t\tstart = mid;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (start == 0) break; // first symbol is end mark\r\n\t\tsymbols.push(start);\r\n\t\tlet a = low + Math.floor(range * acc[start] / total);\r\n\t\tlet b = low + Math.floor(range * acc[start+1] / total) - 1;\r\n\t\twhile (((a ^ b) & HALF) == 0) {\r\n\t\t\tregister = (register << 1) & MASK | read_bit();\r\n\t\t\ta = (a << 1) & MASK;\r\n\t\t\tb = (b << 1) & MASK | 1;\r\n\t\t}\r\n\t\twhile (a & ~b & QRTR) {\r\n\t\t\tregister = (register & HALF) | ((register << 1) & (MASK >>> 1)) | read_bit();\r\n\t\t\ta = (a << 1) ^ HALF;\r\n\t\t\tb = ((b ^ HALF) << 1) | HALF | 1;\r\n\t\t}\r\n\t\tlow = a;\r\n\t\trange = 1 + b - a;\r\n\t}\r\n\tlet offset = symbol_count - 4;\r\n\treturn symbols.map(x => { // index into payload\r\n\t\tswitch (x - offset) {\r\n\t\t\tcase 3: return offset + 0x10100 + ((bytes[pos_payload++] << 16) | (bytes[pos_payload++] << 8) | bytes[pos_payload++]);\r\n\t\t\tcase 2: return offset + 0x100 + ((bytes[pos_payload++] << 8) | bytes[pos_payload++]);\r\n\t\t\tcase 1: return offset + bytes[pos_payload++];\r\n\t\t\tdefault: return x - 1;\r\n\t\t}\r\n\t});\r\n}\t\r\n\r\n// returns an iterator which returns the next symbol\r\nfunction read_payload(v) {\r\n\tlet pos = 0;\r\n\treturn () => v[pos++];\r\n}\r\nfunction read_compressed_payload(s) {\r\n\treturn read_payload(decode_arithmetic(unsafe_atob(s)));\r\n}\r\n\r\n// unsafe in the sense:\r\n// expected well-formed Base64 w/o padding \r\n// 20220922: added for https://github.com/adraffy/ens-normalize.js/issues/4\r\nfunction unsafe_atob(s) {\r\n\tlet lookup = [];\r\n\t[...'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'].forEach((c, i) => lookup[c.charCodeAt(0)] = i);\r\n\tlet n = s.length;\r\n\tlet ret = new Uint8Array((6 * n) >> 3);\r\n\tfor (let i = 0, pos = 0, width = 0, carry = 0; i < n; i++) {\r\n\t\tcarry = (carry << 6) | lookup[s.charCodeAt(i)];\r\n\t\twidth += 6;\r\n\t\tif (width >= 8) {\r\n\t\t\tret[pos++] = (carry >> (width -= 8));\r\n\t\t}\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\n// eg. [0,1,2,3...] => [0,-1,1,-2,...]\r\nfunction signed(i) { \r\n\treturn (i & 1) ? (~i >> 1) : (i >> 1);\r\n}\r\n\r\nfunction read_deltas(n, next) {\r\n\tlet v = Array(n);\r\n\tfor (let i = 0, x = 0; i < n; i++) v[i] = x += signed(next());\r\n\treturn v;\r\n}\r\n\r\n// [123][5] => [0 3] [1 1] [0 0]\r\nfunction read_sorted(next, prev = 0) {\r\n\tlet ret = [];\r\n\twhile (true) {\r\n\t\tlet x = next();\r\n\t\tlet n = next();\r\n\t\tif (!n) break;\r\n\t\tprev += x;\r\n\t\tfor (let i = 0; i < n; i++) {\r\n\t\t\tret.push(prev + i);\r\n\t\t}\r\n\t\tprev += n + 1;\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction read_sorted_arrays(next) {\r\n\treturn read_array_while(() => { \r\n\t\tlet v = read_sorted(next);\r\n\t\tif (v.length) return v;\r\n\t});\r\n}\r\n\r\n// returns map of x => ys\r\nfunction read_mapped(next) {\r\n\tlet ret = [];\r\n\twhile (true) {\r\n\t\tlet w = next();\r\n\t\tif (w == 0) break;\r\n\t\tret.push(read_linear_table(w, next));\r\n\t}\r\n\twhile (true) {\r\n\t\tlet w = next() - 1;\r\n\t\tif (w < 0) break;\r\n\t\tret.push(read_replacement_table(w, next));\r\n\t}\r\n\treturn ret.flat();\r\n}\r\n\r\n// read until next is falsy\r\n// return array of read values\r\nfunction read_array_while(next) {\r\n\tlet v = [];\r\n\twhile (true) {\r\n\t\tlet x = next(v.length);\r\n\t\tif (!x) break;\r\n\t\tv.push(x);\r\n\t}\r\n\treturn v;\r\n}\r\n\r\n// read w columns of length n\r\n// return as n rows of length w\r\nfunction read_transposed(n, w, next) {\r\n\tlet m = Array(n).fill().map(() => []);\r\n\tfor (let i = 0; i < w; i++) {\r\n\t\tread_deltas(n, next).forEach((x, j) => m[j].push(x));\r\n\t}\r\n\treturn m;\r\n}\r\n \r\n// returns [[x, ys], [x+dx, ys+dy], [x+2*dx, ys+2*dy], ...]\r\n// where dx/dy = steps, n = run size, w = length of y\r\nfunction read_linear_table(w, next) {\r\n\tlet dx = 1 + next();\r\n\tlet dy = next();\r\n\tlet vN = read_array_while(next);\r\n\tlet m = read_transposed(vN.length, 1+w, next);\r\n\treturn m.flatMap((v, i) => {\r\n\t\tlet [x, ...ys] = v;\r\n\t\treturn Array(vN[i]).fill().map((_, j) => {\r\n\t\t\tlet j_dy = j * dy;\r\n\t\t\treturn [x + j * dx, ys.map(y => y + j_dy)];\r\n\t\t});\r\n\t});\r\n}\r\n\r\n// return [[x, ys...], ...]\r\n// where w = length of y\r\nfunction read_replacement_table(w, next) { \r\n\tlet n = 1 + next();\r\n\tlet m = read_transposed(n, 1+w, next);\r\n\treturn m.map(v => [v[0], v.slice(1)]);\r\n}\r\n\r\n\r\nfunction read_trie(next) {\r\n\tlet ret = [];\r\n\tlet sorted = read_sorted(next); \r\n\texpand(decode([]), []);\r\n\treturn ret; // not sorted\r\n\tfunction decode(Q) { // characters that lead into this node\r\n\t\tlet S = next(); // state: valid, save, check\r\n\t\tlet B = read_array_while(() => { // buckets leading to new nodes\r\n\t\t\tlet cps = read_sorted(next).map(i => sorted[i]);\r\n\t\t\tif (cps.length) return decode(cps);\r\n\t\t});\r\n\t\treturn {S, B, Q};\r\n\t}\r\n\tfunction expand({S, B}, cps, saved) {\r\n\t\tif (S & 4 && saved === cps[cps.length-1]) return;\r\n\t\tif (S & 2) saved = cps[cps.length-1];\r\n\t\tif (S & 1) ret.push(cps); \r\n\t\tfor (let br of B) {\r\n\t\t\tfor (let cp of br.Q) {\r\n\t\t\t\texpand(br, [...cps, cp], saved);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\n\nfunction hex_cp(cp) {\r\n\treturn cp.toString(16).toUpperCase().padStart(2, '0');\r\n}\r\n\r\nfunction quote_cp(cp) {\r\n\treturn `{${hex_cp(cp)}}`; // raffy convention: like \"\\u{X}\" w/o the \"\\u\"\r\n}\r\n\r\n/*\r\nexport function explode_cp(s) {\r\n\treturn [...s].map(c => c.codePointAt(0));\r\n}\r\n*/\r\nfunction explode_cp(s) { // this is about 2x faster\r\n\tlet cps = [];\r\n\tfor (let pos = 0, len = s.length; pos < len; ) {\r\n\t\tlet cp = s.codePointAt(pos);\r\n\t\tpos += cp < 0x10000 ? 1 : 2;\r\n\t\tcps.push(cp);\r\n\t}\r\n\treturn cps;\r\n}\r\n\r\nfunction str_from_cps(cps) {\r\n\tconst chunk = 4096;\r\n\tlet len = cps.length;\r\n\tif (len < chunk) return String.fromCodePoint(...cps);\r\n\tlet buf = [];\r\n\tfor (let i = 0; i < len; ) {\r\n\t\tbuf.push(String.fromCodePoint(...cps.slice(i, i += chunk)));\r\n\t}\r\n\treturn buf.join('');\r\n}\r\n\r\nfunction compare_arrays(a, b) {\r\n\tlet n = a.length;\r\n\tlet c = n - b.length;\r\n\tfor (let i = 0; c == 0 && i < n; i++) c = a[i] - b[i];\r\n\treturn c;\r\n}\r\n\r\nfunction array_replace(v, a, b) {\r\n\tlet prev = 0;\r\n\twhile (true) {\r\n\t\tlet next = v.indexOf(a, prev);\r\n\t\tif (next < 0) break;\r\n\t\tv[next] = b; \r\n\t\tprev = next + 1;\r\n\t}\r\n}\n\n// created 2024-09-13T06:42:45.675Z\n// compressed base64-encoded blob for include-nf data\n// source: https://github.com/adraffy/ens-normalize.js/blob/main/src/make.js\n// see: https://github.com/adraffy/ens-normalize.js#security\n// SHA-256: a79d5f9b1879a7b416aa659f4a3d788f80a8cf5f0ab955a456592c02f556a28c\nvar COMPRESSED = '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';\n\n// https://unicode.org/reports/tr15/\r\n// for reference implementation\r\n// see: /derive/nf.js\r\n\r\n\r\n// algorithmic hangul\r\n// https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf (page 144)\r\nconst S0 = 0xAC00;\r\nconst L0 = 0x1100;\r\nconst V0 = 0x1161;\r\nconst T0 = 0x11A7;\r\nconst L_COUNT = 19;\r\nconst V_COUNT = 21;\r\nconst T_COUNT = 28;\r\nconst N_COUNT = V_COUNT * T_COUNT;\r\nconst S_COUNT = L_COUNT * N_COUNT;\r\nconst S1 = S0 + S_COUNT;\r\nconst L1 = L0 + L_COUNT;\r\nconst V1 = V0 + V_COUNT;\r\nconst T1 = T0 + T_COUNT;\r\n\r\nfunction unpack_cc(packed) {\r\n\treturn (packed >> 24) & 0xFF;\r\n}\r\nfunction unpack_cp(packed) {\r\n\treturn packed & 0xFFFFFF;\r\n}\r\n\r\nlet SHIFTED_RANK, EXCLUSIONS, DECOMP, RECOMP;\r\n\r\n// export function nf_deinit() {\r\n// \tif (!SHIFTED_RANK) return;\r\n// \tSHIFTED_RANK = EXCLUSIONS = DECOMP = RECOMP = undefined;\r\n// }\r\n\r\nfunction init$1() {\r\n\t//console.time('nf');\r\n\tlet r = read_compressed_payload(COMPRESSED);\r\n\tSHIFTED_RANK = new Map(read_sorted_arrays(r).flatMap((v, i) => v.map(x => [x, (i+1) << 24]))); // pre-shifted\r\n\tEXCLUSIONS = new Set(read_sorted(r));\r\n\tDECOMP = new Map();\r\n\tRECOMP = new Map();\r\n\tfor (let [cp, cps] of read_mapped(r)) {\r\n\t\tif (!EXCLUSIONS.has(cp) && cps.length == 2) {\r\n\t\t\tlet [a, b] = cps;\r\n\t\t\tlet bucket = RECOMP.get(a);\r\n\t\t\tif (!bucket) {\r\n\t\t\t\tbucket = new Map();\r\n\t\t\t\tRECOMP.set(a, bucket);\r\n\t\t\t}\r\n\t\t\tbucket.set(b, cp);\r\n\t\t}\r\n\t\tDECOMP.set(cp, cps.reverse()); // stored reversed\r\n\t}\r\n\t//console.timeEnd('nf');\r\n\t// 20230905: 11ms\r\n}\r\n\r\nfunction is_hangul(cp) {\r\n\treturn cp >= S0 && cp < S1;\r\n}\r\n\r\nfunction compose_pair(a, b) {\r\n\tif (a >= L0 && a < L1 && b >= V0 && b < V1) {\r\n\t\treturn S0 + (a - L0) * N_COUNT + (b - V0) * T_COUNT;\r\n\t} else if (is_hangul(a) && b > T0 && b < T1 && (a - S0) % T_COUNT == 0) {\r\n\t\treturn a + (b - T0);\r\n\t} else {\r\n\t\tlet recomp = RECOMP.get(a);\r\n\t\tif (recomp) {\r\n\t\t\trecomp = recomp.get(b);\r\n\t\t\tif (recomp) {\r\n\t\t\t\treturn recomp;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t}\r\n}\r\n\r\nfunction decomposed(cps) {\r\n\tif (!SHIFTED_RANK) init$1();\r\n\tlet ret = [];\r\n\tlet buf = [];\r\n\tlet check_order = false;\r\n\tfunction add(cp) {\r\n\t\tlet cc = SHIFTED_RANK.get(cp);\r\n\t\tif (cc) {\r\n\t\t\tcheck_order = true;\r\n\t\t\tcp |= cc;\r\n\t\t}\r\n\t\tret.push(cp);\r\n\t}\r\n\tfor (let cp of cps) {\r\n\t\twhile (true) {\r\n\t\t\tif (cp < 0x80) {\r\n\t\t\t\tret.push(cp);\r\n\t\t\t} else if (is_hangul(cp)) {\r\n\t\t\t\tlet s_index = cp - S0;\r\n\t\t\t\tlet l_index = s_index / N_COUNT | 0;\r\n\t\t\t\tlet v_index = (s_index % N_COUNT) / T_COUNT | 0;\r\n\t\t\t\tlet t_index = s_index % T_COUNT;\r\n\t\t\t\tadd(L0 + l_index);\r\n\t\t\t\tadd(V0 + v_index);\r\n\t\t\t\tif (t_index > 0) add(T0 + t_index);\r\n\t\t\t} else {\r\n\t\t\t\tlet mapped = DECOMP.get(cp);\r\n\t\t\t\tif (mapped) {\r\n\t\t\t\t\tbuf.push(...mapped);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tadd(cp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!buf.length) break;\r\n\t\t\tcp = buf.pop();\r\n\t\t}\r\n\t}\r\n\tif (check_order && ret.length > 1) {\r\n\t\tlet prev_cc = unpack_cc(ret[0]);\r\n\t\tfor (let i = 1; i < ret.length; i++) {\r\n\t\t\tlet cc = unpack_cc(ret[i]);\r\n\t\t\tif (cc == 0 || prev_cc <= cc) {\r\n\t\t\t\tprev_cc = cc;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tlet j = i-1;\r\n\t\t\twhile (true) {\r\n\t\t\t\tlet tmp = ret[j+1];\r\n\t\t\t\tret[j+1] = ret[j];\r\n\t\t\t\tret[j] = tmp;\r\n\t\t\t\tif (!j) break;\r\n\t\t\t\tprev_cc = unpack_cc(ret[--j]);\r\n\t\t\t\tif (prev_cc <= cc) break;\r\n\t\t\t}\r\n\t\t\tprev_cc = unpack_cc(ret[i]);\r\n\t\t}\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction composed_from_decomposed(v) {\r\n\tlet ret = [];\r\n\tlet stack = [];\r\n\tlet prev_cp = -1;\r\n\tlet prev_cc = 0;\r\n\tfor (let packed of v) {\r\n\t\tlet cc = unpack_cc(packed);\r\n\t\tlet cp = unpack_cp(packed);\r\n\t\tif (prev_cp == -1) {\r\n\t\t\tif (cc == 0) {\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tret.push(cp);\r\n\t\t\t}\r\n\t\t} else if (prev_cc > 0 && prev_cc >= cc) {\r\n\t\t\tif (cc == 0) {\r\n\t\t\t\tret.push(prev_cp, ...stack);\r\n\t\t\t\tstack.length = 0;\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tstack.push(cp);\r\n\t\t\t}\r\n\t\t\tprev_cc = cc;\r\n\t\t} else {\r\n\t\t\tlet composed = compose_pair(prev_cp, cp);\r\n\t\t\tif (composed >= 0) {\r\n\t\t\t\tprev_cp = composed;\r\n\t\t\t} else if (prev_cc == 0 && cc == 0) {\r\n\t\t\t\tret.push(prev_cp);\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tstack.push(cp);\r\n\t\t\t\tprev_cc = cc;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (prev_cp >= 0) {\r\n\t\tret.push(prev_cp, ...stack);\t\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\n// note: cps can be iterable\r\nfunction nfd(cps) {\r\n\treturn decomposed(cps).map(unpack_cp);\r\n}\r\nfunction nfc(cps) {\r\n\treturn composed_from_decomposed(decomposed(cps));\r\n}\n\nconst HYPHEN = 0x2D;\r\nconst STOP = 0x2E;\r\nconst STOP_CH = '.';\r\nconst FE0F = 0xFE0F;\r\nconst UNIQUE_PH = 1;\r\n\r\n// 20230913: replace [...v] with Array_from(v) to avoid large spreads\r\nconst Array_from = x => Array.from(x); // Array.from.bind(Array);\r\n\r\nfunction group_has_cp(g, cp) {\r\n\t// 20230913: keep primary and secondary distinct instead of creating valid union\r\n\treturn g.P.has(cp) || g.Q.has(cp);\r\n}\r\n\r\nclass Emoji extends Array {\r\n\tget is_emoji() { return true; } // free tagging system\r\n}\r\n\r\nlet MAPPED, IGNORED, CM, NSM, ESCAPE, NFC_CHECK, GROUPS, WHOLE_VALID, WHOLE_MAP, VALID, EMOJI_LIST, EMOJI_ROOT;\r\n\r\n// export function ens_deinit() {\r\n// \tnf_deinit();\r\n// \tif (!MAPPED) return;\r\n// \tMAPPED = IGNORED = CM = NSM = ESCAPE = NFC_CHECK = GROUPS = WHOLE_VALID = WHOLE_MAP = VALID = EMOJI_LIST = EMOJI_ROOT = undefined;\r\n// }\r\n\r\nfunction init() {\r\n\tif (MAPPED) return;\r\n\t\r\n\tlet r = read_compressed_payload(COMPRESSED$1);\r\n\tconst read_sorted_array = () => read_sorted(r);\r\n\tconst read_sorted_set = () => new Set(read_sorted_array());\r\n\tconst set_add_many = (set, v) => v.forEach(x => set.add(x));\r\n\r\n\tMAPPED = new Map(read_mapped(r)); \r\n\tIGNORED = read_sorted_set(); // ignored characters are not valid, so just read raw codepoints\r\n\r\n\t/*\r\n\t// direct include from payload is smaller than the decompression code\r\n\tconst FENCED = new Map(read_array_while(() => {\r\n\t\tlet cp = r();\r\n\t\tif (cp) return [cp, read_str(r())];\r\n\t}));\r\n\t*/\r\n\t// 20230217: we still need all CM for proper error formatting\r\n\t// but norm only needs NSM subset that are potentially-valid\r\n\tCM = read_sorted_array();\r\n\tNSM = new Set(read_sorted_array().map(i => CM[i]));\r\n\tCM = new Set(CM);\r\n\t\r\n\tESCAPE = read_sorted_set(); // characters that should not be printed\r\n\tNFC_CHECK = read_sorted_set(); // only needed to illustrate ens_tokenize() transformations\r\n\r\n\tlet chunks = read_sorted_arrays(r);\r\n\tlet unrestricted = r();\r\n\t//const read_chunked = () => new Set(read_sorted_array().flatMap(i => chunks[i]).concat(read_sorted_array()));\r\n\tconst read_chunked = () => {\r\n\t\t// 20230921: build set in parts, 2x faster\r\n\t\tlet set = new Set();\r\n\t\tread_sorted_array().forEach(i => set_add_many(set, chunks[i]));\r\n\t\tset_add_many(set, read_sorted_array());\r\n\t\treturn set; \r\n\t};\r\n\tGROUPS = read_array_while(i => {\r\n\t\t// minifier property mangling seems unsafe\r\n\t\t// so these are manually renamed to single chars\r\n\t\tlet N = read_array_while(r).map(x => x+0x60);\r\n\t\tif (N.length) {\r\n\t\t\tlet R = i >= unrestricted; // unrestricted then restricted\r\n\t\t\tN[0] -= 32; // capitalize\r\n\t\t\tN = str_from_cps(N);\r\n\t\t\tif (R) N=`Restricted[${N}]`;\r\n\t\t\tlet P = read_chunked(); // primary\r\n\t\t\tlet Q = read_chunked(); // secondary\r\n\t\t\tlet M = !r(); // not-whitelisted, check for NSM\r\n\t\t\t// *** this code currently isn't needed ***\r\n\t\t\t/*\r\n\t\t\tlet V = [...P, ...Q].sort((a, b) => a-b); // derive: sorted valid\r\n\t\t\tlet M = r()-1; // number of combining mark\r\n\t\t\tif (M < 0) { // whitelisted\r\n\t\t\t\tM = new Map(read_array_while(() => {\r\n\t\t\t\t\tlet i = r();\r\n\t\t\t\t\tif (i) return [V[i-1], read_array_while(() => {\r\n\t\t\t\t\t\tlet v = read_array_while(r);\r\n\t\t\t\t\t\tif (v.length) return v.map(x => x-1);\r\n\t\t\t\t\t})];\r\n\t\t\t\t}));\r\n\t\t\t}*/\r\n\t\t\treturn {N, P, Q, M, R};\r\n\t\t}\r\n\t});\r\n\r\n\t// decode compressed wholes\r\n\tWHOLE_VALID = read_sorted_set();\r\n\tWHOLE_MAP = new Map();\r\n\tlet wholes = read_sorted_array().concat(Array_from(WHOLE_VALID)).sort((a, b) => a-b); // must be sorted\r\n\twholes.forEach((cp, i) => {\r\n\t\tlet d = r(); \r\n\t\tlet w = wholes[i] = d ? wholes[i-d] : {V: [], M: new Map()};\r\n\t\tw.V.push(cp); // add to member set\r\n\t\tif (!WHOLE_VALID.has(cp)) {\r\n\t\t\tWHOLE_MAP.set(cp, w); // register with whole map\r\n\t\t}\r\n\t});\r\n\r\n\t// compute confusable-extent complements\r\n\t// usage: WHOLE_MAP.get(cp).M.get(cp) = complement set\r\n\tfor (let {V, M} of new Set(WHOLE_MAP.values())) {\r\n\t\t// connect all groups that have each whole character\r\n\t\tlet recs = [];\r\n\t\tfor (let cp of V) {\r\n\t\t\tlet gs = GROUPS.filter(g => group_has_cp(g, cp));\r\n\t\t\tlet rec = recs.find(({G}) => gs.some(g => G.has(g)));\r\n\t\t\tif (!rec) {\r\n\t\t\t\trec = {G: new Set(), V: []};\r\n\t\t\t\trecs.push(rec);\r\n\t\t\t}\r\n\t\t\trec.V.push(cp);\r\n\t\t\tset_add_many(rec.G, gs);\r\n\t\t}\r\n\t\t// per character cache groups which are not a member of the extent\r\n\t\tlet union = recs.flatMap(x => Array_from(x.G)); // all of the groups used by this whole\r\n\t\tfor (let {G, V} of recs) {\r\n\t\t\tlet complement = new Set(union.filter(g => !G.has(g))); // groups not covered by the extent\r\n\t\t\tfor (let cp of V) {\r\n\t\t\t\tM.set(cp, complement); // this is the same reference\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// compute valid set\r\n\t// 20230924: VALID was union but can be re-used\r\n\tVALID = new Set(); // exists in 1+ groups\r\n\tlet multi = new Set(); // exists in 2+ groups\r\n\tconst add_to_union = cp => VALID.has(cp) ? multi.add(cp) : VALID.add(cp);\r\n\tfor (let g of GROUPS) {\r\n\t\tfor (let cp of g.P) add_to_union(cp);\r\n\t\tfor (let cp of g.Q) add_to_union(cp);\r\n\t}\r\n\t// dual purpose WHOLE_MAP: return placeholder if unique non-confusable\r\n\tfor (let cp of VALID) {\r\n\t\tif (!WHOLE_MAP.has(cp) && !multi.has(cp)) {\r\n\t\t\tWHOLE_MAP.set(cp, UNIQUE_PH);\r\n\t\t}\r\n\t}\r\n\t// add all decomposed parts\r\n\t// see derive: \"Valid is Closed (via Brute-force)\"\r\n\tset_add_many(VALID, nfd(VALID));\r\n\t\r\n\t// decode emoji\r\n\t// 20230719: emoji are now fully-expanded to avoid quirk logic \r\n\tEMOJI_LIST = read_trie(r).map(v => Emoji.from(v)).sort(compare_arrays);\r\n\tEMOJI_ROOT = new Map(); // this has approx 7K nodes (2+ per emoji)\r\n\tfor (let cps of EMOJI_LIST) {\r\n\t\t// 20230719: change to *slightly* stricter algorithm which disallows \r\n\t\t// insertion of misplaced FE0F in emoji sequences (matching ENSIP-15)\r\n\t\t// example: beautified [A B] (eg. flag emoji) \r\n\t\t// before: allow: [A FE0F B], error: [A FE0F FE0F B] \r\n\t\t// after: error: both\r\n\t\t// note: this code now matches ENSNormalize.{cs,java} logic\r\n\t\tlet prev = [EMOJI_ROOT];\r\n\t\tfor (let cp of cps) {\r\n\t\t\tlet next = prev.map(node => {\r\n\t\t\t\tlet child = node.get(cp);\r\n\t\t\t\tif (!child) {\r\n\t\t\t\t\t// should this be object? \r\n\t\t\t\t\t// (most have 1-2 items, few have many)\r\n\t\t\t\t\t// 20230719: no, v8 default map is 4?\r\n\t\t\t\t\tchild = new Map();\r\n\t\t\t\t\tnode.set(cp, child);\r\n\t\t\t\t}\r\n\t\t\t\treturn child;\r\n\t\t\t});\r\n\t\t\tif (cp === FE0F) {\r\n\t\t\t\tprev.push(...next); // less than 20 elements\r\n\t\t\t} else {\r\n\t\t\t\tprev = next;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (let x of prev) {\r\n\t\t\tx.V = cps;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// if escaped: {HEX}\r\n// else: \"x\" {HEX}\r\nfunction quoted_cp(cp) {\r\n\treturn (should_escape(cp) ? '' : `${bidi_qq(safe_str_from_cps([cp]))} `) + quote_cp(cp);\r\n}\r\n\r\n// 20230211: some messages can be mixed-directional and result in spillover\r\n// use 200E after a quoted string to force the remainder of a string from \r\n// acquring the direction of the quote\r\n// https://www.w3.org/International/questions/qa-bidi-unicode-controls#exceptions\r\nfunction bidi_qq(s) {\r\n\treturn `\"${s}\"\\u200E`; // strong LTR\r\n}\r\n\r\nfunction check_label_extension(cps) {\r\n\tif (cps.length >= 4 && cps[2] == HYPHEN && cps[3] == HYPHEN) {\r\n\t\tthrow new Error(`invalid label extension: \"${str_from_cps(cps.slice(0, 4))}\"`); // this can only be ascii so cant be bidi\r\n\t}\r\n}\r\nfunction check_leading_underscore(cps) {\r\n\tconst UNDERSCORE = 0x5F;\r\n\tfor (let i = cps.lastIndexOf(UNDERSCORE); i > 0; ) {\r\n\t\tif (cps[--i] !== UNDERSCORE) {\r\n\t\t\tthrow new Error('underscore allowed only at start');\r\n\t\t}\r\n\t}\r\n}\r\n// check that a fenced cp is not leading, trailing, or touching another fenced cp\r\nfunction check_fenced(cps) {\r\n\tlet cp = cps[0];\r\n\tlet prev = FENCED.get(cp);\r\n\tif (prev) throw error_placement(`leading ${prev}`);\r\n\tlet n = cps.length;\r\n\tlet last = -1; // prevents trailing from throwing\r\n\tfor (let i = 1; i < n; i++) {\r\n\t\tcp = cps[i];\r\n\t\tlet match = FENCED.get(cp);\r\n\t\tif (match) {\r\n\t\t\t// since cps[0] isn't fenced, cps[1] cannot throw\r\n\t\t\tif (last == i) throw error_placement(`${prev} + ${match}`);\r\n\t\t\tlast = i + 1;\r\n\t\t\tprev = match;\r\n\t\t}\r\n\t}\r\n\tif (last == n) throw error_placement(`trailing ${prev}`);\r\n}\r\n\r\n// create a safe to print string \r\n// invisibles are escaped\r\n// leading cm uses placeholder\r\n// if cps exceed max, middle truncate with ellipsis\r\n// quoter(cp) => string, eg. 3000 => \"{3000}\"\r\n// note: in html, you'd call this function then replace [<>&] with entities\r\nfunction safe_str_from_cps(cps, max = Infinity, quoter = quote_cp) {\r\n\t//if (Number.isInteger(cps)) cps = [cps];\r\n\t//if (!Array.isArray(cps)) throw new TypeError(`expected codepoints`);\r\n\tlet buf = [];\r\n\tif (is_combining_mark(cps[0])) buf.push('◌');\r\n\tif (cps.length > max) {\r\n\t\tmax >>= 1;\r\n\t\tcps = [...cps.slice(0, max), 0x2026, ...cps.slice(-max)];\r\n\t}\r\n\tlet prev = 0;\r\n\tlet n = cps.length;\r\n\tfor (let i = 0; i < n; i++) {\r\n\t\tlet cp = cps[i];\r\n\t\tif (should_escape(cp)) {\r\n\t\t\tbuf.push(str_from_cps(cps.slice(prev, i)));\r\n\t\t\tbuf.push(quoter(cp));\r\n\t\t\tprev = i + 1;\r\n\t\t}\r\n\t}\r\n\tbuf.push(str_from_cps(cps.slice(prev, n)));\r\n\treturn buf.join('');\r\n}\r\n\r\n// note: set(s) cannot be exposed because they can be modified\r\n// note: Object.freeze() doesn't work\r\nfunction is_combining_mark(cp, only_nsm) { // 20240127: add extra argument\r\n\tinit();\r\n\treturn only_nsm ? NSM.has(cp) : CM.has(cp);\r\n}\r\nfunction should_escape(cp) {\r\n\tinit();\r\n\treturn ESCAPE.has(cp);\r\n}\r\n\r\n// return all supported emoji as fully-qualified emoji \r\n// ordered by length then lexicographic \r\nfunction ens_emoji() {\r\n\tinit();\r\n\treturn EMOJI_LIST.map(x => x.slice()); // emoji are exposed so copy\r\n}\r\n\r\nfunction ens_normalize_fragment(frag, decompose) {\r\n\tinit();\r\n\tlet nf = decompose ? nfd : nfc;\r\n\treturn frag.split(STOP_CH).map(label => str_from_cps(tokens_from_str(explode_cp(label), nf, filter_fe0f).flat())).join(STOP_CH);\r\n}\r\n\r\nfunction ens_normalize(name) {\r\n\treturn flatten(split(name, nfc, filter_fe0f));\r\n}\r\n\r\nfunction ens_beautify(name) {\r\n\tlet labels = split(name, nfc, x => x); // emoji not exposed\r\n\tfor (let {type, output, error} of labels) {\r\n\t\tif (error) break; // flatten will throw\r\n\r\n\t\t// replace leading/trailing hyphen\r\n\t\t// 20230121: consider beautifing all or leading/trailing hyphen to unicode variant\r\n\t\t// not exactly the same in every font, but very similar: \"-\" vs \"‐\"\r\n\t\t/*\r\n\t\tconst UNICODE_HYPHEN = 0x2010;\r\n\t\t// maybe this should replace all for visual consistancy?\r\n\t\t// `node tools/reg-count.js regex ^-\\{2,\\}` => 592\r\n\t\t//for (let i = 0; i < output.length; i++) if (output[i] == 0x2D) output[i] = 0x2010;\r\n\t\tif (output[0] == HYPHEN) output[0] = UNICODE_HYPHEN;\r\n\t\tlet end = output.length-1;\r\n\t\tif (output[end] == HYPHEN) output[end] = UNICODE_HYPHEN;\r\n\t\t*/\r\n\t\t// 20230123: WHATWG URL uses \"CheckHyphens\" false\r\n\t\t// https://url.spec.whatwg.org/#idna\r\n\r\n\t\t// update ethereum symbol\r\n\t\t// ξ => Ξ if not greek\r\n\t\tif (type !== 'Greek') array_replace(output, 0x3BE, 0x39E);\r\n\r\n\t\t// 20221213: fixes bidi subdomain issue, but breaks invariant (200E is disallowed)\r\n\t\t// could be fixed with special case for: 2D (.) + 200E (LTR)\r\n\t\t// https://discuss.ens.domains/t/bidi-label-ordering-spoof/15824\r\n\t\t//output.splice(0, 0, 0x200E);\r\n\t}\r\n\treturn flatten(labels);\r\n}\r\n\r\nfunction ens_split(name, preserve_emoji) {\r\n\treturn split(name, nfc, preserve_emoji ? x => x.slice() : filter_fe0f); // emoji are exposed so copy\r\n}\r\n\r\nfunction split(name, nf, ef) {\r\n\tif (!name) return []; // 20230719: empty name allowance\r\n\tinit();\r\n\tlet offset = 0;\r\n\t// https://unicode.org/reports/tr46/#Validity_Criteria\r\n\t// 4.) \"The label must not contain a U+002E ( . ) FULL STOP.\"\r\n\treturn name.split(STOP_CH).map(label => {\r\n\t\tlet input = explode_cp(label);\r\n\t\tlet info = {\r\n\t\t\tinput,\r\n\t\t\toffset, // codepoint, not substring!\r\n\t\t};\r\n\t\toffset += input.length + 1; // + stop\r\n\t\ttry {\r\n\t\t\t// 1.) \"The label must be in Unicode Normalization Form NFC\"\r\n\t\t\tlet tokens = info.tokens = tokens_from_str(input, nf, ef);\r\n\t\t\tlet token_count = tokens.length;\r\n\t\t\tlet type;\r\n\t\t\tif (!token_count) { // the label was effectively empty (could of had ignored characters)\r\n\t\t\t\t//norm = [];\r\n\t\t\t\t//type = 'None'; // use this instead of next match, \"ASCII\"\r\n\t\t\t\t// 20230120: change to strict\r\n\t\t\t\t// https://discuss.ens.domains/t/ens-name-normalization-2nd/14564/59\r\n\t\t\t\tthrow new Error(`empty label`);\r\n\t\t\t} \r\n\t\t\tlet norm = info.output = tokens.flat();\r\n\t\t\tcheck_leading_underscore(norm);\r\n\t\t\tlet emoji = info.emoji = token_count > 1 || tokens[0].is_emoji; // same as: tokens.some(x => x.is_emoji);\r\n\t\t\tif (!emoji && norm.every(cp => cp < 0x80)) { // special case for ascii\r\n\t\t\t\t// 20230123: matches matches WHATWG, see note 3.3\r\n\t\t\t\tcheck_label_extension(norm); // only needed for ascii\r\n\t\t\t\t// cant have fenced\r\n\t\t\t\t// cant have cm\r\n\t\t\t\t// cant have wholes\r\n\t\t\t\t// see derive: \"Fastpath ASCII\"\r\n\t\t\t\ttype = 'ASCII';\r\n\t\t\t} else {\r\n\t\t\t\tlet chars = tokens.flatMap(x => x.is_emoji ? [] : x); // all of the nfc tokens concat together\r\n\t\t\t\tif (!chars.length) { // theres no text, just emoji\r\n\t\t\t\t\ttype = 'Emoji';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// 5.) \"The label must not begin with a combining mark, that is: General_Category=Mark.\"\r\n\t\t\t\t\tif (CM.has(norm[0])) throw error_placement('leading combining mark');\r\n\t\t\t\t\tfor (let i = 1; i < token_count; i++) { // we've already checked the first token\r\n\t\t\t\t\t\tlet cps = tokens[i];\r\n\t\t\t\t\t\tif (!cps.is_emoji && CM.has(cps[0])) { // every text token has emoji neighbors, eg. EtEEEtEt...\r\n\t\t\t\t\t\t\t// bidi_qq() not needed since emoji is LTR and cps is a CM\r\n\t\t\t\t\t\t\tthrow error_placement(`emoji + combining mark: \"${str_from_cps(tokens[i-1])} + ${safe_str_from_cps([cps[0]])}\"`); \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcheck_fenced(norm);\r\n\t\t\t\t\tlet unique = Array_from(new Set(chars));\r\n\t\t\t\t\tlet [g] = determine_group(unique); // take the first match\r\n\t\t\t\t\t// see derive: \"Matching Groups have Same CM Style\"\r\n\t\t\t\t\t// alternative: could form a hybrid type: Latin/Japanese/...\t\r\n\t\t\t\t\tcheck_group(g, chars); // need text in order\r\n\t\t\t\t\tcheck_whole(g, unique); // only need unique text (order would be required for multiple-char confusables)\r\n\t\t\t\t\ttype = g.N;\r\n\t\t\t\t\t// 20230121: consider exposing restricted flag\r\n\t\t\t\t\t// it's simpler to just check for 'Restricted'\r\n\t\t\t\t\t// or even better: type.endsWith(']')\r\n\t\t\t\t\t//if (g.R) info.restricted = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tinfo.type = type;\r\n\t\t} catch (err) {\r\n\t\t\tinfo.error = err; // use full error object\r\n\t\t}\r\n\t\treturn info;\r\n\t});\r\n}\r\n\r\nfunction check_whole(group, unique) {\r\n\tlet maker;\r\n\tlet shared = [];\r\n\tfor (let cp of unique) {\r\n\t\tlet whole = WHOLE_MAP.get(cp);\r\n\t\tif (whole === UNIQUE_PH) return; // unique, non-confusable\r\n\t\tif (whole) {\r\n\t\t\tlet set = whole.M.get(cp); // groups which have a character that look-like this character\r\n\t\t\tmaker = maker ? maker.filter(g => set.has(g)) : Array_from(set);\r\n\t\t\tif (!maker.length) return; // confusable intersection is empty\r\n\t\t} else {\r\n\t\t\tshared.push(cp); \r\n\t\t}\r\n\t}\r\n\tif (maker) {\r\n\t\t// we have 1+ confusable\r\n\t\t// check if any of the remaining groups\r\n\t\t// contain the shared characters too\r\n\t\tfor (let g of maker) {\r\n\t\t\tif (shared.every(cp => group_has_cp(g, cp))) {\r\n\t\t\t\tthrow new Error(`whole-script confusable: ${group.N}/${g.N}`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// assumption: unique.size > 0\r\n// returns list of matching groups\r\nfunction determine_group(unique) {\r\n\tlet groups = GROUPS;\r\n\tfor (let cp of unique) {\r\n\t\t// note: we need to dodge CM that are whitelisted\r\n\t\t// but that code isn't currently necessary\r\n\t\tlet gs = groups.filter(g => group_has_cp(g, cp));\r\n\t\tif (!gs.length) {\r\n\t\t\tif (!GROUPS.some(g => group_has_cp(g, cp))) { \r\n\t\t\t\t// the character was composed of valid parts\r\n\t\t\t\t// but it's NFC form is invalid\r\n\t\t\t\t// 20230716: change to more exact statement, see: ENSNormalize.{cs,java}\r\n\t\t\t\t// note: this doesn't have to be a composition\r\n\t\t\t\t// 20230720: change to full check\r\n\t\t\t\tthrow error_disallowed(cp); // this should be rare\r\n\t\t\t} else {\r\n\t\t\t\t// there is no group that contains all these characters\r\n\t\t\t\t// throw using the highest priority group that matched\r\n\t\t\t\t// https://www.unicode.org/reports/tr39/#mixed_script_confusables\r\n\t\t\t\tthrow error_group_member(groups[0], cp);\r\n\t\t\t}\r\n\t\t}\r\n\t\tgroups = gs;\r\n\t\tif (gs.length == 1) break; // there is only one group left\r\n\t}\r\n\t// there are at least 1 group(s) with all of these characters\r\n\treturn groups;\r\n}\r\n\r\n// throw on first error\r\nfunction flatten(split) {\r\n\treturn split.map(({input, error, output}) => {\r\n\t\tif (error) {\r\n\t\t\t// don't print label again if just a single label\r\n\t\t\tlet msg = error.message;\r\n\t\t\t// bidi_qq() only necessary if msg is digits\r\n\t\t\tthrow new Error(split.length == 1 ? msg : `Invalid label ${bidi_qq(safe_str_from_cps(input, 63))}: ${msg}`); \r\n\t\t}\r\n\t\treturn str_from_cps(output);\r\n\t}).join(STOP_CH);\r\n}\r\n\r\nfunction error_disallowed(cp) {\r\n\t// TODO: add cp to error?\r\n\treturn new Error(`disallowed character: ${quoted_cp(cp)}`); \r\n}\r\nfunction error_group_member(g, cp) {\r\n\tlet quoted = quoted_cp(cp);\r\n\tlet gg = GROUPS.find(g => g.P.has(cp)); // only check primary\r\n\tif (gg) {\r\n\t\tquoted = `${gg.N} ${quoted}`;\r\n\t}\r\n\treturn new Error(`illegal mixture: ${g.N} + ${quoted}`);\r\n}\r\nfunction error_placement(where) {\r\n\treturn new Error(`illegal placement: ${where}`);\r\n}\r\n\r\n// assumption: cps.length > 0\r\n// assumption: cps[0] isn't a CM\r\n// assumption: the previous character isn't an emoji\r\nfunction check_group(g, cps) {\r\n\tfor (let cp of cps) {\r\n\t\tif (!group_has_cp(g, cp)) {\r\n\t\t\t// for whitelisted scripts, this will throw illegal mixture on invalid cm, eg. \"e{300}{300}\"\r\n\t\t\t// at the moment, it's unnecessary to introduce an extra error type\r\n\t\t\t// until there exists a whitelisted multi-character\r\n\t\t\t// eg. if (M < 0 && is_combining_mark(cp)) { ... }\r\n\t\t\t// there are 3 cases:\r\n\t\t\t// 1. illegal cm for wrong group => mixture error\r\n\t\t\t// 2. illegal cm for same group => cm error\r\n\t\t\t// requires set of whitelist cm per group: \r\n\t\t\t// eg. new Set([...g.P, ...g.Q].flatMap(nfc).filter(cp => CM.has(cp)))\r\n\t\t\t// 3. wrong group => mixture error\r\n\t\t\tthrow error_group_member(g, cp);\r\n\t\t}\r\n\t}\r\n\t//if (M >= 0) { // we have a known fixed cm count\r\n\tif (g.M) { // we need to check for NSM\r\n\t\tlet decomposed = nfd(cps);\r\n\t\tfor (let i = 1, e = decomposed.length; i < e; i++) { // see: assumption\r\n\t\t\t// 20230210: bugfix: using cps instead of decomposed h/t Carbon225\r\n\t\t\t/*\r\n\t\t\tif (CM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\twhile (j < e && CM.has(decomposed[j])) j++;\r\n\t\t\t\tif (j - i > M) {\r\n\t\t\t\t\tthrow new Error(`too many combining marks: ${g.N} ${bidi_qq(str_from_cps(decomposed.slice(i-1, j)))} (${j-i}/${M})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t\t// 20230217: switch to NSM counting\r\n\t\t\t// https://www.unicode.org/reports/tr39/#Optional_Detection\r\n\t\t\tif (NSM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\tfor (let cp; j < e && NSM.has(cp = decomposed[j]); j++) {\r\n\t\t\t\t\t// a. Forbid sequences of the same nonspacing mark.\r\n\t\t\t\t\tfor (let k = i; k < j; k++) { // O(n^2) but n < 100\r\n\t\t\t\t\t\tif (decomposed[k] == cp) {\r\n\t\t\t\t\t\t\tthrow new Error(`duplicate non-spacing marks: ${quoted_cp(cp)}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// parse to end so we have full nsm count\r\n\t\t\t\t// b. Forbid sequences of more than 4 nonspacing marks (gc=Mn or gc=Me).\r\n\t\t\t\tif (j - i > NSM_MAX) {\r\n\t\t\t\t\t// note: this slice starts with a base char or spacing-mark cm\r\n\t\t\t\t\tthrow new Error(`excessive non-spacing marks: ${bidi_qq(safe_str_from_cps(decomposed.slice(i-1, j)))} (${j-i}/${NSM_MAX})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// *** this code currently isn't needed ***\r\n\t/*\r\n\tlet cm_whitelist = M instanceof Map;\r\n\tfor (let i = 0, e = cps.length; i < e; ) {\r\n\t\tlet cp = cps[i++];\r\n\t\tlet seqs = cm_whitelist && M.get(cp);\r\n\t\tif (seqs) { \r\n\t\t\t// list of codepoints that can follow\r\n\t\t\t// if this exists, this will always be 1+\r\n\t\t\tlet j = i;\r\n\t\t\twhile (j < e && CM.has(cps[j])) j++;\r\n\t\t\tlet cms = cps.slice(i, j);\r\n\t\t\tlet match = seqs.find(seq => !compare_arrays(seq, cms));\r\n\t\t\tif (!match) throw new Error(`disallowed combining mark sequence: \"${safe_str_from_cps([cp, ...cms])}\"`);\r\n\t\t\ti = j;\r\n\t\t} else if (!V.has(cp)) {\r\n\t\t\t// https://www.unicode.org/reports/tr39/#mixed_script_confusables\r\n\t\t\tlet quoted = quoted_cp(cp);\r\n\t\t\tfor (let cp of cps) {\r\n\t\t\t\tlet u = UNIQUE.get(cp);\r\n\t\t\t\tif (u && u !== g) {\r\n\t\t\t\t\t// if both scripts are restricted this error is confusing\r\n\t\t\t\t\t// because we don't differentiate RestrictedA from RestrictedB \r\n\t\t\t\t\tif (!u.R) quoted = `${quoted} is ${u.N}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthrow new Error(`disallowed ${g.N} character: ${quoted}`);\r\n\t\t\t//throw new Error(`disallowed character: ${quoted} (expected ${g.N})`);\r\n\t\t\t//throw new Error(`${g.N} does not allow: ${quoted}`);\r\n\t\t}\r\n\t}\r\n\tif (!cm_whitelist) {\r\n\t\tlet decomposed = nfd(cps);\r\n\t\tfor (let i = 1, e = decomposed.length; i < e; i++) { // we know it can't be cm leading\r\n\t\t\tif (CM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\twhile (j < e && CM.has(decomposed[j])) j++;\r\n\t\t\t\tif (j - i > M) {\r\n\t\t\t\t\tthrow new Error(`too many combining marks: \"${str_from_cps(decomposed.slice(i-1, j))}\" (${j-i}/${M})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t*/\r\n}\r\n\r\n// given a list of codepoints\r\n// returns a list of lists, where emoji are a fully-qualified (as Array subclass)\r\n// eg. explode_cp(\"abc💩d\") => [[61, 62, 63], Emoji[1F4A9, FE0F], [64]]\r\n// 20230818: rename for 'process' name collision h/t Javarome\r\n// https://github.com/adraffy/ens-normalize.js/issues/23\r\nfunction tokens_from_str(input, nf, ef) {\r\n\tlet ret = [];\r\n\tlet chars = [];\r\n\tinput = input.slice().reverse(); // flip so we can pop\r\n\twhile (input.length) {\r\n\t\tlet emoji = consume_emoji_reversed(input);\r\n\t\tif (emoji) {\r\n\t\t\tif (chars.length) {\r\n\t\t\t\tret.push(nf(chars));\r\n\t\t\t\tchars = [];\r\n\t\t\t}\r\n\t\t\tret.push(ef(emoji));\r\n\t\t} else {\r\n\t\t\tlet cp = input.pop();\r\n\t\t\tif (VALID.has(cp)) {\r\n\t\t\t\tchars.push(cp);\r\n\t\t\t} else {\r\n\t\t\t\tlet cps = MAPPED.get(cp);\r\n\t\t\t\tif (cps) {\r\n\t\t\t\t\tchars.push(...cps); // less than 10 elements\r\n\t\t\t\t} else if (!IGNORED.has(cp)) {\r\n\t\t\t\t\t// 20230912: unicode 15.1 changed the order of processing such that\r\n\t\t\t\t\t// disallowed parts are only rejected after NFC\r\n\t\t\t\t\t// https://unicode.org/reports/tr46/#Validity_Criteria\r\n\t\t\t\t\t// this doesn't impact normalization as of today\r\n\t\t\t\t\t// technically, this error can be removed as the group logic will apply similar logic\r\n\t\t\t\t\t// however the error type might be less clear\r\n\t\t\t\t\tthrow error_disallowed(cp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (chars.length) {\r\n\t\tret.push(nf(chars));\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction filter_fe0f(cps) {\r\n\treturn cps.filter(cp => cp != FE0F);\r\n}\r\n\r\n// given array of codepoints\r\n// returns the longest valid emoji sequence (or undefined if no match)\r\n// *MUTATES* the supplied array\r\n// disallows interleaved ignored characters\r\n// fills (optional) eaten array with matched codepoints\r\nfunction consume_emoji_reversed(cps, eaten) {\r\n\tlet node = EMOJI_ROOT;\r\n\tlet emoji;\r\n\tlet pos = cps.length;\r\n\twhile (pos) {\r\n\t\tnode = node.get(cps[--pos]);\r\n\t\tif (!node) break;\r\n\t\tlet {V} = node;\r\n\t\tif (V) { // this is a valid emoji (so far)\r\n\t\t\temoji = V;\r\n\t\t\tif (eaten) eaten.push(...cps.slice(pos).reverse()); // (optional) copy input, used for ens_tokenize()\r\n\t\t\tcps.length = pos; // truncate\r\n\t\t}\r\n\t}\r\n\treturn emoji;\r\n}\r\n\r\n// ************************************************************\r\n// tokenizer \r\n\r\nconst TY_VALID = 'valid';\r\nconst TY_MAPPED = 'mapped';\r\nconst TY_IGNORED = 'ignored';\r\nconst TY_DISALLOWED = 'disallowed';\r\nconst TY_EMOJI = 'emoji';\r\nconst TY_NFC = 'nfc';\r\nconst TY_STOP = 'stop';\r\n\r\nfunction ens_tokenize(name, {\r\n\tnf = true, // collapse unnormalized runs into a single token\r\n} = {}) {\r\n\tinit();\r\n\tlet input = explode_cp(name).reverse();\r\n\tlet eaten = [];\r\n\tlet tokens = [];\r\n\twhile (input.length) {\r\n\t\tlet emoji = consume_emoji_reversed(input, eaten);\r\n\t\tif (emoji) {\r\n\t\t\ttokens.push({\r\n\t\t\t\ttype: TY_EMOJI,\r\n\t\t\t\temoji: emoji.slice(), // copy emoji\r\n\t\t\t\tinput: eaten,\r\n\t\t\t\tcps: filter_fe0f(emoji)\r\n\t\t\t});\r\n\t\t\teaten = []; // reset buffer\r\n\t\t} else {\r\n\t\t\tlet cp = input.pop();\r\n\t\t\tif (cp == STOP) {\r\n\t\t\t\ttokens.push({type: TY_STOP, cp});\r\n\t\t\t} else if (VALID.has(cp)) {\r\n\t\t\t\ttokens.push({type: TY_VALID, cps: [cp]});\r\n\t\t\t} else if (IGNORED.has(cp)) {\r\n\t\t\t\ttokens.push({type: TY_IGNORED, cp});\r\n\t\t\t} else {\r\n\t\t\t\tlet cps = MAPPED.get(cp);\r\n\t\t\t\tif (cps) {\r\n\t\t\t\t\ttokens.push({type: TY_MAPPED, cp, cps: cps.slice()});\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttokens.push({type: TY_DISALLOWED, cp});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (nf) {\r\n\t\tfor (let i = 0, start = -1; i < tokens.length; i++) {\r\n\t\t\tlet token = tokens[i];\r\n\t\t\tif (is_valid_or_mapped(token.type)) {\r\n\t\t\t\tif (requires_check(token.cps)) { // normalization might be needed\r\n\t\t\t\t\tlet end = i + 1;\r\n\t\t\t\t\tfor (let pos = end; pos < tokens.length; pos++) { // find adjacent text\r\n\t\t\t\t\t\tlet {type, cps} = tokens[pos];\r\n\t\t\t\t\t\tif (is_valid_or_mapped(type)) {\r\n\t\t\t\t\t\t\tif (!requires_check(cps)) break;\r\n\t\t\t\t\t\t\tend = pos + 1;\r\n\t\t\t\t\t\t} else if (type !== TY_IGNORED) { // || type !== TY_DISALLOWED) { \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (start < 0) start = i;\r\n\t\t\t\t\tlet slice = tokens.slice(start, end);\r\n\t\t\t\t\tlet cps0 = slice.flatMap(x => is_valid_or_mapped(x.type) ? x.cps : []); // strip junk tokens\r\n\t\t\t\t\tlet cps = nfc(cps0);\r\n\t\t\t\t\tif (compare_arrays(cps, cps0)) { // bundle into an nfc token\r\n\t\t\t\t\t\ttokens.splice(start, end - start, {\r\n\t\t\t\t\t\t\ttype: TY_NFC, \r\n\t\t\t\t\t\t\tinput: cps0, // there are 3 states: tokens0 ==(process)=> input ==(nfc)=> tokens/cps\r\n\t\t\t\t\t\t\tcps, \r\n\t\t\t\t\t\t\ttokens0: collapse_valid_tokens(slice),\r\n\t\t\t\t\t\t\ttokens: ens_tokenize(str_from_cps(cps), {nf: false})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\ti = start;\r\n\t\t\t\t\t} else { \r\n\t\t\t\t\t\ti = end - 1; // skip to end of slice\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstart = -1; // reset\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstart = i; // remember last\r\n\t\t\t\t}\r\n\t\t\t} else if (token.type !== TY_IGNORED) { // 20221024: is this correct?\r\n\t\t\t\tstart = -1; // reset\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn collapse_valid_tokens(tokens);\r\n}\r\n\r\nfunction is_valid_or_mapped(type) {\r\n\treturn type == TY_VALID || type == TY_MAPPED;\r\n}\r\n\r\nfunction requires_check(cps) {\r\n\treturn cps.some(cp => NFC_CHECK.has(cp));\r\n}\r\n\r\nfunction collapse_valid_tokens(tokens) {\r\n\tfor (let i = 0; i < tokens.length; i++) {\r\n\t\tif (tokens[i].type == TY_VALID) {\r\n\t\t\tlet j = i + 1;\r\n\t\t\twhile (j < tokens.length && tokens[j].type == TY_VALID) j++;\r\n\t\t\ttokens.splice(i, j - i, {type: TY_VALID, cps: tokens.slice(i, j).flatMap(x => x.cps)});\r\n\t\t}\r\n\t}\r\n\treturn tokens;\r\n}\n\nexport { ens_beautify, ens_emoji, ens_normalize, ens_normalize_fragment, ens_split, ens_tokenize, is_combining_mark, nfc, nfd, safe_str_from_cps, should_escape };\n", "import { Bytes } from '../../index.js'\nimport * as Ens from '../Ens.js'\nimport type * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\n\n/**\n * @internal\n * Encodes a [DNS packet](https://docs.ens.domains/resolution/names#dns) into a ByteArray containing a UDP payload.\n */\nexport function packetToBytes(packet: string): Bytes.Bytes {\n // strip leading and trailing `.`\n const value = packet.replace(/^\\.|\\.$/gm, '')\n if (value.length === 0) return new Uint8Array(1)\n\n const bytes = new Uint8Array(Bytes.fromString(value).byteLength + 2)\n\n let offset = 0\n const list = value.split('.')\n for (let i = 0; i < list.length; i++) {\n let encoded = Bytes.fromString(list[i]!)\n // if the length is > 255, make the encoded label value a labelhash\n // this is compatible with the universal resolver\n if (encoded.byteLength > 255)\n encoded = Bytes.fromString(wrapLabelhash(Ens.labelhash(list[i]!)))\n bytes[offset] = encoded.length\n bytes.set(encoded, offset + 1)\n offset += encoded.length + 1\n }\n\n if (bytes.byteLength !== offset + 1) return bytes.slice(0, offset + 1)\n\n return bytes\n}\n\nexport declare namespace packetToBytes {\n type ErrorType =\n | wrapLabelhash.ErrorType\n | Ens.labelhash.ErrorType\n | Bytes.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function wrapLabelhash(hash: Hex.Hex): `[${string}]` {\n return `[${hash.slice(2)}]`\n}\n\nexport declare namespace wrapLabelhash {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function unwrapLabelhash(label: string): Hex.Hex | null {\n if (label.length !== 66) return null\n if (label.indexOf('[') !== 0) return null\n if (label.indexOf(']') !== 65) return null\n const hash = `0x${label.slice(1, 65)}`\n if (!Hex.validate(hash, { strict: true })) return null\n return hash\n}\n\nexport declare namespace unwrapLabelhash {\n type ErrorType = Hex.validate.ErrorType | Errors.GlobalErrorType\n}\n", "import type * as Address from './Address.js'\nimport type * as Block from './Block.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute } from './internal/types.js'\n\n/** A Filter as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/filter.yaml). */\nexport type Filter<bigintType = bigint> = Compute<{\n /** Address to filter for logs. */\n address?: Address.Address | readonly Address.Address[] | null | undefined\n /** Block number or tag to filter logs from. */\n fromBlock?: Block.Number<bigintType> | Block.Tag | undefined\n /** Block number or tag to filter logs to. */\n toBlock?: Block.Number<bigintType> | Block.Tag | undefined\n /** Topics to filter for logs. */\n topics?: Topics | undefined\n}>\n\n/** RPC representation of a {@link ox#Filter.Filter}. */\nexport type Rpc = Filter<Hex.Hex>\n\n/** Set of Filter topics. */\nexport type Topics = readonly Topic[]\n\n/**\n * A filter topic.\n *\n * - `null`: Matches any topic.\n * - `Hex`: Matches if the topic is equal.\n * - `Hex[]`: Matches if the topic is in the array.\n */\nexport type Topic = Hex.Hex | readonly Hex.Hex[] | null\n\n/**\n * Converts a {@link ox#Filter.Rpc} to an {@link ox#Filter.Filter}.\n *\n * @example\n * ```ts twoslash\n * import { Filter } from 'ox'\n *\n * const filter = Filter.fromRpc({\n * address: '0xd3cda913deb6f67967b99d671a681250403edf27',\n * fromBlock: 'latest',\n * toBlock: '0x010f2c',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * null,\n * '0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1',\n * ],\n * })\n * // @log: {\n * // @log: address: '0xd3cda913deb6f67967b99d671a681250403edf27',\n * // @log: fromBlock: 'latest',\n * // @log: toBlock: 69420n,\n * // @log: topics: [\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * // @log: null,\n * // @log: '0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1',\n * // @log: ],\n * // @log: }\n * ```\n *\n * @param filter - The RPC filter to convert.\n * @returns An instantiated {@link ox#Filter.Filter}.\n */\nexport function fromRpc(filter: Rpc): Filter {\n const { fromBlock, toBlock } = filter\n return {\n ...filter,\n ...(fromBlock && {\n fromBlock: Hex.validate(fromBlock, { strict: false })\n ? BigInt(fromBlock)\n : fromBlock,\n }),\n ...(toBlock && {\n toBlock: Hex.validate(toBlock, { strict: false })\n ? BigInt(toBlock)\n : toBlock,\n }),\n } as Filter\n}\n\nexport declare namespace fromRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Filter.Filter} to a {@link ox#Filter.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { AbiEvent, Filter } from 'ox'\n *\n * const transfer = AbiEvent.from('event Transfer(address indexed, address indexed, uint256)')\n * const { topics } = AbiEvent.encode(transfer)\n *\n * const filter = Filter.toRpc({\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * topics,\n * })\n * // @log: {\n * // @log: address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * // @log: topics: [\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * // @log: ],\n * // @log: }\n * ```\n *\n * @param filter - The filter to convert.\n * @returns An RPC filter.\n */\nexport function toRpc(filter: Filter): Rpc {\n const { address, topics, fromBlock, toBlock } = filter\n return {\n ...(address && { address }),\n ...(topics && { topics }),\n ...(typeof fromBlock !== 'undefined'\n ? {\n fromBlock:\n typeof fromBlock === 'bigint'\n ? Hex.fromNumber(fromBlock)\n : fromBlock,\n }\n : {}),\n ...(typeof toBlock !== 'undefined'\n ? {\n toBlock:\n typeof toBlock === 'bigint' ? Hex.fromNumber(toBlock) : toBlock,\n }\n : {}),\n }\n}\n\nexport declare namespace toRpc {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import { HDKey, type Versions } from '@scure/bip32'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport type * as Hex from './Hex.js'\nimport type * as PublicKey from './PublicKey.js'\nimport * as internal from './internal/hdKey.js'\n\n/** Root type for a Hierarchical Deterministic (HD) Key. */\nexport type HdKey = {\n derive: (path: string) => HdKey\n depth: number\n index: number\n identifier: Hex.Hex\n privateKey: Hex.Hex\n privateExtendedKey: string\n publicKey: PublicKey.PublicKey<false>\n publicExtendedKey: string\n versions: Versions\n}\n\n/**\n * Creates a HD Key from an extended private key.\n *\n * @example\n * ```ts twoslash\n * import { HdKey } from 'ox'\n *\n * const hdKey = HdKey.fromExtendedKey('...')\n *\n * console.log(hdKey.privateKey)\n * // @log: '0x...'\n * ```\n *\n * @param extendedKey - The extended private key.\n * @returns The HD Key.\n */\nexport function fromExtendedKey(extendedKey: string): HdKey {\n const key = HDKey.fromExtendedKey(extendedKey)\n return internal.fromScure(key)\n}\n\nexport declare namespace fromExtendedKey {\n type ErrorType = internal.fromScure.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Creates a HD Key from a JSON object containing an extended private key (`xpriv`).\n *\n * @example\n * ```ts twoslash\n * import { HdKey } from 'ox'\n *\n * const hdKey = HdKey.fromJson({ xpriv: '...' })\n *\n * console.log(hdKey.privateKey)\n * // @log: '0x...'\n * ```\n *\n * @param json - The JSON object containing an extended private key (`xpriv`).\n * @returns The HD Key.\n */\nexport function fromJson(json: { xpriv: string }): HdKey {\n return internal.fromScure(HDKey.fromJSON(json))\n}\n\nexport declare namespace fromJson {\n type ErrorType = internal.fromScure.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Creates a HD Key from a master seed.\n *\n * @example\n * ```ts twoslash\n * import { HdKey, Mnemonic } from 'ox'\n *\n * const seed = Mnemonic.toSeed('test test test test test test test test test test test junk')\n * const hdKey = HdKey.fromSeed(seed)\n * ```\n *\n * @example\n * ### Path Derivation\n *\n * You can derive a HD Key at a specific path using `derive`.\n *\n * ```ts twoslash\n * import { HdKey, Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.toSeed('test test test test test test test test test test test junk')\n * const hdKey = HdKey.fromSeed(mnemonic).derive(HdKey.path())\n *\n * console.log(hdKey.privateKey)\n * // @log: '0x...'\n * ```\n *\n * @param seed - The master seed to create the HD Key from.\n * @param options - Creation options.\n * @returns The HD Key.\n */\nexport function fromSeed(\n seed: Hex.Hex | Bytes.Bytes,\n options: fromSeed.Options = {},\n): HdKey {\n const { versions } = options\n const key = HDKey.fromMasterSeed(Bytes.from(seed), versions)\n return internal.fromScure(key)\n}\n\nexport declare namespace fromSeed {\n type Options = {\n /** The versions to use for the HD Key. */\n versions?: Versions | undefined\n }\n\n type ErrorType =\n | Bytes.from.ErrorType\n | internal.fromScure.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Creates an Ethereum-based BIP-44 HD path.\n *\n * @example\n * ```ts twoslash\n * import { HdKey } from 'ox'\n *\n * const path = HdKey.path({ account: 1, index: 2 })\n * // @log: \"m/44'/60'/1'/0/2\"\n * ```\n *\n * @param options - Path options.\n * @returns The path.\n */\nexport function path(options: path.Options = {}): string {\n const { account = 0, change = 0, index = 0 } = options\n return `m/44'/60'/${account}'/${change}/${index}`\n}\n\nexport declare namespace path {\n type Options = {\n /**\n * The account.\n * @default 0\n */\n account?: number | undefined\n /**\n * The change.\n * @default 0\n */\n change?: number | undefined\n /**\n * The address index.\n * @default 0\n */\n index?: number | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "/**\n * SHA2-512 a.k.a. sha512 and sha384. It is slower than sha256 in js because u64 operations are slow.\n *\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [the paper on truncated SHA512/256](https://eprint.iacr.org/2010/548.pdf).\n * @module\n */\nimport { HashMD } from './_md.js';\nimport u64 from './_u64.js';\nimport { type CHash, wrapConstructor } from './utils.js';\n\n// Round contants (first 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409):\n// prettier-ignore\nconst [SHA512_Kh, SHA512_Kl] = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\n\n// Temporary buffer, not used to store anything between runs\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD<SHA512> {\n // We cannot use array here since array allows indexing by variable which means optimizer/compiler cannot use registers.\n // Also looks cleaner and easier to verify with spec.\n // Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = 0x6a09e667 | 0;\n protected Al: number = 0xf3bcc908 | 0;\n protected Bh: number = 0xbb67ae85 | 0;\n protected Bl: number = 0x84caa73b | 0;\n protected Ch: number = 0x3c6ef372 | 0;\n protected Cl: number = 0xfe94f82b | 0;\n protected Dh: number = 0xa54ff53a | 0;\n protected Dl: number = 0x5f1d36f1 | 0;\n protected Eh: number = 0x510e527f | 0;\n protected El: number = 0xade682d1 | 0;\n protected Fh: number = 0x9b05688c | 0;\n protected Fl: number = 0x2b3e6c1f | 0;\n protected Gh: number = 0x1f83d9ab | 0;\n protected Gl: number = 0xfb41bd6b | 0;\n protected Hh: number = 0x5be0cd19 | 0;\n protected Hl: number = 0x137e2179 | 0;\n\n constructor() {\n super(128, 64, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n SHA512_W_H.fill(0);\n SHA512_W_L.fill(0);\n }\n destroy(): void {\n this.buffer.fill(0);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\nexport class SHA512_224 extends SHA512 {\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = 0x8c3d37c8 | 0;\n protected Al: number = 0x19544da2 | 0;\n protected Bh: number = 0x73e19966 | 0;\n protected Bl: number = 0x89dcd4d6 | 0;\n protected Ch: number = 0x1dfab7ae | 0;\n protected Cl: number = 0x32ff9c82 | 0;\n protected Dh: number = 0x679dd514 | 0;\n protected Dl: number = 0x582f9fcf | 0;\n protected Eh: number = 0x0f6d2b69 | 0;\n protected El: number = 0x7bd44da8 | 0;\n protected Fh: number = 0x77e36f73 | 0;\n protected Fl: number = 0x04c48942 | 0;\n protected Gh: number = 0x3f9d85a8 | 0;\n protected Gl: number = 0x6a1d36c8 | 0;\n protected Hh: number = 0x1112e6ad | 0;\n protected Hl: number = 0x91d692a1 | 0;\n\n constructor() {\n super();\n this.outputLen = 28;\n }\n}\n\nexport class SHA512_256 extends SHA512 {\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = 0x22312194 | 0;\n protected Al: number = 0xfc2bf72c | 0;\n protected Bh: number = 0x9f555fa3 | 0;\n protected Bl: number = 0xc84c64c2 | 0;\n protected Ch: number = 0x2393b86b | 0;\n protected Cl: number = 0x6f53b151 | 0;\n protected Dh: number = 0x96387719 | 0;\n protected Dl: number = 0x5940eabd | 0;\n protected Eh: number = 0x96283ee2 | 0;\n protected El: number = 0xa88effe3 | 0;\n protected Fh: number = 0xbe5e1e25 | 0;\n protected Fl: number = 0x53863992 | 0;\n protected Gh: number = 0x2b0199fc | 0;\n protected Gl: number = 0x2c85b8aa | 0;\n protected Hh: number = 0x0eb72ddc | 0;\n protected Hl: number = 0x81c52ca2 | 0;\n\n constructor() {\n super();\n this.outputLen = 32;\n }\n}\n\nexport class SHA384 extends SHA512 {\n // h -- high 32 bits, l -- low 32 bits\n protected Ah: number = 0xcbbb9d5d | 0;\n protected Al: number = 0xc1059ed8 | 0;\n protected Bh: number = 0x629a292a | 0;\n protected Bl: number = 0x367cd507 | 0;\n protected Ch: number = 0x9159015a | 0;\n protected Cl: number = 0x3070dd17 | 0;\n protected Dh: number = 0x152fecd8 | 0;\n protected Dl: number = 0xf70e5939 | 0;\n protected Eh: number = 0x67332667 | 0;\n protected El: number = 0xffc00b31 | 0;\n protected Fh: number = 0x8eb44a87 | 0;\n protected Fl: number = 0x68581511 | 0;\n protected Gh: number = 0xdb0c2e0d | 0;\n protected Gl: number = 0x64f98fa7 | 0;\n protected Hh: number = 0x47b5481d | 0;\n protected Hl: number = 0xbefa4fa4 | 0;\n\n constructor() {\n super();\n this.outputLen = 48;\n }\n}\n\n/** SHA2-512 hash function. */\nexport const sha512: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA512());\n/** SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks. */\nexport const sha512_224: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA512_224());\n/** SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks. */\nexport const sha512_256: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA512_256());\n/** SHA2-384 hash function. */\nexport const sha384: CHash = /* @__PURE__ */ wrapConstructor(() => new SHA384());\n", "/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n encode(from: F): T;\n decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n encode: (data: Uint8Array) => string;\n decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n if (!Array.isArray(arr)) return false;\n if (arr.length === 0) return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n\n// no abytes: seems to have 10% slowdown. Why?!\n\nfunction afn(input: Function): input is Function {\n if (typeof input !== 'function') throw new Error('function expected');\n return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n return true;\n}\n\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\nexport const assertNumber: typeof anumber = anumber;\n\nfunction aArr(input: any[]) {\n if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n const id = (a: any) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a: any, b: any) => (c: any) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits: number[]) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(\n `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n );\n return lettersA[i]!;\n });\n },\n decode: (input: string[]): number[] => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data: string[]): string[] {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8) data.push(chr);\n return data;\n },\n decode(input: string[]): string[] {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n afn(fn);\n return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n // base 1 is impossible\n if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length) return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i]!;\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (\n !Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry\n ) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done) continue;\n else if (!rounded) pos = i;\n else done = false;\n }\n res.push(carry);\n if (done) break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++) res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n aArr(data);\n if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(\n `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n );\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from]!;\n const mask = powers[to]! - 1;\n const res: number[] = [];\n for (const n of data) {\n anumber(n);\n if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined) throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from) throw new Error('Excess padding');\n if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0) res.push(carry >>> 0);\n return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits: number[]) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n anumber(bits);\n if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits: number[]) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n afn(fn);\n return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n try {\n return fn.apply(null, args);\n } catch (e) {}\n };\n}\n\nfunction checksum(\n len: number,\n fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n anumber(len);\n afn(fn);\n return {\n encode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding.\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\nexport const base32: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n padding(5),\n join('')\n);\nexport const base32nopad: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n join('')\n);\nexport const base32hex: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n padding(5),\n join('')\n);\nexport const base32hexnopad: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n join('')\n);\nexport const base32crockford: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n join(''),\n normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n/**\n * base64 with padding. For no padding, use `base64nopad`.\n * @example\n * const b = base64.decode('A951'); // Uint8Array.from([ 3, 222, 117 ])\n * base64.encode(b); // 'A951'\n */\nexport const base64: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n padding(6),\n join('')\n);\n/**\n * base64 without padding.\n */\nexport const base64nopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n join('')\n);\nexport const base64url: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n padding(6),\n join('')\n);\nexport const base64urlnopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n chain(radix(58), alphabet(abc), join(''));\n\n/**\n * Base58: base64 without characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n */\nexport const base58: BytesCoder = genBase58(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\nexport const base58flickr: BytesCoder = genBase58(\n '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\nexport const base58xrp: BytesCoder = genBase58(\n 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * XMR version of base58.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n encode(data: Uint8Array) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n }\n return res;\n },\n decode(str: string) {\n let res: number[] = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n chain(\n checksum(4, (data) => sha256(sha256(data))),\n base58\n );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n }\n return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words) chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit?: number | false\n ): `${Lowercase<Prefix>}1${string}`;\n decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n decodeToBytes(str: string): Bech32DecodedWithArray;\n decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n fromWords(to: number[]): Uint8Array;\n fromWordsUnsafe(to: number[]): void | Uint8Array;\n toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n function encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit: number | false = 90\n ): `${Lowercase<Prefix>}1${string}` {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words)) words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n }\n\n function decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n function decode(str: string, limit?: number | false): Bech32Decoded;\n function decode(str: string, limit: number | false = 90): Bech32Decoded {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n\n const decodeUnsafe = unsafeWrapper(decode);\n\n function decodeToBytes(str: string): Bech32DecodedWithArray {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n\n function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n return encode(prefix, toWords(bytes));\n }\n\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n\n/**\n * Low-level bech32 operations. Operates on words.\n */\nexport const bech32: Bech32 = genBech32('bech32');\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n */\nexport const utf8: BytesCoder = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n\n/**\n * hex string decoder.\n * @example\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n */\nexport const hex: BytesCoder = chain(\n radix2(4),\n alphabet('0123456789abcdef'),\n join(''),\n normalize((s: string) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n })\n);\n\n// prettier-ignore\nconst CODERS: { utf8: BytesCoder; hex: BytesCoder; base16: BytesCoder; base32: BytesCoder; base64: BytesCoder; base64url: BytesCoder; base58: BytesCoder; base58xmr: BytesCoder; } = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof typeof CODERS;\nconst coderTypeError =\n 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n", "/**\n * @module BIP32 hierarchical deterministic (HD) wallets over secp256k1.\n * @example\n * ```js\n * import { HDKey } from \"@scure/bip32\";\n * const hdkey1 = HDKey.fromMasterSeed(seed);\n * const hdkey2 = HDKey.fromExtendedKey(base58key);\n * const hdkey3 = HDKey.fromJSON({ xpriv: string });\n *\n * // props\n * [hdkey1.depth, hdkey1.index, hdkey1.chainCode];\n * console.log(hdkey2.privateKey, hdkey2.publicKey);\n * console.log(hdkey3.derive(\"m/0/2147483647'/1\"));\n * const sig = hdkey3.sign(hash);\n * hdkey3.verify(hash, sig);\n * ```\n */\n/*! scure-bip32 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { ripemd160 } from '@noble/hashes/ripemd160';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { sha512 } from '@noble/hashes/sha512';\nimport { abytes } from '@noble/hashes/_assert';\nimport { bytesToHex, concatBytes, createView, hexToBytes, utf8ToBytes } from '@noble/hashes/utils';\nimport { secp256k1 as secp } from '@noble/curves/secp256k1';\nimport { mod } from '@noble/curves/abstract/modular';\nimport { createBase58check } from '@scure/base';\n\nconst Point = secp.ProjectivePoint;\nconst base58check = createBase58check(sha256);\n\nfunction bytesToNumber(bytes: Uint8Array): bigint {\n abytes(bytes);\n const h = bytes.length === 0 ? '0' : bytesToHex(bytes);\n return BigInt('0x' + h);\n}\n\nfunction numberToBytes(num: bigint): Uint8Array {\n if (typeof num !== 'bigint') throw new Error('bigint expected');\n return hexToBytes(num.toString(16).padStart(64, '0'));\n}\n\nconst MASTER_SECRET = utf8ToBytes('Bitcoin seed');\n// Bitcoin hardcoded by default\nconst BITCOIN_VERSIONS: Versions = { private: 0x0488ade4, public: 0x0488b21e };\nexport const HARDENED_OFFSET: number = 0x80000000;\n\nexport interface Versions {\n private: number;\n public: number;\n}\n\nconst hash160 = (data: Uint8Array) => ripemd160(sha256(data));\nconst fromU32 = (data: Uint8Array) => createView(data).getUint32(0, false);\nconst toU32 = (n: number) => {\n if (!Number.isSafeInteger(n) || n < 0 || n > 2 ** 32 - 1) {\n throw new Error('invalid number, should be from 0 to 2**32-1, got ' + n);\n }\n const buf = new Uint8Array(4);\n createView(buf).setUint32(0, n, false);\n return buf;\n};\n\ninterface HDKeyOpt {\n versions?: Versions;\n depth?: number;\n index?: number;\n parentFingerprint?: number;\n chainCode?: Uint8Array;\n publicKey?: Uint8Array;\n privateKey?: Uint8Array | bigint;\n}\n\nexport class HDKey {\n get fingerprint(): number {\n if (!this.pubHash) {\n throw new Error('No publicKey set!');\n }\n return fromU32(this.pubHash);\n }\n get identifier(): Uint8Array | undefined {\n return this.pubHash;\n }\n get pubKeyHash(): Uint8Array | undefined {\n return this.pubHash;\n }\n get privateKey(): Uint8Array | null {\n return this.privKeyBytes || null;\n }\n get publicKey(): Uint8Array | null {\n return this.pubKey || null;\n }\n get privateExtendedKey(): string {\n const priv = this.privateKey;\n if (!priv) {\n throw new Error('No private key');\n }\n return base58check.encode(\n this.serialize(this.versions.private, concatBytes(new Uint8Array([0]), priv))\n );\n }\n get publicExtendedKey(): string {\n if (!this.pubKey) {\n throw new Error('No public key');\n }\n return base58check.encode(this.serialize(this.versions.public, this.pubKey));\n }\n\n public static fromMasterSeed(seed: Uint8Array, versions: Versions = BITCOIN_VERSIONS): HDKey {\n abytes(seed);\n if (8 * seed.length < 128 || 8 * seed.length > 512) {\n throw new Error(\n 'HDKey: seed length must be between 128 and 512 bits; 256 bits is advised, got ' +\n seed.length\n );\n }\n const I = hmac(sha512, MASTER_SECRET, seed);\n return new HDKey({\n versions,\n chainCode: I.slice(32),\n privateKey: I.slice(0, 32),\n });\n }\n\n public static fromExtendedKey(base58key: string, versions: Versions = BITCOIN_VERSIONS): HDKey {\n // => version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33)\n const keyBuffer: Uint8Array = base58check.decode(base58key);\n const keyView = createView(keyBuffer);\n const version = keyView.getUint32(0, false);\n const opt = {\n versions,\n depth: keyBuffer[4],\n parentFingerprint: keyView.getUint32(5, false),\n index: keyView.getUint32(9, false),\n chainCode: keyBuffer.slice(13, 45),\n };\n const key = keyBuffer.slice(45);\n const isPriv = key[0] === 0;\n if (version !== versions[isPriv ? 'private' : 'public']) {\n throw new Error('Version mismatch');\n }\n if (isPriv) {\n return new HDKey({ ...opt, privateKey: key.slice(1) });\n } else {\n return new HDKey({ ...opt, publicKey: key });\n }\n }\n\n public static fromJSON(json: { xpriv: string }): HDKey {\n return HDKey.fromExtendedKey(json.xpriv);\n }\n public readonly versions: Versions;\n public readonly depth: number = 0;\n public readonly index: number = 0;\n public readonly chainCode: Uint8Array | null = null;\n public readonly parentFingerprint: number = 0;\n private privKey?: bigint;\n private privKeyBytes?: Uint8Array;\n private pubKey?: Uint8Array;\n private pubHash: Uint8Array | undefined;\n\n constructor(opt: HDKeyOpt) {\n if (!opt || typeof opt !== 'object') {\n throw new Error('HDKey.constructor must not be called directly');\n }\n this.versions = opt.versions || BITCOIN_VERSIONS;\n this.depth = opt.depth || 0;\n this.chainCode = opt.chainCode || null;\n this.index = opt.index || 0;\n this.parentFingerprint = opt.parentFingerprint || 0;\n if (!this.depth) {\n if (this.parentFingerprint || this.index) {\n throw new Error('HDKey: zero depth with non-zero index/parent fingerprint');\n }\n }\n if (opt.publicKey && opt.privateKey) {\n throw new Error('HDKey: publicKey and privateKey at same time.');\n }\n if (opt.privateKey) {\n if (!secp.utils.isValidPrivateKey(opt.privateKey)) {\n throw new Error('Invalid private key');\n }\n this.privKey =\n typeof opt.privateKey === 'bigint' ? opt.privateKey : bytesToNumber(opt.privateKey);\n this.privKeyBytes = numberToBytes(this.privKey);\n this.pubKey = secp.getPublicKey(opt.privateKey, true);\n } else if (opt.publicKey) {\n this.pubKey = Point.fromHex(opt.publicKey).toRawBytes(true); // force compressed point\n } else {\n throw new Error('HDKey: no public or private key provided');\n }\n this.pubHash = hash160(this.pubKey);\n }\n\n public derive(path: string): HDKey {\n if (!/^[mM]'?/.test(path)) {\n throw new Error('Path must start with \"m\" or \"M\"');\n }\n if (/^[mM]'?$/.test(path)) {\n return this;\n }\n const parts = path.replace(/^[mM]'?\\//, '').split('/');\n // tslint:disable-next-line\n let child: HDKey = this;\n for (const c of parts) {\n const m = /^(\\d+)('?)$/.exec(c);\n const m1 = m && m[1];\n if (!m || m.length !== 3 || typeof m1 !== 'string')\n throw new Error('invalid child index: ' + c);\n let idx = +m1;\n if (!Number.isSafeInteger(idx) || idx >= HARDENED_OFFSET) {\n throw new Error('Invalid index');\n }\n // hardened key\n if (m[2] === \"'\") {\n idx += HARDENED_OFFSET;\n }\n child = child.deriveChild(idx);\n }\n return child;\n }\n\n public deriveChild(index: number): HDKey {\n if (!this.pubKey || !this.chainCode) {\n throw new Error('No publicKey or chainCode set');\n }\n let data = toU32(index);\n if (index >= HARDENED_OFFSET) {\n // Hardened\n const priv = this.privateKey;\n if (!priv) {\n throw new Error('Could not derive hardened child key');\n }\n // Hardened child: 0x00 || ser256(kpar) || ser32(index)\n data = concatBytes(new Uint8Array([0]), priv, data);\n } else {\n // Normal child: serP(point(kpar)) || ser32(index)\n data = concatBytes(this.pubKey, data);\n }\n const I = hmac(sha512, this.chainCode, data);\n const childTweak = bytesToNumber(I.slice(0, 32));\n const chainCode = I.slice(32);\n if (!secp.utils.isValidPrivateKey(childTweak)) {\n throw new Error('Tweak bigger than curve order');\n }\n const opt: HDKeyOpt = {\n versions: this.versions,\n chainCode,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n index,\n };\n try {\n // Private parent key -> private child key\n if (this.privateKey) {\n const added = mod(this.privKey! + childTweak, secp.CURVE.n);\n if (!secp.utils.isValidPrivateKey(added)) {\n throw new Error('The tweak was out of range or the resulted private key is invalid');\n }\n opt.privateKey = added;\n } else {\n const added = Point.fromHex(this.pubKey).add(Point.fromPrivateKey(childTweak));\n // Cryptographically impossible: hmac-sha512 preimage would need to be found\n if (added.equals(Point.ZERO)) {\n throw new Error('The tweak was equal to negative P, which made the result key invalid');\n }\n opt.publicKey = added.toRawBytes(true);\n }\n return new HDKey(opt);\n } catch (err) {\n return this.deriveChild(index + 1);\n }\n }\n\n public sign(hash: Uint8Array): Uint8Array {\n if (!this.privateKey) {\n throw new Error('No privateKey set!');\n }\n abytes(hash, 32);\n return secp.sign(hash, this.privKey!).toCompactRawBytes();\n }\n\n public verify(hash: Uint8Array, signature: Uint8Array): boolean {\n abytes(hash, 32);\n abytes(signature, 64);\n if (!this.publicKey) {\n throw new Error('No publicKey set!');\n }\n let sig;\n try {\n sig = secp.Signature.fromCompact(signature);\n } catch (error) {\n return false;\n }\n return secp.verify(sig, hash, this.publicKey);\n }\n\n public wipePrivateData(): this {\n this.privKey = undefined;\n if (this.privKeyBytes) {\n this.privKeyBytes.fill(0);\n this.privKeyBytes = undefined;\n }\n return this;\n }\n public toJSON(): { xpriv: string; xpub: string } {\n return {\n xpriv: this.privateExtendedKey,\n xpub: this.publicExtendedKey,\n };\n }\n\n private serialize(version: number, key: Uint8Array) {\n if (!this.chainCode) {\n throw new Error('No chainCode set');\n }\n abytes(key, 33);\n // version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33)\n return concatBytes(\n toU32(version),\n new Uint8Array([this.depth]),\n toU32(this.parentFingerprint),\n toU32(this.index),\n this.chainCode,\n key\n );\n }\n}\n", "import { secp256k1 } from '@noble/curves/secp256k1'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as PublicKey from './PublicKey.js'\nimport type * as Signature from './Signature.js'\nimport * as Entropy from './internal/entropy.js'\nimport type { OneOf } from './internal/types.js'\n\n/** Re-export of noble/curves secp256k1 utilities. */\nexport const noble = secp256k1\n\n/**\n * Computes the secp256k1 ECDSA public key from a provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const publicKey = Secp256k1.getPublicKey({ privateKey: '0x...' })\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey(\n options: getPublicKey.Options,\n): PublicKey.PublicKey {\n const { privateKey } = options\n const point = secp256k1.ProjectivePoint.fromPrivateKey(\n Hex.from(privateKey).slice(2),\n )\n return PublicKey.from(point)\n}\n\nexport declare namespace getPublicKey {\n type Options = {\n /**\n * Private key to compute the public key from.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n }\n\n type ErrorType =\n | Hex.from.ErrorType\n | PublicKey.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Generates a random ECDSA private key on the secp256k1 curve.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = Secp256k1.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(\n options: randomPrivateKey.Options<as> = {},\n): randomPrivateKey.ReturnType<as> {\n const { as = 'Hex' } = options\n const bytes = secp256k1.utils.randomPrivateKey()\n if (as === 'Hex') return Hex.fromBytes(bytes) as never\n return bytes as never\n}\n\nexport declare namespace randomPrivateKey {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n /**\n * Format of the returned private key.\n * @default 'Hex'\n */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing address from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const address = Secp256k1.recoverAddress({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered address.\n */\nexport function recoverAddress(\n options: recoverAddress.Options,\n): recoverAddress.ReturnType {\n return Address.fromPublicKey(recoverPublicKey(options))\n}\n\nexport declare namespace recoverAddress {\n type Options = {\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n\n type ReturnType = Address.Address\n\n type ErrorType =\n | Address.fromPublicKey.ErrorType\n | recoverPublicKey.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing public key from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const publicKey = Secp256k1.recoverPublicKey({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered public key.\n */\nexport function recoverPublicKey(\n options: recoverPublicKey.Options,\n): PublicKey.PublicKey {\n const { payload, signature } = options\n const { r, s, yParity } = signature\n const signature_ = new secp256k1.Signature(\n BigInt(r),\n BigInt(s),\n ).addRecoveryBit(yParity)\n const point = signature_.recoverPublicKey(Hex.from(payload).substring(2))\n return PublicKey.from(point)\n}\n\nexport declare namespace recoverPublicKey {\n type Options = {\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n\n type ErrorType =\n | PublicKey.from.ErrorType\n | Hex.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Signs the payload with the provided private key.\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The signing options.\n * @returns The ECDSA {@link ox#Signature.Signature}.\n */\nexport function sign(options: sign.Options): Signature.Signature {\n const {\n extraEntropy = Entropy.extraEntropy,\n hash,\n payload,\n privateKey,\n } = options\n const { r, s, recovery } = secp256k1.sign(\n Bytes.from(payload),\n Bytes.from(privateKey),\n {\n extraEntropy:\n typeof extraEntropy === 'boolean'\n ? extraEntropy\n : Hex.from(extraEntropy).slice(2),\n lowS: true,\n ...(hash ? { prehash: true } : {}),\n },\n )\n return {\n r,\n s,\n yParity: recovery,\n }\n}\n\nexport declare namespace sign {\n type Options = {\n /**\n * Extra entropy to add to the signing process. Setting to `false` will disable it.\n * @default true\n */\n extraEntropy?: boolean | Hex.Hex | Bytes.Bytes | undefined\n /**\n * If set to `true`, the payload will be hashed (sha256) before being signed.\n */\n hash?: boolean | undefined\n /**\n * Payload to sign.\n */\n payload: Hex.Hex | Bytes.Bytes\n /**\n * ECDSA private key.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n }\n\n type ErrorType = Bytes.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a payload was signed by the provided address.\n *\n * @example\n * ### Verify with Ethereum Address\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n * address: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Verify with Public Key\n *\n * ```ts twoslash\n * import { Secp256k1 } from 'ox'\n *\n * const privateKey = '0x...'\n * const publicKey = Secp256k1.getPublicKey({ privateKey })\n * const signature = Secp256k1.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = Secp256k1.verify({ // [!code focus]\n * publicKey, // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided address.\n */\nexport function verify(options: verify.Options): boolean {\n const { address, hash, payload, publicKey, signature } = options\n if (address)\n return Address.isEqual(address, recoverAddress({ payload, signature }))\n return secp256k1.verify(\n signature,\n Bytes.from(payload),\n PublicKey.toBytes(publicKey),\n ...(hash ? [{ prehash: true, lowS: true }] : []),\n )\n}\n\nexport declare namespace verify {\n type Options = {\n /** If set to `true`, the payload will be hashed (sha256) before being verified. */\n hash?: boolean | undefined\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n } & OneOf<\n | {\n /** Address that signed the payload. */\n address: Address.Address\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n | {\n /** Public key that signed the payload. */\n publicKey: PublicKey.PublicKey<boolean>\n /** Signature of the payload. */\n signature: Signature.Signature<false>\n }\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "export let extraEntropy = false\n\n/** @internal */\nexport function setExtraEntropy(entropy: boolean) {\n extraEntropy = entropy\n}\n", "import type { HDKey } from '@scure/bip32'\nimport type * as Errors from '../Errors.js'\nimport type * as HdKey from '../HdKey.js'\nimport * as Hex from '../Hex.js'\nimport * as Secp256k1 from '../Secp256k1.js'\n\n/** @internal */\nexport function fromScure(key: HDKey): HdKey.HdKey {\n return {\n derive: (path) => fromScure(key.derive(path)),\n depth: key.depth,\n identifier: Hex.fromBytes(key.identifier!),\n index: key.index,\n privateKey: Hex.fromBytes(key.privateKey!),\n privateExtendedKey: key.privateExtendedKey,\n publicKey: Secp256k1.getPublicKey({ privateKey: key.privateKey! }),\n publicExtendedKey: key.publicExtendedKey,\n versions: key.versions,\n }\n}\n\n/** @internal */\nexport declare namespace fromScure {\n type ErrorType = Errors.GlobalErrorType\n}\n", "export {};\n//# sourceMappingURL=Fee.js.map", "import type * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute } from './internal/types.js'\n\n/** A Log as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.yaml). */\nexport type Log<\n pending extends boolean = false,\n bigintType = bigint,\n numberType = number,\n> = Compute<{\n /** The address from which this log originated */\n address: Address.Address\n /** Hash of block containing this log or `null` if pending */\n blockHash: pending extends true ? null : Hex.Hex\n /** Number of block containing this log or `null` if pending */\n blockNumber: pending extends true ? null : bigintType\n /** Contains the non-integered arguments of the log */\n data: Hex.Hex\n /** Index of this log within its block or `null` if pending */\n logIndex: pending extends true ? null : numberType\n /** List of topics associated with this log */\n topics: [Hex.Hex, ...(readonly Hex.Hex[])]\n /** Hash of the transaction that created this log or `null` if pending */\n transactionHash: pending extends true ? null : Hex.Hex\n /** Index of the transaction that created this log or `null` if pending */\n transactionIndex: pending extends true ? null : numberType\n /** `true` if this filter has been destroyed and is invalid */\n removed: boolean\n}>\n\n/** An RPC Log as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.yaml). */\nexport type Rpc<pending extends boolean = false> = Log<\n pending,\n Hex.Hex,\n Hex.Hex\n>\n\n/**\n * Converts a {@link ox#Log.Rpc} to an {@link ox#Log.Log}.\n *\n * @example\n * ```ts twoslash\n * import { Log } from 'ox'\n *\n * const log = Log.fromRpc({\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x0000000000000000000000000000000000000000000000000000000000000000',\n * '0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1',\n * '0x000000000000000000000000000000000000000000000000000000000000025b',\n * ],\n * data: '0x',\n * blockHash:\n * '0xabe69134e80a12f6a93d0aa18215b5b86c2fb338bae911790ca374a8716e01a4',\n * blockNumber: '0x12d846c',\n * transactionHash:\n * '0xcfa52db0bc2cb5bdcb2c5bd8816df7a2f018a0e3964ab1ef4d794cf327966e93',\n * transactionIndex: '0x91',\n * logIndex: '0x10f',\n * removed: false,\n * })\n * // @log: {\n * // @log: address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * // @log: blockHash: '0xabe69134e80a12f6a93d0aa18215b5b86c2fb338bae911790ca374a8716e01a4',\n * // @log: blockNumber: 19760236n,\n * // @log: data: '0x',\n * // @log: logIndex: 271,\n * // @log: removed: false,\n * // @log: topics: [\n * // @log: \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n * // @log: \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n * // @log: \"0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1\",\n * // @log: \"0x000000000000000000000000000000000000000000000000000000000000025b\",\n * // @log: transactionHash:\n * // @log: '0xcfa52db0bc2cb5bdcb2c5bd8816df7a2f018a0e3964ab1ef4d794cf327966e93',\n * // @log: transactionIndex: 145,\n * // @log: }\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an example of how to use `Log.fromRpc` to instantiate a {@link ox#Log.Log} from an RPC log.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { AbiEvent, Hex, Log } from 'ox'\n *\n * const transfer = AbiEvent.from(\n * 'event Transfer(address indexed from, address indexed to, uint256 indexed value)',\n * )\n *\n * const { topics } = AbiEvent.encode(transfer)\n *\n * const logs = await window.ethereum!.request({\n * method: 'eth_getLogs',\n * params: [\n * {\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * fromBlock: Hex.fromNumber(19760235n),\n * toBlock: Hex.fromNumber(19760240n),\n * topics,\n * },\n * ],\n * })\n *\n * const log = Log.fromRpc(logs[0]) // [!code focus]\n * // @log: {\n * // @log: address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * // @log: blockHash: '0xabe69134e80a12f6a93d0aa18215b5b86c2fb338bae911790ca374a8716e01a4',\n * // @log: blockNumber: 19760236n,\n * // @log: data: '0x',\n * // @log: logIndex: 271,\n * // @log: removed: false,\n * // @log: topics: [\n * // @log: \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\n * // @log: \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n * // @log: \"0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1\",\n * // @log: \"0x000000000000000000000000000000000000000000000000000000000000025b\",\n * // @log: transactionHash:\n * // @log: '0xcfa52db0bc2cb5bdcb2c5bd8816df7a2f018a0e3964ab1ef4d794cf327966e93',\n * // @log: transactionIndex: 145,\n * // @log: }\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param log - The RPC log to convert.\n * @returns An instantiated {@link ox#Log.Log}.\n */\nexport function fromRpc<\n const log extends Rpc<boolean>,\n pending extends boolean = false,\n>(\n log: log | Rpc<boolean>,\n _options: fromRpc.Options<pending> = {},\n): Log<pending> {\n return {\n ...log,\n blockNumber: log.blockNumber ? BigInt(log.blockNumber) : null,\n logIndex: log.logIndex ? Number(log.logIndex) : null,\n transactionIndex: log.transactionIndex\n ? Number(log.transactionIndex)\n : null,\n } as Log<pending>\n}\n\nexport declare namespace fromRpc {\n type Options<pending extends boolean = false> = {\n pending?: pending | boolean | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#Log.Log} to a {@link ox#Log.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { Log } from 'ox'\n *\n * const log = Log.toRpc({\n * address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * blockHash:\n * '0xabe69134e80a12f6a93d0aa18215b5b86c2fb338bae911790ca374a8716e01a4',\n * blockNumber: 19760236n,\n * data: '0x',\n * logIndex: 271,\n * removed: false,\n * topics: [\n * '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * '0x0000000000000000000000000000000000000000000000000000000000000000',\n * '0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1',\n * '0x000000000000000000000000000000000000000000000000000000000000025b',\n * ],\n * transactionHash:\n * '0xcfa52db0bc2cb5bdcb2c5bd8816df7a2f018a0e3964ab1ef4d794cf327966e93',\n * transactionIndex: 145,\n * })\n * // @log: {\n * // @log: address: '0xfba3912ca04dd458c843e2ee08967fc04f3579c2',\n * // @log: blockHash: '0xabe69134e80a12f6a93d0aa18215b5b86c2fb338bae911790ca374a8716e01a4',\n * // @log: blockNumber: '0x012d846c',\n * // @log: data: '0x',\n * // @log: logIndex: '0x010f',\n * // @log: removed: false,\n * // @log: topics: [\n * // @log: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',\n * // @log: '0x0000000000000000000000000000000000000000000000000000000000000000',\n * // @log: '0x0000000000000000000000000c04d9e9278ec5e4d424476d3ebec70cb5d648d1',\n * // @log: '0x000000000000000000000000000000000000000000000000000000000000025b',\n * // @log: ],\n * // @log: transactionHash:\n * // @log: '0xcfa52db0bc2cb5bdcb2c5bd8816df7a2f018a0e3964ab1ef4d794cf327966e93',\n * // @log: transactionIndex: '0x91',\n * // @log: }\n * ```\n *\n * @param log - The log to convert.\n * @returns An RPC log.\n */\nexport function toRpc<\n const log extends Log<boolean>,\n pending extends boolean = false,\n>(log: log, _options: toRpc.Options<pending> = {}): Rpc<pending> {\n return {\n address: log.address,\n blockHash: log.blockHash,\n blockNumber:\n typeof log.blockNumber === 'bigint'\n ? Hex.fromNumber(log.blockNumber)\n : null,\n data: log.data,\n logIndex:\n typeof log.logIndex === 'number' ? Hex.fromNumber(log.logIndex) : null,\n topics: log.topics,\n transactionHash: log.transactionHash,\n transactionIndex:\n typeof log.transactionIndex === 'number'\n ? Hex.fromNumber(log.transactionIndex)\n : null,\n removed: log.removed,\n } as Rpc as never\n}\n\nexport declare namespace toRpc {\n type Options<pending extends boolean = false> = {\n pending?: pending | boolean | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import {\n generateMnemonic,\n mnemonicToSeedSync,\n validateMnemonic,\n} from '@scure/bip39'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as HdKey from './HdKey.js'\nimport type * as Hex from './Hex.js'\n\nexport { path } from './HdKey.js'\n\nexport {\n english,\n czech,\n french,\n italian,\n japanese,\n korean,\n portuguese,\n simplifiedChinese,\n spanish,\n traditionalChinese,\n} from './internal/mnemonic/wordlists.js'\n\n/**\n * Generates a random mnemonic.\n *\n * @example\n * ```ts twoslash\n * import { Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.random(Mnemonic.english)\n * // @log: 'buyer zoo end danger ice capable shrug naive twist relief mass bonus'\n * ```\n *\n * @param wordlist - The wordlist to use.\n * @param options - Generation options.\n * @returns The mnemonic.\n */\nexport function random(\n wordlist: string[],\n options: random.Options = {},\n): string {\n const { strength = 128 } = options\n return generateMnemonic(wordlist, strength)\n}\n\nexport declare namespace random {\n type Options = {\n /**\n * The strength of the mnemonic to generate, in bits.\n * @default 128\n */\n strength?: number | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a mnemonic to a HD Key.\n *\n * @example\n * ```ts twoslash\n * import { Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.random(Mnemonic.english)\n * const hdKey = Mnemonic.toHdKey(mnemonic)\n * ```\n *\n * @example\n * ### Path Derivation\n *\n * You can derive a HD Key at a specific path using `derive`:\n *\n * ```ts twoslash\n * import { Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.random(Mnemonic.english)\n * const hdKey = Mnemonic.toHdKey(mnemonic).derive(Mnemonic.path({ index: 1 }))\n * ```\n *\n * @param mnemonic - The mnemonic to convert.\n * @param options - Conversion options.\n * @returns The HD Key.\n */\nexport function toHdKey(\n mnemonic: string,\n options: toHdKey.Options = {},\n): HdKey.HdKey {\n const { passphrase } = options\n const seed = toSeed(mnemonic, { passphrase })\n return HdKey.fromSeed(seed)\n}\n\nexport declare namespace toHdKey {\n type Options = {\n /** An optional passphrase for additional protection to the seed. */\n passphrase?: string | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a mnemonic to a private key.\n *\n * @example\n * ```ts twoslash\n * import { Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.random(Mnemonic.english)\n * const privateKey = Mnemonic.toPrivateKey(mnemonic)\n * // @log: '0x...'\n * ```\n *\n * @example\n * ### Paths\n *\n * You can derive a private key at a specific path using the `path` option.\n *\n * ```ts twoslash\n * import { Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.random(Mnemonic.english)\n * const privateKey = Mnemonic.toPrivateKey(mnemonic, {\n * path: Mnemonic.path({ index: 1 }) // 'm/44'/60'/0'/0/1' // [!code focus]\n * })\n * // @log: '0x...'\n * ```\n *\n * @param mnemonic - The mnemonic to convert.\n * @param options - Conversion options.\n * @returns The private key.\n */\nexport function toPrivateKey<as extends 'Bytes' | 'Hex' = 'Bytes'>(\n mnemonic: string,\n options: toPrivateKey.Options<as> = {},\n): toPrivateKey.ReturnType<as> {\n const { path = HdKey.path(), passphrase } = options\n const hdKey = toHdKey(mnemonic, { passphrase }).derive(path)\n if (options.as === 'Bytes') return Bytes.from(hdKey.privateKey) as never\n return hdKey.privateKey as never\n}\n\nexport declare namespace toPrivateKey {\n type Options<as extends 'Bytes' | 'Hex' = 'Bytes'> = {\n /** The output format. @default 'Bytes' */\n as?: as | 'Bytes' | 'Hex' | undefined\n /** An optional path to derive the private key from. @default `m/44'/60'/0'/0/0` */\n path?: string | undefined\n /** An optional passphrase for additional protection to the seed. */\n passphrase?: string | undefined\n }\n\n type ReturnType<as extends 'Bytes' | 'Hex' = 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts a mnemonic to a master seed.\n *\n * @example\n * ```ts twoslash\n * import { Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.random(Mnemonic.english)\n * const seed = Mnemonic.toSeed(mnemonic)\n * // @log: Uint8Array [...64 bytes]\n * ```\n *\n * @param mnemonic - The mnemonic to convert.\n * @param options - Conversion options.\n * @returns The master seed.\n */\nexport function toSeed<as extends 'Bytes' | 'Hex' = 'Bytes'>(\n mnemonic: string,\n options: toSeed.Options<as> = {},\n): toSeed.ReturnType<as> {\n const { passphrase } = options\n const seed = mnemonicToSeedSync(mnemonic, passphrase)\n if (options.as === 'Hex') return Bytes.toHex(seed) as never\n return seed as never\n}\n\nexport declare namespace toSeed {\n type Options<as extends 'Bytes' | 'Hex' = 'Bytes'> = {\n /** The output format. @default 'Bytes' */\n as?: as | 'Bytes' | 'Hex' | undefined\n /** An optional passphrase for additional protection to the seed. */\n passphrase?: string | undefined\n }\n\n type ReturnType<as extends 'Bytes' | 'Hex' = 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Checks if a mnemonic is valid, given a wordlist.\n *\n * @example\n * ```ts twoslash\n * import { Mnemonic } from 'ox'\n *\n * const mnemonic = Mnemonic.validate(\n * 'buyer zoo end danger ice capable shrug naive twist relief mass bonus',\n * Mnemonic.english\n * )\n * // @log: true\n * ```\n *\n * @param mnemonic - The mnemonic to validate.\n * @param wordlist - The wordlist to use.\n * @returns Whether the mnemonic is valid.\n */\nexport function validate(mnemonic: string, wordlist: string[]): boolean {\n return validateMnemonic(mnemonic, wordlist)\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n", "/**\n * PBKDF (RFC 2898). Can be used to create a key from password and salt.\n * @module\n */\nimport { ahash, anumber } from './_assert.js';\nimport { hmac } from './hmac.js';\nimport {\n asyncLoop,\n checkOpts,\n createView,\n Hash,\n toBytes,\n type CHash,\n type Input,\n} from './utils.js';\n\nexport type Pbkdf2Opt = {\n c: number; // Iterations\n dkLen?: number; // Desired key length in bytes (Intended output length in octets of the derived key\n asyncTick?: number; // Maximum time in ms for which async function can block execution\n};\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: Input, _salt: Input, _opts: Pbkdf2Opt) {\n ahash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n anumber(c);\n anumber(dkLen);\n anumber(asyncTick);\n if (c < 1) throw new Error('PBKDF2: iterations (c) should be >= 1');\n const password = toBytes(_password);\n const salt = toBytes(_salt);\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n PRF: Hash<T>,\n PRFSalt: Hash<T>,\n DK: Uint8Array,\n prfW: Hash<T>,\n u: Uint8Array\n) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW) prfW.destroy();\n u.fill(0);\n return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n * @example\n * const key = pbkdf2(sha256, 'password', 'salt', { dkLen: 32, c: 2 ** 18 });\n */\nexport function pbkdf2(hash: CHash, password: Input, salt: Input, opts: Pbkdf2Opt): Uint8Array {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function. Async version.\n * @example\n * await pbkdf2Async(sha256, 'password', 'salt', { dkLen: 32, c: 500_000 });\n */\nexport async function pbkdf2Async(\n hash: CHash,\n password: Input,\n salt: Input,\n opts: Pbkdf2Opt\n): Promise<Uint8Array> {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, () => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n", "/**\n * Audited & minimal JS implementation of\n * [BIP39 mnemonic phrases](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki).\n * @module\n * @example\n```js\nimport * as bip39 from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nconst mn = bip39.generateMnemonic(wordlist);\nconsole.log(mn);\nconst ent = bip39.mnemonicToEntropy(mn, wordlist)\nbip39.entropyToMnemonic(ent, wordlist);\nbip39.validateMnemonic(mn, wordlist);\nawait bip39.mnemonicToSeed(mn, 'password');\nbip39.mnemonicToSeedSync(mn, 'password');\n\n// Wordlists\nimport { wordlist as czech } from '@scure/bip39/wordlists/czech';\nimport { wordlist as english } from '@scure/bip39/wordlists/english';\nimport { wordlist as french } from '@scure/bip39/wordlists/french';\nimport { wordlist as italian } from '@scure/bip39/wordlists/italian';\nimport { wordlist as japanese } from '@scure/bip39/wordlists/japanese';\nimport { wordlist as korean } from '@scure/bip39/wordlists/korean';\nimport { wordlist as portuguese } from '@scure/bip39/wordlists/portuguese';\nimport { wordlist as simplifiedChinese } from '@scure/bip39/wordlists/simplified-chinese';\nimport { wordlist as spanish } from '@scure/bip39/wordlists/spanish';\nimport { wordlist as traditionalChinese } from '@scure/bip39/wordlists/traditional-chinese';\n```\n */\n/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { abytes, anumber } from '@noble/hashes/_assert';\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { sha512 } from '@noble/hashes/sha512';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { utils as baseUtils } from '@scure/base';\n// Japanese wordlist\nconst isJapanese = (wordlist) => wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093';\n// Normalization replaces equivalent sequences of characters\n// so that any two texts that are equivalent will be reduced\n// to the same sequence of code points, called the normal form of the original text.\n// https://tonsky.me/blog/unicode/#why-is-a----\nfunction nfkd(str) {\n if (typeof str !== 'string')\n throw new TypeError('invalid mnemonic type: ' + typeof str);\n return str.normalize('NFKD');\n}\nfunction normalize(str) {\n const norm = nfkd(str);\n const words = norm.split(' ');\n if (![12, 15, 18, 21, 24].includes(words.length))\n throw new Error('Invalid mnemonic');\n return { nfkd: norm, words };\n}\nfunction aentropy(ent) {\n abytes(ent, 16, 20, 24, 28, 32);\n}\n/**\n * Generate x random words. Uses Cryptographically-Secure Random Number Generator.\n * @param wordlist imported wordlist for specific language\n * @param strength mnemonic strength 128-256 bits\n * @example\n * generateMnemonic(wordlist, 128)\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function generateMnemonic(wordlist, strength = 128) {\n anumber(strength);\n if (strength % 32 !== 0 || strength > 256)\n throw new TypeError('Invalid entropy');\n return entropyToMnemonic(randomBytes(strength / 8), wordlist);\n}\nconst calcChecksum = (entropy) => {\n // Checksum is ent.length/4 bits long\n const bitsLeft = 8 - entropy.length / 4;\n // Zero rightmost \"bitsLeft\" bits in byte\n // For example: bitsLeft=4 val=10111101 -> 10110000\n return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]);\n};\nfunction getCoder(wordlist) {\n if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== 'string')\n throw new Error('Wordlist: expected array of 2048 strings');\n wordlist.forEach((i) => {\n if (typeof i !== 'string')\n throw new Error('wordlist: non-string element: ' + i);\n });\n return baseUtils.chain(baseUtils.checksum(1, calcChecksum), baseUtils.radix2(11, true), baseUtils.alphabet(wordlist));\n}\n/**\n * Reversible: Converts mnemonic string to raw entropy in form of byte array.\n * @param mnemonic 12-24 words\n * @param wordlist imported wordlist for specific language\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToEntropy(mnem, wordlist)\n * // Produces\n * new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ])\n */\nexport function mnemonicToEntropy(mnemonic, wordlist) {\n const { words } = normalize(mnemonic);\n const entropy = getCoder(wordlist).decode(words);\n aentropy(entropy);\n return entropy;\n}\n/**\n * Reversible: Converts raw entropy in form of byte array to mnemonic string.\n * @param entropy byte array\n * @param wordlist imported wordlist for specific language\n * @returns 12-24 words\n * @example\n * const ent = new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ]);\n * entropyToMnemonic(ent, wordlist);\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function entropyToMnemonic(entropy, wordlist) {\n aentropy(entropy);\n const words = getCoder(wordlist).encode(entropy);\n return words.join(isJapanese(wordlist) ? '\\u3000' : ' ');\n}\n/**\n * Validates mnemonic for being 12-24 words contained in `wordlist`.\n */\nexport function validateMnemonic(mnemonic, wordlist) {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n }\n catch (e) {\n return false;\n }\n return true;\n}\nconst psalt = (passphrase) => nfkd('mnemonic' + passphrase);\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * await mnemonicToSeed(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeed(mnemonic, passphrase = '') {\n return pbkdf2Async(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedSync(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedSync(mnemonic, passphrase = '') {\n return pbkdf2(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n", "export const wordlist = `abdikace\nabeceda\nadresa\nagrese\nakce\naktovka\nalej\nalkohol\namputace\nananas\nandulka\nanekdota\nanketa\nantika\nanulovat\narcha\narogance\nasfalt\nasistent\naspirace\nastma\nastronom\natlas\natletika\natol\nautobus\nazyl\nbabka\nbachor\nbacil\nbaculka\nbadatel\nbageta\nbagr\nbahno\nbakterie\nbalada\nbaletka\nbalkon\nbalonek\nbalvan\nbalza\nbambus\nbankomat\nbarbar\nbaret\nbarman\nbaroko\nbarva\nbaterka\nbatoh\nbavlna\nbazalka\nbazilika\nbazuka\nbedna\nberan\nbeseda\nbestie\nbeton\nbezinka\nbezmoc\nbeztak\nbicykl\nbidlo\nbiftek\nbikiny\nbilance\nbiograf\nbiolog\nbitva\nbizon\nblahobyt\nblatouch\nblecha\nbledule\nblesk\nblikat\nblizna\nblokovat\nbloudit\nblud\nbobek\nbobr\nbodlina\nbodnout\nbohatost\nbojkot\nbojovat\nbokorys\nbolest\nborec\nborovice\nbota\nboubel\nbouchat\nbouda\nboule\nbourat\nboxer\nbradavka\nbrambora\nbranka\nbratr\nbrepta\nbriketa\nbrko\nbrloh\nbronz\nbroskev\nbrunetka\nbrusinka\nbrzda\nbrzy\nbublina\nbubnovat\nbuchta\nbuditel\nbudka\nbudova\nbufet\nbujarost\nbukvice\nbuldok\nbulva\nbunda\nbunkr\nburza\nbutik\nbuvol\nbuzola\nbydlet\nbylina\nbytovka\nbzukot\ncapart\ncarevna\ncedr\ncedule\ncejch\ncejn\ncela\nceler\ncelkem\ncelnice\ncenina\ncennost\ncenovka\ncentrum\ncenzor\ncestopis\ncetka\nchalupa\nchapadlo\ncharita\nchata\nchechtat\nchemie\nchichot\nchirurg\nchlad\nchleba\nchlubit\nchmel\nchmura\nchobot\nchochol\nchodba\ncholera\nchomout\nchopit\nchoroba\nchov\nchrapot\nchrlit\nchrt\nchrup\nchtivost\nchudina\nchutnat\nchvat\nchvilka\nchvost\nchyba\nchystat\nchytit\ncibule\ncigareta\ncihelna\ncihla\ncinkot\ncirkus\ncisterna\ncitace\ncitrus\ncizinec\ncizost\nclona\ncokoliv\ncouvat\nctitel\nctnost\ncudnost\ncuketa\ncukr\ncupot\ncvaknout\ncval\ncvik\ncvrkot\ncyklista\ndaleko\ndareba\ndatel\ndatum\ndcera\ndebata\ndechovka\ndecibel\ndeficit\ndeflace\ndekl\ndekret\ndemokrat\ndeprese\nderby\ndeska\ndetektiv\ndikobraz\ndiktovat\ndioda\ndiplom\ndisk\ndisplej\ndivadlo\ndivoch\ndlaha\ndlouho\ndluhopis\ndnes\ndobro\ndobytek\ndocent\ndochutit\ndodnes\ndohled\ndohoda\ndohra\ndojem\ndojnice\ndoklad\ndokola\ndoktor\ndokument\ndolar\ndoleva\ndolina\ndoma\ndominant\ndomluvit\ndomov\ndonutit\ndopad\ndopis\ndoplnit\ndoposud\ndoprovod\ndopustit\ndorazit\ndorost\ndort\ndosah\ndoslov\ndostatek\ndosud\ndosyta\ndotaz\ndotek\ndotknout\ndoufat\ndoutnat\ndovozce\ndozadu\ndoznat\ndozorce\ndrahota\ndrak\ndramatik\ndravec\ndraze\ndrdol\ndrobnost\ndrogerie\ndrozd\ndrsnost\ndrtit\ndrzost\nduben\nduchovno\ndudek\nduha\nduhovka\ndusit\ndusno\ndutost\ndvojice\ndvorec\ndynamit\nekolog\nekonomie\nelektron\nelipsa\nemail\nemise\nemoce\nempatie\nepizoda\nepocha\nepopej\nepos\nesej\nesence\neskorta\neskymo\netiketa\neuforie\nevoluce\nexekuce\nexkurze\nexpedice\nexploze\nexport\nextrakt\nfacka\nfajfka\nfakulta\nfanatik\nfantazie\nfarmacie\nfavorit\nfazole\nfederace\nfejeton\nfenka\nfialka\nfigurant\nfilozof\nfiltr\nfinance\nfinta\nfixace\nfjord\nflanel\nflirt\nflotila\nfond\nfosfor\nfotbal\nfotka\nfoton\nfrakce\nfreska\nfronta\nfukar\nfunkce\nfyzika\ngaleje\ngarant\ngenetika\ngeolog\ngilotina\nglazura\nglejt\ngolem\ngolfista\ngotika\ngraf\ngramofon\ngranule\ngrep\ngril\ngrog\ngroteska\nguma\nhadice\nhadr\nhala\nhalenka\nhanba\nhanopis\nharfa\nharpuna\nhavran\nhebkost\nhejkal\nhejno\nhejtman\nhektar\nhelma\nhematom\nherec\nherna\nheslo\nhezky\nhistorik\nhladovka\nhlasivky\nhlava\nhledat\nhlen\nhlodavec\nhloh\nhloupost\nhltat\nhlubina\nhluchota\nhmat\nhmota\nhmyz\nhnis\nhnojivo\nhnout\nhoblina\nhoboj\nhoch\nhodiny\nhodlat\nhodnota\nhodovat\nhojnost\nhokej\nholinka\nholka\nholub\nhomole\nhonitba\nhonorace\nhoral\nhorda\nhorizont\nhorko\nhorlivec\nhormon\nhornina\nhoroskop\nhorstvo\nhospoda\nhostina\nhotovost\nhouba\nhouf\nhoupat\nhouska\nhovor\nhradba\nhranice\nhravost\nhrazda\nhrbolek\nhrdina\nhrdlo\nhrdost\nhrnek\nhrobka\nhromada\nhrot\nhrouda\nhrozen\nhrstka\nhrubost\nhryzat\nhubenost\nhubnout\nhudba\nhukot\nhumr\nhusita\nhustota\nhvozd\nhybnost\nhydrant\nhygiena\nhymna\nhysterik\nidylka\nihned\nikona\niluze\nimunita\ninfekce\ninflace\ninkaso\ninovace\ninspekce\ninternet\ninvalida\ninvestor\ninzerce\nironie\njablko\njachta\njahoda\njakmile\njakost\njalovec\njantar\njarmark\njaro\njasan\njasno\njatka\njavor\njazyk\njedinec\njedle\njednatel\njehlan\njekot\njelen\njelito\njemnost\njenom\njepice\njeseter\njevit\njezdec\njezero\njinak\njindy\njinoch\njiskra\njistota\njitrnice\njizva\njmenovat\njogurt\njurta\nkabaret\nkabel\nkabinet\nkachna\nkadet\nkadidlo\nkahan\nkajak\nkajuta\nkakao\nkaktus\nkalamita\nkalhoty\nkalibr\nkalnost\nkamera\nkamkoliv\nkamna\nkanibal\nkanoe\nkantor\nkapalina\nkapela\nkapitola\nkapka\nkaple\nkapota\nkapr\nkapusta\nkapybara\nkaramel\nkarotka\nkarton\nkasa\nkatalog\nkatedra\nkauce\nkauza\nkavalec\nkazajka\nkazeta\nkazivost\nkdekoliv\nkdesi\nkedluben\nkemp\nkeramika\nkino\nklacek\nkladivo\nklam\nklapot\nklasika\nklaun\nklec\nklenba\nklepat\nklesnout\nklid\nklima\nklisna\nklobouk\nklokan\nklopa\nkloub\nklubovna\nklusat\nkluzkost\nkmen\nkmitat\nkmotr\nkniha\nknot\nkoalice\nkoberec\nkobka\nkobliha\nkobyla\nkocour\nkohout\nkojenec\nkokos\nkoktejl\nkolaps\nkoleda\nkolize\nkolo\nkomando\nkometa\nkomik\nkomnata\nkomora\nkompas\nkomunita\nkonat\nkoncept\nkondice\nkonec\nkonfese\nkongres\nkonina\nkonkurs\nkontakt\nkonzerva\nkopanec\nkopie\nkopnout\nkoprovka\nkorbel\nkorektor\nkormidlo\nkoroptev\nkorpus\nkoruna\nkoryto\nkorzet\nkosatec\nkostka\nkotel\nkotleta\nkotoul\nkoukat\nkoupelna\nkousek\nkouzlo\nkovboj\nkoza\nkozoroh\nkrabice\nkrach\nkrajina\nkralovat\nkrasopis\nkravata\nkredit\nkrejcar\nkresba\nkreveta\nkriket\nkritik\nkrize\nkrkavec\nkrmelec\nkrmivo\nkrocan\nkrok\nkronika\nkropit\nkroupa\nkrovka\nkrtek\nkruhadlo\nkrupice\nkrutost\nkrvinka\nkrychle\nkrypta\nkrystal\nkryt\nkudlanka\nkufr\nkujnost\nkukla\nkulajda\nkulich\nkulka\nkulomet\nkultura\nkuna\nkupodivu\nkurt\nkurzor\nkutil\nkvalita\nkvasinka\nkvestor\nkynolog\nkyselina\nkytara\nkytice\nkytka\nkytovec\nkyvadlo\nlabrador\nlachtan\nladnost\nlaik\nlakomec\nlamela\nlampa\nlanovka\nlasice\nlaso\nlastura\nlatinka\nlavina\nlebka\nleckdy\nleden\nlednice\nledovka\nledvina\nlegenda\nlegie\nlegrace\nlehce\nlehkost\nlehnout\nlektvar\nlenochod\nlentilka\nlepenka\nlepidlo\nletadlo\nletec\nletmo\nletokruh\nlevhart\nlevitace\nlevobok\nlibra\nlichotka\nlidojed\nlidskost\nlihovina\nlijavec\nlilek\nlimetka\nlinie\nlinka\nlinoleum\nlistopad\nlitina\nlitovat\nlobista\nlodivod\nlogika\nlogoped\nlokalita\nloket\nlomcovat\nlopata\nlopuch\nlord\nlosos\nlotr\nloudal\nlouh\nlouka\nlouskat\nlovec\nlstivost\nlucerna\nlucifer\nlump\nlusk\nlustrace\nlvice\nlyra\nlyrika\nlysina\nmadam\nmadlo\nmagistr\nmahagon\nmajetek\nmajitel\nmajorita\nmakak\nmakovice\nmakrela\nmalba\nmalina\nmalovat\nmalvice\nmaminka\nmandle\nmanko\nmarnost\nmasakr\nmaskot\nmasopust\nmatice\nmatrika\nmaturita\nmazanec\nmazivo\nmazlit\nmazurka\nmdloba\nmechanik\nmeditace\nmedovina\nmelasa\nmeloun\nmentolka\nmetla\nmetoda\nmetr\nmezera\nmigrace\nmihnout\nmihule\nmikina\nmikrofon\nmilenec\nmilimetr\nmilost\nmimika\nmincovna\nminibar\nminomet\nminulost\nmiska\nmistr\nmixovat\nmladost\nmlha\nmlhovina\nmlok\nmlsat\nmluvit\nmnich\nmnohem\nmobil\nmocnost\nmodelka\nmodlitba\nmohyla\nmokro\nmolekula\nmomentka\nmonarcha\nmonokl\nmonstrum\nmontovat\nmonzun\nmosaz\nmoskyt\nmost\nmotivace\nmotorka\nmotyka\nmoucha\nmoudrost\nmozaika\nmozek\nmozol\nmramor\nmravenec\nmrkev\nmrtvola\nmrzet\nmrzutost\nmstitel\nmudrc\nmuflon\nmulat\nmumie\nmunice\nmuset\nmutace\nmuzeum\nmuzikant\nmyslivec\nmzda\nnabourat\nnachytat\nnadace\nnadbytek\nnadhoz\nnadobro\nnadpis\nnahlas\nnahnat\nnahodile\nnahradit\nnaivita\nnajednou\nnajisto\nnajmout\nnaklonit\nnakonec\nnakrmit\nnalevo\nnamazat\nnamluvit\nnanometr\nnaoko\nnaopak\nnaostro\nnapadat\nnapevno\nnaplnit\nnapnout\nnaposled\nnaprosto\nnarodit\nnaruby\nnarychlo\nnasadit\nnasekat\nnaslepo\nnastat\nnatolik\nnavenek\nnavrch\nnavzdory\nnazvat\nnebe\nnechat\nnecky\nnedaleko\nnedbat\nneduh\nnegace\nnehet\nnehoda\nnejen\nnejprve\nneklid\nnelibost\nnemilost\nnemoc\nneochota\nneonka\nnepokoj\nnerost\nnerv\nnesmysl\nnesoulad\nnetvor\nneuron\nnevina\nnezvykle\nnicota\nnijak\nnikam\nnikdy\nnikl\nnikterak\nnitro\nnocleh\nnohavice\nnominace\nnora\nnorek\nnositel\nnosnost\nnouze\nnoviny\nnovota\nnozdra\nnuda\nnudle\nnuget\nnutit\nnutnost\nnutrie\nnymfa\nobal\nobarvit\nobava\nobdiv\nobec\nobehnat\nobejmout\nobezita\nobhajoba\nobilnice\nobjasnit\nobjekt\nobklopit\noblast\noblek\nobliba\nobloha\nobluda\nobnos\nobohatit\nobojek\nobout\nobrazec\nobrna\nobruba\nobrys\nobsah\nobsluha\nobstarat\nobuv\nobvaz\nobvinit\nobvod\nobvykle\nobyvatel\nobzor\nocas\nocel\nocenit\nochladit\nochota\nochrana\nocitnout\nodboj\nodbyt\nodchod\nodcizit\nodebrat\nodeslat\nodevzdat\nodezva\nodhadce\nodhodit\nodjet\nodjinud\nodkaz\nodkoupit\nodliv\nodluka\nodmlka\nodolnost\nodpad\nodpis\nodplout\nodpor\nodpustit\nodpykat\nodrazka\nodsoudit\nodstup\nodsun\nodtok\nodtud\nodvaha\nodveta\nodvolat\nodvracet\nodznak\nofina\nofsajd\nohlas\nohnisko\nohrada\nohrozit\nohryzek\nokap\nokenice\noklika\nokno\nokouzlit\nokovy\nokrasa\nokres\nokrsek\nokruh\nokupant\nokurka\nokusit\nolejnina\nolizovat\nomak\nomeleta\nomezit\nomladina\nomlouvat\nomluva\nomyl\nonehdy\nopakovat\nopasek\noperace\nopice\nopilost\nopisovat\nopora\nopozice\nopravdu\noproti\norbital\norchestr\norgie\norlice\norloj\nortel\nosada\noschnout\nosika\nosivo\noslava\noslepit\noslnit\noslovit\nosnova\nosoba\nosolit\nospalec\nosten\nostraha\nostuda\nostych\nosvojit\noteplit\notisk\notop\notrhat\notrlost\notrok\notruby\notvor\novanout\novar\noves\novlivnit\novoce\noxid\nozdoba\npachatel\npacient\npadouch\npahorek\npakt\npalanda\npalec\npalivo\npaluba\npamflet\npamlsek\npanenka\npanika\npanna\npanovat\npanstvo\npantofle\npaprika\nparketa\nparodie\nparta\nparuka\nparyba\npaseka\npasivita\npastelka\npatent\npatrona\npavouk\npazneht\npazourek\npecka\npedagog\npejsek\npeklo\npeloton\npenalta\npendrek\npenze\nperiskop\npero\npestrost\npetarda\npetice\npetrolej\npevnina\npexeso\npianista\npiha\npijavice\npikle\npiknik\npilina\npilnost\npilulka\npinzeta\npipeta\npisatel\npistole\npitevna\npivnice\npivovar\nplacenta\nplakat\nplamen\nplaneta\nplastika\nplatit\nplavidlo\nplaz\nplech\nplemeno\nplenta\nples\npletivo\nplevel\nplivat\nplnit\nplno\nplocha\nplodina\nplomba\nplout\npluk\nplyn\npobavit\npobyt\npochod\npocit\npoctivec\npodat\npodcenit\npodepsat\npodhled\npodivit\npodklad\npodmanit\npodnik\npodoba\npodpora\npodraz\npodstata\npodvod\npodzim\npoezie\npohanka\npohnutka\npohovor\npohroma\npohyb\npointa\npojistka\npojmout\npokazit\npokles\npokoj\npokrok\npokuta\npokyn\npoledne\npolibek\npolknout\npoloha\npolynom\npomalu\npominout\npomlka\npomoc\npomsta\npomyslet\nponechat\nponorka\nponurost\npopadat\npopel\npopisek\npoplach\npoprosit\npopsat\npopud\nporadce\nporce\nporod\nporucha\nporyv\nposadit\nposed\nposila\nposkok\nposlanec\nposoudit\npospolu\npostava\nposudek\nposyp\npotah\npotkan\npotlesk\npotomek\npotrava\npotupa\npotvora\npoukaz\npouto\npouzdro\npovaha\npovidla\npovlak\npovoz\npovrch\npovstat\npovyk\npovzdech\npozdrav\npozemek\npoznatek\npozor\npozvat\npracovat\nprahory\npraktika\nprales\npraotec\npraporek\nprase\npravda\nprincip\nprkno\nprobudit\nprocento\nprodej\nprofese\nprohra\nprojekt\nprolomit\npromile\npronikat\npropad\nprorok\nprosba\nproton\nproutek\nprovaz\nprskavka\nprsten\nprudkost\nprut\nprvek\nprvohory\npsanec\npsovod\npstruh\nptactvo\npuberta\npuch\npudl\npukavec\npuklina\npukrle\npult\npumpa\npunc\npupen\npusa\npusinka\npustina\nputovat\nputyka\npyramida\npysk\npytel\nracek\nrachot\nradiace\nradnice\nradon\nraft\nragby\nraketa\nrakovina\nrameno\nrampouch\nrande\nrarach\nrarita\nrasovna\nrastr\nratolest\nrazance\nrazidlo\nreagovat\nreakce\nrecept\nredaktor\nreferent\nreflex\nrejnok\nreklama\nrekord\nrekrut\nrektor\nreputace\nrevize\nrevma\nrevolver\nrezerva\nriskovat\nriziko\nrobotika\nrodokmen\nrohovka\nrokle\nrokoko\nromaneto\nropovod\nropucha\nrorejs\nrosol\nrostlina\nrotmistr\nrotoped\nrotunda\nroubenka\nroucho\nroup\nroura\nrovina\nrovnice\nrozbor\nrozchod\nrozdat\nrozeznat\nrozhodce\nrozinka\nrozjezd\nrozkaz\nrozloha\nrozmar\nrozpad\nrozruch\nrozsah\nroztok\nrozum\nrozvod\nrubrika\nruchadlo\nrukavice\nrukopis\nryba\nrybolov\nrychlost\nrydlo\nrypadlo\nrytina\nryzost\nsadista\nsahat\nsako\nsamec\nsamizdat\nsamota\nsanitka\nsardinka\nsasanka\nsatelit\nsazba\nsazenice\nsbor\nschovat\nsebranka\nsecese\nsedadlo\nsediment\nsedlo\nsehnat\nsejmout\nsekera\nsekta\nsekunda\nsekvoje\nsemeno\nseno\nservis\nsesadit\nseshora\nseskok\nseslat\nsestra\nsesuv\nsesypat\nsetba\nsetina\nsetkat\nsetnout\nsetrvat\nsever\nseznam\nshoda\nshrnout\nsifon\nsilnice\nsirka\nsirotek\nsirup\nsituace\nskafandr\nskalisko\nskanzen\nskaut\nskeptik\nskica\nskladba\nsklenice\nsklo\nskluz\nskoba\nskokan\nskoro\nskripta\nskrz\nskupina\nskvost\nskvrna\nslabika\nsladidlo\nslanina\nslast\nslavnost\nsledovat\nslepec\nsleva\nslezina\nslib\nslina\nsliznice\nslon\nsloupek\nslovo\nsluch\nsluha\nslunce\nslupka\nslza\nsmaragd\nsmetana\nsmilstvo\nsmlouva\nsmog\nsmrad\nsmrk\nsmrtka\nsmutek\nsmysl\nsnad\nsnaha\nsnob\nsobota\nsocha\nsodovka\nsokol\nsopka\nsotva\nsouboj\nsoucit\nsoudce\nsouhlas\nsoulad\nsoumrak\nsouprava\nsoused\nsoutok\nsouviset\nspalovna\nspasitel\nspis\nsplav\nspodek\nspojenec\nspolu\nsponzor\nspornost\nspousta\nsprcha\nspustit\nsranda\nsraz\nsrdce\nsrna\nsrnec\nsrovnat\nsrpen\nsrst\nsrub\nstanice\nstarosta\nstatika\nstavba\nstehno\nstezka\nstodola\nstolek\nstopa\nstorno\nstoupat\nstrach\nstres\nstrhnout\nstrom\nstruna\nstudna\nstupnice\nstvol\nstyk\nsubjekt\nsubtropy\nsuchar\nsudost\nsukno\nsundat\nsunout\nsurikata\nsurovina\nsvah\nsvalstvo\nsvetr\nsvatba\nsvazek\nsvisle\nsvitek\nsvoboda\nsvodidlo\nsvorka\nsvrab\nsykavka\nsykot\nsynek\nsynovec\nsypat\nsypkost\nsyrovost\nsysel\nsytost\ntabletka\ntabule\ntahoun\ntajemno\ntajfun\ntajga\ntajit\ntajnost\ntaktika\ntamhle\ntampon\ntancovat\ntanec\ntanker\ntapeta\ntavenina\ntazatel\ntechnika\ntehdy\ntekutina\ntelefon\ntemnota\ntendence\ntenista\ntenor\nteplota\ntepna\nteprve\nterapie\ntermoska\ntextil\nticho\ntiskopis\ntitulek\ntkadlec\ntkanina\ntlapka\ntleskat\ntlukot\ntlupa\ntmel\ntoaleta\ntopinka\ntopol\ntorzo\ntouha\ntoulec\ntradice\ntraktor\ntramp\ntrasa\ntraverza\ntrefit\ntrest\ntrezor\ntrhavina\ntrhlina\ntrochu\ntrojice\ntroska\ntrouba\ntrpce\ntrpitel\ntrpkost\ntrubec\ntruchlit\ntruhlice\ntrus\ntrvat\ntudy\ntuhnout\ntuhost\ntundra\nturista\nturnaj\ntuzemsko\ntvaroh\ntvorba\ntvrdost\ntvrz\ntygr\ntykev\nubohost\nuboze\nubrat\nubrousek\nubrus\nubytovna\nucho\nuctivost\nudivit\nuhradit\nujednat\nujistit\nujmout\nukazatel\nuklidnit\nuklonit\nukotvit\nukrojit\nulice\nulita\nulovit\numyvadlo\nunavit\nuniforma\nuniknout\nupadnout\nuplatnit\nuplynout\nupoutat\nupravit\nuran\nurazit\nusednout\nusilovat\nusmrtit\nusnadnit\nusnout\nusoudit\nustlat\nustrnout\nutahovat\nutkat\nutlumit\nutonout\nutopenec\nutrousit\nuvalit\nuvolnit\nuvozovka\nuzdravit\nuzel\nuzenina\nuzlina\nuznat\nvagon\nvalcha\nvaloun\nvana\nvandal\nvanilka\nvaran\nvarhany\nvarovat\nvcelku\nvchod\nvdova\nvedro\nvegetace\nvejce\nvelbloud\nveletrh\nvelitel\nvelmoc\nvelryba\nvenkov\nveranda\nverze\nveselka\nveskrze\nvesnice\nvespodu\nvesta\nveterina\nveverka\nvibrace\nvichr\nvideohra\nvidina\nvidle\nvila\nvinice\nviset\nvitalita\nvize\nvizitka\nvjezd\nvklad\nvkus\nvlajka\nvlak\nvlasec\nvlevo\nvlhkost\nvliv\nvlnovka\nvloupat\nvnucovat\nvnuk\nvoda\nvodivost\nvodoznak\nvodstvo\nvojensky\nvojna\nvojsko\nvolant\nvolba\nvolit\nvolno\nvoskovka\nvozidlo\nvozovna\nvpravo\nvrabec\nvracet\nvrah\nvrata\nvrba\nvrcholek\nvrhat\nvrstva\nvrtule\nvsadit\nvstoupit\nvstup\nvtip\nvybavit\nvybrat\nvychovat\nvydat\nvydra\nvyfotit\nvyhledat\nvyhnout\nvyhodit\nvyhradit\nvyhubit\nvyjasnit\nvyjet\nvyjmout\nvyklopit\nvykonat\nvylekat\nvymazat\nvymezit\nvymizet\nvymyslet\nvynechat\nvynikat\nvynutit\nvypadat\nvyplatit\nvypravit\nvypustit\nvyrazit\nvyrovnat\nvyrvat\nvyslovit\nvysoko\nvystavit\nvysunout\nvysypat\nvytasit\nvytesat\nvytratit\nvyvinout\nvyvolat\nvyvrhel\nvyzdobit\nvyznat\nvzadu\nvzbudit\nvzchopit\nvzdor\nvzduch\nvzdychat\nvzestup\nvzhledem\nvzkaz\nvzlykat\nvznik\nvzorek\nvzpoura\nvztah\nvztek\nxylofon\nzabrat\nzabydlet\nzachovat\nzadarmo\nzadusit\nzafoukat\nzahltit\nzahodit\nzahrada\nzahynout\nzajatec\nzajet\nzajistit\nzaklepat\nzakoupit\nzalepit\nzamezit\nzamotat\nzamyslet\nzanechat\nzanikat\nzaplatit\nzapojit\nzapsat\nzarazit\nzastavit\nzasunout\nzatajit\nzatemnit\nzatknout\nzaujmout\nzavalit\nzavelet\nzavinit\nzavolat\nzavrtat\nzazvonit\nzbavit\nzbrusu\nzbudovat\nzbytek\nzdaleka\nzdarma\nzdatnost\nzdivo\nzdobit\nzdroj\nzdvih\nzdymadlo\nzelenina\nzeman\nzemina\nzeptat\nzezadu\nzezdola\nzhatit\nzhltnout\nzhluboka\nzhotovit\nzhruba\nzima\nzimnice\nzjemnit\nzklamat\nzkoumat\nzkratka\nzkumavka\nzlato\nzlehka\nzloba\nzlom\nzlost\nzlozvyk\nzmapovat\nzmar\nzmatek\nzmije\nzmizet\nzmocnit\nzmodrat\nzmrzlina\nzmutovat\nznak\nznalost\nznamenat\nznovu\nzobrazit\nzotavit\nzoubek\nzoufale\nzplodit\nzpomalit\nzprava\nzprostit\nzprudka\nzprvu\nzrada\nzranit\nzrcadlo\nzrnitost\nzrno\nzrovna\nzrychlit\nzrzavost\nzticha\nztratit\nzubovina\nzubr\nzvednout\nzvenku\nzvesela\nzvon\nzvrat\nzvukovod\nzvyk`.split('\\n');\n", "export const wordlist = `abandon\nability\nable\nabout\nabove\nabsent\nabsorb\nabstract\nabsurd\nabuse\naccess\naccident\naccount\naccuse\nachieve\nacid\nacoustic\nacquire\nacross\nact\naction\nactor\nactress\nactual\nadapt\nadd\naddict\naddress\nadjust\nadmit\nadult\nadvance\nadvice\naerobic\naffair\nafford\nafraid\nagain\nage\nagent\nagree\nahead\naim\nair\nairport\naisle\nalarm\nalbum\nalcohol\nalert\nalien\nall\nalley\nallow\nalmost\nalone\nalpha\nalready\nalso\nalter\nalways\namateur\namazing\namong\namount\namused\nanalyst\nanchor\nancient\nanger\nangle\nangry\nanimal\nankle\nannounce\nannual\nanother\nanswer\nantenna\nantique\nanxiety\nany\napart\napology\nappear\napple\napprove\napril\narch\narctic\narea\narena\nargue\narm\narmed\narmor\narmy\naround\narrange\narrest\narrive\narrow\nart\nartefact\nartist\nartwork\nask\naspect\nassault\nasset\nassist\nassume\nasthma\nathlete\natom\nattack\nattend\nattitude\nattract\nauction\naudit\naugust\naunt\nauthor\nauto\nautumn\naverage\navocado\navoid\nawake\naware\naway\nawesome\nawful\nawkward\naxis\nbaby\nbachelor\nbacon\nbadge\nbag\nbalance\nbalcony\nball\nbamboo\nbanana\nbanner\nbar\nbarely\nbargain\nbarrel\nbase\nbasic\nbasket\nbattle\nbeach\nbean\nbeauty\nbecause\nbecome\nbeef\nbefore\nbegin\nbehave\nbehind\nbelieve\nbelow\nbelt\nbench\nbenefit\nbest\nbetray\nbetter\nbetween\nbeyond\nbicycle\nbid\nbike\nbind\nbiology\nbird\nbirth\nbitter\nblack\nblade\nblame\nblanket\nblast\nbleak\nbless\nblind\nblood\nblossom\nblouse\nblue\nblur\nblush\nboard\nboat\nbody\nboil\nbomb\nbone\nbonus\nbook\nboost\nborder\nboring\nborrow\nboss\nbottom\nbounce\nbox\nboy\nbracket\nbrain\nbrand\nbrass\nbrave\nbread\nbreeze\nbrick\nbridge\nbrief\nbright\nbring\nbrisk\nbroccoli\nbroken\nbronze\nbroom\nbrother\nbrown\nbrush\nbubble\nbuddy\nbudget\nbuffalo\nbuild\nbulb\nbulk\nbullet\nbundle\nbunker\nburden\nburger\nburst\nbus\nbusiness\nbusy\nbutter\nbuyer\nbuzz\ncabbage\ncabin\ncable\ncactus\ncage\ncake\ncall\ncalm\ncamera\ncamp\ncan\ncanal\ncancel\ncandy\ncannon\ncanoe\ncanvas\ncanyon\ncapable\ncapital\ncaptain\ncar\ncarbon\ncard\ncargo\ncarpet\ncarry\ncart\ncase\ncash\ncasino\ncastle\ncasual\ncat\ncatalog\ncatch\ncategory\ncattle\ncaught\ncause\ncaution\ncave\nceiling\ncelery\ncement\ncensus\ncentury\ncereal\ncertain\nchair\nchalk\nchampion\nchange\nchaos\nchapter\ncharge\nchase\nchat\ncheap\ncheck\ncheese\nchef\ncherry\nchest\nchicken\nchief\nchild\nchimney\nchoice\nchoose\nchronic\nchuckle\nchunk\nchurn\ncigar\ncinnamon\ncircle\ncitizen\ncity\ncivil\nclaim\nclap\nclarify\nclaw\nclay\nclean\nclerk\nclever\nclick\nclient\ncliff\nclimb\nclinic\nclip\nclock\nclog\nclose\ncloth\ncloud\nclown\nclub\nclump\ncluster\nclutch\ncoach\ncoast\ncoconut\ncode\ncoffee\ncoil\ncoin\ncollect\ncolor\ncolumn\ncombine\ncome\ncomfort\ncomic\ncommon\ncompany\nconcert\nconduct\nconfirm\ncongress\nconnect\nconsider\ncontrol\nconvince\ncook\ncool\ncopper\ncopy\ncoral\ncore\ncorn\ncorrect\ncost\ncotton\ncouch\ncountry\ncouple\ncourse\ncousin\ncover\ncoyote\ncrack\ncradle\ncraft\ncram\ncrane\ncrash\ncrater\ncrawl\ncrazy\ncream\ncredit\ncreek\ncrew\ncricket\ncrime\ncrisp\ncritic\ncrop\ncross\ncrouch\ncrowd\ncrucial\ncruel\ncruise\ncrumble\ncrunch\ncrush\ncry\ncrystal\ncube\nculture\ncup\ncupboard\ncurious\ncurrent\ncurtain\ncurve\ncushion\ncustom\ncute\ncycle\ndad\ndamage\ndamp\ndance\ndanger\ndaring\ndash\ndaughter\ndawn\nday\ndeal\ndebate\ndebris\ndecade\ndecember\ndecide\ndecline\ndecorate\ndecrease\ndeer\ndefense\ndefine\ndefy\ndegree\ndelay\ndeliver\ndemand\ndemise\ndenial\ndentist\ndeny\ndepart\ndepend\ndeposit\ndepth\ndeputy\nderive\ndescribe\ndesert\ndesign\ndesk\ndespair\ndestroy\ndetail\ndetect\ndevelop\ndevice\ndevote\ndiagram\ndial\ndiamond\ndiary\ndice\ndiesel\ndiet\ndiffer\ndigital\ndignity\ndilemma\ndinner\ndinosaur\ndirect\ndirt\ndisagree\ndiscover\ndisease\ndish\ndismiss\ndisorder\ndisplay\ndistance\ndivert\ndivide\ndivorce\ndizzy\ndoctor\ndocument\ndog\ndoll\ndolphin\ndomain\ndonate\ndonkey\ndonor\ndoor\ndose\ndouble\ndove\ndraft\ndragon\ndrama\ndrastic\ndraw\ndream\ndress\ndrift\ndrill\ndrink\ndrip\ndrive\ndrop\ndrum\ndry\nduck\ndumb\ndune\nduring\ndust\ndutch\nduty\ndwarf\ndynamic\neager\neagle\nearly\nearn\nearth\neasily\neast\neasy\necho\necology\neconomy\nedge\nedit\neducate\neffort\negg\neight\neither\nelbow\nelder\nelectric\nelegant\nelement\nelephant\nelevator\nelite\nelse\nembark\nembody\nembrace\nemerge\nemotion\nemploy\nempower\nempty\nenable\nenact\nend\nendless\nendorse\nenemy\nenergy\nenforce\nengage\nengine\nenhance\nenjoy\nenlist\nenough\nenrich\nenroll\nensure\nenter\nentire\nentry\nenvelope\nepisode\nequal\nequip\nera\nerase\nerode\nerosion\nerror\nerupt\nescape\nessay\nessence\nestate\neternal\nethics\nevidence\nevil\nevoke\nevolve\nexact\nexample\nexcess\nexchange\nexcite\nexclude\nexcuse\nexecute\nexercise\nexhaust\nexhibit\nexile\nexist\nexit\nexotic\nexpand\nexpect\nexpire\nexplain\nexpose\nexpress\nextend\nextra\neye\neyebrow\nfabric\nface\nfaculty\nfade\nfaint\nfaith\nfall\nfalse\nfame\nfamily\nfamous\nfan\nfancy\nfantasy\nfarm\nfashion\nfat\nfatal\nfather\nfatigue\nfault\nfavorite\nfeature\nfebruary\nfederal\nfee\nfeed\nfeel\nfemale\nfence\nfestival\nfetch\nfever\nfew\nfiber\nfiction\nfield\nfigure\nfile\nfilm\nfilter\nfinal\nfind\nfine\nfinger\nfinish\nfire\nfirm\nfirst\nfiscal\nfish\nfit\nfitness\nfix\nflag\nflame\nflash\nflat\nflavor\nflee\nflight\nflip\nfloat\nflock\nfloor\nflower\nfluid\nflush\nfly\nfoam\nfocus\nfog\nfoil\nfold\nfollow\nfood\nfoot\nforce\nforest\nforget\nfork\nfortune\nforum\nforward\nfossil\nfoster\nfound\nfox\nfragile\nframe\nfrequent\nfresh\nfriend\nfringe\nfrog\nfront\nfrost\nfrown\nfrozen\nfruit\nfuel\nfun\nfunny\nfurnace\nfury\nfuture\ngadget\ngain\ngalaxy\ngallery\ngame\ngap\ngarage\ngarbage\ngarden\ngarlic\ngarment\ngas\ngasp\ngate\ngather\ngauge\ngaze\ngeneral\ngenius\ngenre\ngentle\ngenuine\ngesture\nghost\ngiant\ngift\ngiggle\nginger\ngiraffe\ngirl\ngive\nglad\nglance\nglare\nglass\nglide\nglimpse\nglobe\ngloom\nglory\nglove\nglow\nglue\ngoat\ngoddess\ngold\ngood\ngoose\ngorilla\ngospel\ngossip\ngovern\ngown\ngrab\ngrace\ngrain\ngrant\ngrape\ngrass\ngravity\ngreat\ngreen\ngrid\ngrief\ngrit\ngrocery\ngroup\ngrow\ngrunt\nguard\nguess\nguide\nguilt\nguitar\ngun\ngym\nhabit\nhair\nhalf\nhammer\nhamster\nhand\nhappy\nharbor\nhard\nharsh\nharvest\nhat\nhave\nhawk\nhazard\nhead\nhealth\nheart\nheavy\nhedgehog\nheight\nhello\nhelmet\nhelp\nhen\nhero\nhidden\nhigh\nhill\nhint\nhip\nhire\nhistory\nhobby\nhockey\nhold\nhole\nholiday\nhollow\nhome\nhoney\nhood\nhope\nhorn\nhorror\nhorse\nhospital\nhost\nhotel\nhour\nhover\nhub\nhuge\nhuman\nhumble\nhumor\nhundred\nhungry\nhunt\nhurdle\nhurry\nhurt\nhusband\nhybrid\nice\nicon\nidea\nidentify\nidle\nignore\nill\nillegal\nillness\nimage\nimitate\nimmense\nimmune\nimpact\nimpose\nimprove\nimpulse\ninch\ninclude\nincome\nincrease\nindex\nindicate\nindoor\nindustry\ninfant\ninflict\ninform\ninhale\ninherit\ninitial\ninject\ninjury\ninmate\ninner\ninnocent\ninput\ninquiry\ninsane\ninsect\ninside\ninspire\ninstall\nintact\ninterest\ninto\ninvest\ninvite\ninvolve\niron\nisland\nisolate\nissue\nitem\nivory\njacket\njaguar\njar\njazz\njealous\njeans\njelly\njewel\njob\njoin\njoke\njourney\njoy\njudge\njuice\njump\njungle\njunior\njunk\njust\nkangaroo\nkeen\nkeep\nketchup\nkey\nkick\nkid\nkidney\nkind\nkingdom\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknee\nknife\nknock\nknow\nlab\nlabel\nlabor\nladder\nlady\nlake\nlamp\nlanguage\nlaptop\nlarge\nlater\nlatin\nlaugh\nlaundry\nlava\nlaw\nlawn\nlawsuit\nlayer\nlazy\nleader\nleaf\nlearn\nleave\nlecture\nleft\nleg\nlegal\nlegend\nleisure\nlemon\nlend\nlength\nlens\nleopard\nlesson\nletter\nlevel\nliar\nliberty\nlibrary\nlicense\nlife\nlift\nlight\nlike\nlimb\nlimit\nlink\nlion\nliquid\nlist\nlittle\nlive\nlizard\nload\nloan\nlobster\nlocal\nlock\nlogic\nlonely\nlong\nloop\nlottery\nloud\nlounge\nlove\nloyal\nlucky\nluggage\nlumber\nlunar\nlunch\nluxury\nlyrics\nmachine\nmad\nmagic\nmagnet\nmaid\nmail\nmain\nmajor\nmake\nmammal\nman\nmanage\nmandate\nmango\nmansion\nmanual\nmaple\nmarble\nmarch\nmargin\nmarine\nmarket\nmarriage\nmask\nmass\nmaster\nmatch\nmaterial\nmath\nmatrix\nmatter\nmaximum\nmaze\nmeadow\nmean\nmeasure\nmeat\nmechanic\nmedal\nmedia\nmelody\nmelt\nmember\nmemory\nmention\nmenu\nmercy\nmerge\nmerit\nmerry\nmesh\nmessage\nmetal\nmethod\nmiddle\nmidnight\nmilk\nmillion\nmimic\nmind\nminimum\nminor\nminute\nmiracle\nmirror\nmisery\nmiss\nmistake\nmix\nmixed\nmixture\nmobile\nmodel\nmodify\nmom\nmoment\nmonitor\nmonkey\nmonster\nmonth\nmoon\nmoral\nmore\nmorning\nmosquito\nmother\nmotion\nmotor\nmountain\nmouse\nmove\nmovie\nmuch\nmuffin\nmule\nmultiply\nmuscle\nmuseum\nmushroom\nmusic\nmust\nmutual\nmyself\nmystery\nmyth\nnaive\nname\nnapkin\nnarrow\nnasty\nnation\nnature\nnear\nneck\nneed\nnegative\nneglect\nneither\nnephew\nnerve\nnest\nnet\nnetwork\nneutral\nnever\nnews\nnext\nnice\nnight\nnoble\nnoise\nnominee\nnoodle\nnormal\nnorth\nnose\nnotable\nnote\nnothing\nnotice\nnovel\nnow\nnuclear\nnumber\nnurse\nnut\noak\nobey\nobject\noblige\nobscure\nobserve\nobtain\nobvious\noccur\nocean\noctober\nodor\noff\noffer\noffice\noften\noil\nokay\nold\nolive\nolympic\nomit\nonce\none\nonion\nonline\nonly\nopen\nopera\nopinion\noppose\noption\norange\norbit\norchard\norder\nordinary\norgan\norient\noriginal\norphan\nostrich\nother\noutdoor\nouter\noutput\noutside\noval\noven\nover\nown\nowner\noxygen\noyster\nozone\npact\npaddle\npage\npair\npalace\npalm\npanda\npanel\npanic\npanther\npaper\nparade\nparent\npark\nparrot\nparty\npass\npatch\npath\npatient\npatrol\npattern\npause\npave\npayment\npeace\npeanut\npear\npeasant\npelican\npen\npenalty\npencil\npeople\npepper\nperfect\npermit\nperson\npet\nphone\nphoto\nphrase\nphysical\npiano\npicnic\npicture\npiece\npig\npigeon\npill\npilot\npink\npioneer\npipe\npistol\npitch\npizza\nplace\nplanet\nplastic\nplate\nplay\nplease\npledge\npluck\nplug\nplunge\npoem\npoet\npoint\npolar\npole\npolice\npond\npony\npool\npopular\nportion\nposition\npossible\npost\npotato\npottery\npoverty\npowder\npower\npractice\npraise\npredict\nprefer\nprepare\npresent\npretty\nprevent\nprice\npride\nprimary\nprint\npriority\nprison\nprivate\nprize\nproblem\nprocess\nproduce\nprofit\nprogram\nproject\npromote\nproof\nproperty\nprosper\nprotect\nproud\nprovide\npublic\npudding\npull\npulp\npulse\npumpkin\npunch\npupil\npuppy\npurchase\npurity\npurpose\npurse\npush\nput\npuzzle\npyramid\nquality\nquantum\nquarter\nquestion\nquick\nquit\nquiz\nquote\nrabbit\nraccoon\nrace\nrack\nradar\nradio\nrail\nrain\nraise\nrally\nramp\nranch\nrandom\nrange\nrapid\nrare\nrate\nrather\nraven\nraw\nrazor\nready\nreal\nreason\nrebel\nrebuild\nrecall\nreceive\nrecipe\nrecord\nrecycle\nreduce\nreflect\nreform\nrefuse\nregion\nregret\nregular\nreject\nrelax\nrelease\nrelief\nrely\nremain\nremember\nremind\nremove\nrender\nrenew\nrent\nreopen\nrepair\nrepeat\nreplace\nreport\nrequire\nrescue\nresemble\nresist\nresource\nresponse\nresult\nretire\nretreat\nreturn\nreunion\nreveal\nreview\nreward\nrhythm\nrib\nribbon\nrice\nrich\nride\nridge\nrifle\nright\nrigid\nring\nriot\nripple\nrisk\nritual\nrival\nriver\nroad\nroast\nrobot\nrobust\nrocket\nromance\nroof\nrookie\nroom\nrose\nrotate\nrough\nround\nroute\nroyal\nrubber\nrude\nrug\nrule\nrun\nrunway\nrural\nsad\nsaddle\nsadness\nsafe\nsail\nsalad\nsalmon\nsalon\nsalt\nsalute\nsame\nsample\nsand\nsatisfy\nsatoshi\nsauce\nsausage\nsave\nsay\nscale\nscan\nscare\nscatter\nscene\nscheme\nschool\nscience\nscissors\nscorpion\nscout\nscrap\nscreen\nscript\nscrub\nsea\nsearch\nseason\nseat\nsecond\nsecret\nsection\nsecurity\nseed\nseek\nsegment\nselect\nsell\nseminar\nsenior\nsense\nsentence\nseries\nservice\nsession\nsettle\nsetup\nseven\nshadow\nshaft\nshallow\nshare\nshed\nshell\nsheriff\nshield\nshift\nshine\nship\nshiver\nshock\nshoe\nshoot\nshop\nshort\nshoulder\nshove\nshrimp\nshrug\nshuffle\nshy\nsibling\nsick\nside\nsiege\nsight\nsign\nsilent\nsilk\nsilly\nsilver\nsimilar\nsimple\nsince\nsing\nsiren\nsister\nsituate\nsix\nsize\nskate\nsketch\nski\nskill\nskin\nskirt\nskull\nslab\nslam\nsleep\nslender\nslice\nslide\nslight\nslim\nslogan\nslot\nslow\nslush\nsmall\nsmart\nsmile\nsmoke\nsmooth\nsnack\nsnake\nsnap\nsniff\nsnow\nsoap\nsoccer\nsocial\nsock\nsoda\nsoft\nsolar\nsoldier\nsolid\nsolution\nsolve\nsomeone\nsong\nsoon\nsorry\nsort\nsoul\nsound\nsoup\nsource\nsouth\nspace\nspare\nspatial\nspawn\nspeak\nspecial\nspeed\nspell\nspend\nsphere\nspice\nspider\nspike\nspin\nspirit\nsplit\nspoil\nsponsor\nspoon\nsport\nspot\nspray\nspread\nspring\nspy\nsquare\nsqueeze\nsquirrel\nstable\nstadium\nstaff\nstage\nstairs\nstamp\nstand\nstart\nstate\nstay\nsteak\nsteel\nstem\nstep\nstereo\nstick\nstill\nsting\nstock\nstomach\nstone\nstool\nstory\nstove\nstrategy\nstreet\nstrike\nstrong\nstruggle\nstudent\nstuff\nstumble\nstyle\nsubject\nsubmit\nsubway\nsuccess\nsuch\nsudden\nsuffer\nsugar\nsuggest\nsuit\nsummer\nsun\nsunny\nsunset\nsuper\nsupply\nsupreme\nsure\nsurface\nsurge\nsurprise\nsurround\nsurvey\nsuspect\nsustain\nswallow\nswamp\nswap\nswarm\nswear\nsweet\nswift\nswim\nswing\nswitch\nsword\nsymbol\nsymptom\nsyrup\nsystem\ntable\ntackle\ntag\ntail\ntalent\ntalk\ntank\ntape\ntarget\ntask\ntaste\ntattoo\ntaxi\nteach\nteam\ntell\nten\ntenant\ntennis\ntent\nterm\ntest\ntext\nthank\nthat\ntheme\nthen\ntheory\nthere\nthey\nthing\nthis\nthought\nthree\nthrive\nthrow\nthumb\nthunder\nticket\ntide\ntiger\ntilt\ntimber\ntime\ntiny\ntip\ntired\ntissue\ntitle\ntoast\ntobacco\ntoday\ntoddler\ntoe\ntogether\ntoilet\ntoken\ntomato\ntomorrow\ntone\ntongue\ntonight\ntool\ntooth\ntop\ntopic\ntopple\ntorch\ntornado\ntortoise\ntoss\ntotal\ntourist\ntoward\ntower\ntown\ntoy\ntrack\ntrade\ntraffic\ntragic\ntrain\ntransfer\ntrap\ntrash\ntravel\ntray\ntreat\ntree\ntrend\ntrial\ntribe\ntrick\ntrigger\ntrim\ntrip\ntrophy\ntrouble\ntruck\ntrue\ntruly\ntrumpet\ntrust\ntruth\ntry\ntube\ntuition\ntumble\ntuna\ntunnel\nturkey\nturn\nturtle\ntwelve\ntwenty\ntwice\ntwin\ntwist\ntwo\ntype\ntypical\nugly\numbrella\nunable\nunaware\nuncle\nuncover\nunder\nundo\nunfair\nunfold\nunhappy\nuniform\nunique\nunit\nuniverse\nunknown\nunlock\nuntil\nunusual\nunveil\nupdate\nupgrade\nuphold\nupon\nupper\nupset\nurban\nurge\nusage\nuse\nused\nuseful\nuseless\nusual\nutility\nvacant\nvacuum\nvague\nvalid\nvalley\nvalve\nvan\nvanish\nvapor\nvarious\nvast\nvault\nvehicle\nvelvet\nvendor\nventure\nvenue\nverb\nverify\nversion\nvery\nvessel\nveteran\nviable\nvibrant\nvicious\nvictory\nvideo\nview\nvillage\nvintage\nviolin\nvirtual\nvirus\nvisa\nvisit\nvisual\nvital\nvivid\nvocal\nvoice\nvoid\nvolcano\nvolume\nvote\nvoyage\nwage\nwagon\nwait\nwalk\nwall\nwalnut\nwant\nwarfare\nwarm\nwarrior\nwash\nwasp\nwaste\nwater\nwave\nway\nwealth\nweapon\nwear\nweasel\nweather\nweb\nwedding\nweekend\nweird\nwelcome\nwest\nwet\nwhale\nwhat\nwheat\nwheel\nwhen\nwhere\nwhip\nwhisper\nwide\nwidth\nwife\nwild\nwill\nwin\nwindow\nwine\nwing\nwink\nwinner\nwinter\nwire\nwisdom\nwise\nwish\nwitness\nwolf\nwoman\nwonder\nwood\nwool\nword\nwork\nworld\nworry\nworth\nwrap\nwreck\nwrestle\nwrist\nwrite\nwrong\nyard\nyear\nyellow\nyou\nyoung\nyouth\nzebra\nzero\nzone\nzoo`.split('\\n');\n", "export const wordlist = `abaisser\nabandon\nabdiquer\nabeille\nabolir\naborder\naboutir\naboyer\nabrasif\nabreuver\nabriter\nabroger\nabrupt\nabsence\nabsolu\nabsurde\nabusif\nabyssal\nacadémie\nacajou\nacarien\naccabler\naccepter\nacclamer\naccolade\naccroche\naccuser\nacerbe\nachat\nacheter\naciduler\nacier\nacompte\nacquérir\nacronyme\nacteur\nactif\nactuel\nadepte\nadéquat\nadhésif\nadjectif\nadjuger\nadmettre\nadmirer\nadopter\nadorer\nadoucir\nadresse\nadroit\nadulte\nadverbe\naérer\naéronef\naffaire\naffecter\naffiche\naffreux\naffubler\nagacer\nagencer\nagile\nagiter\nagrafer\nagréable\nagrume\naider\naiguille\nailier\naimable\naisance\najouter\najuster\nalarmer\nalchimie\nalerte\nalgèbre\nalgue\naliéner\naliment\nalléger\nalliage\nallouer\nallumer\nalourdir\nalpaga\naltesse\nalvéole\namateur\nambigu\nambre\naménager\namertume\namidon\namiral\namorcer\namour\namovible\namphibie\nampleur\namusant\nanalyse\nanaphore\nanarchie\nanatomie\nancien\nanéantir\nangle\nangoisse\nanguleux\nanimal\nannexer\nannonce\nannuel\nanodin\nanomalie\nanonyme\nanormal\nantenne\nantidote\nanxieux\napaiser\napéritif\naplanir\napologie\nappareil\nappeler\napporter\nappuyer\naquarium\naqueduc\narbitre\narbuste\nardeur\nardoise\nargent\narlequin\narmature\narmement\narmoire\narmure\narpenter\narracher\narriver\narroser\narsenic\nartériel\narticle\naspect\nasphalte\naspirer\nassaut\nasservir\nassiette\nassocier\nassurer\nasticot\nastre\nastuce\natelier\natome\natrium\natroce\nattaque\nattentif\nattirer\nattraper\naubaine\nauberge\naudace\naudible\naugurer\naurore\nautomne\nautruche\navaler\navancer\navarice\navenir\naverse\naveugle\naviateur\navide\navion\naviser\navoine\navouer\navril\naxial\naxiome\nbadge\nbafouer\nbagage\nbaguette\nbaignade\nbalancer\nbalcon\nbaleine\nbalisage\nbambin\nbancaire\nbandage\nbanlieue\nbannière\nbanquier\nbarbier\nbaril\nbaron\nbarque\nbarrage\nbassin\nbastion\nbataille\nbateau\nbatterie\nbaudrier\nbavarder\nbelette\nbélier\nbelote\nbénéfice\nberceau\nberger\nberline\nbermuda\nbesace\nbesogne\nbétail\nbeurre\nbiberon\nbicycle\nbidule\nbijou\nbilan\nbilingue\nbillard\nbinaire\nbiologie\nbiopsie\nbiotype\nbiscuit\nbison\nbistouri\nbitume\nbizarre\nblafard\nblague\nblanchir\nblessant\nblinder\nblond\nbloquer\nblouson\nbobard\nbobine\nboire\nboiser\nbolide\nbonbon\nbondir\nbonheur\nbonifier\nbonus\nbordure\nborne\nbotte\nboucle\nboueux\nbougie\nboulon\nbouquin\nbourse\nboussole\nboutique\nboxeur\nbranche\nbrasier\nbrave\nbrebis\nbrèche\nbreuvage\nbricoler\nbrigade\nbrillant\nbrioche\nbrique\nbrochure\nbroder\nbronzer\nbrousse\nbroyeur\nbrume\nbrusque\nbrutal\nbruyant\nbuffle\nbuisson\nbulletin\nbureau\nburin\nbustier\nbutiner\nbutoir\nbuvable\nbuvette\ncabanon\ncabine\ncachette\ncadeau\ncadre\ncaféine\ncaillou\ncaisson\ncalculer\ncalepin\ncalibre\ncalmer\ncalomnie\ncalvaire\ncamarade\ncaméra\ncamion\ncampagne\ncanal\ncaneton\ncanon\ncantine\ncanular\ncapable\ncaporal\ncaprice\ncapsule\ncapter\ncapuche\ncarabine\ncarbone\ncaresser\ncaribou\ncarnage\ncarotte\ncarreau\ncarton\ncascade\ncasier\ncasque\ncassure\ncauser\ncaution\ncavalier\ncaverne\ncaviar\ncédille\nceinture\ncéleste\ncellule\ncendrier\ncensurer\ncentral\ncercle\ncérébral\ncerise\ncerner\ncerveau\ncesser\nchagrin\nchaise\nchaleur\nchambre\nchance\nchapitre\ncharbon\nchasseur\nchaton\nchausson\nchavirer\nchemise\nchenille\nchéquier\nchercher\ncheval\nchien\nchiffre\nchignon\nchimère\nchiot\nchlorure\nchocolat\nchoisir\nchose\nchouette\nchrome\nchute\ncigare\ncigogne\ncimenter\ncinéma\ncintrer\ncirculer\ncirer\ncirque\nciterne\ncitoyen\ncitron\ncivil\nclairon\nclameur\nclaquer\nclasse\nclavier\nclient\ncligner\nclimat\nclivage\ncloche\nclonage\ncloporte\ncobalt\ncobra\ncocasse\ncocotier\ncoder\ncodifier\ncoffre\ncogner\ncohésion\ncoiffer\ncoincer\ncolère\ncolibri\ncolline\ncolmater\ncolonel\ncombat\ncomédie\ncommande\ncompact\nconcert\nconduire\nconfier\ncongeler\nconnoter\nconsonne\ncontact\nconvexe\ncopain\ncopie\ncorail\ncorbeau\ncordage\ncorniche\ncorpus\ncorrect\ncortège\ncosmique\ncostume\ncoton\ncoude\ncoupure\ncourage\ncouteau\ncouvrir\ncoyote\ncrabe\ncrainte\ncravate\ncrayon\ncréature\ncréditer\ncrémeux\ncreuser\ncrevette\ncribler\ncrier\ncristal\ncritère\ncroire\ncroquer\ncrotale\ncrucial\ncruel\ncrypter\ncubique\ncueillir\ncuillère\ncuisine\ncuivre\nculminer\ncultiver\ncumuler\ncupide\ncuratif\ncurseur\ncyanure\ncycle\ncylindre\ncynique\ndaigner\ndamier\ndanger\ndanseur\ndauphin\ndébattre\ndébiter\ndéborder\ndébrider\ndébutant\ndécaler\ndécembre\ndéchirer\ndécider\ndéclarer\ndécorer\ndécrire\ndécupler\ndédale\ndéductif\ndéesse\ndéfensif\ndéfiler\ndéfrayer\ndégager\ndégivrer\ndéglutir\ndégrafer\ndéjeuner\ndélice\ndéloger\ndemander\ndemeurer\ndémolir\ndénicher\ndénouer\ndentelle\ndénuder\ndépart\ndépenser\ndéphaser\ndéplacer\ndéposer\ndéranger\ndérober\ndésastre\ndescente\ndésert\ndésigner\ndésobéir\ndessiner\ndestrier\ndétacher\ndétester\ndétourer\ndétresse\ndevancer\ndevenir\ndeviner\ndevoir\ndiable\ndialogue\ndiamant\ndicter\ndifférer\ndigérer\ndigital\ndigne\ndiluer\ndimanche\ndiminuer\ndioxyde\ndirectif\ndiriger\ndiscuter\ndisposer\ndissiper\ndistance\ndivertir\ndiviser\ndocile\ndocteur\ndogme\ndoigt\ndomaine\ndomicile\ndompter\ndonateur\ndonjon\ndonner\ndopamine\ndortoir\ndorure\ndosage\ndoseur\ndossier\ndotation\ndouanier\ndouble\ndouceur\ndouter\ndoyen\ndragon\ndraper\ndresser\ndribbler\ndroiture\nduperie\nduplexe\ndurable\ndurcir\ndynastie\néblouir\nécarter\nécharpe\néchelle\néclairer\néclipse\néclore\nécluse\nécole\néconomie\nécorce\nécouter\nécraser\nécrémer\nécrivain\nécrou\nécume\nécureuil\nédifier\néduquer\neffacer\neffectif\neffigie\neffort\neffrayer\neffusion\négaliser\négarer\néjecter\nélaborer\nélargir\nélectron\nélégant\néléphant\nélève\néligible\nélitisme\néloge\nélucider\néluder\nemballer\nembellir\nembryon\némeraude\némission\nemmener\némotion\némouvoir\nempereur\nemployer\nemporter\nemprise\némulsion\nencadrer\nenchère\nenclave\nencoche\nendiguer\nendosser\nendroit\nenduire\nénergie\nenfance\nenfermer\nenfouir\nengager\nengin\nenglober\nénigme\nenjamber\nenjeu\nenlever\nennemi\nennuyeux\nenrichir\nenrobage\nenseigne\nentasser\nentendre\nentier\nentourer\nentraver\nénumérer\nenvahir\nenviable\nenvoyer\nenzyme\néolien\népaissir\népargne\népatant\népaule\népicerie\népidémie\népier\népilogue\népine\népisode\népitaphe\népoque\népreuve\néprouver\népuisant\néquerre\néquipe\nériger\nérosion\nerreur\néruption\nescalier\nespadon\nespèce\nespiègle\nespoir\nesprit\nesquiver\nessayer\nessence\nessieu\nessorer\nestime\nestomac\nestrade\nétagère\nétaler\nétanche\nétatique\néteindre\nétendoir\néternel\néthanol\néthique\nethnie\nétirer\nétoffer\nétoile\nétonnant\nétourdir\nétrange\nétroit\nétude\neuphorie\névaluer\névasion\néventail\névidence\néviter\névolutif\névoquer\nexact\nexagérer\nexaucer\nexceller\nexcitant\nexclusif\nexcuse\nexécuter\nexemple\nexercer\nexhaler\nexhorter\nexigence\nexiler\nexister\nexotique\nexpédier\nexplorer\nexposer\nexprimer\nexquis\nextensif\nextraire\nexulter\nfable\nfabuleux\nfacette\nfacile\nfacture\nfaiblir\nfalaise\nfameux\nfamille\nfarceur\nfarfelu\nfarine\nfarouche\nfasciner\nfatal\nfatigue\nfaucon\nfautif\nfaveur\nfavori\nfébrile\nféconder\nfédérer\nfélin\nfemme\nfémur\nfendoir\nféodal\nfermer\nféroce\nferveur\nfestival\nfeuille\nfeutre\nfévrier\nfiasco\nficeler\nfictif\nfidèle\nfigure\nfilature\nfiletage\nfilière\nfilleul\nfilmer\nfilou\nfiltrer\nfinancer\nfinir\nfiole\nfirme\nfissure\nfixer\nflairer\nflamme\nflasque\nflatteur\nfléau\nflèche\nfleur\nflexion\nflocon\nflore\nfluctuer\nfluide\nfluvial\nfolie\nfonderie\nfongible\nfontaine\nforcer\nforgeron\nformuler\nfortune\nfossile\nfoudre\nfougère\nfouiller\nfoulure\nfourmi\nfragile\nfraise\nfranchir\nfrapper\nfrayeur\nfrégate\nfreiner\nfrelon\nfrémir\nfrénésie\nfrère\nfriable\nfriction\nfrisson\nfrivole\nfroid\nfromage\nfrontal\nfrotter\nfruit\nfugitif\nfuite\nfureur\nfurieux\nfurtif\nfusion\nfutur\ngagner\ngalaxie\ngalerie\ngambader\ngarantir\ngardien\ngarnir\ngarrigue\ngazelle\ngazon\ngéant\ngélatine\ngélule\ngendarme\ngénéral\ngénie\ngenou\ngentil\ngéologie\ngéomètre\ngéranium\ngerme\ngestuel\ngeyser\ngibier\ngicler\ngirafe\ngivre\nglace\nglaive\nglisser\nglobe\ngloire\nglorieux\ngolfeur\ngomme\ngonfler\ngorge\ngorille\ngoudron\ngouffre\ngoulot\ngoupille\ngourmand\ngoutte\ngraduel\ngraffiti\ngraine\ngrand\ngrappin\ngratuit\ngravir\ngrenat\ngriffure\ngriller\ngrimper\ngrogner\ngronder\ngrotte\ngroupe\ngruger\ngrutier\ngruyère\nguépard\nguerrier\nguide\nguimauve\nguitare\ngustatif\ngymnaste\ngyrostat\nhabitude\nhachoir\nhalte\nhameau\nhangar\nhanneton\nharicot\nharmonie\nharpon\nhasard\nhélium\nhématome\nherbe\nhérisson\nhermine\nhéron\nhésiter\nheureux\nhiberner\nhibou\nhilarant\nhistoire\nhiver\nhomard\nhommage\nhomogène\nhonneur\nhonorer\nhonteux\nhorde\nhorizon\nhorloge\nhormone\nhorrible\nhouleux\nhousse\nhublot\nhuileux\nhumain\nhumble\nhumide\nhumour\nhurler\nhydromel\nhygiène\nhymne\nhypnose\nidylle\nignorer\niguane\nillicite\nillusion\nimage\nimbiber\nimiter\nimmense\nimmobile\nimmuable\nimpact\nimpérial\nimplorer\nimposer\nimprimer\nimputer\nincarner\nincendie\nincident\nincliner\nincolore\nindexer\nindice\ninductif\ninédit\nineptie\ninexact\ninfini\ninfliger\ninformer\ninfusion\ningérer\ninhaler\ninhiber\ninjecter\ninjure\ninnocent\ninoculer\ninonder\ninscrire\ninsecte\ninsigne\ninsolite\ninspirer\ninstinct\ninsulter\nintact\nintense\nintime\nintrigue\nintuitif\ninutile\ninvasion\ninventer\ninviter\ninvoquer\nironique\nirradier\nirréel\nirriter\nisoler\nivoire\nivresse\njaguar\njaillir\njambe\njanvier\njardin\njauger\njaune\njavelot\njetable\njeton\njeudi\njeunesse\njoindre\njoncher\njongler\njoueur\njouissif\njournal\njovial\njoyau\njoyeux\njubiler\njugement\njunior\njupon\njuriste\njustice\njuteux\njuvénile\nkayak\nkimono\nkiosque\nlabel\nlabial\nlabourer\nlacérer\nlactose\nlagune\nlaine\nlaisser\nlaitier\nlambeau\nlamelle\nlampe\nlanceur\nlangage\nlanterne\nlapin\nlargeur\nlarme\nlaurier\nlavabo\nlavoir\nlecture\nlégal\nléger\nlégume\nlessive\nlettre\nlevier\nlexique\nlézard\nliasse\nlibérer\nlibre\nlicence\nlicorne\nliège\nlièvre\nligature\nligoter\nligue\nlimer\nlimite\nlimonade\nlimpide\nlinéaire\nlingot\nlionceau\nliquide\nlisière\nlister\nlithium\nlitige\nlittoral\nlivreur\nlogique\nlointain\nloisir\nlombric\nloterie\nlouer\nlourd\nloutre\nlouve\nloyal\nlubie\nlucide\nlucratif\nlueur\nlugubre\nluisant\nlumière\nlunaire\nlundi\nluron\nlutter\nluxueux\nmachine\nmagasin\nmagenta\nmagique\nmaigre\nmaillon\nmaintien\nmairie\nmaison\nmajorer\nmalaxer\nmaléfice\nmalheur\nmalice\nmallette\nmammouth\nmandater\nmaniable\nmanquant\nmanteau\nmanuel\nmarathon\nmarbre\nmarchand\nmardi\nmaritime\nmarqueur\nmarron\nmarteler\nmascotte\nmassif\nmatériel\nmatière\nmatraque\nmaudire\nmaussade\nmauve\nmaximal\nméchant\nméconnu\nmédaille\nmédecin\nméditer\nméduse\nmeilleur\nmélange\nmélodie\nmembre\nmémoire\nmenacer\nmener\nmenhir\nmensonge\nmentor\nmercredi\nmérite\nmerle\nmessager\nmesure\nmétal\nmétéore\nméthode\nmétier\nmeuble\nmiauler\nmicrobe\nmiette\nmignon\nmigrer\nmilieu\nmillion\nmimique\nmince\nminéral\nminimal\nminorer\nminute\nmiracle\nmiroiter\nmissile\nmixte\nmobile\nmoderne\nmoelleux\nmondial\nmoniteur\nmonnaie\nmonotone\nmonstre\nmontagne\nmonument\nmoqueur\nmorceau\nmorsure\nmortier\nmoteur\nmotif\nmouche\nmoufle\nmoulin\nmousson\nmouton\nmouvant\nmultiple\nmunition\nmuraille\nmurène\nmurmure\nmuscle\nmuséum\nmusicien\nmutation\nmuter\nmutuel\nmyriade\nmyrtille\nmystère\nmythique\nnageur\nnappe\nnarquois\nnarrer\nnatation\nnation\nnature\nnaufrage\nnautique\nnavire\nnébuleux\nnectar\nnéfaste\nnégation\nnégliger\nnégocier\nneige\nnerveux\nnettoyer\nneurone\nneutron\nneveu\nniche\nnickel\nnitrate\nniveau\nnoble\nnocif\nnocturne\nnoirceur\nnoisette\nnomade\nnombreux\nnommer\nnormatif\nnotable\nnotifier\nnotoire\nnourrir\nnouveau\nnovateur\nnovembre\nnovice\nnuage\nnuancer\nnuire\nnuisible\nnuméro\nnuptial\nnuque\nnutritif\nobéir\nobjectif\nobliger\nobscur\nobserver\nobstacle\nobtenir\nobturer\noccasion\noccuper\nocéan\noctobre\noctroyer\noctupler\noculaire\nodeur\nodorant\noffenser\nofficier\noffrir\nogive\noiseau\noisillon\nolfactif\nolivier\nombrage\nomettre\nonctueux\nonduler\nonéreux\nonirique\nopale\nopaque\nopérer\nopinion\nopportun\nopprimer\nopter\noptique\norageux\norange\norbite\nordonner\noreille\norgane\norgueil\norifice\nornement\norque\nortie\nosciller\nosmose\nossature\notarie\nouragan\nourson\noutil\noutrager\nouvrage\novation\noxyde\noxygène\nozone\npaisible\npalace\npalmarès\npalourde\npalper\npanache\npanda\npangolin\npaniquer\npanneau\npanorama\npantalon\npapaye\npapier\npapoter\npapyrus\nparadoxe\nparcelle\nparesse\nparfumer\nparler\nparole\nparrain\nparsemer\npartager\nparure\nparvenir\npassion\npastèque\npaternel\npatience\npatron\npavillon\npavoiser\npayer\npaysage\npeigne\npeintre\npelage\npélican\npelle\npelouse\npeluche\npendule\npénétrer\npénible\npensif\npénurie\npépite\npéplum\nperdrix\nperforer\npériode\npermuter\nperplexe\npersil\nperte\npeser\npétale\npetit\npétrir\npeuple\npharaon\nphobie\nphoque\nphoton\nphrase\nphysique\npiano\npictural\npièce\npierre\npieuvre\npilote\npinceau\npipette\npiquer\npirogue\npiscine\npiston\npivoter\npixel\npizza\nplacard\nplafond\nplaisir\nplaner\nplaque\nplastron\nplateau\npleurer\nplexus\npliage\nplomb\nplonger\npluie\nplumage\npochette\npoésie\npoète\npointe\npoirier\npoisson\npoivre\npolaire\npolicier\npollen\npolygone\npommade\npompier\nponctuel\npondérer\nponey\nportique\nposition\nposséder\nposture\npotager\npoteau\npotion\npouce\npoulain\npoumon\npourpre\npoussin\npouvoir\nprairie\npratique\nprécieux\nprédire\npréfixe\nprélude\nprénom\nprésence\nprétexte\nprévoir\nprimitif\nprince\nprison\npriver\nproblème\nprocéder\nprodige\nprofond\nprogrès\nproie\nprojeter\nprologue\npromener\npropre\nprospère\nprotéger\nprouesse\nproverbe\nprudence\npruneau\npsychose\npublic\npuceron\npuiser\npulpe\npulsar\npunaise\npunitif\npupitre\npurifier\npuzzle\npyramide\nquasar\nquerelle\nquestion\nquiétude\nquitter\nquotient\nracine\nraconter\nradieux\nragondin\nraideur\nraisin\nralentir\nrallonge\nramasser\nrapide\nrasage\nratisser\nravager\nravin\nrayonner\nréactif\nréagir\nréaliser\nréanimer\nrecevoir\nréciter\nréclamer\nrécolter\nrecruter\nreculer\nrecycler\nrédiger\nredouter\nrefaire\nréflexe\nréformer\nrefrain\nrefuge\nrégalien\nrégion\nréglage\nrégulier\nréitérer\nrejeter\nrejouer\nrelatif\nrelever\nrelief\nremarque\nremède\nremise\nremonter\nremplir\nremuer\nrenard\nrenfort\nrenifler\nrenoncer\nrentrer\nrenvoi\nreplier\nreporter\nreprise\nreptile\nrequin\nréserve\nrésineux\nrésoudre\nrespect\nrester\nrésultat\nrétablir\nretenir\nréticule\nretomber\nretracer\nréunion\nréussir\nrevanche\nrevivre\nrévolte\nrévulsif\nrichesse\nrideau\nrieur\nrigide\nrigoler\nrincer\nriposter\nrisible\nrisque\nrituel\nrival\nrivière\nrocheux\nromance\nrompre\nronce\nrondin\nroseau\nrosier\nrotatif\nrotor\nrotule\nrouge\nrouille\nrouleau\nroutine\nroyaume\nruban\nrubis\nruche\nruelle\nrugueux\nruiner\nruisseau\nruser\nrustique\nrythme\nsabler\nsaboter\nsabre\nsacoche\nsafari\nsagesse\nsaisir\nsalade\nsalive\nsalon\nsaluer\nsamedi\nsanction\nsanglier\nsarcasme\nsardine\nsaturer\nsaugrenu\nsaumon\nsauter\nsauvage\nsavant\nsavonner\nscalpel\nscandale\nscélérat\nscénario\nsceptre\nschéma\nscience\nscinder\nscore\nscrutin\nsculpter\nséance\nsécable\nsécher\nsecouer\nsécréter\nsédatif\nséduire\nseigneur\nséjour\nsélectif\nsemaine\nsembler\nsemence\nséminal\nsénateur\nsensible\nsentence\nséparer\nséquence\nserein\nsergent\nsérieux\nserrure\nsérum\nservice\nsésame\nsévir\nsevrage\nsextuple\nsidéral\nsiècle\nsiéger\nsiffler\nsigle\nsignal\nsilence\nsilicium\nsimple\nsincère\nsinistre\nsiphon\nsirop\nsismique\nsituer\nskier\nsocial\nsocle\nsodium\nsoigneux\nsoldat\nsoleil\nsolitude\nsoluble\nsombre\nsommeil\nsomnoler\nsonde\nsongeur\nsonnette\nsonore\nsorcier\nsortir\nsosie\nsottise\nsoucieux\nsoudure\nsouffle\nsoulever\nsoupape\nsource\nsoutirer\nsouvenir\nspacieux\nspatial\nspécial\nsphère\nspiral\nstable\nstation\nsternum\nstimulus\nstipuler\nstrict\nstudieux\nstupeur\nstyliste\nsublime\nsubstrat\nsubtil\nsubvenir\nsuccès\nsucre\nsuffixe\nsuggérer\nsuiveur\nsulfate\nsuperbe\nsupplier\nsurface\nsuricate\nsurmener\nsurprise\nsursaut\nsurvie\nsuspect\nsyllabe\nsymbole\nsymétrie\nsynapse\nsyntaxe\nsystème\ntabac\ntablier\ntactile\ntailler\ntalent\ntalisman\ntalonner\ntambour\ntamiser\ntangible\ntapis\ntaquiner\ntarder\ntarif\ntartine\ntasse\ntatami\ntatouage\ntaupe\ntaureau\ntaxer\ntémoin\ntemporel\ntenaille\ntendre\nteneur\ntenir\ntension\nterminer\nterne\nterrible\ntétine\ntexte\nthème\nthéorie\nthérapie\nthorax\ntibia\ntiède\ntimide\ntirelire\ntiroir\ntissu\ntitane\ntitre\ntituber\ntoboggan\ntolérant\ntomate\ntonique\ntonneau\ntoponyme\ntorche\ntordre\ntornade\ntorpille\ntorrent\ntorse\ntortue\ntotem\ntoucher\ntournage\ntousser\ntoxine\ntraction\ntrafic\ntragique\ntrahir\ntrain\ntrancher\ntravail\ntrèfle\ntremper\ntrésor\ntreuil\ntriage\ntribunal\ntricoter\ntrilogie\ntriomphe\ntripler\ntriturer\ntrivial\ntrombone\ntronc\ntropical\ntroupeau\ntuile\ntulipe\ntumulte\ntunnel\nturbine\ntuteur\ntutoyer\ntuyau\ntympan\ntyphon\ntypique\ntyran\nubuesque\nultime\nultrason\nunanime\nunifier\nunion\nunique\nunitaire\nunivers\nuranium\nurbain\nurticant\nusage\nusine\nusuel\nusure\nutile\nutopie\nvacarme\nvaccin\nvagabond\nvague\nvaillant\nvaincre\nvaisseau\nvalable\nvalise\nvallon\nvalve\nvampire\nvanille\nvapeur\nvarier\nvaseux\nvassal\nvaste\nvecteur\nvedette\nvégétal\nvéhicule\nveinard\nvéloce\nvendredi\nvénérer\nvenger\nvenimeux\nventouse\nverdure\nvérin\nvernir\nverrou\nverser\nvertu\nveston\nvétéran\nvétuste\nvexant\nvexer\nviaduc\nviande\nvictoire\nvidange\nvidéo\nvignette\nvigueur\nvilain\nvillage\nvinaigre\nviolon\nvipère\nvirement\nvirtuose\nvirus\nvisage\nviseur\nvision\nvisqueux\nvisuel\nvital\nvitesse\nviticole\nvitrine\nvivace\nvivipare\nvocation\nvoguer\nvoile\nvoisin\nvoiture\nvolaille\nvolcan\nvoltiger\nvolume\nvorace\nvortex\nvoter\nvouloir\nvoyage\nvoyelle\nwagon\nxénon\nyacht\nzèbre\nzénith\nzeste\nzoologie`.split('\\n');\n", "export const wordlist = `abaco\nabbaglio\nabbinato\nabete\nabisso\nabolire\nabrasivo\nabrogato\naccadere\naccenno\naccusato\nacetone\nachille\nacido\nacqua\nacre\nacrilico\nacrobata\nacuto\nadagio\naddebito\naddome\nadeguato\naderire\nadipe\nadottare\nadulare\naffabile\naffetto\naffisso\naffranto\naforisma\nafoso\nafricano\nagave\nagente\nagevole\naggancio\nagire\nagitare\nagonismo\nagricolo\nagrumeto\naguzzo\nalabarda\nalato\nalbatro\nalberato\nalbo\nalbume\nalce\nalcolico\nalettone\nalfa\nalgebra\naliante\nalibi\nalimento\nallagato\nallegro\nallievo\nallodola\nallusivo\nalmeno\nalogeno\nalpaca\nalpestre\naltalena\nalterno\nalticcio\naltrove\nalunno\nalveolo\nalzare\namalgama\namanita\namarena\nambito\nambrato\nameba\namerica\nametista\namico\nammasso\nammenda\nammirare\nammonito\namore\nampio\nampliare\namuleto\nanacardo\nanagrafe\nanalista\nanarchia\nanatra\nanca\nancella\nancora\nandare\nandrea\nanello\nangelo\nangolare\nangusto\nanima\nannegare\nannidato\nanno\nannuncio\nanonimo\nanticipo\nanzi\napatico\napertura\napode\napparire\nappetito\nappoggio\napprodo\nappunto\naprile\narabica\narachide\naragosta\naraldica\narancio\naratura\narazzo\narbitro\narchivio\nardito\narenile\nargento\nargine\narguto\naria\narmonia\narnese\narredato\narringa\narrosto\narsenico\narso\nartefice\narzillo\nasciutto\nascolto\nasepsi\nasettico\nasfalto\nasino\nasola\naspirato\naspro\nassaggio\nasse\nassoluto\nassurdo\nasta\nastenuto\nastice\nastratto\natavico\nateismo\natomico\natono\nattesa\nattivare\nattorno\nattrito\nattuale\nausilio\naustria\nautista\nautonomo\nautunno\navanzato\navere\navvenire\navviso\navvolgere\nazione\nazoto\nazzimo\nazzurro\nbabele\nbaccano\nbacino\nbaco\nbadessa\nbadilata\nbagnato\nbaita\nbalcone\nbaldo\nbalena\nballata\nbalzano\nbambino\nbandire\nbaraonda\nbarbaro\nbarca\nbaritono\nbarlume\nbarocco\nbasilico\nbasso\nbatosta\nbattuto\nbaule\nbava\nbavosa\nbecco\nbeffa\nbelgio\nbelva\nbenda\nbenevole\nbenigno\nbenzina\nbere\nberlina\nbeta\nbibita\nbici\nbidone\nbifido\nbiga\nbilancia\nbimbo\nbinocolo\nbiologo\nbipede\nbipolare\nbirbante\nbirra\nbiscotto\nbisesto\nbisnonno\nbisonte\nbisturi\nbizzarro\nblando\nblatta\nbollito\nbonifico\nbordo\nbosco\nbotanico\nbottino\nbozzolo\nbraccio\nbradipo\nbrama\nbranca\nbravura\nbretella\nbrevetto\nbrezza\nbriglia\nbrillante\nbrindare\nbroccolo\nbrodo\nbronzina\nbrullo\nbruno\nbubbone\nbuca\nbudino\nbuffone\nbuio\nbulbo\nbuono\nburlone\nburrasca\nbussola\nbusta\ncadetto\ncaduco\ncalamaro\ncalcolo\ncalesse\ncalibro\ncalmo\ncaloria\ncambusa\ncamerata\ncamicia\ncammino\ncamola\ncampale\ncanapa\ncandela\ncane\ncanino\ncanotto\ncantina\ncapace\ncapello\ncapitolo\ncapogiro\ncappero\ncapra\ncapsula\ncarapace\ncarcassa\ncardo\ncarisma\ncarovana\ncarretto\ncartolina\ncasaccio\ncascata\ncaserma\ncaso\ncassone\ncastello\ncasuale\ncatasta\ncatena\ncatrame\ncauto\ncavillo\ncedibile\ncedrata\ncefalo\ncelebre\ncellulare\ncena\ncenone\ncentesimo\nceramica\ncercare\ncerto\ncerume\ncervello\ncesoia\ncespo\nceto\nchela\nchiaro\nchicca\nchiedere\nchimera\nchina\nchirurgo\nchitarra\nciao\nciclismo\ncifrare\ncigno\ncilindro\nciottolo\ncirca\ncirrosi\ncitrico\ncittadino\nciuffo\ncivetta\ncivile\nclassico\nclinica\ncloro\ncocco\ncodardo\ncodice\ncoerente\ncognome\ncollare\ncolmato\ncolore\ncolposo\ncoltivato\ncolza\ncoma\ncometa\ncommando\ncomodo\ncomputer\ncomune\nconciso\ncondurre\nconferma\ncongelare\nconiuge\nconnesso\nconoscere\nconsumo\ncontinuo\nconvegno\ncoperto\ncopione\ncoppia\ncopricapo\ncorazza\ncordata\ncoricato\ncornice\ncorolla\ncorpo\ncorredo\ncorsia\ncortese\ncosmico\ncostante\ncottura\ncovato\ncratere\ncravatta\ncreato\ncredere\ncremoso\ncrescita\ncreta\ncriceto\ncrinale\ncrisi\ncritico\ncroce\ncronaca\ncrostata\ncruciale\ncrusca\ncucire\ncuculo\ncugino\ncullato\ncupola\ncuratore\ncursore\ncurvo\ncuscino\ncustode\ndado\ndaino\ndalmata\ndamerino\ndaniela\ndannoso\ndanzare\ndatato\ndavanti\ndavvero\ndebutto\ndecennio\ndeciso\ndeclino\ndecollo\ndecreto\ndedicato\ndefinito\ndeforme\ndegno\ndelegare\ndelfino\ndelirio\ndelta\ndemenza\ndenotato\ndentro\ndeposito\nderapata\nderivare\nderoga\ndescritto\ndeserto\ndesiderio\ndesumere\ndetersivo\ndevoto\ndiametro\ndicembre\ndiedro\ndifeso\ndiffuso\ndigerire\ndigitale\ndiluvio\ndinamico\ndinnanzi\ndipinto\ndiploma\ndipolo\ndiradare\ndire\ndirotto\ndirupo\ndisagio\ndiscreto\ndisfare\ndisgelo\ndisposto\ndistanza\ndisumano\ndito\ndivano\ndivelto\ndividere\ndivorato\ndoblone\ndocente\ndoganale\ndogma\ndolce\ndomato\ndomenica\ndominare\ndondolo\ndono\ndormire\ndote\ndottore\ndovuto\ndozzina\ndrago\ndruido\ndubbio\ndubitare\nducale\nduna\nduomo\nduplice\nduraturo\nebano\neccesso\necco\neclissi\neconomia\nedera\nedicola\nedile\neditoria\neducare\negemonia\negli\negoismo\negregio\nelaborato\nelargire\nelegante\nelencato\neletto\nelevare\nelfico\nelica\nelmo\nelsa\neluso\nemanato\nemblema\nemesso\nemiro\nemotivo\nemozione\nempirico\nemulo\nendemico\nenduro\nenergia\nenfasi\nenoteca\nentrare\nenzima\nepatite\nepilogo\nepisodio\nepocale\neppure\nequatore\nerario\nerba\nerboso\nerede\neremita\nerigere\nermetico\neroe\nerosivo\nerrante\nesagono\nesame\nesanime\nesaudire\nesca\nesempio\nesercito\nesibito\nesigente\nesistere\nesito\nesofago\nesortato\nesoso\nespanso\nespresso\nessenza\nesso\nesteso\nestimare\nestonia\nestroso\nesultare\netilico\netnico\netrusco\netto\neuclideo\neuropa\nevaso\nevidenza\nevitato\nevoluto\nevviva\nfabbrica\nfaccenda\nfachiro\nfalco\nfamiglia\nfanale\nfanfara\nfango\nfantasma\nfare\nfarfalla\nfarinoso\nfarmaco\nfascia\nfastoso\nfasullo\nfaticare\nfato\nfavoloso\nfebbre\nfecola\nfede\nfegato\nfelpa\nfeltro\nfemmina\nfendere\nfenomeno\nfermento\nferro\nfertile\nfessura\nfestivo\nfetta\nfeudo\nfiaba\nfiducia\nfifa\nfigurato\nfilo\nfinanza\nfinestra\nfinire\nfiore\nfiscale\nfisico\nfiume\nflacone\nflamenco\nflebo\nflemma\nflorido\nfluente\nfluoro\nfobico\nfocaccia\nfocoso\nfoderato\nfoglio\nfolata\nfolclore\nfolgore\nfondente\nfonetico\nfonia\nfontana\nforbito\nforchetta\nforesta\nformica\nfornaio\nforo\nfortezza\nforzare\nfosfato\nfosso\nfracasso\nfrana\nfrassino\nfratello\nfreccetta\nfrenata\nfresco\nfrigo\nfrollino\nfronde\nfrugale\nfrutta\nfucilata\nfucsia\nfuggente\nfulmine\nfulvo\nfumante\nfumetto\nfumoso\nfune\nfunzione\nfuoco\nfurbo\nfurgone\nfurore\nfuso\nfutile\ngabbiano\ngaffe\ngalateo\ngallina\ngaloppo\ngambero\ngamma\ngaranzia\ngarbo\ngarofano\ngarzone\ngasdotto\ngasolio\ngastrico\ngatto\ngaudio\ngazebo\ngazzella\ngeco\ngelatina\ngelso\ngemello\ngemmato\ngene\ngenitore\ngennaio\ngenotipo\ngergo\nghepardo\nghiaccio\nghisa\ngiallo\ngilda\nginepro\ngiocare\ngioiello\ngiorno\ngiove\ngirato\ngirone\ngittata\ngiudizio\ngiurato\ngiusto\nglobulo\nglutine\ngnomo\ngobba\ngolf\ngomito\ngommone\ngonfio\ngonna\ngoverno\ngracile\ngrado\ngrafico\ngrammo\ngrande\ngrattare\ngravoso\ngrazia\ngreca\ngregge\ngrifone\ngrigio\ngrinza\ngrotta\ngruppo\nguadagno\nguaio\nguanto\nguardare\ngufo\nguidare\nibernato\nicona\nidentico\nidillio\nidolo\nidra\nidrico\nidrogeno\nigiene\nignaro\nignorato\nilare\nilleso\nillogico\nilludere\nimballo\nimbevuto\nimbocco\nimbuto\nimmane\nimmerso\nimmolato\nimpacco\nimpeto\nimpiego\nimporto\nimpronta\ninalare\ninarcare\ninattivo\nincanto\nincendio\ninchino\nincisivo\nincluso\nincontro\nincrocio\nincubo\nindagine\nindia\nindole\ninedito\ninfatti\ninfilare\ninflitto\ningaggio\ningegno\ninglese\ningordo\ningrosso\ninnesco\ninodore\ninoltrare\ninondato\ninsano\ninsetto\ninsieme\ninsonnia\ninsulina\nintasato\nintero\nintonaco\nintuito\ninumidire\ninvalido\ninvece\ninvito\niperbole\nipnotico\nipotesi\nippica\niride\nirlanda\nironico\nirrigato\nirrorare\nisolato\nisotopo\nisterico\nistituto\nistrice\nitalia\niterare\nlabbro\nlabirinto\nlacca\nlacerato\nlacrima\nlacuna\nladdove\nlago\nlampo\nlancetta\nlanterna\nlardoso\nlarga\nlaringe\nlastra\nlatenza\nlatino\nlattuga\nlavagna\nlavoro\nlegale\nleggero\nlembo\nlentezza\nlenza\nleone\nlepre\nlesivo\nlessato\nlesto\nletterale\nleva\nlevigato\nlibero\nlido\nlievito\nlilla\nlimatura\nlimitare\nlimpido\nlineare\nlingua\nliquido\nlira\nlirica\nlisca\nlite\nlitigio\nlivrea\nlocanda\nlode\nlogica\nlombare\nlondra\nlongevo\nloquace\nlorenzo\nloto\nlotteria\nluce\nlucidato\nlumaca\nluminoso\nlungo\nlupo\nluppolo\nlusinga\nlusso\nlutto\nmacabro\nmacchina\nmacero\nmacinato\nmadama\nmagico\nmaglia\nmagnete\nmagro\nmaiolica\nmalafede\nmalgrado\nmalinteso\nmalsano\nmalto\nmalumore\nmana\nmancia\nmandorla\nmangiare\nmanifesto\nmannaro\nmanovra\nmansarda\nmantide\nmanubrio\nmappa\nmaratona\nmarcire\nmaretta\nmarmo\nmarsupio\nmaschera\nmassaia\nmastino\nmaterasso\nmatricola\nmattone\nmaturo\nmazurca\nmeandro\nmeccanico\nmecenate\nmedesimo\nmeditare\nmega\nmelassa\nmelis\nmelodia\nmeninge\nmeno\nmensola\nmercurio\nmerenda\nmerlo\nmeschino\nmese\nmessere\nmestolo\nmetallo\nmetodo\nmettere\nmiagolare\nmica\nmicelio\nmichele\nmicrobo\nmidollo\nmiele\nmigliore\nmilano\nmilite\nmimosa\nminerale\nmini\nminore\nmirino\nmirtillo\nmiscela\nmissiva\nmisto\nmisurare\nmitezza\nmitigare\nmitra\nmittente\nmnemonico\nmodello\nmodifica\nmodulo\nmogano\nmogio\nmole\nmolosso\nmonastero\nmonco\nmondina\nmonetario\nmonile\nmonotono\nmonsone\nmontato\nmonviso\nmora\nmordere\nmorsicato\nmostro\nmotivato\nmotosega\nmotto\nmovenza\nmovimento\nmozzo\nmucca\nmucosa\nmuffa\nmughetto\nmugnaio\nmulatto\nmulinello\nmultiplo\nmummia\nmunto\nmuovere\nmurale\nmusa\nmuscolo\nmusica\nmutevole\nmuto\nnababbo\nnafta\nnanometro\nnarciso\nnarice\nnarrato\nnascere\nnastrare\nnaturale\nnautica\nnaviglio\nnebulosa\nnecrosi\nnegativo\nnegozio\nnemmeno\nneofita\nneretto\nnervo\nnessuno\nnettuno\nneutrale\nneve\nnevrotico\nnicchia\nninfa\nnitido\nnobile\nnocivo\nnodo\nnome\nnomina\nnordico\nnormale\nnorvegese\nnostrano\nnotare\nnotizia\nnotturno\nnovella\nnucleo\nnulla\nnumero\nnuovo\nnutrire\nnuvola\nnuziale\noasi\nobbedire\nobbligo\nobelisco\noblio\nobolo\nobsoleto\noccasione\nocchio\noccidente\noccorrere\noccultare\nocra\noculato\nodierno\nodorare\nofferta\noffrire\noffuscato\noggetto\noggi\nognuno\nolandese\nolfatto\noliato\noliva\nologramma\noltre\nomaggio\nombelico\nombra\nomega\nomissione\nondoso\nonere\nonice\nonnivoro\nonorevole\nonta\noperato\nopinione\nopposto\noracolo\norafo\nordine\norecchino\norefice\norfano\norganico\norigine\norizzonte\norma\normeggio\nornativo\norologio\norrendo\norribile\nortensia\nortica\norzata\norzo\nosare\noscurare\nosmosi\nospedale\nospite\nossa\nossidare\nostacolo\noste\notite\notre\nottagono\nottimo\nottobre\novale\novest\novino\noviparo\novocito\novunque\novviare\nozio\npacchetto\npace\npacifico\npadella\npadrone\npaese\npaga\npagina\npalazzina\npalesare\npallido\npalo\npalude\npandoro\npannello\npaolo\npaonazzo\npaprica\nparabola\nparcella\nparere\npargolo\npari\nparlato\nparola\npartire\nparvenza\nparziale\npassivo\npasticca\npatacca\npatologia\npattume\npavone\npeccato\npedalare\npedonale\npeggio\npeloso\npenare\npendice\npenisola\npennuto\npenombra\npensare\npentola\npepe\npepita\nperbene\npercorso\nperdonato\nperforare\npergamena\nperiodo\npermesso\nperno\nperplesso\npersuaso\npertugio\npervaso\npesatore\npesista\npeso\npestifero\npetalo\npettine\npetulante\npezzo\npiacere\npianta\npiattino\npiccino\npicozza\npiega\npietra\npiffero\npigiama\npigolio\npigro\npila\npilifero\npillola\npilota\npimpante\npineta\npinna\npinolo\npioggia\npiombo\npiramide\npiretico\npirite\npirolisi\npitone\npizzico\nplacebo\nplanare\nplasma\nplatano\nplenario\npochezza\npoderoso\npodismo\npoesia\npoggiare\npolenta\npoligono\npollice\npolmonite\npolpetta\npolso\npoltrona\npolvere\npomice\npomodoro\nponte\npopoloso\nporfido\nporoso\nporpora\nporre\nportata\nposa\npositivo\npossesso\npostulato\npotassio\npotere\npranzo\nprassi\npratica\nprecluso\npredica\nprefisso\npregiato\nprelievo\npremere\nprenotare\npreparato\npresenza\npretesto\nprevalso\nprima\nprincipe\nprivato\nproblema\nprocura\nprodurre\nprofumo\nprogetto\nprolunga\npromessa\npronome\nproposta\nproroga\nproteso\nprova\nprudente\nprugna\nprurito\npsiche\npubblico\npudica\npugilato\npugno\npulce\npulito\npulsante\npuntare\npupazzo\npupilla\npuro\nquadro\nqualcosa\nquasi\nquerela\nquota\nraccolto\nraddoppio\nradicale\nradunato\nraffica\nragazzo\nragione\nragno\nramarro\nramingo\nramo\nrandagio\nrantolare\nrapato\nrapina\nrappreso\nrasatura\nraschiato\nrasente\nrassegna\nrastrello\nrata\nravveduto\nreale\nrecepire\nrecinto\nrecluta\nrecondito\nrecupero\nreddito\nredimere\nregalato\nregistro\nregola\nregresso\nrelazione\nremare\nremoto\nrenna\nreplica\nreprimere\nreputare\nresa\nresidente\nresponso\nrestauro\nrete\nretina\nretorica\nrettifica\nrevocato\nriassunto\nribadire\nribelle\nribrezzo\nricarica\nricco\nricevere\nriciclato\nricordo\nricreduto\nridicolo\nridurre\nrifasare\nriflesso\nriforma\nrifugio\nrigare\nrigettato\nrighello\nrilassato\nrilevato\nrimanere\nrimbalzo\nrimedio\nrimorchio\nrinascita\nrincaro\nrinforzo\nrinnovo\nrinomato\nrinsavito\nrintocco\nrinuncia\nrinvenire\nriparato\nripetuto\nripieno\nriportare\nripresa\nripulire\nrisata\nrischio\nriserva\nrisibile\nriso\nrispetto\nristoro\nrisultato\nrisvolto\nritardo\nritegno\nritmico\nritrovo\nriunione\nriva\nriverso\nrivincita\nrivolto\nrizoma\nroba\nrobotico\nrobusto\nroccia\nroco\nrodaggio\nrodere\nroditore\nrogito\nrollio\nromantico\nrompere\nronzio\nrosolare\nrospo\nrotante\nrotondo\nrotula\nrovescio\nrubizzo\nrubrica\nruga\nrullino\nrumine\nrumoroso\nruolo\nrupe\nrussare\nrustico\nsabato\nsabbiare\nsabotato\nsagoma\nsalasso\nsaldatura\nsalgemma\nsalivare\nsalmone\nsalone\nsaltare\nsaluto\nsalvo\nsapere\nsapido\nsaporito\nsaraceno\nsarcasmo\nsarto\nsassoso\nsatellite\nsatira\nsatollo\nsaturno\nsavana\nsavio\nsaziato\nsbadiglio\nsbalzo\nsbancato\nsbarra\nsbattere\nsbavare\nsbendare\nsbirciare\nsbloccato\nsbocciato\nsbrinare\nsbruffone\nsbuffare\nscabroso\nscadenza\nscala\nscambiare\nscandalo\nscapola\nscarso\nscatenare\nscavato\nscelto\nscenico\nscettro\nscheda\nschiena\nsciarpa\nscienza\nscindere\nscippo\nsciroppo\nscivolo\nsclerare\nscodella\nscolpito\nscomparto\nsconforto\nscoprire\nscorta\nscossone\nscozzese\nscriba\nscrollare\nscrutinio\nscuderia\nscultore\nscuola\nscuro\nscusare\nsdebitare\nsdoganare\nseccatura\nsecondo\nsedano\nseggiola\nsegnalato\nsegregato\nseguito\nselciato\nselettivo\nsella\nselvaggio\nsemaforo\nsembrare\nseme\nseminato\nsempre\nsenso\nsentire\nsepolto\nsequenza\nserata\nserbato\nsereno\nserio\nserpente\nserraglio\nservire\nsestina\nsetola\nsettimana\nsfacelo\nsfaldare\nsfamato\nsfarzoso\nsfaticato\nsfera\nsfida\nsfilato\nsfinge\nsfocato\nsfoderare\nsfogo\nsfoltire\nsforzato\nsfratto\nsfruttato\nsfuggito\nsfumare\nsfuso\nsgabello\nsgarbato\nsgonfiare\nsgorbio\nsgrassato\nsguardo\nsibilo\nsiccome\nsierra\nsigla\nsignore\nsilenzio\nsillaba\nsimbolo\nsimpatico\nsimulato\nsinfonia\nsingolo\nsinistro\nsino\nsintesi\nsinusoide\nsipario\nsisma\nsistole\nsituato\nslitta\nslogatura\nsloveno\nsmarrito\nsmemorato\nsmentito\nsmeraldo\nsmilzo\nsmontare\nsmottato\nsmussato\nsnellire\nsnervato\nsnodo\nsobbalzo\nsobrio\nsoccorso\nsociale\nsodale\nsoffitto\nsogno\nsoldato\nsolenne\nsolido\nsollazzo\nsolo\nsolubile\nsolvente\nsomatico\nsomma\nsonda\nsonetto\nsonnifero\nsopire\nsoppeso\nsopra\nsorgere\nsorpasso\nsorriso\nsorso\nsorteggio\nsorvolato\nsospiro\nsosta\nsottile\nspada\nspalla\nspargere\nspatola\nspavento\nspazzola\nspecie\nspedire\nspegnere\nspelatura\nsperanza\nspessore\nspettrale\nspezzato\nspia\nspigoloso\nspillato\nspinoso\nspirale\nsplendido\nsportivo\nsposo\nspranga\nsprecare\nspronato\nspruzzo\nspuntino\nsquillo\nsradicare\nsrotolato\nstabile\nstacco\nstaffa\nstagnare\nstampato\nstantio\nstarnuto\nstasera\nstatuto\nstelo\nsteppa\nsterzo\nstiletto\nstima\nstirpe\nstivale\nstizzoso\nstonato\nstorico\nstrappo\nstregato\nstridulo\nstrozzare\nstrutto\nstuccare\nstufo\nstupendo\nsubentro\nsuccoso\nsudore\nsuggerito\nsugo\nsultano\nsuonare\nsuperbo\nsupporto\nsurgelato\nsurrogato\nsussurro\nsutura\nsvagare\nsvedese\nsveglio\nsvelare\nsvenuto\nsvezia\nsviluppo\nsvista\nsvizzera\nsvolta\nsvuotare\ntabacco\ntabulato\ntacciare\ntaciturno\ntale\ntalismano\ntampone\ntannino\ntara\ntardivo\ntargato\ntariffa\ntarpare\ntartaruga\ntasto\ntattico\ntaverna\ntavolata\ntazza\nteca\ntecnico\ntelefono\ntemerario\ntempo\ntemuto\ntendone\ntenero\ntensione\ntentacolo\nteorema\nterme\nterrazzo\nterzetto\ntesi\ntesserato\ntestato\ntetro\ntettoia\ntifare\ntigella\ntimbro\ntinto\ntipico\ntipografo\ntiraggio\ntiro\ntitanio\ntitolo\ntitubante\ntizio\ntizzone\ntoccare\ntollerare\ntolto\ntombola\ntomo\ntonfo\ntonsilla\ntopazio\ntopologia\ntoppa\ntorba\ntornare\ntorrone\ntortora\ntoscano\ntossire\ntostatura\ntotano\ntrabocco\ntrachea\ntrafila\ntragedia\ntralcio\ntramonto\ntransito\ntrapano\ntrarre\ntrasloco\ntrattato\ntrave\ntreccia\ntremolio\ntrespolo\ntributo\ntricheco\ntrifoglio\ntrillo\ntrincea\ntrio\ntristezza\ntriturato\ntrivella\ntromba\ntrono\ntroppo\ntrottola\ntrovare\ntruccato\ntubatura\ntuffato\ntulipano\ntumulto\ntunisia\nturbare\nturchino\ntuta\ntutela\nubicato\nuccello\nuccisore\nudire\nuditivo\nuffa\nufficio\nuguale\nulisse\nultimato\numano\numile\numorismo\nuncinetto\nungere\nungherese\nunicorno\nunificato\nunisono\nunitario\nunte\nuovo\nupupa\nuragano\nurgenza\nurlo\nusanza\nusato\nuscito\nusignolo\nusuraio\nutensile\nutilizzo\nutopia\nvacante\nvaccinato\nvagabondo\nvagliato\nvalanga\nvalgo\nvalico\nvalletta\nvaloroso\nvalutare\nvalvola\nvampata\nvangare\nvanitoso\nvano\nvantaggio\nvanvera\nvapore\nvarano\nvarcato\nvariante\nvasca\nvedetta\nvedova\nveduto\nvegetale\nveicolo\nvelcro\nvelina\nvelluto\nveloce\nvenato\nvendemmia\nvento\nverace\nverbale\nvergogna\nverifica\nvero\nverruca\nverticale\nvescica\nvessillo\nvestale\nveterano\nvetrina\nvetusto\nviandante\nvibrante\nvicenda\nvichingo\nvicinanza\nvidimare\nvigilia\nvigneto\nvigore\nvile\nvillano\nvimini\nvincitore\nviola\nvipera\nvirgola\nvirologo\nvirulento\nviscoso\nvisione\nvispo\nvissuto\nvisura\nvita\nvitello\nvittima\nvivanda\nvivido\nviziare\nvoce\nvoga\nvolatile\nvolere\nvolpe\nvoragine\nvulcano\nzampogna\nzanna\nzappato\nzattera\nzavorra\nzefiro\nzelante\nzelo\nzenzero\nzerbino\nzibetto\nzinco\nzircone\nzitto\nzolla\nzotico\nzucchero\nzufolo\nzulu\nzuppa`.split('\\n');\n", "export const wordlist = `あいこくしん\nあいさつ\nあいだ\nあおぞら\nあかちゃん\nあきる\nあけがた\nあける\nあこがれる\nあさい\nあさひ\nあしあと\nあじわう\nあずかる\nあずき\nあそぶ\nあたえる\nあたためる\nあたりまえ\nあたる\nあつい\nあつかう\nあっしゅく\nあつまり\nあつめる\nあてな\nあてはまる\nあひる\nあぶら\nあぶる\nあふれる\nあまい\nあまど\nあまやかす\nあまり\nあみもの\nあめりか\nあやまる\nあゆむ\nあらいぐま\nあらし\nあらすじ\nあらためる\nあらゆる\nあらわす\nありがとう\nあわせる\nあわてる\nあんい\nあんがい\nあんこ\nあんぜん\nあんてい\nあんない\nあんまり\nいいだす\nいおん\nいがい\nいがく\nいきおい\nいきなり\nいきもの\nいきる\nいくじ\nいくぶん\nいけばな\nいけん\nいこう\nいこく\nいこつ\nいさましい\nいさん\nいしき\nいじゅう\nいじょう\nいじわる\nいずみ\nいずれ\nいせい\nいせえび\nいせかい\nいせき\nいぜん\nいそうろう\nいそがしい\nいだい\nいだく\nいたずら\nいたみ\nいたりあ\nいちおう\nいちじ\nいちど\nいちば\nいちぶ\nいちりゅう\nいつか\nいっしゅん\nいっせい\nいっそう\nいったん\nいっち\nいってい\nいっぽう\nいてざ\nいてん\nいどう\nいとこ\nいない\nいなか\nいねむり\nいのち\nいのる\nいはつ\nいばる\nいはん\nいびき\nいひん\nいふく\nいへん\nいほう\nいみん\nいもうと\nいもたれ\nいもり\nいやがる\nいやす\nいよかん\nいよく\nいらい\nいらすと\nいりぐち\nいりょう\nいれい\nいれもの\nいれる\nいろえんぴつ\nいわい\nいわう\nいわかん\nいわば\nいわゆる\nいんげんまめ\nいんさつ\nいんしょう\nいんよう\nうえき\nうえる\nうおざ\nうがい\nうかぶ\nうかべる\nうきわ\nうくらいな\nうくれれ\nうけたまわる\nうけつけ\nうけとる\nうけもつ\nうける\nうごかす\nうごく\nうこん\nうさぎ\nうしなう\nうしろがみ\nうすい\nうすぎ\nうすぐらい\nうすめる\nうせつ\nうちあわせ\nうちがわ\nうちき\nうちゅう\nうっかり\nうつくしい\nうったえる\nうつる\nうどん\nうなぎ\nうなじ\nうなずく\nうなる\nうねる\nうのう\nうぶげ\nうぶごえ\nうまれる\nうめる\nうもう\nうやまう\nうよく\nうらがえす\nうらぐち\nうらない\nうりあげ\nうりきれ\nうるさい\nうれしい\nうれゆき\nうれる\nうろこ\nうわき\nうわさ\nうんこう\nうんちん\nうんてん\nうんどう\nえいえん\nえいが\nえいきょう\nえいご\nえいせい\nえいぶん\nえいよう\nえいわ\nえおり\nえがお\nえがく\nえきたい\nえくせる\nえしゃく\nえすて\nえつらん\nえのぐ\nえほうまき\nえほん\nえまき\nえもじ\nえもの\nえらい\nえらぶ\nえりあ\nえんえん\nえんかい\nえんぎ\nえんげき\nえんしゅう\nえんぜつ\nえんそく\nえんちょう\nえんとつ\nおいかける\nおいこす\nおいしい\nおいつく\nおうえん\nおうさま\nおうじ\nおうせつ\nおうたい\nおうふく\nおうべい\nおうよう\nおえる\nおおい\nおおう\nおおどおり\nおおや\nおおよそ\nおかえり\nおかず\nおがむ\nおかわり\nおぎなう\nおきる\nおくさま\nおくじょう\nおくりがな\nおくる\nおくれる\nおこす\nおこなう\nおこる\nおさえる\nおさない\nおさめる\nおしいれ\nおしえる\nおじぎ\nおじさん\nおしゃれ\nおそらく\nおそわる\nおたがい\nおたく\nおだやか\nおちつく\nおっと\nおつり\nおでかけ\nおとしもの\nおとなしい\nおどり\nおどろかす\nおばさん\nおまいり\nおめでとう\nおもいで\nおもう\nおもたい\nおもちゃ\nおやつ\nおやゆび\nおよぼす\nおらんだ\nおろす\nおんがく\nおんけい\nおんしゃ\nおんせん\nおんだん\nおんちゅう\nおんどけい\nかあつ\nかいが\nがいき\nがいけん\nがいこう\nかいさつ\nかいしゃ\nかいすいよく\nかいぜん\nかいぞうど\nかいつう\nかいてん\nかいとう\nかいふく\nがいへき\nかいほう\nかいよう\nがいらい\nかいわ\nかえる\nかおり\nかかえる\nかがく\nかがし\nかがみ\nかくご\nかくとく\nかざる\nがぞう\nかたい\nかたち\nがちょう\nがっきゅう\nがっこう\nがっさん\nがっしょう\nかなざわし\nかのう\nがはく\nかぶか\nかほう\nかほご\nかまう\nかまぼこ\nかめれおん\nかゆい\nかようび\nからい\nかるい\nかろう\nかわく\nかわら\nがんか\nかんけい\nかんこう\nかんしゃ\nかんそう\nかんたん\nかんち\nがんばる\nきあい\nきあつ\nきいろ\nぎいん\nきうい\nきうん\nきえる\nきおう\nきおく\nきおち\nきおん\nきかい\nきかく\nきかんしゃ\nききて\nきくばり\nきくらげ\nきけんせい\nきこう\nきこえる\nきこく\nきさい\nきさく\nきさま\nきさらぎ\nぎじかがく\nぎしき\nぎじたいけん\nぎじにってい\nぎじゅつしゃ\nきすう\nきせい\nきせき\nきせつ\nきそう\nきぞく\nきぞん\nきたえる\nきちょう\nきつえん\nぎっちり\nきつつき\nきつね\nきてい\nきどう\nきどく\nきない\nきなが\nきなこ\nきぬごし\nきねん\nきのう\nきのした\nきはく\nきびしい\nきひん\nきふく\nきぶん\nきぼう\nきほん\nきまる\nきみつ\nきむずかしい\nきめる\nきもだめし\nきもち\nきもの\nきゃく\nきやく\nぎゅうにく\nきよう\nきょうりゅう\nきらい\nきらく\nきりん\nきれい\nきれつ\nきろく\nぎろん\nきわめる\nぎんいろ\nきんかくじ\nきんじょ\nきんようび\nぐあい\nくいず\nくうかん\nくうき\nくうぐん\nくうこう\nぐうせい\nくうそう\nぐうたら\nくうふく\nくうぼ\nくかん\nくきょう\nくげん\nぐこう\nくさい\nくさき\nくさばな\nくさる\nくしゃみ\nくしょう\nくすのき\nくすりゆび\nくせげ\nくせん\nぐたいてき\nくださる\nくたびれる\nくちこみ\nくちさき\nくつした\nぐっすり\nくつろぐ\nくとうてん\nくどく\nくなん\nくねくね\nくのう\nくふう\nくみあわせ\nくみたてる\nくめる\nくやくしょ\nくらす\nくらべる\nくるま\nくれる\nくろう\nくわしい\nぐんかん\nぐんしょく\nぐんたい\nぐんて\nけあな\nけいかく\nけいけん\nけいこ\nけいさつ\nげいじゅつ\nけいたい\nげいのうじん\nけいれき\nけいろ\nけおとす\nけおりもの\nげきか\nげきげん\nげきだん\nげきちん\nげきとつ\nげきは\nげきやく\nげこう\nげこくじょう\nげざい\nけさき\nげざん\nけしき\nけしごむ\nけしょう\nげすと\nけたば\nけちゃっぷ\nけちらす\nけつあつ\nけつい\nけつえき\nけっこん\nけつじょ\nけっせき\nけってい\nけつまつ\nげつようび\nげつれい\nけつろん\nげどく\nけとばす\nけとる\nけなげ\nけなす\nけなみ\nけぬき\nげねつ\nけねん\nけはい\nげひん\nけぶかい\nげぼく\nけまり\nけみかる\nけむし\nけむり\nけもの\nけらい\nけろけろ\nけわしい\nけんい\nけんえつ\nけんお\nけんか\nげんき\nけんげん\nけんこう\nけんさく\nけんしゅう\nけんすう\nげんそう\nけんちく\nけんてい\nけんとう\nけんない\nけんにん\nげんぶつ\nけんま\nけんみん\nけんめい\nけんらん\nけんり\nこあくま\nこいぬ\nこいびと\nごうい\nこうえん\nこうおん\nこうかん\nごうきゅう\nごうけい\nこうこう\nこうさい\nこうじ\nこうすい\nごうせい\nこうそく\nこうたい\nこうちゃ\nこうつう\nこうてい\nこうどう\nこうない\nこうはい\nごうほう\nごうまん\nこうもく\nこうりつ\nこえる\nこおり\nごかい\nごがつ\nごかん\nこくご\nこくさい\nこくとう\nこくない\nこくはく\nこぐま\nこけい\nこける\nここのか\nこころ\nこさめ\nこしつ\nこすう\nこせい\nこせき\nこぜん\nこそだて\nこたい\nこたえる\nこたつ\nこちょう\nこっか\nこつこつ\nこつばん\nこつぶ\nこてい\nこてん\nことがら\nことし\nことば\nことり\nこなごな\nこねこね\nこのまま\nこのみ\nこのよ\nごはん\nこひつじ\nこふう\nこふん\nこぼれる\nごまあぶら\nこまかい\nごますり\nこまつな\nこまる\nこむぎこ\nこもじ\nこもち\nこもの\nこもん\nこやく\nこやま\nこゆう\nこゆび\nこよい\nこよう\nこりる\nこれくしょん\nころっけ\nこわもて\nこわれる\nこんいん\nこんかい\nこんき\nこんしゅう\nこんすい\nこんだて\nこんとん\nこんなん\nこんびに\nこんぽん\nこんまけ\nこんや\nこんれい\nこんわく\nざいえき\nさいかい\nさいきん\nざいげん\nざいこ\nさいしょ\nさいせい\nざいたく\nざいちゅう\nさいてき\nざいりょう\nさうな\nさかいし\nさがす\nさかな\nさかみち\nさがる\nさぎょう\nさくし\nさくひん\nさくら\nさこく\nさこつ\nさずかる\nざせき\nさたん\nさつえい\nざつおん\nざっか\nざつがく\nさっきょく\nざっし\nさつじん\nざっそう\nさつたば\nさつまいも\nさてい\nさといも\nさとう\nさとおや\nさとし\nさとる\nさのう\nさばく\nさびしい\nさべつ\nさほう\nさほど\nさます\nさみしい\nさみだれ\nさむけ\nさめる\nさやえんどう\nさゆう\nさよう\nさよく\nさらだ\nざるそば\nさわやか\nさわる\nさんいん\nさんか\nさんきゃく\nさんこう\nさんさい\nざんしょ\nさんすう\nさんせい\nさんそ\nさんち\nさんま\nさんみ\nさんらん\nしあい\nしあげ\nしあさって\nしあわせ\nしいく\nしいん\nしうち\nしえい\nしおけ\nしかい\nしかく\nじかん\nしごと\nしすう\nじだい\nしたうけ\nしたぎ\nしたて\nしたみ\nしちょう\nしちりん\nしっかり\nしつじ\nしつもん\nしてい\nしてき\nしてつ\nじてん\nじどう\nしなぎれ\nしなもの\nしなん\nしねま\nしねん\nしのぐ\nしのぶ\nしはい\nしばかり\nしはつ\nしはらい\nしはん\nしひょう\nしふく\nじぶん\nしへい\nしほう\nしほん\nしまう\nしまる\nしみん\nしむける\nじむしょ\nしめい\nしめる\nしもん\nしゃいん\nしゃうん\nしゃおん\nじゃがいも\nしやくしょ\nしゃくほう\nしゃけん\nしゃこ\nしゃざい\nしゃしん\nしゃせん\nしゃそう\nしゃたい\nしゃちょう\nしゃっきん\nじゃま\nしゃりん\nしゃれい\nじゆう\nじゅうしょ\nしゅくはく\nじゅしん\nしゅっせき\nしゅみ\nしゅらば\nじゅんばん\nしょうかい\nしょくたく\nしょっけん\nしょどう\nしょもつ\nしらせる\nしらべる\nしんか\nしんこう\nじんじゃ\nしんせいじ\nしんちく\nしんりん\nすあげ\nすあし\nすあな\nずあん\nすいえい\nすいか\nすいとう\nずいぶん\nすいようび\nすうがく\nすうじつ\nすうせん\nすおどり\nすきま\nすくう\nすくない\nすける\nすごい\nすこし\nずさん\nすずしい\nすすむ\nすすめる\nすっかり\nずっしり\nずっと\nすてき\nすてる\nすねる\nすのこ\nすはだ\nすばらしい\nずひょう\nずぶぬれ\nすぶり\nすふれ\nすべて\nすべる\nずほう\nすぼん\nすまい\nすめし\nすもう\nすやき\nすらすら\nするめ\nすれちがう\nすろっと\nすわる\nすんぜん\nすんぽう\nせあぶら\nせいかつ\nせいげん\nせいじ\nせいよう\nせおう\nせかいかん\nせきにん\nせきむ\nせきゆ\nせきらんうん\nせけん\nせこう\nせすじ\nせたい\nせたけ\nせっかく\nせっきゃく\nぜっく\nせっけん\nせっこつ\nせっさたくま\nせつぞく\nせつだん\nせつでん\nせっぱん\nせつび\nせつぶん\nせつめい\nせつりつ\nせなか\nせのび\nせはば\nせびろ\nせぼね\nせまい\nせまる\nせめる\nせもたれ\nせりふ\nぜんあく\nせんい\nせんえい\nせんか\nせんきょ\nせんく\nせんげん\nぜんご\nせんさい\nせんしゅ\nせんすい\nせんせい\nせんぞ\nせんたく\nせんちょう\nせんてい\nせんとう\nせんぬき\nせんねん\nせんぱい\nぜんぶ\nぜんぽう\nせんむ\nせんめんじょ\nせんもん\nせんやく\nせんゆう\nせんよう\nぜんら\nぜんりゃく\nせんれい\nせんろ\nそあく\nそいとげる\nそいね\nそうがんきょう\nそうき\nそうご\nそうしん\nそうだん\nそうなん\nそうび\nそうめん\nそうり\nそえもの\nそえん\nそがい\nそげき\nそこう\nそこそこ\nそざい\nそしな\nそせい\nそせん\nそそぐ\nそだてる\nそつう\nそつえん\nそっかん\nそつぎょう\nそっけつ\nそっこう\nそっせん\nそっと\nそとがわ\nそとづら\nそなえる\nそなた\nそふぼ\nそぼく\nそぼろ\nそまつ\nそまる\nそむく\nそむりえ\nそめる\nそもそも\nそよかぜ\nそらまめ\nそろう\nそんかい\nそんけい\nそんざい\nそんしつ\nそんぞく\nそんちょう\nぞんび\nぞんぶん\nそんみん\nたあい\nたいいん\nたいうん\nたいえき\nたいおう\nだいがく\nたいき\nたいぐう\nたいけん\nたいこ\nたいざい\nだいじょうぶ\nだいすき\nたいせつ\nたいそう\nだいたい\nたいちょう\nたいてい\nだいどころ\nたいない\nたいねつ\nたいのう\nたいはん\nだいひょう\nたいふう\nたいへん\nたいほ\nたいまつばな\nたいみんぐ\nたいむ\nたいめん\nたいやき\nたいよう\nたいら\nたいりょく\nたいる\nたいわん\nたうえ\nたえる\nたおす\nたおる\nたおれる\nたかい\nたかね\nたきび\nたくさん\nたこく\nたこやき\nたさい\nたしざん\nだじゃれ\nたすける\nたずさわる\nたそがれ\nたたかう\nたたく\nただしい\nたたみ\nたちばな\nだっかい\nだっきゃく\nだっこ\nだっしゅつ\nだったい\nたてる\nたとえる\nたなばた\nたにん\nたぬき\nたのしみ\nたはつ\nたぶん\nたべる\nたぼう\nたまご\nたまる\nだむる\nためいき\nためす\nためる\nたもつ\nたやすい\nたよる\nたらす\nたりきほんがん\nたりょう\nたりる\nたると\nたれる\nたれんと\nたろっと\nたわむれる\nだんあつ\nたんい\nたんおん\nたんか\nたんき\nたんけん\nたんご\nたんさん\nたんじょうび\nだんせい\nたんそく\nたんたい\nだんち\nたんてい\nたんとう\nだんな\nたんにん\nだんねつ\nたんのう\nたんぴん\nだんぼう\nたんまつ\nたんめい\nだんれつ\nだんろ\nだんわ\nちあい\nちあん\nちいき\nちいさい\nちえん\nちかい\nちから\nちきゅう\nちきん\nちけいず\nちけん\nちこく\nちさい\nちしき\nちしりょう\nちせい\nちそう\nちたい\nちたん\nちちおや\nちつじょ\nちてき\nちてん\nちぬき\nちぬり\nちのう\nちひょう\nちへいせん\nちほう\nちまた\nちみつ\nちみどろ\nちめいど\nちゃんこなべ\nちゅうい\nちゆりょく\nちょうし\nちょさくけん\nちらし\nちらみ\nちりがみ\nちりょう\nちるど\nちわわ\nちんたい\nちんもく\nついか\nついたち\nつうか\nつうじょう\nつうはん\nつうわ\nつかう\nつかれる\nつくね\nつくる\nつけね\nつける\nつごう\nつたえる\nつづく\nつつじ\nつつむ\nつとめる\nつながる\nつなみ\nつねづね\nつのる\nつぶす\nつまらない\nつまる\nつみき\nつめたい\nつもり\nつもる\nつよい\nつるぼ\nつるみく\nつわもの\nつわり\nてあし\nてあて\nてあみ\nていおん\nていか\nていき\nていけい\nていこく\nていさつ\nていし\nていせい\nていたい\nていど\nていねい\nていひょう\nていへん\nていぼう\nてうち\nておくれ\nてきとう\nてくび\nでこぼこ\nてさぎょう\nてさげ\nてすり\nてそう\nてちがい\nてちょう\nてつがく\nてつづき\nでっぱ\nてつぼう\nてつや\nでぬかえ\nてぬき\nてぬぐい\nてのひら\nてはい\nてぶくろ\nてふだ\nてほどき\nてほん\nてまえ\nてまきずし\nてみじか\nてみやげ\nてらす\nてれび\nてわけ\nてわたし\nでんあつ\nてんいん\nてんかい\nてんき\nてんぐ\nてんけん\nてんごく\nてんさい\nてんし\nてんすう\nでんち\nてんてき\nてんとう\nてんない\nてんぷら\nてんぼうだい\nてんめつ\nてんらんかい\nでんりょく\nでんわ\nどあい\nといれ\nどうかん\nとうきゅう\nどうぐ\nとうし\nとうむぎ\nとおい\nとおか\nとおく\nとおす\nとおる\nとかい\nとかす\nときおり\nときどき\nとくい\nとくしゅう\nとくてん\nとくに\nとくべつ\nとけい\nとける\nとこや\nとさか\nとしょかん\nとそう\nとたん\nとちゅう\nとっきゅう\nとっくん\nとつぜん\nとつにゅう\nとどける\nととのえる\nとない\nとなえる\nとなり\nとのさま\nとばす\nどぶがわ\nとほう\nとまる\nとめる\nともだち\nともる\nどようび\nとらえる\nとんかつ\nどんぶり\nないかく\nないこう\nないしょ\nないす\nないせん\nないそう\nなおす\nながい\nなくす\nなげる\nなこうど\nなさけ\nなたでここ\nなっとう\nなつやすみ\nななおし\nなにごと\nなにもの\nなにわ\nなのか\nなふだ\nなまいき\nなまえ\nなまみ\nなみだ\nなめらか\nなめる\nなやむ\nならう\nならび\nならぶ\nなれる\nなわとび\nなわばり\nにあう\nにいがた\nにうけ\nにおい\nにかい\nにがて\nにきび\nにくしみ\nにくまん\nにげる\nにさんかたんそ\nにしき\nにせもの\nにちじょう\nにちようび\nにっか\nにっき\nにっけい\nにっこう\nにっさん\nにっしょく\nにっすう\nにっせき\nにってい\nになう\nにほん\nにまめ\nにもつ\nにやり\nにゅういん\nにりんしゃ\nにわとり\nにんい\nにんか\nにんき\nにんげん\nにんしき\nにんずう\nにんそう\nにんたい\nにんち\nにんてい\nにんにく\nにんぷ\nにんまり\nにんむ\nにんめい\nにんよう\nぬいくぎ\nぬかす\nぬぐいとる\nぬぐう\nぬくもり\nぬすむ\nぬまえび\nぬめり\nぬらす\nぬんちゃく\nねあげ\nねいき\nねいる\nねいろ\nねぐせ\nねくたい\nねくら\nねこぜ\nねこむ\nねさげ\nねすごす\nねそべる\nねだん\nねつい\nねっしん\nねつぞう\nねったいぎょ\nねぶそく\nねふだ\nねぼう\nねほりはほり\nねまき\nねまわし\nねみみ\nねむい\nねむたい\nねもと\nねらう\nねわざ\nねんいり\nねんおし\nねんかん\nねんきん\nねんぐ\nねんざ\nねんし\nねんちゃく\nねんど\nねんぴ\nねんぶつ\nねんまつ\nねんりょう\nねんれい\nのいず\nのおづま\nのがす\nのきなみ\nのこぎり\nのこす\nのこる\nのせる\nのぞく\nのぞむ\nのたまう\nのちほど\nのっく\nのばす\nのはら\nのべる\nのぼる\nのみもの\nのやま\nのらいぬ\nのらねこ\nのりもの\nのりゆき\nのれん\nのんき\nばあい\nはあく\nばあさん\nばいか\nばいく\nはいけん\nはいご\nはいしん\nはいすい\nはいせん\nはいそう\nはいち\nばいばい\nはいれつ\nはえる\nはおる\nはかい\nばかり\nはかる\nはくしゅ\nはけん\nはこぶ\nはさみ\nはさん\nはしご\nばしょ\nはしる\nはせる\nぱそこん\nはそん\nはたん\nはちみつ\nはつおん\nはっかく\nはづき\nはっきり\nはっくつ\nはっけん\nはっこう\nはっさん\nはっしん\nはったつ\nはっちゅう\nはってん\nはっぴょう\nはっぽう\nはなす\nはなび\nはにかむ\nはぶらし\nはみがき\nはむかう\nはめつ\nはやい\nはやし\nはらう\nはろうぃん\nはわい\nはんい\nはんえい\nはんおん\nはんかく\nはんきょう\nばんぐみ\nはんこ\nはんしゃ\nはんすう\nはんだん\nぱんち\nぱんつ\nはんてい\nはんとし\nはんのう\nはんぱ\nはんぶん\nはんぺん\nはんぼうき\nはんめい\nはんらん\nはんろん\nひいき\nひうん\nひえる\nひかく\nひかり\nひかる\nひかん\nひくい\nひけつ\nひこうき\nひこく\nひさい\nひさしぶり\nひさん\nびじゅつかん\nひしょ\nひそか\nひそむ\nひたむき\nひだり\nひたる\nひつぎ\nひっこし\nひっし\nひつじゅひん\nひっす\nひつぜん\nぴったり\nぴっちり\nひつよう\nひてい\nひとごみ\nひなまつり\nひなん\nひねる\nひはん\nひびく\nひひょう\nひほう\nひまわり\nひまん\nひみつ\nひめい\nひめじし\nひやけ\nひやす\nひよう\nびょうき\nひらがな\nひらく\nひりつ\nひりょう\nひるま\nひるやすみ\nひれい\nひろい\nひろう\nひろき\nひろゆき\nひんかく\nひんけつ\nひんこん\nひんしゅ\nひんそう\nぴんち\nひんぱん\nびんぼう\nふあん\nふいうち\nふうけい\nふうせん\nぷうたろう\nふうとう\nふうふ\nふえる\nふおん\nふかい\nふきん\nふくざつ\nふくぶくろ\nふこう\nふさい\nふしぎ\nふじみ\nふすま\nふせい\nふせぐ\nふそく\nぶたにく\nふたん\nふちょう\nふつう\nふつか\nふっかつ\nふっき\nふっこく\nぶどう\nふとる\nふとん\nふのう\nふはい\nふひょう\nふへん\nふまん\nふみん\nふめつ\nふめん\nふよう\nふりこ\nふりる\nふるい\nふんいき\nぶんがく\nぶんぐ\nふんしつ\nぶんせき\nふんそう\nぶんぽう\nへいあん\nへいおん\nへいがい\nへいき\nへいげん\nへいこう\nへいさ\nへいしゃ\nへいせつ\nへいそ\nへいたく\nへいてん\nへいねつ\nへいわ\nへきが\nへこむ\nべにいろ\nべにしょうが\nへらす\nへんかん\nべんきょう\nべんごし\nへんさい\nへんたい\nべんり\nほあん\nほいく\nぼうぎょ\nほうこく\nほうそう\nほうほう\nほうもん\nほうりつ\nほえる\nほおん\nほかん\nほきょう\nぼきん\nほくろ\nほけつ\nほけん\nほこう\nほこる\nほしい\nほしつ\nほしゅ\nほしょう\nほせい\nほそい\nほそく\nほたて\nほたる\nぽちぶくろ\nほっきょく\nほっさ\nほったん\nほとんど\nほめる\nほんい\nほんき\nほんけ\nほんしつ\nほんやく\nまいにち\nまかい\nまかせる\nまがる\nまける\nまこと\nまさつ\nまじめ\nますく\nまぜる\nまつり\nまとめ\nまなぶ\nまぬけ\nまねく\nまほう\nまもる\nまゆげ\nまよう\nまろやか\nまわす\nまわり\nまわる\nまんが\nまんきつ\nまんぞく\nまんなか\nみいら\nみうち\nみえる\nみがく\nみかた\nみかん\nみけん\nみこん\nみじかい\nみすい\nみすえる\nみせる\nみっか\nみつかる\nみつける\nみてい\nみとめる\nみなと\nみなみかさい\nみねらる\nみのう\nみのがす\nみほん\nみもと\nみやげ\nみらい\nみりょく\nみわく\nみんか\nみんぞく\nむいか\nむえき\nむえん\nむかい\nむかう\nむかえ\nむかし\nむぎちゃ\nむける\nむげん\nむさぼる\nむしあつい\nむしば\nむじゅん\nむしろ\nむすう\nむすこ\nむすぶ\nむすめ\nむせる\nむせん\nむちゅう\nむなしい\nむのう\nむやみ\nむよう\nむらさき\nむりょう\nむろん\nめいあん\nめいうん\nめいえん\nめいかく\nめいきょく\nめいさい\nめいし\nめいそう\nめいぶつ\nめいれい\nめいわく\nめぐまれる\nめざす\nめした\nめずらしい\nめだつ\nめまい\nめやす\nめんきょ\nめんせき\nめんどう\nもうしあげる\nもうどうけん\nもえる\nもくし\nもくてき\nもくようび\nもちろん\nもどる\nもらう\nもんく\nもんだい\nやおや\nやける\nやさい\nやさしい\nやすい\nやすたろう\nやすみ\nやせる\nやそう\nやたい\nやちん\nやっと\nやっぱり\nやぶる\nやめる\nややこしい\nやよい\nやわらかい\nゆうき\nゆうびんきょく\nゆうべ\nゆうめい\nゆけつ\nゆしゅつ\nゆせん\nゆそう\nゆたか\nゆちゃく\nゆでる\nゆにゅう\nゆびわ\nゆらい\nゆれる\nようい\nようか\nようきゅう\nようじ\nようす\nようちえん\nよかぜ\nよかん\nよきん\nよくせい\nよくぼう\nよけい\nよごれる\nよさん\nよしゅう\nよそう\nよそく\nよっか\nよてい\nよどがわく\nよねつ\nよやく\nよゆう\nよろこぶ\nよろしい\nらいう\nらくがき\nらくご\nらくさつ\nらくだ\nらしんばん\nらせん\nらぞく\nらたい\nらっか\nられつ\nりえき\nりかい\nりきさく\nりきせつ\nりくぐん\nりくつ\nりけん\nりこう\nりせい\nりそう\nりそく\nりてん\nりねん\nりゆう\nりゅうがく\nりよう\nりょうり\nりょかん\nりょくちゃ\nりょこう\nりりく\nりれき\nりろん\nりんご\nるいけい\nるいさい\nるいじ\nるいせき\nるすばん\nるりがわら\nれいかん\nれいぎ\nれいせい\nれいぞうこ\nれいとう\nれいぼう\nれきし\nれきだい\nれんあい\nれんけい\nれんこん\nれんさい\nれんしゅう\nれんぞく\nれんらく\nろうか\nろうご\nろうじん\nろうそく\nろくが\nろこつ\nろじうら\nろしゅつ\nろせん\nろてん\nろめん\nろれつ\nろんぎ\nろんぱ\nろんぶん\nろんり\nわかす\nわかめ\nわかやま\nわかれる\nわしつ\nわじまし\nわすれもの\nわらう\nわれる`.split('\\n');\n", "export const wordlist = `가격\n가끔\n가난\n가능\n가득\n가르침\n가뭄\n가방\n가상\n가슴\n가운데\n가을\n가이드\n가입\n가장\n가정\n가족\n가죽\n각오\n각자\n간격\n간부\n간섭\n간장\n간접\n간판\n갈등\n갈비\n갈색\n갈증\n감각\n감기\n감소\n감수성\n감자\n감정\n갑자기\n강남\n강당\n강도\n강력히\n강변\n강북\n강사\n강수량\n강아지\n강원도\n강의\n강제\n강조\n같이\n개구리\n개나리\n개방\n개별\n개선\n개성\n개인\n객관적\n거실\n거액\n거울\n거짓\n거품\n걱정\n건강\n건물\n건설\n건조\n건축\n걸음\n검사\n검토\n게시판\n게임\n겨울\n견해\n결과\n결국\n결론\n결석\n결승\n결심\n결정\n결혼\n경계\n경고\n경기\n경력\n경복궁\n경비\n경상도\n경영\n경우\n경쟁\n경제\n경주\n경찰\n경치\n경향\n경험\n계곡\n계단\n계란\n계산\n계속\n계약\n계절\n계층\n계획\n고객\n고구려\n고궁\n고급\n고등학생\n고무신\n고민\n고양이\n고장\n고전\n고집\n고춧가루\n고통\n고향\n곡식\n골목\n골짜기\n골프\n공간\n공개\n공격\n공군\n공급\n공기\n공동\n공무원\n공부\n공사\n공식\n공업\n공연\n공원\n공장\n공짜\n공책\n공통\n공포\n공항\n공휴일\n과목\n과일\n과장\n과정\n과학\n관객\n관계\n관광\n관념\n관람\n관련\n관리\n관습\n관심\n관점\n관찰\n광경\n광고\n광장\n광주\n괴로움\n굉장히\n교과서\n교문\n교복\n교실\n교양\n교육\n교장\n교직\n교통\n교환\n교훈\n구경\n구름\n구멍\n구별\n구분\n구석\n구성\n구속\n구역\n구입\n구청\n구체적\n국가\n국기\n국내\n국립\n국물\n국민\n국수\n국어\n국왕\n국적\n국제\n국회\n군대\n군사\n군인\n궁극적\n권리\n권위\n권투\n귀국\n귀신\n규정\n규칙\n균형\n그날\n그냥\n그늘\n그러나\n그룹\n그릇\n그림\n그제서야\n그토록\n극복\n극히\n근거\n근교\n근래\n근로\n근무\n근본\n근원\n근육\n근처\n글씨\n글자\n금강산\n금고\n금년\n금메달\n금액\n금연\n금요일\n금지\n긍정적\n기간\n기관\n기념\n기능\n기독교\n기둥\n기록\n기름\n기법\n기본\n기분\n기쁨\n기숙사\n기술\n기억\n기업\n기온\n기운\n기원\n기적\n기준\n기침\n기혼\n기획\n긴급\n긴장\n길이\n김밥\n김치\n김포공항\n깍두기\n깜빡\n깨달음\n깨소금\n껍질\n꼭대기\n꽃잎\n나들이\n나란히\n나머지\n나물\n나침반\n나흘\n낙엽\n난방\n날개\n날씨\n날짜\n남녀\n남대문\n남매\n남산\n남자\n남편\n남학생\n낭비\n낱말\n내년\n내용\n내일\n냄비\n냄새\n냇물\n냉동\n냉면\n냉방\n냉장고\n넥타이\n넷째\n노동\n노란색\n노력\n노인\n녹음\n녹차\n녹화\n논리\n논문\n논쟁\n놀이\n농구\n농담\n농민\n농부\n농업\n농장\n농촌\n높이\n눈동자\n눈물\n눈썹\n뉴욕\n느낌\n늑대\n능동적\n능력\n다방\n다양성\n다음\n다이어트\n다행\n단계\n단골\n단독\n단맛\n단순\n단어\n단위\n단점\n단체\n단추\n단편\n단풍\n달걀\n달러\n달력\n달리\n닭고기\n담당\n담배\n담요\n담임\n답변\n답장\n당근\n당분간\n당연히\n당장\n대규모\n대낮\n대단히\n대답\n대도시\n대략\n대량\n대륙\n대문\n대부분\n대신\n대응\n대장\n대전\n대접\n대중\n대책\n대출\n대충\n대통령\n대학\n대한민국\n대합실\n대형\n덩어리\n데이트\n도대체\n도덕\n도둑\n도망\n도서관\n도심\n도움\n도입\n도자기\n도저히\n도전\n도중\n도착\n독감\n독립\n독서\n독일\n독창적\n동화책\n뒷모습\n뒷산\n딸아이\n마누라\n마늘\n마당\n마라톤\n마련\n마무리\n마사지\n마약\n마요네즈\n마을\n마음\n마이크\n마중\n마지막\n마찬가지\n마찰\n마흔\n막걸리\n막내\n막상\n만남\n만두\n만세\n만약\n만일\n만점\n만족\n만화\n많이\n말기\n말씀\n말투\n맘대로\n망원경\n매년\n매달\n매력\n매번\n매스컴\n매일\n매장\n맥주\n먹이\n먼저\n먼지\n멀리\n메일\n며느리\n며칠\n면담\n멸치\n명단\n명령\n명예\n명의\n명절\n명칭\n명함\n모금\n모니터\n모델\n모든\n모범\n모습\n모양\n모임\n모조리\n모집\n모퉁이\n목걸이\n목록\n목사\n목소리\n목숨\n목적\n목표\n몰래\n몸매\n몸무게\n몸살\n몸속\n몸짓\n몸통\n몹시\n무관심\n무궁화\n무더위\n무덤\n무릎\n무슨\n무엇\n무역\n무용\n무조건\n무지개\n무척\n문구\n문득\n문법\n문서\n문제\n문학\n문화\n물가\n물건\n물결\n물고기\n물론\n물리학\n물음\n물질\n물체\n미국\n미디어\n미사일\n미술\n미역\n미용실\n미움\n미인\n미팅\n미혼\n민간\n민족\n민주\n믿음\n밀가루\n밀리미터\n밑바닥\n바가지\n바구니\n바나나\n바늘\n바닥\n바닷가\n바람\n바이러스\n바탕\n박물관\n박사\n박수\n반대\n반드시\n반말\n반발\n반성\n반응\n반장\n반죽\n반지\n반찬\n받침\n발가락\n발걸음\n발견\n발달\n발레\n발목\n발바닥\n발생\n발음\n발자국\n발전\n발톱\n발표\n밤하늘\n밥그릇\n밥맛\n밥상\n밥솥\n방금\n방면\n방문\n방바닥\n방법\n방송\n방식\n방안\n방울\n방지\n방학\n방해\n방향\n배경\n배꼽\n배달\n배드민턴\n백두산\n백색\n백성\n백인\n백제\n백화점\n버릇\n버섯\n버튼\n번개\n번역\n번지\n번호\n벌금\n벌레\n벌써\n범위\n범인\n범죄\n법률\n법원\n법적\n법칙\n베이징\n벨트\n변경\n변동\n변명\n변신\n변호사\n변화\n별도\n별명\n별일\n병실\n병아리\n병원\n보관\n보너스\n보라색\n보람\n보름\n보상\n보안\n보자기\n보장\n보전\n보존\n보통\n보편적\n보험\n복도\n복사\n복숭아\n복습\n볶음\n본격적\n본래\n본부\n본사\n본성\n본인\n본질\n볼펜\n봉사\n봉지\n봉투\n부근\n부끄러움\n부담\n부동산\n부문\n부분\n부산\n부상\n부엌\n부인\n부작용\n부장\n부정\n부족\n부지런히\n부친\n부탁\n부품\n부회장\n북부\n북한\n분노\n분량\n분리\n분명\n분석\n분야\n분위기\n분필\n분홍색\n불고기\n불과\n불교\n불꽃\n불만\n불법\n불빛\n불안\n불이익\n불행\n브랜드\n비극\n비난\n비닐\n비둘기\n비디오\n비로소\n비만\n비명\n비밀\n비바람\n비빔밥\n비상\n비용\n비율\n비중\n비타민\n비판\n빌딩\n빗물\n빗방울\n빗줄기\n빛깔\n빨간색\n빨래\n빨리\n사건\n사계절\n사나이\n사냥\n사람\n사랑\n사립\n사모님\n사물\n사방\n사상\n사생활\n사설\n사슴\n사실\n사업\n사용\n사월\n사장\n사전\n사진\n사촌\n사춘기\n사탕\n사투리\n사흘\n산길\n산부인과\n산업\n산책\n살림\n살인\n살짝\n삼계탕\n삼국\n삼십\n삼월\n삼촌\n상관\n상금\n상대\n상류\n상반기\n상상\n상식\n상업\n상인\n상자\n상점\n상처\n상추\n상태\n상표\n상품\n상황\n새벽\n색깔\n색연필\n생각\n생명\n생물\n생방송\n생산\n생선\n생신\n생일\n생활\n서랍\n서른\n서명\n서민\n서비스\n서양\n서울\n서적\n서점\n서쪽\n서클\n석사\n석유\n선거\n선물\n선배\n선생\n선수\n선원\n선장\n선전\n선택\n선풍기\n설거지\n설날\n설렁탕\n설명\n설문\n설사\n설악산\n설치\n설탕\n섭씨\n성공\n성당\n성명\n성별\n성인\n성장\n성적\n성질\n성함\n세금\n세미나\n세상\n세월\n세종대왕\n세탁\n센터\n센티미터\n셋째\n소규모\n소극적\n소금\n소나기\n소년\n소득\n소망\n소문\n소설\n소속\n소아과\n소용\n소원\n소음\n소중히\n소지품\n소질\n소풍\n소형\n속담\n속도\n속옷\n손가락\n손길\n손녀\n손님\n손등\n손목\n손뼉\n손실\n손질\n손톱\n손해\n솔직히\n솜씨\n송아지\n송이\n송편\n쇠고기\n쇼핑\n수건\n수년\n수단\n수돗물\n수동적\n수면\n수명\n수박\n수상\n수석\n수술\n수시로\n수업\n수염\n수영\n수입\n수준\n수집\n수출\n수컷\n수필\n수학\n수험생\n수화기\n숙녀\n숙소\n숙제\n순간\n순서\n순수\n순식간\n순위\n숟가락\n술병\n술집\n숫자\n스님\n스물\n스스로\n스승\n스웨터\n스위치\n스케이트\n스튜디오\n스트레스\n스포츠\n슬쩍\n슬픔\n습관\n습기\n승객\n승리\n승부\n승용차\n승진\n시각\n시간\n시골\n시금치\n시나리오\n시댁\n시리즈\n시멘트\n시민\n시부모\n시선\n시설\n시스템\n시아버지\n시어머니\n시월\n시인\n시일\n시작\n시장\n시절\n시점\n시중\n시즌\n시집\n시청\n시합\n시험\n식구\n식기\n식당\n식량\n식료품\n식물\n식빵\n식사\n식생활\n식초\n식탁\n식품\n신고\n신규\n신념\n신문\n신발\n신비\n신사\n신세\n신용\n신제품\n신청\n신체\n신화\n실감\n실내\n실력\n실례\n실망\n실수\n실습\n실시\n실장\n실정\n실질적\n실천\n실체\n실컷\n실태\n실패\n실험\n실현\n심리\n심부름\n심사\n심장\n심정\n심판\n쌍둥이\n씨름\n씨앗\n아가씨\n아나운서\n아드님\n아들\n아쉬움\n아스팔트\n아시아\n아울러\n아저씨\n아줌마\n아직\n아침\n아파트\n아프리카\n아픔\n아홉\n아흔\n악기\n악몽\n악수\n안개\n안경\n안과\n안내\n안녕\n안동\n안방\n안부\n안주\n알루미늄\n알코올\n암시\n암컷\n압력\n앞날\n앞문\n애인\n애정\n액수\n앨범\n야간\n야단\n야옹\n약간\n약국\n약속\n약수\n약점\n약품\n약혼녀\n양념\n양력\n양말\n양배추\n양주\n양파\n어둠\n어려움\n어른\n어젯밤\n어쨌든\n어쩌다가\n어쩐지\n언니\n언덕\n언론\n언어\n얼굴\n얼른\n얼음\n얼핏\n엄마\n업무\n업종\n업체\n엉덩이\n엉망\n엉터리\n엊그제\n에너지\n에어컨\n엔진\n여건\n여고생\n여관\n여군\n여권\n여대생\n여덟\n여동생\n여든\n여론\n여름\n여섯\n여성\n여왕\n여인\n여전히\n여직원\n여학생\n여행\n역사\n역시\n역할\n연결\n연구\n연극\n연기\n연락\n연설\n연세\n연속\n연습\n연애\n연예인\n연인\n연장\n연주\n연출\n연필\n연합\n연휴\n열기\n열매\n열쇠\n열심히\n열정\n열차\n열흘\n염려\n엽서\n영국\n영남\n영상\n영양\n영역\n영웅\n영원히\n영하\n영향\n영혼\n영화\n옆구리\n옆방\n옆집\n예감\n예금\n예방\n예산\n예상\n예선\n예술\n예습\n예식장\n예약\n예전\n예절\n예정\n예컨대\n옛날\n오늘\n오락\n오랫동안\n오렌지\n오로지\n오른발\n오븐\n오십\n오염\n오월\n오전\n오직\n오징어\n오페라\n오피스텔\n오히려\n옥상\n옥수수\n온갖\n온라인\n온몸\n온종일\n온통\n올가을\n올림픽\n올해\n옷차림\n와이셔츠\n와인\n완성\n완전\n왕비\n왕자\n왜냐하면\n왠지\n외갓집\n외국\n외로움\n외삼촌\n외출\n외침\n외할머니\n왼발\n왼손\n왼쪽\n요금\n요일\n요즘\n요청\n용기\n용서\n용어\n우산\n우선\n우승\n우연히\n우정\n우체국\n우편\n운동\n운명\n운반\n운전\n운행\n울산\n울음\n움직임\n웃어른\n웃음\n워낙\n원고\n원래\n원서\n원숭이\n원인\n원장\n원피스\n월급\n월드컵\n월세\n월요일\n웨이터\n위반\n위법\n위성\n위원\n위험\n위협\n윗사람\n유난히\n유럽\n유명\n유물\n유산\n유적\n유치원\n유학\n유행\n유형\n육군\n육상\n육십\n육체\n은행\n음력\n음료\n음반\n음성\n음식\n음악\n음주\n의견\n의논\n의문\n의복\n의식\n의심\n의외로\n의욕\n의원\n의학\n이것\n이곳\n이념\n이놈\n이달\n이대로\n이동\n이렇게\n이력서\n이론적\n이름\n이민\n이발소\n이별\n이불\n이빨\n이상\n이성\n이슬\n이야기\n이용\n이웃\n이월\n이윽고\n이익\n이전\n이중\n이튿날\n이틀\n이혼\n인간\n인격\n인공\n인구\n인근\n인기\n인도\n인류\n인물\n인생\n인쇄\n인연\n인원\n인재\n인종\n인천\n인체\n인터넷\n인하\n인형\n일곱\n일기\n일단\n일대\n일등\n일반\n일본\n일부\n일상\n일생\n일손\n일요일\n일월\n일정\n일종\n일주일\n일찍\n일체\n일치\n일행\n일회용\n임금\n임무\n입대\n입력\n입맛\n입사\n입술\n입시\n입원\n입장\n입학\n자가용\n자격\n자극\n자동\n자랑\n자부심\n자식\n자신\n자연\n자원\n자율\n자전거\n자정\n자존심\n자판\n작가\n작년\n작성\n작업\n작용\n작은딸\n작품\n잔디\n잔뜩\n잔치\n잘못\n잠깐\n잠수함\n잠시\n잠옷\n잠자리\n잡지\n장관\n장군\n장기간\n장래\n장례\n장르\n장마\n장면\n장모\n장미\n장비\n장사\n장소\n장식\n장애인\n장인\n장점\n장차\n장학금\n재능\n재빨리\n재산\n재생\n재작년\n재정\n재채기\n재판\n재학\n재활용\n저것\n저고리\n저곳\n저녁\n저런\n저렇게\n저번\n저울\n저절로\n저축\n적극\n적당히\n적성\n적용\n적응\n전개\n전공\n전기\n전달\n전라도\n전망\n전문\n전반\n전부\n전세\n전시\n전용\n전자\n전쟁\n전주\n전철\n전체\n전통\n전혀\n전후\n절대\n절망\n절반\n절약\n절차\n점검\n점수\n점심\n점원\n점점\n점차\n접근\n접시\n접촉\n젓가락\n정거장\n정도\n정류장\n정리\n정말\n정면\n정문\n정반대\n정보\n정부\n정비\n정상\n정성\n정오\n정원\n정장\n정지\n정치\n정확히\n제공\n제과점\n제대로\n제목\n제발\n제법\n제삿날\n제안\n제일\n제작\n제주도\n제출\n제품\n제한\n조각\n조건\n조금\n조깅\n조명\n조미료\n조상\n조선\n조용히\n조절\n조정\n조직\n존댓말\n존재\n졸업\n졸음\n종교\n종로\n종류\n종소리\n종업원\n종종\n종합\n좌석\n죄인\n주관적\n주름\n주말\n주머니\n주먹\n주문\n주민\n주방\n주변\n주식\n주인\n주일\n주장\n주전자\n주택\n준비\n줄거리\n줄기\n줄무늬\n중간\n중계방송\n중국\n중년\n중단\n중독\n중반\n중부\n중세\n중소기업\n중순\n중앙\n중요\n중학교\n즉석\n즉시\n즐거움\n증가\n증거\n증권\n증상\n증세\n지각\n지갑\n지경\n지극히\n지금\n지급\n지능\n지름길\n지리산\n지방\n지붕\n지식\n지역\n지우개\n지원\n지적\n지점\n지진\n지출\n직선\n직업\n직원\n직장\n진급\n진동\n진로\n진료\n진리\n진짜\n진찰\n진출\n진통\n진행\n질문\n질병\n질서\n짐작\n집단\n집안\n집중\n짜증\n찌꺼기\n차남\n차라리\n차량\n차림\n차별\n차선\n차츰\n착각\n찬물\n찬성\n참가\n참기름\n참새\n참석\n참여\n참외\n참조\n찻잔\n창가\n창고\n창구\n창문\n창밖\n창작\n창조\n채널\n채점\n책가방\n책방\n책상\n책임\n챔피언\n처벌\n처음\n천국\n천둥\n천장\n천재\n천천히\n철도\n철저히\n철학\n첫날\n첫째\n청년\n청바지\n청소\n청춘\n체계\n체력\n체온\n체육\n체중\n체험\n초등학생\n초반\n초밥\n초상화\n초순\n초여름\n초원\n초저녁\n초점\n초청\n초콜릿\n촛불\n총각\n총리\n총장\n촬영\n최근\n최상\n최선\n최신\n최악\n최종\n추석\n추억\n추진\n추천\n추측\n축구\n축소\n축제\n축하\n출근\n출발\n출산\n출신\n출연\n출입\n출장\n출판\n충격\n충고\n충돌\n충분히\n충청도\n취업\n취직\n취향\n치약\n친구\n친척\n칠십\n칠월\n칠판\n침대\n침묵\n침실\n칫솔\n칭찬\n카메라\n카운터\n칼국수\n캐릭터\n캠퍼스\n캠페인\n커튼\n컨디션\n컬러\n컴퓨터\n코끼리\n코미디\n콘서트\n콜라\n콤플렉스\n콩나물\n쾌감\n쿠데타\n크림\n큰길\n큰딸\n큰소리\n큰아들\n큰어머니\n큰일\n큰절\n클래식\n클럽\n킬로\n타입\n타자기\n탁구\n탁자\n탄생\n태권도\n태양\n태풍\n택시\n탤런트\n터널\n터미널\n테니스\n테스트\n테이블\n텔레비전\n토론\n토마토\n토요일\n통계\n통과\n통로\n통신\n통역\n통일\n통장\n통제\n통증\n통합\n통화\n퇴근\n퇴원\n퇴직금\n튀김\n트럭\n특급\n특별\n특성\n특수\n특징\n특히\n튼튼히\n티셔츠\n파란색\n파일\n파출소\n판결\n판단\n판매\n판사\n팔십\n팔월\n팝송\n패션\n팩스\n팩시밀리\n팬티\n퍼센트\n페인트\n편견\n편의\n편지\n편히\n평가\n평균\n평생\n평소\n평양\n평일\n평화\n포스터\n포인트\n포장\n포함\n표면\n표정\n표준\n표현\n품목\n품질\n풍경\n풍속\n풍습\n프랑스\n프린터\n플라스틱\n피곤\n피망\n피아노\n필름\n필수\n필요\n필자\n필통\n핑계\n하느님\n하늘\n하드웨어\n하룻밤\n하반기\n하숙집\n하순\n하여튼\n하지만\n하천\n하품\n하필\n학과\n학교\n학급\n학기\n학년\n학력\n학번\n학부모\n학비\n학생\n학술\n학습\n학용품\n학원\n학위\n학자\n학점\n한계\n한글\n한꺼번에\n한낮\n한눈\n한동안\n한때\n한라산\n한마디\n한문\n한번\n한복\n한식\n한여름\n한쪽\n할머니\n할아버지\n할인\n함께\n함부로\n합격\n합리적\n항공\n항구\n항상\n항의\n해결\n해군\n해답\n해당\n해물\n해석\n해설\n해수욕장\n해안\n핵심\n핸드백\n햄버거\n햇볕\n햇살\n행동\n행복\n행사\n행운\n행위\n향기\n향상\n향수\n허락\n허용\n헬기\n현관\n현금\n현대\n현상\n현실\n현장\n현재\n현지\n혈액\n협력\n형부\n형사\n형수\n형식\n형제\n형태\n형편\n혜택\n호기심\n호남\n호랑이\n호박\n호텔\n호흡\n혹시\n홀로\n홈페이지\n홍보\n홍수\n홍차\n화면\n화분\n화살\n화요일\n화장\n화학\n확보\n확인\n확장\n확정\n환갑\n환경\n환영\n환율\n환자\n활기\n활동\n활발히\n활용\n활짝\n회견\n회관\n회복\n회색\n회원\n회장\n회전\n횟수\n횡단보도\n효율적\n후반\n후춧가루\n훈련\n훨씬\n휴식\n휴일\n흉내\n흐름\n흑백\n흑인\n흔적\n흔히\n흥미\n흥분\n희곡\n희망\n희생\n흰색\n힘껏`.split('\\n');\n", "export const wordlist = `abacate\nabaixo\nabalar\nabater\nabduzir\nabelha\naberto\nabismo\nabotoar\nabranger\nabreviar\nabrigar\nabrupto\nabsinto\nabsoluto\nabsurdo\nabutre\nacabado\nacalmar\nacampar\nacanhar\nacaso\naceitar\nacelerar\nacenar\nacervo\nacessar\nacetona\nachatar\nacidez\nacima\nacionado\nacirrar\naclamar\naclive\nacolhida\nacomodar\nacoplar\nacordar\nacumular\nacusador\nadaptar\nadega\nadentro\nadepto\nadequar\naderente\nadesivo\nadeus\nadiante\naditivo\nadjetivo\nadjunto\nadmirar\nadorar\nadquirir\nadubo\nadverso\nadvogado\naeronave\nafastar\naferir\nafetivo\nafinador\nafivelar\naflito\nafluente\nafrontar\nagachar\nagarrar\nagasalho\nagenciar\nagilizar\nagiota\nagitado\nagora\nagradar\nagreste\nagrupar\naguardar\nagulha\najoelhar\najudar\najustar\nalameda\nalarme\nalastrar\nalavanca\nalbergue\nalbino\nalcatra\naldeia\nalecrim\nalegria\nalertar\nalface\nalfinete\nalgum\nalheio\naliar\nalicate\nalienar\nalinhar\naliviar\nalmofada\nalocar\nalpiste\nalterar\naltitude\nalucinar\nalugar\naluno\nalusivo\nalvo\namaciar\namador\namarelo\namassar\nambas\nambiente\nameixa\namenizar\namido\namistoso\namizade\namolador\namontoar\namoroso\namostra\namparar\nampliar\nampola\nanagrama\nanalisar\nanarquia\nanatomia\nandaime\nanel\nanexo\nangular\nanimar\nanjo\nanomalia\nanotado\nansioso\nanterior\nanuidade\nanunciar\nanzol\napagador\napalpar\napanhado\napego\napelido\napertada\napesar\napetite\napito\naplauso\naplicada\napoio\napontar\naposta\naprendiz\naprovar\naquecer\narame\naranha\narara\narcada\nardente\nareia\narejar\narenito\naresta\nargiloso\nargola\narma\narquivo\narraial\narrebate\narriscar\narroba\narrumar\narsenal\narterial\nartigo\narvoredo\nasfaltar\nasilado\naspirar\nassador\nassinar\nassoalho\nassunto\nastral\natacado\natadura\natalho\natarefar\natear\natender\naterro\nateu\natingir\natirador\nativo\natoleiro\natracar\natrevido\natriz\natual\natum\nauditor\naumentar\naura\naurora\nautismo\nautoria\nautuar\navaliar\navante\navaria\navental\navesso\naviador\navisar\navulso\naxila\nazarar\nazedo\nazeite\nazulejo\nbabar\nbabosa\nbacalhau\nbacharel\nbacia\nbagagem\nbaiano\nbailar\nbaioneta\nbairro\nbaixista\nbajular\nbaleia\nbaliza\nbalsa\nbanal\nbandeira\nbanho\nbanir\nbanquete\nbarato\nbarbado\nbaronesa\nbarraca\nbarulho\nbaseado\nbastante\nbatata\nbatedor\nbatida\nbatom\nbatucar\nbaunilha\nbeber\nbeijo\nbeirada\nbeisebol\nbeldade\nbeleza\nbelga\nbeliscar\nbendito\nbengala\nbenzer\nberimbau\nberlinda\nberro\nbesouro\nbexiga\nbezerro\nbico\nbicudo\nbienal\nbifocal\nbifurcar\nbigorna\nbilhete\nbimestre\nbimotor\nbiologia\nbiombo\nbiosfera\nbipolar\nbirrento\nbiscoito\nbisneto\nbispo\nbissexto\nbitola\nbizarro\nblindado\nbloco\nbloquear\nboato\nbobagem\nbocado\nbocejo\nbochecha\nboicotar\nbolada\nboletim\nbolha\nbolo\nbombeiro\nbonde\nboneco\nbonita\nborbulha\nborda\nboreal\nborracha\nbovino\nboxeador\nbranco\nbrasa\nbraveza\nbreu\nbriga\nbrilho\nbrincar\nbroa\nbrochura\nbronzear\nbroto\nbruxo\nbucha\nbudismo\nbufar\nbule\nburaco\nbusca\nbusto\nbuzina\ncabana\ncabelo\ncabide\ncabo\ncabrito\ncacau\ncacetada\ncachorro\ncacique\ncadastro\ncadeado\ncafezal\ncaiaque\ncaipira\ncaixote\ncajado\ncaju\ncalafrio\ncalcular\ncaldeira\ncalibrar\ncalmante\ncalota\ncamada\ncambista\ncamisa\ncamomila\ncampanha\ncamuflar\ncanavial\ncancelar\ncaneta\ncanguru\ncanhoto\ncanivete\ncanoa\ncansado\ncantar\ncanudo\ncapacho\ncapela\ncapinar\ncapotar\ncapricho\ncaptador\ncapuz\ncaracol\ncarbono\ncardeal\ncareca\ncarimbar\ncarneiro\ncarpete\ncarreira\ncartaz\ncarvalho\ncasaco\ncasca\ncasebre\ncastelo\ncasulo\ncatarata\ncativar\ncaule\ncausador\ncautelar\ncavalo\ncaverna\ncebola\ncedilha\ncegonha\ncelebrar\ncelular\ncenoura\ncenso\ncenteio\ncercar\ncerrado\ncerteiro\ncerveja\ncetim\ncevada\nchacota\nchaleira\nchamado\nchapada\ncharme\nchatice\nchave\nchefe\nchegada\ncheiro\ncheque\nchicote\nchifre\nchinelo\nchocalho\nchover\nchumbo\nchutar\nchuva\ncicatriz\nciclone\ncidade\ncidreira\nciente\ncigana\ncimento\ncinto\ncinza\nciranda\ncircuito\ncirurgia\ncitar\nclareza\nclero\nclicar\nclone\nclube\ncoado\ncoagir\ncobaia\ncobertor\ncobrar\ncocada\ncoelho\ncoentro\ncoeso\ncogumelo\ncoibir\ncoifa\ncoiote\ncolar\ncoleira\ncolher\ncolidir\ncolmeia\ncolono\ncoluna\ncomando\ncombinar\ncomentar\ncomitiva\ncomover\ncomplexo\ncomum\nconcha\ncondor\nconectar\nconfuso\ncongelar\nconhecer\nconjugar\nconsumir\ncontrato\nconvite\ncooperar\ncopeiro\ncopiador\ncopo\ncoquetel\ncoragem\ncordial\ncorneta\ncoronha\ncorporal\ncorreio\ncortejo\ncoruja\ncorvo\ncosseno\ncostela\ncotonete\ncouro\ncouve\ncovil\ncozinha\ncratera\ncravo\ncreche\ncredor\ncreme\ncrer\ncrespo\ncriada\ncriminal\ncrioulo\ncrise\ncriticar\ncrosta\ncrua\ncruzeiro\ncubano\ncueca\ncuidado\ncujo\nculatra\nculminar\nculpar\ncultura\ncumprir\ncunhado\ncupido\ncurativo\ncurral\ncursar\ncurto\ncuspir\ncustear\ncutelo\ndamasco\ndatar\ndebater\ndebitar\ndeboche\ndebulhar\ndecalque\ndecimal\ndeclive\ndecote\ndecretar\ndedal\ndedicado\ndeduzir\ndefesa\ndefumar\ndegelo\ndegrau\ndegustar\ndeitado\ndeixar\ndelator\ndelegado\ndelinear\ndelonga\ndemanda\ndemitir\ndemolido\ndentista\ndepenado\ndepilar\ndepois\ndepressa\ndepurar\nderiva\nderramar\ndesafio\ndesbotar\ndescanso\ndesenho\ndesfiado\ndesgaste\ndesigual\ndeslize\ndesmamar\ndesova\ndespesa\ndestaque\ndesviar\ndetalhar\ndetentor\ndetonar\ndetrito\ndeusa\ndever\ndevido\ndevotado\ndezena\ndiagrama\ndialeto\ndidata\ndifuso\ndigitar\ndilatado\ndiluente\ndiminuir\ndinastia\ndinheiro\ndiocese\ndireto\ndiscreta\ndisfarce\ndisparo\ndisquete\ndissipar\ndistante\nditador\ndiurno\ndiverso\ndivisor\ndivulgar\ndizer\ndobrador\ndolorido\ndomador\ndominado\ndonativo\ndonzela\ndormente\ndorsal\ndosagem\ndourado\ndoutor\ndrenagem\ndrible\ndrogaria\nduelar\nduende\ndueto\nduplo\nduquesa\ndurante\nduvidoso\neclodir\necoar\necologia\nedificar\nedital\neducado\nefeito\nefetivar\nejetar\nelaborar\neleger\neleitor\nelenco\nelevador\neliminar\nelogiar\nembargo\nembolado\nembrulho\nembutido\nemenda\nemergir\nemissor\nempatia\nempenho\nempinado\nempolgar\nemprego\nempurrar\nemulador\nencaixe\nencenado\nenchente\nencontro\nendeusar\nendossar\nenfaixar\nenfeite\nenfim\nengajado\nengenho\nenglobar\nengomado\nengraxar\nenguia\nenjoar\nenlatar\nenquanto\nenraizar\nenrolado\nenrugar\nensaio\nenseada\nensino\nensopado\nentanto\nenteado\nentidade\nentortar\nentrada\nentulho\nenvergar\nenviado\nenvolver\nenxame\nenxerto\nenxofre\nenxuto\nepiderme\nequipar\nereto\nerguido\nerrata\nerva\nervilha\nesbanjar\nesbelto\nescama\nescola\nescrita\nescuta\nesfinge\nesfolar\nesfregar\nesfumado\nesgrima\nesmalte\nespanto\nespelho\nespiga\nesponja\nespreita\nespumar\nesquerda\nestaca\nesteira\nesticar\nestofado\nestrela\nestudo\nesvaziar\netanol\netiqueta\neuforia\neuropeu\nevacuar\nevaporar\nevasivo\neventual\nevidente\nevoluir\nexagero\nexalar\nexaminar\nexato\nexausto\nexcesso\nexcitar\nexclamar\nexecutar\nexemplo\nexibir\nexigente\nexonerar\nexpandir\nexpelir\nexpirar\nexplanar\nexposto\nexpresso\nexpulsar\nexterno\nextinto\nextrato\nfabricar\nfabuloso\nfaceta\nfacial\nfada\nfadiga\nfaixa\nfalar\nfalta\nfamiliar\nfandango\nfanfarra\nfantoche\nfardado\nfarelo\nfarinha\nfarofa\nfarpa\nfartura\nfatia\nfator\nfavorita\nfaxina\nfazenda\nfechado\nfeijoada\nfeirante\nfelino\nfeminino\nfenda\nfeno\nfera\nferiado\nferrugem\nferver\nfestejar\nfetal\nfeudal\nfiapo\nfibrose\nficar\nficheiro\nfigurado\nfileira\nfilho\nfilme\nfiltrar\nfirmeza\nfisgada\nfissura\nfita\nfivela\nfixador\nfixo\nflacidez\nflamingo\nflanela\nflechada\nflora\nflutuar\nfluxo\nfocal\nfocinho\nfofocar\nfogo\nfoguete\nfoice\nfolgado\nfolheto\nforjar\nformiga\nforno\nforte\nfosco\nfossa\nfragata\nfralda\nfrango\nfrasco\nfraterno\nfreira\nfrente\nfretar\nfrieza\nfriso\nfritura\nfronha\nfrustrar\nfruteira\nfugir\nfulano\nfuligem\nfundar\nfungo\nfunil\nfurador\nfurioso\nfutebol\ngabarito\ngabinete\ngado\ngaiato\ngaiola\ngaivota\ngalega\ngalho\ngalinha\ngalocha\nganhar\ngaragem\ngarfo\ngargalo\ngarimpo\ngaroupa\ngarrafa\ngasoduto\ngasto\ngata\ngatilho\ngaveta\ngazela\ngelado\ngeleia\ngelo\ngemada\ngemer\ngemido\ngeneroso\ngengiva\ngenial\ngenoma\ngenro\ngeologia\ngerador\ngerminar\ngesso\ngestor\nginasta\ngincana\ngingado\ngirafa\ngirino\nglacial\nglicose\nglobal\nglorioso\ngoela\ngoiaba\ngolfe\ngolpear\ngordura\ngorjeta\ngorro\ngostoso\ngoteira\ngovernar\ngracejo\ngradual\ngrafite\ngralha\ngrampo\ngranada\ngratuito\ngraveto\ngraxa\ngrego\ngrelhar\ngreve\ngrilo\ngrisalho\ngritaria\ngrosso\ngrotesco\ngrudado\ngrunhido\ngruta\nguache\nguarani\nguaxinim\nguerrear\nguiar\nguincho\nguisado\ngula\nguloso\nguru\nhabitar\nharmonia\nhaste\nhaver\nhectare\nherdar\nheresia\nhesitar\nhiato\nhibernar\nhidratar\nhiena\nhino\nhipismo\nhipnose\nhipoteca\nhoje\nholofote\nhomem\nhonesto\nhonrado\nhormonal\nhospedar\nhumorado\niate\nideia\nidoso\nignorado\nigreja\niguana\nileso\nilha\niludido\niluminar\nilustrar\nimagem\nimediato\nimenso\nimersivo\niminente\nimitador\nimortal\nimpacto\nimpedir\nimplante\nimpor\nimprensa\nimpune\nimunizar\ninalador\ninapto\ninativo\nincenso\ninchar\nincidir\nincluir\nincolor\nindeciso\nindireto\nindutor\nineficaz\ninerente\ninfantil\ninfestar\ninfinito\ninflamar\ninformal\ninfrator\ningerir\ninibido\ninicial\ninimigo\ninjetar\ninocente\ninodoro\ninovador\ninox\ninquieto\ninscrito\ninseto\ninsistir\ninspetor\ninstalar\ninsulto\nintacto\nintegral\nintimar\nintocado\nintriga\ninvasor\ninverno\ninvicto\ninvocar\niogurte\niraniano\nironizar\nirreal\nirritado\nisca\nisento\nisolado\nisqueiro\nitaliano\njaneiro\njangada\njanta\njararaca\njardim\njarro\njasmim\njato\njavali\njazida\njejum\njoaninha\njoelhada\njogador\njoia\njornal\njorrar\njovem\njuba\njudeu\njudoca\njuiz\njulgador\njulho\njurado\njurista\njuro\njusta\nlabareda\nlaboral\nlacre\nlactante\nladrilho\nlagarta\nlagoa\nlaje\nlamber\nlamentar\nlaminar\nlampejo\nlanche\nlapidar\nlapso\nlaranja\nlareira\nlargura\nlasanha\nlastro\nlateral\nlatido\nlavanda\nlavoura\nlavrador\nlaxante\nlazer\nlealdade\nlebre\nlegado\nlegendar\nlegista\nleigo\nleiloar\nleitura\nlembrete\nleme\nlenhador\nlentilha\nleoa\nlesma\nleste\nletivo\nletreiro\nlevar\nleveza\nlevitar\nliberal\nlibido\nliderar\nligar\nligeiro\nlimitar\nlimoeiro\nlimpador\nlinda\nlinear\nlinhagem\nliquidez\nlistagem\nlisura\nlitoral\nlivro\nlixa\nlixeira\nlocador\nlocutor\nlojista\nlombo\nlona\nlonge\nlontra\nlorde\nlotado\nloteria\nloucura\nlousa\nlouvar\nluar\nlucidez\nlucro\nluneta\nlustre\nlutador\nluva\nmacaco\nmacete\nmachado\nmacio\nmadeira\nmadrinha\nmagnata\nmagreza\nmaior\nmais\nmalandro\nmalha\nmalote\nmaluco\nmamilo\nmamoeiro\nmamute\nmanada\nmancha\nmandato\nmanequim\nmanhoso\nmanivela\nmanobrar\nmansa\nmanter\nmanusear\nmapeado\nmaquinar\nmarcador\nmaresia\nmarfim\nmargem\nmarinho\nmarmita\nmaroto\nmarquise\nmarreco\nmartelo\nmarujo\nmascote\nmasmorra\nmassagem\nmastigar\nmatagal\nmaterno\nmatinal\nmatutar\nmaxilar\nmedalha\nmedida\nmedusa\nmegafone\nmeiga\nmelancia\nmelhor\nmembro\nmemorial\nmenino\nmenos\nmensagem\nmental\nmerecer\nmergulho\nmesada\nmesclar\nmesmo\nmesquita\nmestre\nmetade\nmeteoro\nmetragem\nmexer\nmexicano\nmicro\nmigalha\nmigrar\nmilagre\nmilenar\nmilhar\nmimado\nminerar\nminhoca\nministro\nminoria\nmiolo\nmirante\nmirtilo\nmisturar\nmocidade\nmoderno\nmodular\nmoeda\nmoer\nmoinho\nmoita\nmoldura\nmoleza\nmolho\nmolinete\nmolusco\nmontanha\nmoqueca\nmorango\nmorcego\nmordomo\nmorena\nmosaico\nmosquete\nmostarda\nmotel\nmotim\nmoto\nmotriz\nmuda\nmuito\nmulata\nmulher\nmultar\nmundial\nmunido\nmuralha\nmurcho\nmuscular\nmuseu\nmusical\nnacional\nnadador\nnaja\nnamoro\nnarina\nnarrado\nnascer\nnativa\nnatureza\nnavalha\nnavegar\nnavio\nneblina\nnebuloso\nnegativa\nnegociar\nnegrito\nnervoso\nneta\nneural\nnevasca\nnevoeiro\nninar\nninho\nnitidez\nnivelar\nnobreza\nnoite\nnoiva\nnomear\nnominal\nnordeste\nnortear\nnotar\nnoticiar\nnoturno\nnovelo\nnovilho\nnovo\nnublado\nnudez\nnumeral\nnupcial\nnutrir\nnuvem\nobcecado\nobedecer\nobjetivo\nobrigado\nobscuro\nobstetra\nobter\nobturar\nocidente\nocioso\nocorrer\noculista\nocupado\nofegante\nofensiva\noferenda\noficina\nofuscado\nogiva\nolaria\noleoso\nolhar\noliveira\nombro\nomelete\nomisso\nomitir\nondulado\noneroso\nontem\nopcional\noperador\noponente\noportuno\noposto\norar\norbitar\nordem\nordinal\norfanato\norgasmo\norgulho\noriental\norigem\noriundo\norla\nortodoxo\norvalho\noscilar\nossada\nosso\nostentar\notimismo\nousadia\noutono\noutubro\nouvido\novelha\novular\noxidar\noxigenar\npacato\npaciente\npacote\npactuar\npadaria\npadrinho\npagar\npagode\npainel\npairar\npaisagem\npalavra\npalestra\npalheta\npalito\npalmada\npalpitar\npancada\npanela\npanfleto\npanqueca\npantanal\npapagaio\npapelada\npapiro\nparafina\nparcial\npardal\nparede\npartida\npasmo\npassado\npastel\npatamar\npatente\npatinar\npatrono\npaulada\npausar\npeculiar\npedalar\npedestre\npediatra\npedra\npegada\npeitoral\npeixe\npele\npelicano\npenca\npendurar\npeneira\npenhasco\npensador\npente\nperceber\nperfeito\npergunta\nperito\npermitir\nperna\nperplexo\npersiana\npertence\nperuca\npescado\npesquisa\npessoa\npetiscar\npiada\npicado\npiedade\npigmento\npilastra\npilhado\npilotar\npimenta\npincel\npinguim\npinha\npinote\npintar\npioneiro\npipoca\npiquete\npiranha\npires\npirueta\npiscar\npistola\npitanga\npivete\nplanta\nplaqueta\nplatina\nplebeu\nplumagem\npluvial\npneu\npoda\npoeira\npoetisa\npolegada\npoliciar\npoluente\npolvilho\npomar\npomba\nponderar\npontaria\npopuloso\nporta\npossuir\npostal\npote\npoupar\npouso\npovoar\npraia\nprancha\nprato\npraxe\nprece\npredador\nprefeito\npremiar\nprensar\npreparar\npresilha\npretexto\nprevenir\nprezar\nprimata\nprincesa\nprisma\nprivado\nprocesso\nproduto\nprofeta\nproibido\nprojeto\nprometer\npropagar\nprosa\nprotetor\nprovador\npublicar\npudim\npular\npulmonar\npulseira\npunhal\npunir\npupilo\npureza\npuxador\nquadra\nquantia\nquarto\nquase\nquebrar\nqueda\nqueijo\nquente\nquerido\nquimono\nquina\nquiosque\nrabanada\nrabisco\nrachar\nracionar\nradial\nraiar\nrainha\nraio\nraiva\nrajada\nralado\nramal\nranger\nranhura\nrapadura\nrapel\nrapidez\nraposa\nraquete\nraridade\nrasante\nrascunho\nrasgar\nraspador\nrasteira\nrasurar\nratazana\nratoeira\nrealeza\nreanimar\nreaver\nrebaixar\nrebelde\nrebolar\nrecado\nrecente\nrecheio\nrecibo\nrecordar\nrecrutar\nrecuar\nrede\nredimir\nredonda\nreduzida\nreenvio\nrefinar\nrefletir\nrefogar\nrefresco\nrefugiar\nregalia\nregime\nregra\nreinado\nreitor\nrejeitar\nrelativo\nremador\nremendo\nremorso\nrenovado\nreparo\nrepelir\nrepleto\nrepolho\nrepresa\nrepudiar\nrequerer\nresenha\nresfriar\nresgatar\nresidir\nresolver\nrespeito\nressaca\nrestante\nresumir\nretalho\nreter\nretirar\nretomada\nretratar\nrevelar\nrevisor\nrevolta\nriacho\nrica\nrigidez\nrigoroso\nrimar\nringue\nrisada\nrisco\nrisonho\nrobalo\nrochedo\nrodada\nrodeio\nrodovia\nroedor\nroleta\nromano\nroncar\nrosado\nroseira\nrosto\nrota\nroteiro\nrotina\nrotular\nrouco\nroupa\nroxo\nrubro\nrugido\nrugoso\nruivo\nrumo\nrupestre\nrusso\nsabor\nsaciar\nsacola\nsacudir\nsadio\nsafira\nsaga\nsagrada\nsaibro\nsalada\nsaleiro\nsalgado\nsaliva\nsalpicar\nsalsicha\nsaltar\nsalvador\nsambar\nsamurai\nsanar\nsanfona\nsangue\nsanidade\nsapato\nsarda\nsargento\nsarjeta\nsaturar\nsaudade\nsaxofone\nsazonal\nsecar\nsecular\nseda\nsedento\nsediado\nsedoso\nsedutor\nsegmento\nsegredo\nsegundo\nseiva\nseleto\nselvagem\nsemanal\nsemente\nsenador\nsenhor\nsensual\nsentado\nseparado\nsereia\nseringa\nserra\nservo\nsetembro\nsetor\nsigilo\nsilhueta\nsilicone\nsimetria\nsimpatia\nsimular\nsinal\nsincero\nsingular\nsinopse\nsintonia\nsirene\nsiri\nsituado\nsoberano\nsobra\nsocorro\nsogro\nsoja\nsolda\nsoletrar\nsolteiro\nsombrio\nsonata\nsondar\nsonegar\nsonhador\nsono\nsoprano\nsoquete\nsorrir\nsorteio\nsossego\nsotaque\nsoterrar\nsovado\nsozinho\nsuavizar\nsubida\nsubmerso\nsubsolo\nsubtrair\nsucata\nsucesso\nsuco\nsudeste\nsufixo\nsugador\nsugerir\nsujeito\nsulfato\nsumir\nsuor\nsuperior\nsuplicar\nsuposto\nsuprimir\nsurdina\nsurfista\nsurpresa\nsurreal\nsurtir\nsuspiro\nsustento\ntabela\ntablete\ntabuada\ntacho\ntagarela\ntalher\ntalo\ntalvez\ntamanho\ntamborim\ntampa\ntangente\ntanto\ntapar\ntapioca\ntardio\ntarefa\ntarja\ntarraxa\ntatuagem\ntaurino\ntaxativo\ntaxista\nteatral\ntecer\ntecido\nteclado\ntedioso\nteia\nteimar\ntelefone\ntelhado\ntempero\ntenente\ntensor\ntentar\ntermal\nterno\nterreno\ntese\ntesoura\ntestado\nteto\ntextura\ntexugo\ntiara\ntigela\ntijolo\ntimbrar\ntimidez\ntingido\ntinteiro\ntiragem\ntitular\ntoalha\ntocha\ntolerar\ntolice\ntomada\ntomilho\ntonel\ntontura\ntopete\ntora\ntorcido\ntorneio\ntorque\ntorrada\ntorto\ntostar\ntouca\ntoupeira\ntoxina\ntrabalho\ntracejar\ntradutor\ntrafegar\ntrajeto\ntrama\ntrancar\ntrapo\ntraseiro\ntratador\ntravar\ntreino\ntremer\ntrepidar\ntrevo\ntriagem\ntribo\ntriciclo\ntridente\ntrilogia\ntrindade\ntriplo\ntriturar\ntriunfal\ntrocar\ntrombeta\ntrova\ntrunfo\ntruque\ntubular\ntucano\ntudo\ntulipa\ntupi\nturbo\nturma\nturquesa\ntutelar\ntutorial\nuivar\numbigo\nunha\nunidade\nuniforme\nurologia\nurso\nurtiga\nurubu\nusado\nusina\nusufruir\nvacina\nvadiar\nvagaroso\nvaidoso\nvala\nvalente\nvalidade\nvalores\nvantagem\nvaqueiro\nvaranda\nvareta\nvarrer\nvascular\nvasilha\nvassoura\nvazar\nvazio\nveado\nvedar\nvegetar\nveicular\nveleiro\nvelhice\nveludo\nvencedor\nvendaval\nvenerar\nventre\nverbal\nverdade\nvereador\nvergonha\nvermelho\nverniz\nversar\nvertente\nvespa\nvestido\nvetorial\nviaduto\nviagem\nviajar\nviatura\nvibrador\nvideira\nvidraria\nviela\nviga\nvigente\nvigiar\nvigorar\nvilarejo\nvinco\nvinheta\nvinil\nvioleta\nvirada\nvirtude\nvisitar\nvisto\nvitral\nviveiro\nvizinho\nvoador\nvoar\nvogal\nvolante\nvoleibol\nvoltagem\nvolumoso\nvontade\nvulto\nvuvuzela\nxadrez\nxarope\nxeque\nxeretar\nxerife\nxingar\nzangado\nzarpar\nzebu\nzelador\nzombar\nzoologia\nzumbido`.split('\\n');\n", "export const wordlist = `的\n一\n是\n在\n不\n了\n有\n和\n人\n这\n中\n大\n为\n上\n个\n国\n我\n以\n要\n他\n时\n来\n用\n们\n生\n到\n作\n地\n于\n出\n就\n分\n对\n成\n会\n可\n主\n发\n年\n动\n同\n工\n也\n能\n下\n过\n子\n说\n产\n种\n面\n而\n方\n后\n多\n定\n行\n学\n法\n所\n民\n得\n经\n十\n三\n之\n进\n着\n等\n部\n度\n家\n电\n力\n里\n如\n水\n化\n高\n自\n二\n理\n起\n小\n物\n现\n实\n加\n量\n都\n两\n体\n制\n机\n当\n使\n点\n从\n业\n本\n去\n把\n性\n好\n应\n开\n它\n合\n还\n因\n由\n其\n些\n然\n前\n外\n天\n政\n四\n日\n那\n社\n义\n事\n平\n形\n相\n全\n表\n间\n样\n与\n关\n各\n重\n新\n线\n内\n数\n正\n心\n反\n你\n明\n看\n原\n又\n么\n利\n比\n或\n但\n质\n气\n第\n向\n道\n命\n此\n变\n条\n只\n没\n结\n解\n问\n意\n建\n月\n公\n无\n系\n军\n很\n情\n者\n最\n立\n代\n想\n已\n通\n并\n提\n直\n题\n党\n程\n展\n五\n果\n料\n象\n员\n革\n位\n入\n常\n文\n总\n次\n品\n式\n活\n设\n及\n管\n特\n件\n长\n求\n老\n头\n基\n资\n边\n流\n路\n级\n少\n图\n山\n统\n接\n知\n较\n将\n组\n见\n计\n别\n她\n手\n角\n期\n根\n论\n运\n农\n指\n几\n九\n区\n强\n放\n决\n西\n被\n干\n做\n必\n战\n先\n回\n则\n任\n取\n据\n处\n队\n南\n给\n色\n光\n门\n即\n保\n治\n北\n造\n百\n规\n热\n领\n七\n海\n口\n东\n导\n器\n压\n志\n世\n金\n增\n争\n济\n阶\n油\n思\n术\n极\n交\n受\n联\n什\n认\n六\n共\n权\n收\n证\n改\n清\n美\n再\n采\n转\n更\n单\n风\n切\n打\n白\n教\n速\n花\n带\n安\n场\n身\n车\n例\n真\n务\n具\n万\n每\n目\n至\n达\n走\n积\n示\n议\n声\n报\n斗\n完\n类\n八\n离\n华\n名\n确\n才\n科\n张\n信\n马\n节\n话\n米\n整\n空\n元\n况\n今\n集\n温\n传\n土\n许\n步\n群\n广\n石\n记\n需\n段\n研\n界\n拉\n林\n律\n叫\n且\n究\n观\n越\n织\n装\n影\n算\n低\n持\n音\n众\n书\n布\n复\n容\n儿\n须\n际\n商\n非\n验\n连\n断\n深\n难\n近\n矿\n千\n周\n委\n素\n技\n备\n半\n办\n青\n省\n列\n习\n响\n约\n支\n般\n史\n感\n劳\n便\n团\n往\n酸\n历\n市\n克\n何\n除\n消\n构\n府\n称\n太\n准\n精\n值\n号\n率\n族\n维\n划\n选\n标\n写\n存\n候\n毛\n亲\n快\n效\n斯\n院\n查\n江\n型\n眼\n王\n按\n格\n养\n易\n置\n派\n层\n片\n始\n却\n专\n状\n育\n厂\n京\n识\n适\n属\n圆\n包\n火\n住\n调\n满\n县\n局\n照\n参\n红\n细\n引\n听\n该\n铁\n价\n严\n首\n底\n液\n官\n德\n随\n病\n苏\n失\n尔\n死\n讲\n配\n女\n黄\n推\n显\n谈\n罪\n神\n艺\n呢\n席\n含\n企\n望\n密\n批\n营\n项\n防\n举\n球\n英\n氧\n势\n告\n李\n台\n落\n木\n帮\n轮\n破\n亚\n师\n围\n注\n远\n字\n材\n排\n供\n河\n态\n封\n另\n施\n减\n树\n溶\n怎\n止\n案\n言\n士\n均\n武\n固\n叶\n鱼\n波\n视\n仅\n费\n紧\n爱\n左\n章\n早\n朝\n害\n续\n轻\n服\n试\n食\n充\n兵\n源\n判\n护\n司\n足\n某\n练\n差\n致\n板\n田\n降\n黑\n犯\n负\n击\n范\n继\n兴\n似\n余\n坚\n曲\n输\n修\n故\n城\n夫\n够\n送\n笔\n船\n占\n右\n财\n吃\n富\n春\n职\n觉\n汉\n画\n功\n巴\n跟\n虽\n杂\n飞\n检\n吸\n助\n升\n阳\n互\n初\n创\n抗\n考\n投\n坏\n策\n古\n径\n换\n未\n跑\n留\n钢\n曾\n端\n责\n站\n简\n述\n钱\n副\n尽\n帝\n射\n草\n冲\n承\n独\n令\n限\n阿\n宣\n环\n双\n请\n超\n微\n让\n控\n州\n良\n轴\n找\n否\n纪\n益\n依\n优\n顶\n础\n载\n倒\n房\n突\n坐\n粉\n敌\n略\n客\n袁\n冷\n胜\n绝\n析\n块\n剂\n测\n丝\n协\n诉\n念\n陈\n仍\n罗\n盐\n友\n洋\n错\n苦\n夜\n刑\n移\n频\n逐\n靠\n混\n母\n短\n皮\n终\n聚\n汽\n村\n云\n哪\n既\n距\n卫\n停\n烈\n央\n察\n烧\n迅\n境\n若\n印\n洲\n刻\n括\n激\n孔\n搞\n甚\n室\n待\n核\n校\n散\n侵\n吧\n甲\n游\n久\n菜\n味\n旧\n模\n湖\n货\n损\n预\n阻\n毫\n普\n稳\n乙\n妈\n植\n息\n扩\n银\n语\n挥\n酒\n守\n拿\n序\n纸\n医\n缺\n雨\n吗\n针\n刘\n啊\n急\n唱\n误\n训\n愿\n审\n附\n获\n茶\n鲜\n粮\n斤\n孩\n脱\n硫\n肥\n善\n龙\n演\n父\n渐\n血\n欢\n械\n掌\n歌\n沙\n刚\n攻\n谓\n盾\n讨\n晚\n粒\n乱\n燃\n矛\n乎\n杀\n药\n宁\n鲁\n贵\n钟\n煤\n读\n班\n伯\n香\n介\n迫\n句\n丰\n培\n握\n兰\n担\n弦\n蛋\n沉\n假\n穿\n执\n答\n乐\n谁\n顺\n烟\n缩\n征\n脸\n喜\n松\n脚\n困\n异\n免\n背\n星\n福\n买\n染\n井\n概\n慢\n怕\n磁\n倍\n祖\n皇\n促\n静\n补\n评\n翻\n肉\n践\n尼\n衣\n宽\n扬\n棉\n希\n伤\n操\n垂\n秋\n宜\n氢\n套\n督\n振\n架\n亮\n末\n宪\n庆\n编\n牛\n触\n映\n雷\n销\n诗\n座\n居\n抓\n裂\n胞\n呼\n娘\n景\n威\n绿\n晶\n厚\n盟\n衡\n鸡\n孙\n延\n危\n胶\n屋\n乡\n临\n陆\n顾\n掉\n呀\n灯\n岁\n措\n束\n耐\n剧\n玉\n赵\n跳\n哥\n季\n课\n凯\n胡\n额\n款\n绍\n卷\n齐\n伟\n蒸\n殖\n永\n宗\n苗\n川\n炉\n岩\n弱\n零\n杨\n奏\n沿\n露\n杆\n探\n滑\n镇\n饭\n浓\n航\n怀\n赶\n库\n夺\n伊\n灵\n税\n途\n灭\n赛\n归\n召\n鼓\n播\n盘\n裁\n险\n康\n唯\n录\n菌\n纯\n借\n糖\n盖\n横\n符\n私\n努\n堂\n域\n枪\n润\n幅\n哈\n竟\n熟\n虫\n泽\n脑\n壤\n碳\n欧\n遍\n侧\n寨\n敢\n彻\n虑\n斜\n薄\n庭\n纳\n弹\n饲\n伸\n折\n麦\n湿\n暗\n荷\n瓦\n塞\n床\n筑\n恶\n户\n访\n塔\n奇\n透\n梁\n刀\n旋\n迹\n卡\n氯\n遇\n份\n毒\n泥\n退\n洗\n摆\n灰\n彩\n卖\n耗\n夏\n择\n忙\n铜\n献\n硬\n予\n繁\n圈\n雪\n函\n亦\n抽\n篇\n阵\n阴\n丁\n尺\n追\n堆\n雄\n迎\n泛\n爸\n楼\n避\n谋\n吨\n野\n猪\n旗\n累\n偏\n典\n馆\n索\n秦\n脂\n潮\n爷\n豆\n忽\n托\n惊\n塑\n遗\n愈\n朱\n替\n纤\n粗\n倾\n尚\n痛\n楚\n谢\n奋\n购\n磨\n君\n池\n旁\n碎\n骨\n监\n捕\n弟\n暴\n割\n贯\n殊\n释\n词\n亡\n壁\n顿\n宝\n午\n尘\n闻\n揭\n炮\n残\n冬\n桥\n妇\n警\n综\n招\n吴\n付\n浮\n遭\n徐\n您\n摇\n谷\n赞\n箱\n隔\n订\n男\n吹\n园\n纷\n唐\n败\n宋\n玻\n巨\n耕\n坦\n荣\n闭\n湾\n键\n凡\n驻\n锅\n救\n恩\n剥\n凝\n碱\n齿\n截\n炼\n麻\n纺\n禁\n废\n盛\n版\n缓\n净\n睛\n昌\n婚\n涉\n筒\n嘴\n插\n岸\n朗\n庄\n街\n藏\n姑\n贸\n腐\n奴\n啦\n惯\n乘\n伙\n恢\n匀\n纱\n扎\n辩\n耳\n彪\n臣\n亿\n璃\n抵\n脉\n秀\n萨\n俄\n网\n舞\n店\n喷\n纵\n寸\n汗\n挂\n洪\n贺\n闪\n柬\n爆\n烯\n津\n稻\n墙\n软\n勇\n像\n滚\n厘\n蒙\n芳\n肯\n坡\n柱\n荡\n腿\n仪\n旅\n尾\n轧\n冰\n贡\n登\n黎\n削\n钻\n勒\n逃\n障\n氨\n郭\n峰\n币\n港\n伏\n轨\n亩\n毕\n擦\n莫\n刺\n浪\n秘\n援\n株\n健\n售\n股\n岛\n甘\n泡\n睡\n童\n铸\n汤\n阀\n休\n汇\n舍\n牧\n绕\n炸\n哲\n磷\n绩\n朋\n淡\n尖\n启\n陷\n柴\n呈\n徒\n颜\n泪\n稍\n忘\n泵\n蓝\n拖\n洞\n授\n镜\n辛\n壮\n锋\n贫\n虚\n弯\n摩\n泰\n幼\n廷\n尊\n窗\n纲\n弄\n隶\n疑\n氏\n宫\n姐\n震\n瑞\n怪\n尤\n琴\n循\n描\n膜\n违\n夹\n腰\n缘\n珠\n穷\n森\n枝\n竹\n沟\n催\n绳\n忆\n邦\n剩\n幸\n浆\n栏\n拥\n牙\n贮\n礼\n滤\n钠\n纹\n罢\n拍\n咱\n喊\n袖\n埃\n勤\n罚\n焦\n潜\n伍\n墨\n欲\n缝\n姓\n刊\n饱\n仿\n奖\n铝\n鬼\n丽\n跨\n默\n挖\n链\n扫\n喝\n袋\n炭\n污\n幕\n诸\n弧\n励\n梅\n奶\n洁\n灾\n舟\n鉴\n苯\n讼\n抱\n毁\n懂\n寒\n智\n埔\n寄\n届\n跃\n渡\n挑\n丹\n艰\n贝\n碰\n拔\n爹\n戴\n码\n梦\n芽\n熔\n赤\n渔\n哭\n敬\n颗\n奔\n铅\n仲\n虎\n稀\n妹\n乏\n珍\n申\n桌\n遵\n允\n隆\n螺\n仓\n魏\n锐\n晓\n氮\n兼\n隐\n碍\n赫\n拨\n忠\n肃\n缸\n牵\n抢\n博\n巧\n壳\n兄\n杜\n讯\n诚\n碧\n祥\n柯\n页\n巡\n矩\n悲\n灌\n龄\n伦\n票\n寻\n桂\n铺\n圣\n恐\n恰\n郑\n趣\n抬\n荒\n腾\n贴\n柔\n滴\n猛\n阔\n辆\n妻\n填\n撤\n储\n签\n闹\n扰\n紫\n砂\n递\n戏\n吊\n陶\n伐\n喂\n疗\n瓶\n婆\n抚\n臂\n摸\n忍\n虾\n蜡\n邻\n胸\n巩\n挤\n偶\n弃\n槽\n劲\n乳\n邓\n吉\n仁\n烂\n砖\n租\n乌\n舰\n伴\n瓜\n浅\n丙\n暂\n燥\n橡\n柳\n迷\n暖\n牌\n秧\n胆\n详\n簧\n踏\n瓷\n谱\n呆\n宾\n糊\n洛\n辉\n愤\n竞\n隙\n怒\n粘\n乃\n绪\n肩\n籍\n敏\n涂\n熙\n皆\n侦\n悬\n掘\n享\n纠\n醒\n狂\n锁\n淀\n恨\n牲\n霸\n爬\n赏\n逆\n玩\n陵\n祝\n秒\n浙\n貌\n役\n彼\n悉\n鸭\n趋\n凤\n晨\n畜\n辈\n秩\n卵\n署\n梯\n炎\n滩\n棋\n驱\n筛\n峡\n冒\n啥\n寿\n译\n浸\n泉\n帽\n迟\n硅\n疆\n贷\n漏\n稿\n冠\n嫩\n胁\n芯\n牢\n叛\n蚀\n奥\n鸣\n岭\n羊\n凭\n串\n塘\n绘\n酵\n融\n盆\n锡\n庙\n筹\n冻\n辅\n摄\n袭\n筋\n拒\n僚\n旱\n钾\n鸟\n漆\n沈\n眉\n疏\n添\n棒\n穗\n硝\n韩\n逼\n扭\n侨\n凉\n挺\n碗\n栽\n炒\n杯\n患\n馏\n劝\n豪\n辽\n勃\n鸿\n旦\n吏\n拜\n狗\n埋\n辊\n掩\n饮\n搬\n骂\n辞\n勾\n扣\n估\n蒋\n绒\n雾\n丈\n朵\n姆\n拟\n宇\n辑\n陕\n雕\n偿\n蓄\n崇\n剪\n倡\n厅\n咬\n驶\n薯\n刷\n斥\n番\n赋\n奉\n佛\n浇\n漫\n曼\n扇\n钙\n桃\n扶\n仔\n返\n俗\n亏\n腔\n鞋\n棱\n覆\n框\n悄\n叔\n撞\n骗\n勘\n旺\n沸\n孤\n吐\n孟\n渠\n屈\n疾\n妙\n惜\n仰\n狠\n胀\n谐\n抛\n霉\n桑\n岗\n嘛\n衰\n盗\n渗\n脏\n赖\n涌\n甜\n曹\n阅\n肌\n哩\n厉\n烃\n纬\n毅\n昨\n伪\n症\n煮\n叹\n钉\n搭\n茎\n笼\n酷\n偷\n弓\n锥\n恒\n杰\n坑\n鼻\n翼\n纶\n叙\n狱\n逮\n罐\n络\n棚\n抑\n膨\n蔬\n寺\n骤\n穆\n冶\n枯\n册\n尸\n凸\n绅\n坯\n牺\n焰\n轰\n欣\n晋\n瘦\n御\n锭\n锦\n丧\n旬\n锻\n垄\n搜\n扑\n邀\n亭\n酯\n迈\n舒\n脆\n酶\n闲\n忧\n酚\n顽\n羽\n涨\n卸\n仗\n陪\n辟\n惩\n杭\n姚\n肚\n捉\n飘\n漂\n昆\n欺\n吾\n郎\n烷\n汁\n呵\n饰\n萧\n雅\n邮\n迁\n燕\n撒\n姻\n赴\n宴\n烦\n债\n帐\n斑\n铃\n旨\n醇\n董\n饼\n雏\n姿\n拌\n傅\n腹\n妥\n揉\n贤\n拆\n歪\n葡\n胺\n丢\n浩\n徽\n昂\n垫\n挡\n览\n贪\n慰\n缴\n汪\n慌\n冯\n诺\n姜\n谊\n凶\n劣\n诬\n耀\n昏\n躺\n盈\n骑\n乔\n溪\n丛\n卢\n抹\n闷\n咨\n刮\n驾\n缆\n悟\n摘\n铒\n掷\n颇\n幻\n柄\n惠\n惨\n佳\n仇\n腊\n窝\n涤\n剑\n瞧\n堡\n泼\n葱\n罩\n霍\n捞\n胎\n苍\n滨\n俩\n捅\n湘\n砍\n霞\n邵\n萄\n疯\n淮\n遂\n熊\n粪\n烘\n宿\n档\n戈\n驳\n嫂\n裕\n徙\n箭\n捐\n肠\n撑\n晒\n辨\n殿\n莲\n摊\n搅\n酱\n屏\n疫\n哀\n蔡\n堵\n沫\n皱\n畅\n叠\n阁\n莱\n敲\n辖\n钩\n痕\n坝\n巷\n饿\n祸\n丘\n玄\n溜\n曰\n逻\n彭\n尝\n卿\n妨\n艇\n吞\n韦\n怨\n矮\n歇`.split('\\n');\n", "export const wordlist = `ábaco\nabdomen\nabeja\nabierto\nabogado\nabono\naborto\nabrazo\nabrir\nabuelo\nabuso\nacabar\nacademia\nacceso\nacción\naceite\nacelga\nacento\naceptar\nácido\naclarar\nacné\nacoger\nacoso\nactivo\nacto\nactriz\nactuar\nacudir\nacuerdo\nacusar\nadicto\nadmitir\nadoptar\nadorno\naduana\nadulto\naéreo\nafectar\nafición\nafinar\nafirmar\nágil\nagitar\nagonía\nagosto\nagotar\nagregar\nagrio\nagua\nagudo\náguila\naguja\nahogo\nahorro\naire\naislar\najedrez\najeno\najuste\nalacrán\nalambre\nalarma\nalba\nálbum\nalcalde\naldea\nalegre\nalejar\nalerta\naleta\nalfiler\nalga\nalgodón\naliado\naliento\nalivio\nalma\nalmeja\nalmíbar\naltar\nalteza\naltivo\nalto\naltura\nalumno\nalzar\namable\namante\namapola\namargo\namasar\námbar\námbito\nameno\namigo\namistad\namor\namparo\namplio\nancho\nanciano\nancla\nandar\nandén\nanemia\nángulo\nanillo\nánimo\nanís\nanotar\nantena\nantiguo\nantojo\nanual\nanular\nanuncio\nañadir\nañejo\naño\napagar\naparato\napetito\napio\naplicar\napodo\naporte\napoyo\naprender\naprobar\napuesta\napuro\narado\naraña\narar\nárbitro\nárbol\narbusto\narchivo\narco\narder\nardilla\narduo\nárea\nárido\naries\narmonía\narnés\naroma\narpa\narpón\narreglo\narroz\narruga\narte\nartista\nasa\nasado\nasalto\nascenso\nasegurar\naseo\nasesor\nasiento\nasilo\nasistir\nasno\nasombro\náspero\nastilla\nastro\nastuto\nasumir\nasunto\natajo\nataque\natar\natento\nateo\nático\natleta\nátomo\natraer\natroz\natún\naudaz\naudio\nauge\naula\naumento\nausente\nautor\naval\navance\navaro\nave\navellana\navena\navestruz\navión\naviso\nayer\nayuda\nayuno\nazafrán\nazar\nazote\nazúcar\nazufre\nazul\nbaba\nbabor\nbache\nbahía\nbaile\nbajar\nbalanza\nbalcón\nbalde\nbambú\nbanco\nbanda\nbaño\nbarba\nbarco\nbarniz\nbarro\nbáscula\nbastón\nbasura\nbatalla\nbatería\nbatir\nbatuta\nbaúl\nbazar\nbebé\nbebida\nbello\nbesar\nbeso\nbestia\nbicho\nbien\nbingo\nblanco\nbloque\nblusa\nboa\nbobina\nbobo\nboca\nbocina\nboda\nbodega\nboina\nbola\nbolero\nbolsa\nbomba\nbondad\nbonito\nbono\nbonsái\nborde\nborrar\nbosque\nbote\nbotín\nbóveda\nbozal\nbravo\nbrazo\nbrecha\nbreve\nbrillo\nbrinco\nbrisa\nbroca\nbroma\nbronce\nbrote\nbruja\nbrusco\nbruto\nbuceo\nbucle\nbueno\nbuey\nbufanda\nbufón\nbúho\nbuitre\nbulto\nburbuja\nburla\nburro\nbuscar\nbutaca\nbuzón\ncaballo\ncabeza\ncabina\ncabra\ncacao\ncadáver\ncadena\ncaer\ncafé\ncaída\ncaimán\ncaja\ncajón\ncal\ncalamar\ncalcio\ncaldo\ncalidad\ncalle\ncalma\ncalor\ncalvo\ncama\ncambio\ncamello\ncamino\ncampo\ncáncer\ncandil\ncanela\ncanguro\ncanica\ncanto\ncaña\ncañón\ncaoba\ncaos\ncapaz\ncapitán\ncapote\ncaptar\ncapucha\ncara\ncarbón\ncárcel\ncareta\ncarga\ncariño\ncarne\ncarpeta\ncarro\ncarta\ncasa\ncasco\ncasero\ncaspa\ncastor\ncatorce\ncatre\ncaudal\ncausa\ncazo\ncebolla\nceder\ncedro\ncelda\ncélebre\nceloso\ncélula\ncemento\nceniza\ncentro\ncerca\ncerdo\ncereza\ncero\ncerrar\ncerteza\ncésped\ncetro\nchacal\nchaleco\nchampú\nchancla\nchapa\ncharla\nchico\nchiste\nchivo\nchoque\nchoza\nchuleta\nchupar\nciclón\nciego\ncielo\ncien\ncierto\ncifra\ncigarro\ncima\ncinco\ncine\ncinta\nciprés\ncirco\nciruela\ncisne\ncita\nciudad\nclamor\nclan\nclaro\nclase\nclave\ncliente\nclima\nclínica\ncobre\ncocción\ncochino\ncocina\ncoco\ncódigo\ncodo\ncofre\ncoger\ncohete\ncojín\ncojo\ncola\ncolcha\ncolegio\ncolgar\ncolina\ncollar\ncolmo\ncolumna\ncombate\ncomer\ncomida\ncómodo\ncompra\nconde\nconejo\nconga\nconocer\nconsejo\ncontar\ncopa\ncopia\ncorazón\ncorbata\ncorcho\ncordón\ncorona\ncorrer\ncoser\ncosmos\ncosta\ncráneo\ncráter\ncrear\ncrecer\ncreído\ncrema\ncría\ncrimen\ncripta\ncrisis\ncromo\ncrónica\ncroqueta\ncrudo\ncruz\ncuadro\ncuarto\ncuatro\ncubo\ncubrir\ncuchara\ncuello\ncuento\ncuerda\ncuesta\ncueva\ncuidar\nculebra\nculpa\nculto\ncumbre\ncumplir\ncuna\ncuneta\ncuota\ncupón\ncúpula\ncurar\ncurioso\ncurso\ncurva\ncutis\ndama\ndanza\ndar\ndardo\ndátil\ndeber\ndébil\ndécada\ndecir\ndedo\ndefensa\ndefinir\ndejar\ndelfín\ndelgado\ndelito\ndemora\ndenso\ndental\ndeporte\nderecho\nderrota\ndesayuno\ndeseo\ndesfile\ndesnudo\ndestino\ndesvío\ndetalle\ndetener\ndeuda\ndía\ndiablo\ndiadema\ndiamante\ndiana\ndiario\ndibujo\ndictar\ndiente\ndieta\ndiez\ndifícil\ndigno\ndilema\ndiluir\ndinero\ndirecto\ndirigir\ndisco\ndiseño\ndisfraz\ndiva\ndivino\ndoble\ndoce\ndolor\ndomingo\ndon\ndonar\ndorado\ndormir\ndorso\ndos\ndosis\ndragón\ndroga\nducha\nduda\nduelo\ndueño\ndulce\ndúo\nduque\ndurar\ndureza\nduro\nébano\nebrio\nechar\neco\necuador\nedad\nedición\nedificio\neditor\neducar\nefecto\neficaz\neje\nejemplo\nelefante\nelegir\nelemento\nelevar\nelipse\nélite\nelixir\nelogio\neludir\nembudo\nemitir\nemoción\nempate\nempeño\nempleo\nempresa\nenano\nencargo\nenchufe\nencía\nenemigo\nenero\nenfado\nenfermo\nengaño\nenigma\nenlace\nenorme\nenredo\nensayo\nenseñar\nentero\nentrar\nenvase\nenvío\népoca\nequipo\nerizo\nescala\nescena\nescolar\nescribir\nescudo\nesencia\nesfera\nesfuerzo\nespada\nespejo\nespía\nesposa\nespuma\nesquí\nestar\neste\nestilo\nestufa\netapa\neterno\nética\netnia\nevadir\nevaluar\nevento\nevitar\nexacto\nexamen\nexceso\nexcusa\nexento\nexigir\nexilio\nexistir\néxito\nexperto\nexplicar\nexponer\nextremo\nfábrica\nfábula\nfachada\nfácil\nfactor\nfaena\nfaja\nfalda\nfallo\nfalso\nfaltar\nfama\nfamilia\nfamoso\nfaraón\nfarmacia\nfarol\nfarsa\nfase\nfatiga\nfauna\nfavor\nfax\nfebrero\nfecha\nfeliz\nfeo\nferia\nferoz\nfértil\nfervor\nfestín\nfiable\nfianza\nfiar\nfibra\nficción\nficha\nfideo\nfiebre\nfiel\nfiera\nfiesta\nfigura\nfijar\nfijo\nfila\nfilete\nfilial\nfiltro\nfin\nfinca\nfingir\nfinito\nfirma\nflaco\nflauta\nflecha\nflor\nflota\nfluir\nflujo\nflúor\nfobia\nfoca\nfogata\nfogón\nfolio\nfolleto\nfondo\nforma\nforro\nfortuna\nforzar\nfosa\nfoto\nfracaso\nfrágil\nfranja\nfrase\nfraude\nfreír\nfreno\nfresa\nfrío\nfrito\nfruta\nfuego\nfuente\nfuerza\nfuga\nfumar\nfunción\nfunda\nfurgón\nfuria\nfusil\nfútbol\nfuturo\ngacela\ngafas\ngaita\ngajo\ngala\ngalería\ngallo\ngamba\nganar\ngancho\nganga\nganso\ngaraje\ngarza\ngasolina\ngastar\ngato\ngavilán\ngemelo\ngemir\ngen\ngénero\ngenio\ngente\ngeranio\ngerente\ngermen\ngesto\ngigante\ngimnasio\ngirar\ngiro\nglaciar\nglobo\ngloria\ngol\ngolfo\ngoloso\ngolpe\ngoma\ngordo\ngorila\ngorra\ngota\ngoteo\ngozar\ngrada\ngráfico\ngrano\ngrasa\ngratis\ngrave\ngrieta\ngrillo\ngripe\ngris\ngrito\ngrosor\ngrúa\ngrueso\ngrumo\ngrupo\nguante\nguapo\nguardia\nguerra\nguía\nguiño\nguion\nguiso\nguitarra\ngusano\ngustar\nhaber\nhábil\nhablar\nhacer\nhacha\nhada\nhallar\nhamaca\nharina\nhaz\nhazaña\nhebilla\nhebra\nhecho\nhelado\nhelio\nhembra\nherir\nhermano\nhéroe\nhervir\nhielo\nhierro\nhígado\nhigiene\nhijo\nhimno\nhistoria\nhocico\nhogar\nhoguera\nhoja\nhombre\nhongo\nhonor\nhonra\nhora\nhormiga\nhorno\nhostil\nhoyo\nhueco\nhuelga\nhuerta\nhueso\nhuevo\nhuida\nhuir\nhumano\nhúmedo\nhumilde\nhumo\nhundir\nhuracán\nhurto\nicono\nideal\nidioma\nídolo\niglesia\niglú\nigual\nilegal\nilusión\nimagen\nimán\nimitar\nimpar\nimperio\nimponer\nimpulso\nincapaz\níndice\ninerte\ninfiel\ninforme\ningenio\ninicio\ninmenso\ninmune\ninnato\ninsecto\ninstante\ninterés\níntimo\nintuir\ninútil\ninvierno\nira\niris\nironía\nisla\nislote\njabalí\njabón\njamón\njarabe\njardín\njarra\njaula\njazmín\njefe\njeringa\njinete\njornada\njoroba\njoven\njoya\njuerga\njueves\njuez\njugador\njugo\njuguete\njuicio\njunco\njungla\njunio\njuntar\njúpiter\njurar\njusto\njuvenil\njuzgar\nkilo\nkoala\nlabio\nlacio\nlacra\nlado\nladrón\nlagarto\nlágrima\nlaguna\nlaico\nlamer\nlámina\nlámpara\nlana\nlancha\nlangosta\nlanza\nlápiz\nlargo\nlarva\nlástima\nlata\nlátex\nlatir\nlaurel\nlavar\nlazo\nleal\nlección\nleche\nlector\nleer\nlegión\nlegumbre\nlejano\nlengua\nlento\nleña\nleón\nleopardo\nlesión\nletal\nletra\nleve\nleyenda\nlibertad\nlibro\nlicor\nlíder\nlidiar\nlienzo\nliga\nligero\nlima\nlímite\nlimón\nlimpio\nlince\nlindo\nlínea\nlingote\nlino\nlinterna\nlíquido\nliso\nlista\nlitera\nlitio\nlitro\nllaga\nllama\nllanto\nllave\nllegar\nllenar\nllevar\nllorar\nllover\nlluvia\nlobo\nloción\nloco\nlocura\nlógica\nlogro\nlombriz\nlomo\nlonja\nlote\nlucha\nlucir\nlugar\nlujo\nluna\nlunes\nlupa\nlustro\nluto\nluz\nmaceta\nmacho\nmadera\nmadre\nmaduro\nmaestro\nmafia\nmagia\nmago\nmaíz\nmaldad\nmaleta\nmalla\nmalo\nmamá\nmambo\nmamut\nmanco\nmando\nmanejar\nmanga\nmaniquí\nmanjar\nmano\nmanso\nmanta\nmañana\nmapa\nmáquina\nmar\nmarco\nmarea\nmarfil\nmargen\nmarido\nmármol\nmarrón\nmartes\nmarzo\nmasa\nmáscara\nmasivo\nmatar\nmateria\nmatiz\nmatriz\nmáximo\nmayor\nmazorca\nmecha\nmedalla\nmedio\nmédula\nmejilla\nmejor\nmelena\nmelón\nmemoria\nmenor\nmensaje\nmente\nmenú\nmercado\nmerengue\nmérito\nmes\nmesón\nmeta\nmeter\nmétodo\nmetro\nmezcla\nmiedo\nmiel\nmiembro\nmiga\nmil\nmilagro\nmilitar\nmillón\nmimo\nmina\nminero\nmínimo\nminuto\nmiope\nmirar\nmisa\nmiseria\nmisil\nmismo\nmitad\nmito\nmochila\nmoción\nmoda\nmodelo\nmoho\nmojar\nmolde\nmoler\nmolino\nmomento\nmomia\nmonarca\nmoneda\nmonja\nmonto\nmoño\nmorada\nmorder\nmoreno\nmorir\nmorro\nmorsa\nmortal\nmosca\nmostrar\nmotivo\nmover\nmóvil\nmozo\nmucho\nmudar\nmueble\nmuela\nmuerte\nmuestra\nmugre\nmujer\nmula\nmuleta\nmulta\nmundo\nmuñeca\nmural\nmuro\nmúsculo\nmuseo\nmusgo\nmúsica\nmuslo\nnácar\nnación\nnadar\nnaipe\nnaranja\nnariz\nnarrar\nnasal\nnatal\nnativo\nnatural\nnáusea\nnaval\nnave\nnavidad\nnecio\nnéctar\nnegar\nnegocio\nnegro\nneón\nnervio\nneto\nneutro\nnevar\nnevera\nnicho\nnido\nniebla\nnieto\nniñez\nniño\nnítido\nnivel\nnobleza\nnoche\nnómina\nnoria\nnorma\nnorte\nnota\nnoticia\nnovato\nnovela\nnovio\nnube\nnuca\nnúcleo\nnudillo\nnudo\nnuera\nnueve\nnuez\nnulo\nnúmero\nnutria\noasis\nobeso\nobispo\nobjeto\nobra\nobrero\nobservar\nobtener\nobvio\noca\nocaso\nocéano\nochenta\nocho\nocio\nocre\noctavo\noctubre\noculto\nocupar\nocurrir\nodiar\nodio\nodisea\noeste\nofensa\noferta\noficio\nofrecer\nogro\noído\noír\nojo\nola\noleada\nolfato\nolivo\nolla\nolmo\nolor\nolvido\nombligo\nonda\nonza\nopaco\nopción\nópera\nopinar\noponer\noptar\nóptica\nopuesto\noración\norador\noral\nórbita\norca\norden\noreja\nórgano\norgía\norgullo\noriente\norigen\norilla\noro\norquesta\noruga\nosadía\noscuro\nosezno\noso\nostra\notoño\notro\noveja\nóvulo\nóxido\noxígeno\noyente\nozono\npacto\npadre\npaella\npágina\npago\npaís\npájaro\npalabra\npalco\npaleta\npálido\npalma\npaloma\npalpar\npan\npanal\npánico\npantera\npañuelo\npapá\npapel\npapilla\npaquete\nparar\nparcela\npared\nparir\nparo\npárpado\nparque\npárrafo\nparte\npasar\npaseo\npasión\npaso\npasta\npata\npatio\npatria\npausa\npauta\npavo\npayaso\npeatón\npecado\npecera\npecho\npedal\npedir\npegar\npeine\npelar\npeldaño\npelea\npeligro\npellejo\npelo\npeluca\npena\npensar\npeñón\npeón\npeor\npepino\npequeño\npera\npercha\nperder\npereza\nperfil\nperico\nperla\npermiso\nperro\npersona\npesa\npesca\npésimo\npestaña\npétalo\npetróleo\npez\npezuña\npicar\npichón\npie\npiedra\npierna\npieza\npijama\npilar\npiloto\npimienta\npino\npintor\npinza\npiña\npiojo\npipa\npirata\npisar\npiscina\npiso\npista\npitón\npizca\nplaca\nplan\nplata\nplaya\nplaza\npleito\npleno\nplomo\npluma\nplural\npobre\npoco\npoder\npodio\npoema\npoesía\npoeta\npolen\npolicía\npollo\npolvo\npomada\npomelo\npomo\npompa\nponer\nporción\nportal\nposada\nposeer\nposible\nposte\npotencia\npotro\npozo\nprado\nprecoz\npregunta\npremio\nprensa\npreso\nprevio\nprimo\npríncipe\nprisión\nprivar\nproa\nprobar\nproceso\nproducto\nproeza\nprofesor\nprograma\nprole\npromesa\npronto\npropio\npróximo\nprueba\npúblico\npuchero\npudor\npueblo\npuerta\npuesto\npulga\npulir\npulmón\npulpo\npulso\npuma\npunto\npuñal\npuño\npupa\npupila\npuré\nquedar\nqueja\nquemar\nquerer\nqueso\nquieto\nquímica\nquince\nquitar\nrábano\nrabia\nrabo\nración\nradical\nraíz\nrama\nrampa\nrancho\nrango\nrapaz\nrápido\nrapto\nrasgo\nraspa\nrato\nrayo\nraza\nrazón\nreacción\nrealidad\nrebaño\nrebote\nrecaer\nreceta\nrechazo\nrecoger\nrecreo\nrecto\nrecurso\nred\nredondo\nreducir\nreflejo\nreforma\nrefrán\nrefugio\nregalo\nregir\nregla\nregreso\nrehén\nreino\nreír\nreja\nrelato\nrelevo\nrelieve\nrelleno\nreloj\nremar\nremedio\nremo\nrencor\nrendir\nrenta\nreparto\nrepetir\nreposo\nreptil\nres\nrescate\nresina\nrespeto\nresto\nresumen\nretiro\nretorno\nretrato\nreunir\nrevés\nrevista\nrey\nrezar\nrico\nriego\nrienda\nriesgo\nrifa\nrígido\nrigor\nrincón\nriñón\nrío\nriqueza\nrisa\nritmo\nrito\nrizo\nroble\nroce\nrociar\nrodar\nrodeo\nrodilla\nroer\nrojizo\nrojo\nromero\nromper\nron\nronco\nronda\nropa\nropero\nrosa\nrosca\nrostro\nrotar\nrubí\nrubor\nrudo\nrueda\nrugir\nruido\nruina\nruleta\nrulo\nrumbo\nrumor\nruptura\nruta\nrutina\nsábado\nsaber\nsabio\nsable\nsacar\nsagaz\nsagrado\nsala\nsaldo\nsalero\nsalir\nsalmón\nsalón\nsalsa\nsalto\nsalud\nsalvar\nsamba\nsanción\nsandía\nsanear\nsangre\nsanidad\nsano\nsanto\nsapo\nsaque\nsardina\nsartén\nsastre\nsatán\nsauna\nsaxofón\nsección\nseco\nsecreto\nsecta\nsed\nseguir\nseis\nsello\nselva\nsemana\nsemilla\nsenda\nsensor\nseñal\nseñor\nseparar\nsepia\nsequía\nser\nserie\nsermón\nservir\nsesenta\nsesión\nseta\nsetenta\nsevero\nsexo\nsexto\nsidra\nsiesta\nsiete\nsiglo\nsigno\nsílaba\nsilbar\nsilencio\nsilla\nsímbolo\nsimio\nsirena\nsistema\nsitio\nsituar\nsobre\nsocio\nsodio\nsol\nsolapa\nsoldado\nsoledad\nsólido\nsoltar\nsolución\nsombra\nsondeo\nsonido\nsonoro\nsonrisa\nsopa\nsoplar\nsoporte\nsordo\nsorpresa\nsorteo\nsostén\nsótano\nsuave\nsubir\nsuceso\nsudor\nsuegra\nsuelo\nsueño\nsuerte\nsufrir\nsujeto\nsultán\nsumar\nsuperar\nsuplir\nsuponer\nsupremo\nsur\nsurco\nsureño\nsurgir\nsusto\nsutil\ntabaco\ntabique\ntabla\ntabú\ntaco\ntacto\ntajo\ntalar\ntalco\ntalento\ntalla\ntalón\ntamaño\ntambor\ntango\ntanque\ntapa\ntapete\ntapia\ntapón\ntaquilla\ntarde\ntarea\ntarifa\ntarjeta\ntarot\ntarro\ntarta\ntatuaje\ntauro\ntaza\ntazón\nteatro\ntecho\ntecla\ntécnica\ntejado\ntejer\ntejido\ntela\nteléfono\ntema\ntemor\ntemplo\ntenaz\ntender\ntener\ntenis\ntenso\nteoría\nterapia\nterco\ntérmino\nternura\nterror\ntesis\ntesoro\ntestigo\ntetera\ntexto\ntez\ntibio\ntiburón\ntiempo\ntienda\ntierra\ntieso\ntigre\ntijera\ntilde\ntimbre\ntímido\ntimo\ntinta\ntío\ntípico\ntipo\ntira\ntirón\ntitán\ntítere\ntítulo\ntiza\ntoalla\ntobillo\ntocar\ntocino\ntodo\ntoga\ntoldo\ntomar\ntono\ntonto\ntopar\ntope\ntoque\ntórax\ntorero\ntormenta\ntorneo\ntoro\ntorpedo\ntorre\ntorso\ntortuga\ntos\ntosco\ntoser\ntóxico\ntrabajo\ntractor\ntraer\ntráfico\ntrago\ntraje\ntramo\ntrance\ntrato\ntrauma\ntrazar\ntrébol\ntregua\ntreinta\ntren\ntrepar\ntres\ntribu\ntrigo\ntripa\ntriste\ntriunfo\ntrofeo\ntrompa\ntronco\ntropa\ntrote\ntrozo\ntruco\ntrueno\ntrufa\ntubería\ntubo\ntuerto\ntumba\ntumor\ntúnel\ntúnica\nturbina\nturismo\nturno\ntutor\nubicar\núlcera\numbral\nunidad\nunir\nuniverso\nuno\nuntar\nuña\nurbano\nurbe\nurgente\nurna\nusar\nusuario\nútil\nutopía\nuva\nvaca\nvacío\nvacuna\nvagar\nvago\nvaina\nvajilla\nvale\nválido\nvalle\nvalor\nválvula\nvampiro\nvara\nvariar\nvarón\nvaso\nvecino\nvector\nvehículo\nveinte\nvejez\nvela\nvelero\nveloz\nvena\nvencer\nvenda\nveneno\nvengar\nvenir\nventa\nvenus\nver\nverano\nverbo\nverde\nvereda\nverja\nverso\nverter\nvía\nviaje\nvibrar\nvicio\nvíctima\nvida\nvídeo\nvidrio\nviejo\nviernes\nvigor\nvil\nvilla\nvinagre\nvino\nviñedo\nviolín\nviral\nvirgo\nvirtud\nvisor\nvíspera\nvista\nvitamina\nviudo\nvivaz\nvivero\nvivir\nvivo\nvolcán\nvolumen\nvolver\nvoraz\nvotar\nvoto\nvoz\nvuelo\nvulgar\nyacer\nyate\nyegua\nyema\nyerno\nyeso\nyodo\nyoga\nyogur\nzafiro\nzanja\nzapato\nzarza\nzona\nzorro\nzumo\nzurdo`.split('\\n');\n", "export const wordlist = `的\n一\n是\n在\n不\n了\n有\n和\n人\n這\n中\n大\n為\n上\n個\n國\n我\n以\n要\n他\n時\n來\n用\n們\n生\n到\n作\n地\n於\n出\n就\n分\n對\n成\n會\n可\n主\n發\n年\n動\n同\n工\n也\n能\n下\n過\n子\n說\n產\n種\n面\n而\n方\n後\n多\n定\n行\n學\n法\n所\n民\n得\n經\n十\n三\n之\n進\n著\n等\n部\n度\n家\n電\n力\n裡\n如\n水\n化\n高\n自\n二\n理\n起\n小\n物\n現\n實\n加\n量\n都\n兩\n體\n制\n機\n當\n使\n點\n從\n業\n本\n去\n把\n性\n好\n應\n開\n它\n合\n還\n因\n由\n其\n些\n然\n前\n外\n天\n政\n四\n日\n那\n社\n義\n事\n平\n形\n相\n全\n表\n間\n樣\n與\n關\n各\n重\n新\n線\n內\n數\n正\n心\n反\n你\n明\n看\n原\n又\n麼\n利\n比\n或\n但\n質\n氣\n第\n向\n道\n命\n此\n變\n條\n只\n沒\n結\n解\n問\n意\n建\n月\n公\n無\n系\n軍\n很\n情\n者\n最\n立\n代\n想\n已\n通\n並\n提\n直\n題\n黨\n程\n展\n五\n果\n料\n象\n員\n革\n位\n入\n常\n文\n總\n次\n品\n式\n活\n設\n及\n管\n特\n件\n長\n求\n老\n頭\n基\n資\n邊\n流\n路\n級\n少\n圖\n山\n統\n接\n知\n較\n將\n組\n見\n計\n別\n她\n手\n角\n期\n根\n論\n運\n農\n指\n幾\n九\n區\n強\n放\n決\n西\n被\n幹\n做\n必\n戰\n先\n回\n則\n任\n取\n據\n處\n隊\n南\n給\n色\n光\n門\n即\n保\n治\n北\n造\n百\n規\n熱\n領\n七\n海\n口\n東\n導\n器\n壓\n志\n世\n金\n增\n爭\n濟\n階\n油\n思\n術\n極\n交\n受\n聯\n什\n認\n六\n共\n權\n收\n證\n改\n清\n美\n再\n採\n轉\n更\n單\n風\n切\n打\n白\n教\n速\n花\n帶\n安\n場\n身\n車\n例\n真\n務\n具\n萬\n每\n目\n至\n達\n走\n積\n示\n議\n聲\n報\n鬥\n完\n類\n八\n離\n華\n名\n確\n才\n科\n張\n信\n馬\n節\n話\n米\n整\n空\n元\n況\n今\n集\n溫\n傳\n土\n許\n步\n群\n廣\n石\n記\n需\n段\n研\n界\n拉\n林\n律\n叫\n且\n究\n觀\n越\n織\n裝\n影\n算\n低\n持\n音\n眾\n書\n布\n复\n容\n兒\n須\n際\n商\n非\n驗\n連\n斷\n深\n難\n近\n礦\n千\n週\n委\n素\n技\n備\n半\n辦\n青\n省\n列\n習\n響\n約\n支\n般\n史\n感\n勞\n便\n團\n往\n酸\n歷\n市\n克\n何\n除\n消\n構\n府\n稱\n太\n準\n精\n值\n號\n率\n族\n維\n劃\n選\n標\n寫\n存\n候\n毛\n親\n快\n效\n斯\n院\n查\n江\n型\n眼\n王\n按\n格\n養\n易\n置\n派\n層\n片\n始\n卻\n專\n狀\n育\n廠\n京\n識\n適\n屬\n圓\n包\n火\n住\n調\n滿\n縣\n局\n照\n參\n紅\n細\n引\n聽\n該\n鐵\n價\n嚴\n首\n底\n液\n官\n德\n隨\n病\n蘇\n失\n爾\n死\n講\n配\n女\n黃\n推\n顯\n談\n罪\n神\n藝\n呢\n席\n含\n企\n望\n密\n批\n營\n項\n防\n舉\n球\n英\n氧\n勢\n告\n李\n台\n落\n木\n幫\n輪\n破\n亞\n師\n圍\n注\n遠\n字\n材\n排\n供\n河\n態\n封\n另\n施\n減\n樹\n溶\n怎\n止\n案\n言\n士\n均\n武\n固\n葉\n魚\n波\n視\n僅\n費\n緊\n愛\n左\n章\n早\n朝\n害\n續\n輕\n服\n試\n食\n充\n兵\n源\n判\n護\n司\n足\n某\n練\n差\n致\n板\n田\n降\n黑\n犯\n負\n擊\n范\n繼\n興\n似\n餘\n堅\n曲\n輸\n修\n故\n城\n夫\n夠\n送\n筆\n船\n佔\n右\n財\n吃\n富\n春\n職\n覺\n漢\n畫\n功\n巴\n跟\n雖\n雜\n飛\n檢\n吸\n助\n昇\n陽\n互\n初\n創\n抗\n考\n投\n壞\n策\n古\n徑\n換\n未\n跑\n留\n鋼\n曾\n端\n責\n站\n簡\n述\n錢\n副\n盡\n帝\n射\n草\n衝\n承\n獨\n令\n限\n阿\n宣\n環\n雙\n請\n超\n微\n讓\n控\n州\n良\n軸\n找\n否\n紀\n益\n依\n優\n頂\n礎\n載\n倒\n房\n突\n坐\n粉\n敵\n略\n客\n袁\n冷\n勝\n絕\n析\n塊\n劑\n測\n絲\n協\n訴\n念\n陳\n仍\n羅\n鹽\n友\n洋\n錯\n苦\n夜\n刑\n移\n頻\n逐\n靠\n混\n母\n短\n皮\n終\n聚\n汽\n村\n雲\n哪\n既\n距\n衛\n停\n烈\n央\n察\n燒\n迅\n境\n若\n印\n洲\n刻\n括\n激\n孔\n搞\n甚\n室\n待\n核\n校\n散\n侵\n吧\n甲\n遊\n久\n菜\n味\n舊\n模\n湖\n貨\n損\n預\n阻\n毫\n普\n穩\n乙\n媽\n植\n息\n擴\n銀\n語\n揮\n酒\n守\n拿\n序\n紙\n醫\n缺\n雨\n嗎\n針\n劉\n啊\n急\n唱\n誤\n訓\n願\n審\n附\n獲\n茶\n鮮\n糧\n斤\n孩\n脫\n硫\n肥\n善\n龍\n演\n父\n漸\n血\n歡\n械\n掌\n歌\n沙\n剛\n攻\n謂\n盾\n討\n晚\n粒\n亂\n燃\n矛\n乎\n殺\n藥\n寧\n魯\n貴\n鐘\n煤\n讀\n班\n伯\n香\n介\n迫\n句\n豐\n培\n握\n蘭\n擔\n弦\n蛋\n沉\n假\n穿\n執\n答\n樂\n誰\n順\n煙\n縮\n徵\n臉\n喜\n松\n腳\n困\n異\n免\n背\n星\n福\n買\n染\n井\n概\n慢\n怕\n磁\n倍\n祖\n皇\n促\n靜\n補\n評\n翻\n肉\n踐\n尼\n衣\n寬\n揚\n棉\n希\n傷\n操\n垂\n秋\n宜\n氫\n套\n督\n振\n架\n亮\n末\n憲\n慶\n編\n牛\n觸\n映\n雷\n銷\n詩\n座\n居\n抓\n裂\n胞\n呼\n娘\n景\n威\n綠\n晶\n厚\n盟\n衡\n雞\n孫\n延\n危\n膠\n屋\n鄉\n臨\n陸\n顧\n掉\n呀\n燈\n歲\n措\n束\n耐\n劇\n玉\n趙\n跳\n哥\n季\n課\n凱\n胡\n額\n款\n紹\n卷\n齊\n偉\n蒸\n殖\n永\n宗\n苗\n川\n爐\n岩\n弱\n零\n楊\n奏\n沿\n露\n桿\n探\n滑\n鎮\n飯\n濃\n航\n懷\n趕\n庫\n奪\n伊\n靈\n稅\n途\n滅\n賽\n歸\n召\n鼓\n播\n盤\n裁\n險\n康\n唯\n錄\n菌\n純\n借\n糖\n蓋\n橫\n符\n私\n努\n堂\n域\n槍\n潤\n幅\n哈\n竟\n熟\n蟲\n澤\n腦\n壤\n碳\n歐\n遍\n側\n寨\n敢\n徹\n慮\n斜\n薄\n庭\n納\n彈\n飼\n伸\n折\n麥\n濕\n暗\n荷\n瓦\n塞\n床\n築\n惡\n戶\n訪\n塔\n奇\n透\n梁\n刀\n旋\n跡\n卡\n氯\n遇\n份\n毒\n泥\n退\n洗\n擺\n灰\n彩\n賣\n耗\n夏\n擇\n忙\n銅\n獻\n硬\n予\n繁\n圈\n雪\n函\n亦\n抽\n篇\n陣\n陰\n丁\n尺\n追\n堆\n雄\n迎\n泛\n爸\n樓\n避\n謀\n噸\n野\n豬\n旗\n累\n偏\n典\n館\n索\n秦\n脂\n潮\n爺\n豆\n忽\n托\n驚\n塑\n遺\n愈\n朱\n替\n纖\n粗\n傾\n尚\n痛\n楚\n謝\n奮\n購\n磨\n君\n池\n旁\n碎\n骨\n監\n捕\n弟\n暴\n割\n貫\n殊\n釋\n詞\n亡\n壁\n頓\n寶\n午\n塵\n聞\n揭\n炮\n殘\n冬\n橋\n婦\n警\n綜\n招\n吳\n付\n浮\n遭\n徐\n您\n搖\n谷\n贊\n箱\n隔\n訂\n男\n吹\n園\n紛\n唐\n敗\n宋\n玻\n巨\n耕\n坦\n榮\n閉\n灣\n鍵\n凡\n駐\n鍋\n救\n恩\n剝\n凝\n鹼\n齒\n截\n煉\n麻\n紡\n禁\n廢\n盛\n版\n緩\n淨\n睛\n昌\n婚\n涉\n筒\n嘴\n插\n岸\n朗\n莊\n街\n藏\n姑\n貿\n腐\n奴\n啦\n慣\n乘\n夥\n恢\n勻\n紗\n扎\n辯\n耳\n彪\n臣\n億\n璃\n抵\n脈\n秀\n薩\n俄\n網\n舞\n店\n噴\n縱\n寸\n汗\n掛\n洪\n賀\n閃\n柬\n爆\n烯\n津\n稻\n牆\n軟\n勇\n像\n滾\n厘\n蒙\n芳\n肯\n坡\n柱\n盪\n腿\n儀\n旅\n尾\n軋\n冰\n貢\n登\n黎\n削\n鑽\n勒\n逃\n障\n氨\n郭\n峰\n幣\n港\n伏\n軌\n畝\n畢\n擦\n莫\n刺\n浪\n秘\n援\n株\n健\n售\n股\n島\n甘\n泡\n睡\n童\n鑄\n湯\n閥\n休\n匯\n舍\n牧\n繞\n炸\n哲\n磷\n績\n朋\n淡\n尖\n啟\n陷\n柴\n呈\n徒\n顏\n淚\n稍\n忘\n泵\n藍\n拖\n洞\n授\n鏡\n辛\n壯\n鋒\n貧\n虛\n彎\n摩\n泰\n幼\n廷\n尊\n窗\n綱\n弄\n隸\n疑\n氏\n宮\n姐\n震\n瑞\n怪\n尤\n琴\n循\n描\n膜\n違\n夾\n腰\n緣\n珠\n窮\n森\n枝\n竹\n溝\n催\n繩\n憶\n邦\n剩\n幸\n漿\n欄\n擁\n牙\n貯\n禮\n濾\n鈉\n紋\n罷\n拍\n咱\n喊\n袖\n埃\n勤\n罰\n焦\n潛\n伍\n墨\n欲\n縫\n姓\n刊\n飽\n仿\n獎\n鋁\n鬼\n麗\n跨\n默\n挖\n鏈\n掃\n喝\n袋\n炭\n污\n幕\n諸\n弧\n勵\n梅\n奶\n潔\n災\n舟\n鑑\n苯\n訟\n抱\n毀\n懂\n寒\n智\n埔\n寄\n屆\n躍\n渡\n挑\n丹\n艱\n貝\n碰\n拔\n爹\n戴\n碼\n夢\n芽\n熔\n赤\n漁\n哭\n敬\n顆\n奔\n鉛\n仲\n虎\n稀\n妹\n乏\n珍\n申\n桌\n遵\n允\n隆\n螺\n倉\n魏\n銳\n曉\n氮\n兼\n隱\n礙\n赫\n撥\n忠\n肅\n缸\n牽\n搶\n博\n巧\n殼\n兄\n杜\n訊\n誠\n碧\n祥\n柯\n頁\n巡\n矩\n悲\n灌\n齡\n倫\n票\n尋\n桂\n鋪\n聖\n恐\n恰\n鄭\n趣\n抬\n荒\n騰\n貼\n柔\n滴\n猛\n闊\n輛\n妻\n填\n撤\n儲\n簽\n鬧\n擾\n紫\n砂\n遞\n戲\n吊\n陶\n伐\n餵\n療\n瓶\n婆\n撫\n臂\n摸\n忍\n蝦\n蠟\n鄰\n胸\n鞏\n擠\n偶\n棄\n槽\n勁\n乳\n鄧\n吉\n仁\n爛\n磚\n租\n烏\n艦\n伴\n瓜\n淺\n丙\n暫\n燥\n橡\n柳\n迷\n暖\n牌\n秧\n膽\n詳\n簧\n踏\n瓷\n譜\n呆\n賓\n糊\n洛\n輝\n憤\n競\n隙\n怒\n粘\n乃\n緒\n肩\n籍\n敏\n塗\n熙\n皆\n偵\n懸\n掘\n享\n糾\n醒\n狂\n鎖\n淀\n恨\n牲\n霸\n爬\n賞\n逆\n玩\n陵\n祝\n秒\n浙\n貌\n役\n彼\n悉\n鴨\n趨\n鳳\n晨\n畜\n輩\n秩\n卵\n署\n梯\n炎\n灘\n棋\n驅\n篩\n峽\n冒\n啥\n壽\n譯\n浸\n泉\n帽\n遲\n矽\n疆\n貸\n漏\n稿\n冠\n嫩\n脅\n芯\n牢\n叛\n蝕\n奧\n鳴\n嶺\n羊\n憑\n串\n塘\n繪\n酵\n融\n盆\n錫\n廟\n籌\n凍\n輔\n攝\n襲\n筋\n拒\n僚\n旱\n鉀\n鳥\n漆\n沈\n眉\n疏\n添\n棒\n穗\n硝\n韓\n逼\n扭\n僑\n涼\n挺\n碗\n栽\n炒\n杯\n患\n餾\n勸\n豪\n遼\n勃\n鴻\n旦\n吏\n拜\n狗\n埋\n輥\n掩\n飲\n搬\n罵\n辭\n勾\n扣\n估\n蔣\n絨\n霧\n丈\n朵\n姆\n擬\n宇\n輯\n陝\n雕\n償\n蓄\n崇\n剪\n倡\n廳\n咬\n駛\n薯\n刷\n斥\n番\n賦\n奉\n佛\n澆\n漫\n曼\n扇\n鈣\n桃\n扶\n仔\n返\n俗\n虧\n腔\n鞋\n棱\n覆\n框\n悄\n叔\n撞\n騙\n勘\n旺\n沸\n孤\n吐\n孟\n渠\n屈\n疾\n妙\n惜\n仰\n狠\n脹\n諧\n拋\n黴\n桑\n崗\n嘛\n衰\n盜\n滲\n臟\n賴\n湧\n甜\n曹\n閱\n肌\n哩\n厲\n烴\n緯\n毅\n昨\n偽\n症\n煮\n嘆\n釘\n搭\n莖\n籠\n酷\n偷\n弓\n錐\n恆\n傑\n坑\n鼻\n翼\n綸\n敘\n獄\n逮\n罐\n絡\n棚\n抑\n膨\n蔬\n寺\n驟\n穆\n冶\n枯\n冊\n屍\n凸\n紳\n坯\n犧\n焰\n轟\n欣\n晉\n瘦\n禦\n錠\n錦\n喪\n旬\n鍛\n壟\n搜\n撲\n邀\n亭\n酯\n邁\n舒\n脆\n酶\n閒\n憂\n酚\n頑\n羽\n漲\n卸\n仗\n陪\n闢\n懲\n杭\n姚\n肚\n捉\n飄\n漂\n昆\n欺\n吾\n郎\n烷\n汁\n呵\n飾\n蕭\n雅\n郵\n遷\n燕\n撒\n姻\n赴\n宴\n煩\n債\n帳\n斑\n鈴\n旨\n醇\n董\n餅\n雛\n姿\n拌\n傅\n腹\n妥\n揉\n賢\n拆\n歪\n葡\n胺\n丟\n浩\n徽\n昂\n墊\n擋\n覽\n貪\n慰\n繳\n汪\n慌\n馮\n諾\n姜\n誼\n兇\n劣\n誣\n耀\n昏\n躺\n盈\n騎\n喬\n溪\n叢\n盧\n抹\n悶\n諮\n刮\n駕\n纜\n悟\n摘\n鉺\n擲\n頗\n幻\n柄\n惠\n慘\n佳\n仇\n臘\n窩\n滌\n劍\n瞧\n堡\n潑\n蔥\n罩\n霍\n撈\n胎\n蒼\n濱\n倆\n捅\n湘\n砍\n霞\n邵\n萄\n瘋\n淮\n遂\n熊\n糞\n烘\n宿\n檔\n戈\n駁\n嫂\n裕\n徙\n箭\n捐\n腸\n撐\n曬\n辨\n殿\n蓮\n攤\n攪\n醬\n屏\n疫\n哀\n蔡\n堵\n沫\n皺\n暢\n疊\n閣\n萊\n敲\n轄\n鉤\n痕\n壩\n巷\n餓\n禍\n丘\n玄\n溜\n曰\n邏\n彭\n嘗\n卿\n妨\n艇\n吞\n韋\n怨\n矮\n歇`.split('\\n');\n", "import type * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\n\n/**\n * Encodes a personal sign message in [ERC-191 format](https://eips.ethereum.org/EIPS/eip-191#version-0x45-e): `0x19 ‖ \"Ethereum Signed Message:\\n\" + message.length ‖ message`.\n *\n * @example\n * ```ts twoslash\n * import { Hex, PersonalMessage } from 'ox'\n *\n * const data = PersonalMessage.encode(Hex.fromString('hello world'))\n * // @log: '0x19457468657265756d205369676e6564204d6573736167653a0a313168656c6c6f20776f726c64'\n * // @log: (0x19 ‖ 'Ethereum Signed Message:\\n11' ‖ 'hello world')\n * ```\n *\n * @param data - The data to encode.\n * @returns The encoded personal sign message.\n */\nexport function encode(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n const message = Hex.from(data)\n return Hex.concat(\n // Personal Sign Format: `0x19 ‖ \"Ethereum Signed Message:\\n\" ‖ message.length ‖ message`\n '0x19',\n Hex.fromString('Ethereum Signed Message:\\n' + Hex.size(message)),\n message,\n )\n}\n\nexport declare namespace encode {\n type ErrorType =\n | Hex.concat.ErrorType\n | Hex.from.ErrorType\n | Hex.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Gets the payload to use for signing an [ERC-191 formatted](https://eips.ethereum.org/EIPS/eip-191#version-0x45-e) personal message.\n *\n * @example\n * ```ts twoslash\n * import { Hex, PersonalMessage, Secp256k1 } from 'ox'\n *\n * const payload = PersonalMessage.getSignPayload(Hex.fromString('hello world')) // [!code focus]\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param data - The data to get the sign payload for.\n * @returns The payload to use for signing.\n */\nexport function getSignPayload(data: Hex.Hex | Bytes.Bytes): Hex.Hex {\n return Hash.keccak256(encode(data))\n}\n\nexport declare namespace getSignPayload {\n type ErrorType =\n | Hash.keccak256.ErrorType\n | encode.ErrorType\n | Errors.GlobalErrorType\n}\n", "import { EventEmitter } from 'eventemitter3'\nimport type * as Address from './Address.js'\nimport * as Errors from './Errors.js'\nimport * as RpcResponse from './RpcResponse.js'\nimport type * as RpcSchema from './RpcSchema.js'\nimport type * as RpcSchema_internal from './internal/rpcSchema.js'\nimport type { Compute } from './internal/types.js'\n\n/** Options for a {@link ox#Provider.Provider}. */\nexport type Options = {\n /**\n * Whether to include event functions (`on`, `removeListener`) on the Provider.\n *\n * @default true\n */\n includeEvents?: boolean | undefined\n /**\n * RPC Schema to use for the Provider's `request` function.\n * See {@link ox#RpcSchema.(from:function)} for more.\n *\n * @default `RpcSchema.Generic`\n */\n schema?: RpcSchema.Generic | undefined\n}\n\n/** Root type for an EIP-1193 Provider. */\nexport type Provider<\n options extends Options | undefined = undefined,\n ///\n _schema extends RpcSchema.Generic = options extends {\n schema: infer schema extends RpcSchema.Generic\n }\n ? schema\n : RpcSchema.Default,\n> = Compute<\n {\n request: RequestFn<_schema>\n } & (options extends { includeEvents: true } | undefined\n ? {\n on: EventListenerFn\n removeListener: EventListenerFn\n }\n : {})\n>\n\n/** Type for an EIP-1193 Provider's event emitter. */\nexport type Emitter = Compute<EventEmitter<EventMap>>\n\n/** EIP-1193 Provider's `request` function. */\nexport type RequestFn<schema extends RpcSchema.Generic = RpcSchema.Generic> = <\n methodName extends RpcSchema.MethodNameGeneric,\n>(\n parameters: RpcSchema_internal.ExtractRequestOpaque<schema, methodName>,\n) => Promise<RpcSchema.ExtractReturnType<schema, methodName>>\n\n/** Type for an EIP-1193 Provider's event listener functions (`on`, `removeListener`, etc). */\nexport type EventListenerFn = <event extends keyof EventMap>(\n event: event,\n listener: EventMap[event],\n) => void\n\nexport type ConnectInfo = {\n chainId: string\n}\n\nexport type Message = {\n type: string\n data: unknown\n}\n\nexport class ProviderRpcError extends Error {\n override name = 'ProviderRpcError'\n\n code: number\n details: string\n\n constructor(code: number, message: string) {\n super(message)\n this.code = code\n this.details = message\n }\n}\n\nexport type EventMap = {\n accountsChanged: (accounts: readonly Address.Address[]) => void\n chainChanged: (chainId: string) => void\n connect: (connectInfo: ConnectInfo) => void\n disconnect: (error: ProviderRpcError) => void\n message: (message: Message) => void\n}\n\n/** The user rejected the request. */\nexport class UserRejectedRequestError extends ProviderRpcError {\n static readonly code = 4001\n override readonly name = 'Provider.UserRejectedRequestError'\n\n constructor({\n message = 'The user rejected the request.',\n }: { message?: string | undefined } = {}) {\n super(4001, message)\n }\n}\n\n/** The requested method and/or account has not been authorized by the user. */\nexport class UnauthorizedError extends ProviderRpcError {\n static readonly code = 4100\n override readonly name = 'Provider.UnauthorizedError'\n\n constructor({\n message = 'The requested method and/or account has not been authorized by the user.',\n }: { message?: string | undefined } = {}) {\n super(4100, message)\n }\n}\n\n/** The provider does not support the requested method. */\nexport class UnsupportedMethodError extends ProviderRpcError {\n static readonly code = 4200\n override readonly name = 'Provider.UnsupportedMethodError'\n\n constructor({\n message = 'The provider does not support the requested method.',\n }: { message?: string | undefined } = {}) {\n super(4200, message)\n }\n}\n\n/** The provider is disconnected from all chains. */\nexport class DisconnectedError extends ProviderRpcError {\n static readonly code = 4900\n override readonly name = 'Provider.DisconnectedError'\n\n constructor({\n message = 'The provider is disconnected from all chains.',\n }: { message?: string | undefined } = {}) {\n super(4900, message)\n }\n}\n\n/** The provider is not connected to the requested chain. */\nexport class ChainDisconnectedError extends ProviderRpcError {\n static readonly code = 4901\n override readonly name = 'Provider.ChainDisconnectedError'\n\n constructor({\n message = 'The provider is not connected to the requested chain.',\n }: { message?: string | undefined } = {}) {\n super(4901, message)\n }\n}\n\n/**\n * Creates an EIP-1193 flavored event emitter to be injected onto a Provider.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Provider, RpcRequest, RpcResponse } from 'ox' // [!code focus]\n *\n * // 1. Instantiate a Provider Emitter. // [!code focus]\n * const emitter = Provider.createEmitter() // [!code focus]\n *\n * const store = RpcRequest.createStore()\n *\n * const provider = Provider.from({\n * // 2. Pass the Emitter to the Provider. // [!code focus]\n * ...emitter, // [!code focus]\n * async request(args) {\n * return await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(store.prepare(args)),\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * })\n * .then((res) => res.json())\n * .then(RpcResponse.parse)\n * },\n * })\n *\n * // 3. Emit Provider Events. // [!code focus]\n * emitter.emit('accountsChanged', ['0x...']) // [!code focus]\n * ```\n *\n * @returns An event emitter.\n */\nexport function createEmitter(): Emitter {\n const emitter = new EventEmitter<EventMap>()\n\n return {\n get eventNames() {\n return emitter.eventNames.bind(emitter)\n },\n get listenerCount() {\n return emitter.listenerCount.bind(emitter)\n },\n get listeners() {\n return emitter.listeners.bind(emitter)\n },\n addListener: emitter.addListener.bind(emitter),\n emit: emitter.emit.bind(emitter),\n off: emitter.off.bind(emitter),\n on: emitter.on.bind(emitter),\n once: emitter.once.bind(emitter),\n removeAllListeners: emitter.removeAllListeners.bind(emitter),\n removeListener: emitter.removeListener.bind(emitter),\n }\n}\n\nexport declare namespace createEmitter {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Instantiates an [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193) {@link ox#Provider.Provider}\n * from an arbitrary [EIP-1193 Provider](https://eips.ethereum.org/EIPS/eip-1193) interface.\n *\n * @example\n * ### Instantiating with RPC Transport\n *\n * Ox's {@link ox#RpcTransport} is EIP-1193 compliant, and can be used to instantiate an EIP-1193 Provider. This means you can use any HTTP RPC endpoint as an EIP-1193 Provider.\n *\n * ```ts twoslash\n * import { Provider, RpcTransport } from 'ox'\n *\n * const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com')\n * const provider = Provider.from(transport)\n * ```\n *\n * @example\n * ### Instantiating with External Providers\n *\n * The example below demonstrates how we can instantiate a typed EIP-1193 Provider from an\n * external EIP-1193 Provider like `window.ethereum`.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Provider } from 'ox'\n *\n * const provider = Provider.from(window.ethereum)\n *\n * const blockNumber = await provider.request({ method: 'eth_blockNumber' })\n * ```\n *\n * :::tip\n *\n * There are also libraries that distribute EIP-1193 Provider objects that you can use with `Provider.from`:\n *\n * - [`@walletconnect/ethereum-provider`](https://www.npmjs.com/package/\\@walletconnect/ethereum-provider)\n *\n * - [`@coinbase/wallet-sdk`](https://www.npmjs.com/package/\\@coinbase/wallet-sdk)\n *\n * - [`@metamask/detect-provider`](https://www.npmjs.com/package/\\@metamask/detect-provider)\n *\n * - [`@safe-global/safe-apps-provider`](https://github.com/safe-global/safe-apps-sdk/tree/main/packages/safe-apps-provider)\n *\n * - [`mipd`](https://github.com/wevm/mipd): EIP-6963 Multi Injected Providers\n *\n * :::\n *\n * @example\n * ### Instantiating a Custom Provider\n *\n * The example below demonstrates how we can instantiate a typed EIP-1193 Provider from a\n * HTTP `fetch` JSON-RPC request. You can use this pattern to integrate with any asynchronous JSON-RPC\n * transport, including WebSockets and IPC.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Provider, RpcRequest, RpcResponse } from 'ox'\n *\n * const store = RpcRequest.createStore()\n *\n * const provider = Provider.from({\n * async request(args) {\n * return await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(store.prepare(args)),\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * })\n * .then((res) => res.json())\n * .then(RpcResponse.parse)\n * },\n * })\n *\n * const blockNumber = await provider.request({ method: 'eth_blockNumber' })\n * ```\n *\n * @example\n * ### Type-safe Custom Schemas\n *\n * It is possible to define your own type-safe schema by using the {@link ox#RpcSchema.(from:function)} type.\n *\n * ```ts twoslash\n * // @noErrors\n * import 'ox/window'\n * import { Provider, RpcSchema } from 'ox'\n *\n * const schema = RpcSchema.from<\n * | RpcSchema.Default\n * | {\n * Request: {\n * method: 'abe_foo',\n * params: [id: number],\n * }\n * ReturnType: string\n * }\n * | {\n * Request: {\n * method: 'abe_bar',\n * params: [id: string],\n * }\n * ReturnType: string\n * }\n * >()\n *\n * const provider = Provider.from(window.ethereum, { schema })\n *\n * const blockNumber = await provider.request({ method: 'e' })\n * // ^|\n *\n *\n *\n *\n *\n * ```\n *\n * @example\n * ### Instantiating a Provider with Events\n *\n * The example below demonstrates how to instantiate a Provider with your own EIP-1193 flavored event emitter.\n *\n * This example is useful for Wallets that distribute an EIP-1193 Provider (e.g. webpage injection via `window.ethereum`).\n *\n * ```ts twoslash\n * // @noErrors\n * import { Provider, RpcRequest, RpcResponse } from 'ox'\n *\n * // 1. Instantiate a Provider Emitter.\n * const emitter = Provider.createEmitter() // [!code ++]\n *\n * const store = RpcRequest.createStore()\n *\n * const provider = Provider.from({\n * // 2. Pass the Emitter to the Provider.\n * ...emitter, // [!code ++]\n * async request(args) {\n * return await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(store.prepare(args)),\n * method: 'POST',\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * })\n * .then((res) => res.json())\n * .then(RpcResponse.parse)\n * },\n * })\n *\n * // 3. Emit Provider Events.\n * emitter.emit('accountsChanged', ['0x...']) // [!code ++]\n * ```\n *\n * @param provider - The EIP-1193 provider to convert.\n * @returns An typed EIP-1193 Provider.\n */\nexport function from<\n const provider extends Provider | unknown,\n options extends Options | undefined = undefined,\n>(\n provider: provider | Provider<{ schema: RpcSchema.Generic }>,\n options?: options | Options,\n): Provider<options>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function from(provider: any, options: Options = {}): Provider<Options> {\n const { includeEvents = true } = options\n if (!provider) throw new IsUndefinedError()\n return {\n ...(includeEvents\n ? {\n on: provider.on?.bind(provider),\n removeListener: provider.removeListener?.bind(provider),\n }\n : {}),\n async request(args) {\n const result = await provider.request(args)\n if (\n result &&\n typeof result === 'object' &&\n 'jsonrpc' in (result as { jsonrpc?: unknown })\n )\n return RpcResponse.parse(result) as never\n return result\n },\n }\n}\n\nexport declare namespace from {\n type ErrorType = IsUndefinedError | Errors.GlobalErrorType\n}\n\n/** Thrown when the provider is undefined. */\nexport class IsUndefinedError extends Errors.BaseError {\n override readonly name = 'Provider.IsUndefinedError'\n\n constructor() {\n super('`provider` is undefined.')\n }\n}\n", "import type { Errors, RpcRequest } from '../index.js'\nimport type {\n Compute,\n IsNarrowable,\n OneOf,\n UnionPartialBy,\n} from './internal/types.js'\n\n/** A JSON-RPC response object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#request_object). */\nexport type RpcResponse<\n result = unknown,\n error extends ErrorObject = ErrorObject,\n> = Compute<\n {\n id: number\n jsonrpc: '2.0'\n } & OneOf<{ result: result } | { error: error }>\n>\n\n/** JSON-RPC error object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#error_object). */\nexport type ErrorObject = {\n code: number\n message: string\n data?: unknown | undefined\n}\n\n/**\n * A type-safe interface to instantiate a JSON-RPC response object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#response_object).\n *\n * @example\n * ### Instantiating a Response Object\n *\n * ```ts twoslash\n * import { RpcResponse } from 'ox'\n *\n * const response = RpcResponse.from({\n * id: 0,\n * jsonrpc: '2.0',\n * result: '0x69420',\n * })\n * ```\n *\n * @example\n * ### Type-safe Instantiation\n *\n * If you have a JSON-RPC request object, you can use it to strongly-type the response. If a `request` is provided,\n * then the `id` and `jsonrpc` properties will be overridden with the values from the request.\n *\n * ```ts twoslash\n * import { RpcRequest, RpcResponse } from 'ox'\n *\n * const request = RpcRequest.from({ id: 0, method: 'eth_blockNumber' })\n *\n * const response = RpcResponse.from(\n * { result: '0x69420' },\n * { request },\n * )\n * ```\n *\n * @param response - Opaque JSON-RPC response object.\n * @param options - Parsing options.\n * @returns Typed JSON-RPC result, or response object (if `raw` is `true`).\n */\nexport function from<\n request extends RpcRequest.RpcRequest | undefined = undefined,\n const response =\n | (request extends RpcRequest.RpcRequest\n ? request['_returnType']\n : RpcResponse)\n | unknown,\n>(\n response: from.Response<request, response>,\n options?: from.Options<request>,\n): Compute<from.ReturnType<response>>\n// eslint-disable-next-line jsdoc/require-jsdoc\nexport function from(response: RpcResponse, options: any = {}): RpcResponse {\n const { request } = options\n return {\n ...response,\n id: response.id ?? request?.id,\n jsonrpc: response.jsonrpc ?? request.jsonrpc,\n }\n}\n\nexport declare namespace from {\n type Response<\n request extends RpcRequest.RpcRequest | undefined = undefined,\n response = unknown,\n > = response &\n (request extends RpcRequest.RpcRequest\n ? UnionPartialBy<RpcResponse<request['_returnType']>, 'id' | 'jsonrpc'>\n : RpcResponse)\n\n type Options<\n request extends RpcRequest.RpcRequest | undefined =\n | RpcRequest.RpcRequest\n | undefined,\n > = {\n request?: request | RpcRequest.RpcRequest | undefined\n }\n\n type ReturnType<response> = IsNarrowable<response, RpcResponse> extends true\n ? RpcResponse\n : response & Readonly<{ id: number; jsonrpc: '2.0' }>\n}\n\n/**\n * A type-safe interface to parse a JSON-RPC response object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#response_object), and extract the result.\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest, RpcResponse } from 'ox'\n *\n * // 1. Create a request store.\n * const store = RpcRequest.createStore()\n *\n * // 2. Get a request object.\n * const request = store.prepare({\n * method: 'eth_getBlockByNumber',\n * params: ['0x1', false],\n * })\n *\n * // 3. Send the JSON-RPC request via HTTP.\n * const block = await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(request),\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * method: 'POST',\n * })\n * .then((response) => response.json())\n * // 4. Parse the JSON-RPC response into a type-safe result. // [!code focus]\n * .then((response) => RpcResponse.parse(response, { request })) // [!code focus]\n *\n * block // [!code focus]\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n *\n * :::tip\n *\n * If you don't need the return type, you can omit the options entirely.\n *\n * ```ts twoslash\n * // @noErrors\n * import { RpcResponse } from 'ox'\n *\n * const block = await fetch('https://1.rpc.thirdweb.com', {})\n * .then((response) => response.json())\n * .then((response) => RpcResponse.parse(response, { request })) // [!code --]\n * .then(RpcResponse.parse) // [!code ++]\n * ```\n * :::\n *\n * @example\n * ### Raw Mode\n *\n * If `raw` is `true`, the response will be returned as an object with `result` and `error` properties instead of returning the `result` directly and throwing errors.\n *\n * ```ts twoslash\n * import { RpcRequest, RpcResponse } from 'ox'\n *\n * const store = RpcRequest.createStore()\n *\n * const request = store.prepare({\n * method: 'eth_blockNumber',\n * })\n *\n * const response = RpcResponse.parse({}, {\n * request,\n * raw: true, // [!code hl]\n * })\n *\n * response.result\n * // ^?\n *\n *\n * response.error\n * // ^?\n *\n *\n * ```\n *\n * @param response - Opaque JSON-RPC response object.\n * @param options - Parsing options.\n * @returns Typed JSON-RPC result, or response object (if `raw` is `true`).\n */\nexport function parse<\n const response extends RpcResponse | unknown,\n returnType,\n raw extends boolean = false,\n>(\n response: response,\n options: parse.Options<returnType, raw> = {},\n): parse.ReturnType<\n unknown extends response\n ? returnType\n : response extends RpcResponse\n ? response extends { result: infer result }\n ? result\n : never\n : returnType,\n raw\n> {\n const { raw = false } = options\n const response_ = response as RpcResponse\n if (raw) return response as never\n if (response_.error) {\n const { code } = response_.error\n const JsonRpcError = (() => {\n if (code === InternalError.code) return InternalError\n if (code === InvalidInputError.code) return InvalidInputError\n if (code === InvalidParamsError.code) return InvalidParamsError\n if (code === InvalidRequestError.code) return InvalidRequestError\n if (code === LimitExceededError.code) return LimitExceededError\n if (code === MethodNotFoundError.code) return MethodNotFoundError\n if (code === MethodNotSupportedError.code) return MethodNotSupportedError\n if (code === ParseError.code) return ParseError\n if (code === ResourceNotFoundError.code) return ResourceNotFoundError\n if (code === ResourceUnavailableError.code)\n return ResourceUnavailableError\n if (code === TransactionRejectedError.code)\n return TransactionRejectedError\n if (code === VersionNotSupportedError.code)\n return VersionNotSupportedError\n return BaseError\n })()\n throw new JsonRpcError(response_.error)\n }\n return response_.result as never\n}\n\nexport declare namespace parse {\n type Options<returnType, raw extends boolean = false> = {\n /**\n * JSON-RPC Method that was used to make the request. Used for typing the response.\n */\n request?:\n | {\n _returnType: returnType\n }\n | RpcRequest.RpcRequest\n | undefined\n /**\n * Enables raw mode – responses will return an object with `result` and `error` properties instead of returning the `result` directly and throwing errors.\n *\n * - `true`: a JSON-RPC response object will be returned with `result` and `error` properties.\n * - `false`: the JSON-RPC response object's `result` property will be returned directly, and JSON-RPC Errors will be thrown.\n *\n * @default false\n */\n raw?: raw | boolean | undefined\n }\n\n type ReturnType<returnType, raw extends boolean = false> = Compute<\n raw extends true ? RpcResponse<returnType> : returnType\n >\n\n type ErrorType =\n | ParseError\n | InvalidInputError\n | ResourceNotFoundError\n | ResourceUnavailableError\n | TransactionRejectedError\n | MethodNotSupportedError\n | LimitExceededError\n | VersionNotSupportedError\n | InvalidRequestError\n | MethodNotFoundError\n | InvalidParamsError\n | InternalError\n | BaseErrorType\n | Errors.GlobalErrorType\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\n\n/** Thrown when a JSON-RPC error has occurred. */\nexport class BaseError extends Error {\n override name = 'RpcResponse.BaseError'\n\n readonly code: number\n readonly data?: unknown | undefined\n\n constructor(errorObject: ErrorObject) {\n const { code, message, data } = errorObject\n super(message)\n this.code = code\n this.data = data\n }\n}\n\n/** Thrown when the input to a JSON-RPC method is invalid. */\nexport class InvalidInputError extends BaseError {\n static readonly code = -32000\n override readonly code = -32000\n override readonly name = 'RpcResponse.InvalidInputError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Missing or invalid parameters.',\n ...parameters,\n code: InvalidInputError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC resource is not found. */\nexport class ResourceNotFoundError extends BaseError {\n static readonly code = -32001\n override readonly code = -32001\n override readonly name = 'RpcResponse.ResourceNotFoundError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Requested resource not found.',\n ...parameters,\n code: ResourceNotFoundError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC resource is unavailable. */\nexport class ResourceUnavailableError extends BaseError {\n static readonly code = -32002\n override readonly code = -32002\n override readonly name = 'RpcResponse.ResourceUnavailableError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Requested resource not available.',\n ...parameters,\n code: ResourceUnavailableError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC transaction is rejected. */\nexport class TransactionRejectedError extends BaseError {\n static readonly code = -32003\n override readonly code = -32003\n override readonly name = 'RpcResponse.TransactionRejectedError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Transaction creation failed.',\n ...parameters,\n code: TransactionRejectedError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC method is not supported. */\nexport class MethodNotSupportedError extends BaseError {\n static readonly code = -32004\n override readonly code = -32004\n override readonly name = 'RpcResponse.MethodNotSupportedError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Method is not implemented.',\n ...parameters,\n code: MethodNotSupportedError.code,\n })\n }\n}\n\n/** Thrown when a rate-limit is exceeded. */\nexport class LimitExceededError extends BaseError {\n static readonly code = -32005\n override readonly code = -32005\n override readonly name = 'RpcResponse.LimitExceededError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Rate limit exceeded.',\n ...parameters,\n code: LimitExceededError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC version is not supported. */\nexport class VersionNotSupportedError extends BaseError {\n static readonly code = -32006\n override readonly code = -32006\n override readonly name = 'RpcResponse.VersionNotSupportedError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'JSON-RPC version not supported.',\n ...parameters,\n code: VersionNotSupportedError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC request is invalid. */\nexport class InvalidRequestError extends BaseError {\n static readonly code = -32600\n override readonly code = -32600\n override readonly name = 'RpcResponse.InvalidRequestError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Input is not a valid JSON-RPC request.',\n ...parameters,\n code: InvalidRequestError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC method is not found. */\nexport class MethodNotFoundError extends BaseError {\n static readonly code = -32601\n override readonly code = -32601\n override readonly name = 'RpcResponse.MethodNotFoundError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Method does not exist.',\n ...parameters,\n code: MethodNotFoundError.code,\n })\n }\n}\n\n/** Thrown when the parameters to a JSON-RPC method are invalid. */\nexport class InvalidParamsError extends BaseError {\n static readonly code = -32602\n override readonly code = -32602\n override readonly name = 'RpcResponse.InvalidParamsError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Invalid method parameters.',\n ...parameters,\n code: InvalidParamsError.code,\n })\n }\n}\n\n/** Thrown when an internal JSON-RPC error has occurred. */\nexport class InternalError extends BaseError {\n static readonly code = -32603\n override readonly code = -32603\n override readonly name = 'RpcResponse.InternalErrorError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Internal JSON-RPC error.',\n ...parameters,\n code: InternalError.code,\n })\n }\n}\n\n/** Thrown when a JSON-RPC response is invalid. */\nexport class ParseError extends BaseError {\n static readonly code = -32700\n override readonly code = -32700\n override readonly name = 'RpcResponse.ParseError'\n\n constructor(parameters: Partial<Omit<ErrorObject, 'code'>> = {}) {\n super({\n message: 'Failed to parse JSON-RPC response.',\n ...parameters,\n code: ParseError.code,\n })\n }\n}\n", "import type { ResolvedRegister } from './internal/register.js'\nimport type { Compute, IsNarrowable } from './internal/types.js'\n\nexport type { Eth } from './internal/rpcSchemas/eth.js'\nexport type { Wallet } from './internal/rpcSchemas/wallet.js'\n\n/**\n * Instantiates a statically typed Schema. This is a runtime-noop function, and is purposed\n * to be used as a type-level tag to be used with {@link ox#Provider.(from:function)} or\n * {@link ox#RpcTransport.(fromHttp:function)}.\n *\n * @example\n * ### Using with `Provider.from`\n *\n * ```ts twoslash\n * // @noErrors\n * import 'ox/window'\n * import { Provider, RpcSchema } from 'ox'\n *\n * const schema = RpcSchema.from<\n * | RpcSchema.Default\n * | {\n * Request: {\n * method: 'abe_foo',\n * params: [id: number],\n * }\n * ReturnType: string\n * }\n * | {\n * Request: {\n * method: 'abe_bar',\n * params: [id: string],\n * }\n * ReturnType: string\n * }\n * >()\n *\n * const provider = Provider.from(window.ethereum, { schema })\n *\n * const blockNumber = await provider.request({ method: 'e' })\n * // ^|\n *\n *\n *\n *\n *\n * ```\n */\nexport function from<schema extends Generic>(): schema {\n return null as never\n}\n\n/**\n * Extracts a schema item from a {@link ox#RpcSchema.Generic} or {@link ox#RpcSchema.MethodNameGeneric}.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type Item = RpcSchema.ExtractItem<RpcSchema.Eth, 'eth_getBlockByNumber'>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type ExtractItem<\n schema extends Generic,\n methodName extends MethodNameGeneric<schema> = MethodNameGeneric<schema>,\n> = Compute<{\n Request: ExtractRequest<schema, methodName>\n ReturnType: ExtractReturnType<schema, methodName>\n}>\n\n/**\n * Extracts request from a {@link ox#RpcSchema.Generic} or {@link ox#RpcSchema.MethodNameGeneric}.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type Request = RpcSchema.ExtractRequest<RpcSchema.Eth, 'eth_getBlockByNumber'>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type ExtractRequest<\n schema extends Generic,\n methodName extends MethodNameGeneric<schema> = MethodNameGeneric<schema>,\n> = Extract<schema['Request'], { method: methodName }>\n\n/**\n * Type-safe union of all JSON-RPC Method Names.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type MethodName = RpcSchema.ExtractMethodName<RpcSchema.Default>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type ExtractMethodName<schema extends Generic> =\n schema['Request']['method']\n\n/**\n * Extracts parameters from a {@link ox#RpcSchema.Generic} or {@link ox#RpcSchema.MethodNameGeneric}.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type Eth_GetBlockByNumber = RpcSchema.ExtractParams<RpcSchema.Eth, 'eth_getBlockByNumber'>\n * // ^?\n *\n *\n *\n *\n *\n * ```\n */\nexport type ExtractParams<\n schema extends Generic,\n methodName extends MethodNameGeneric<schema> = MethodNameGeneric<schema>,\n> = ExtractRequest<schema, methodName>['params']\n\n/**\n * Extracts return type from a {@link ox#RpcSchema.Generic} or {@link ox#RpcSchema.MethodNameGeneric}.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type ReturnType = RpcSchema.ExtractReturnType<RpcSchema.Eth, 'eth_getBlockByNumber'>\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type ExtractReturnType<\n schema extends Generic,\n methodName extends MethodNameGeneric<schema> = MethodNameGeneric<schema>,\n> = methodName extends schema['Request']['method']\n ? IsNarrowable<schema, Generic> extends true\n ? Extract<schema, { Request: { method: methodName } }>['ReturnType']\n : unknown\n : unknown\n\n/**\n * Type to define a custom type-safe JSON-RPC Schema.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema, RpcRequest } from 'ox'\n *\n * type Schema = RpcSchema.From<{\n * Request: {\n * method: 'eth_foobar',\n * params: [id: number],\n * }\n * ReturnType: string\n * }>\n * ```\n */\nexport type From<schema extends Generic> = schema\n\n/**\n * Generic type to define a JSON-RPC Method.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type Schema = RpcSchema.Generic\n * // ^?\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type Generic<name extends string = string, params = unknown> = {\n Request: {\n method: name\n params?: params | undefined\n }\n ReturnType?: unknown\n}\n\n/**\n * Type-safe union of all JSON-RPC Methods.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type Schema = RpcSchema.Default\n * // ^?\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n *\n * ```\n */\nexport type Default = ResolvedRegister['RpcSchema']\n\n/**\n * Generic type to define a JSON-RPC Method Name.\n *\n * @example\n * ```ts twoslash\n * import { RpcSchema } from 'ox'\n *\n * type Name = RpcSchema.MethodNameGeneric\n * // ^?\n *\n *\n *\n *\n *\n * ```\n */\nexport type MethodNameGeneric<schema extends Generic = Generic> =\n | schema['Request']['method']\n | (string & {})\n", "import type { Errors } from '../index.js'\nimport type * as RpcSchema from './RpcSchema.js'\nimport type * as RpcSchema_internal from './internal/rpcSchema.js'\nimport type { Compute } from './internal/types.js'\n\n/** A JSON-RPC request object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#request_object). */\nexport type RpcRequest<schema extends RpcSchema.Generic = RpcSchema.Generic> =\n Compute<\n schema extends any\n ? schema['Request'] & {\n id: number\n jsonrpc: '2.0'\n /** @deprecated internal */\n _returnType: schema['ReturnType']\n }\n : never\n >\n\n/** JSON-RPC request store type. */\nexport type Store<schema extends RpcSchema.Generic = RpcSchema.Default> =\n Compute<{\n prepare: <methodName extends RpcSchema.MethodNameGeneric>(\n parameters: Compute<\n RpcSchema_internal.ExtractRequestOpaque<schema, methodName>\n >,\n ) => Compute<RpcRequest<RpcSchema.ExtractItem<schema, methodName>>>\n readonly id: number\n }>\n\n/**\n * Creates a JSON-RPC request store to build requests with an incrementing `id`.\n *\n * Returns a type-safe `prepare` function to build a JSON-RPC request object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#request_object).\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest } from 'ox'\n *\n * const store = RpcRequest.createStore()\n *\n * const request_1 = store.prepare({\n * method: 'eth_blockNumber',\n * })\n * // @log: { id: 0, jsonrpc: '2.0', method: 'eth_blockNumber' }\n *\n * const request_2 = store.prepare({\n * method: 'eth_call',\n * params: [\n * {\n * to: '0x0000000000000000000000000000000000000000',\n * data: '0xdeadbeef',\n * },\n * ],\n * })\n * // @log: { id: 1, jsonrpc: '2.0', method: 'eth_call', params: [{ to: '0x0000000000000000000000000000000000000000', data: '0xdeadbeef' }] }\n * ```\n *\n * @example\n * ### Type-safe Custom Schemas\n *\n * It is possible to define your own type-safe schema by using the {@link ox#RpcSchema.From} type.\n *\n * ```ts twoslash\n * import { RpcSchema, RpcRequest } from 'ox'\n *\n * type Schema = RpcSchema.From<{ // [!code focus]\n * Request: { // [!code focus]\n * method: 'eth_foobar' // [!code focus]\n * params: [number] // [!code focus]\n * } // [!code focus]\n * ReturnType: string // [!code focus]\n * } | { // [!code focus]\n * Request: { // [!code focus]\n * method: 'eth_foobaz' // [!code focus]\n * params: [string] // [!code focus]\n * } // [!code focus]\n * ReturnType: string // [!code focus]\n * }> // [!code focus]\n *\n * const store = RpcRequest.createStore<Schema>() // [!code focus]\n *\n * const request = store.prepare({\n * method: 'eth_foobar', // [!code focus]\n * // ^?\n * params: [42],\n * })\n * ```\n *\n * @param options - Request store options.\n * @returns The request store\n */\nexport function createStore<\n schema extends RpcSchema.Generic = RpcSchema.Default,\n>(options: createStore.Options = {}): createStore.ReturnType<schema> {\n let id = options.id ?? 0\n return {\n prepare(options) {\n return from({\n id: id++,\n ...options,\n } as never) as never\n },\n get id() {\n return id\n },\n }\n}\n\nexport declare namespace createStore {\n type Options = {\n /** The initial request ID. */\n id?: number\n }\n\n type ReturnType<schema extends RpcSchema.Generic = RpcSchema.Default> =\n Store<schema>\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * A type-safe interface to build a JSON-RPC request object as per the [JSON-RPC 2.0 specification](https://www.jsonrpc.org/specification#request_object).\n *\n * :::warning\n *\n * You will likely want to use {@link ox#RpcRequest.(createStore:function)} instead as it will also manage `id`s and uses this function internally.\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest, RpcResponse } from 'ox'\n *\n * // 1. Build a request object.\n * const request = RpcRequest.from({ // [!code focus]\n * id: 0, // [!code focus]\n * method: 'eth_estimateGas', // [!code focus]\n * params: [ // [!code focus]\n * { // [!code focus]\n * from: '0xd2135CfB216b74109775236E36d4b433F1DF507B', // [!code focus]\n * to: '0x0D44f617435088c947F00B31160f64b074e412B4', // [!code focus]\n * value: '0x69420', // [!code focus]\n * }, // [!code focus]\n * ], // [!code focus]\n * }) // [!code focus]\n *\n * // 2. Send the JSON-RPC request via HTTP.\n * const gas = await fetch('https://1.rpc.thirdweb.com', {\n * body: JSON.stringify(request),\n * headers: {\n * 'Content-Type': 'application/json',\n * },\n * method: 'POST',\n * })\n * .then((response) => response.json())\n * // 3. Parse the JSON-RPC response into a type-safe result.\n * .then((response) => RpcResponse.parse(response, { request }))\n * ```\n *\n * @param options - JSON-RPC request options.\n * @returns The fully-formed JSON-RPC request object.\n */\nexport function from<methodName extends RpcSchema.MethodNameGeneric>(\n options: from.Options<methodName>,\n): from.ReturnType<methodName> {\n return {\n ...options,\n jsonrpc: '2.0',\n } as never\n}\n\nexport declare namespace from {\n type Options<methodName extends RpcSchema.MethodNameGeneric> = Compute<\n RpcSchema_internal.ExtractRequestOpaque<RpcSchema.Default, methodName> & {\n id: number\n }\n >\n\n type ReturnType<methodName extends RpcSchema.MethodNameGeneric> = Compute<\n RpcRequest<RpcSchema.ExtractItem<RpcSchema.Default, methodName>>\n >\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as Errors from './Errors.js'\nimport type * as RpcResponse from './RpcResponse.js'\nimport type * as RpcSchema from './RpcSchema.js'\nimport { getUrl } from './internal/errors.js'\nimport * as promise from './internal/promise.js'\nimport type * as RpcSchema_internal from './internal/rpcSchema.js'\nimport * as internal from './internal/rpcTransport.js'\nimport type { Compute } from './internal/types.js'\n\n/** Root type for an RPC Transport. */\nexport type RpcTransport<\n raw extends boolean = false,\n options extends Record<string, unknown> = {},\n schema extends RpcSchema.Generic = RpcSchema.Default,\n> = Compute<{\n request: RequestFn<raw, options, schema>\n}>\n\n/** HTTP-based RPC Transport. */\nexport type Http<\n raw extends boolean = false,\n schema extends RpcSchema.Generic = RpcSchema.Default,\n> = RpcTransport<raw, HttpOptions, schema>\n\nexport type HttpOptions = {\n /** Request configuration to pass to `fetch`. */\n fetchOptions?:\n | Omit<RequestInit, 'body'>\n | ((\n method: RpcSchema.Generic['Request'],\n ) => Omit<RequestInit, 'body'> | Promise<Omit<RequestInit, 'body'>>)\n | undefined\n /** Function to use to make the request. @default fetch */\n fetchFn?: typeof fetch | undefined\n /** Timeout for the request in milliseconds. @default 10_000 */\n timeout?: number | undefined\n}\n\nexport type RequestFn<\n raw extends boolean = false,\n options extends Record<string, unknown> = {},\n schema extends RpcSchema.Generic = RpcSchema.Default,\n> = <\n methodName extends RpcSchema.MethodNameGeneric,\n raw_override extends boolean | undefined = undefined,\n>(\n parameters: Compute<\n RpcSchema_internal.ExtractRequestOpaque<schema, methodName>\n >,\n options?: internal.Options<raw_override, options, schema> | undefined,\n) => Promise<\n raw_override extends boolean\n ? raw_override extends true\n ? RpcResponse.RpcResponse<RpcSchema.ExtractReturnType<schema, methodName>>\n : RpcSchema.ExtractReturnType<schema, methodName>\n : raw extends true\n ? RpcResponse.RpcResponse<RpcSchema.ExtractReturnType<schema, methodName>>\n : RpcSchema.ExtractReturnType<schema, methodName>\n>\n\n/**\n * Creates a HTTP JSON-RPC Transport from a URL.\n *\n * @example\n * ```ts twoslash\n * import { RpcTransport } from 'ox'\n *\n * const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com')\n *\n * const blockNumber = await transport.request({ method: 'eth_blockNumber' })\n * // @log: '0x1a2b3c'\n * ```\n *\n * @param url - URL to perform the JSON-RPC requests to.\n * @param options - Transport options.\n * @returns HTTP JSON-RPC Transport.\n */\nexport function fromHttp<\n raw extends boolean = false,\n schema extends RpcSchema.Generic = RpcSchema.Default,\n>(url: string, options: fromHttp.Options<raw, schema> = {}): Http<raw, schema> {\n return internal.create<HttpOptions, schema, raw>(\n {\n async request(body_, options_) {\n const {\n fetchFn = options.fetchFn ?? fetch,\n fetchOptions: fetchOptions_ = options.fetchOptions,\n timeout = options.timeout ?? 10_000,\n } = options_\n\n const body = JSON.stringify(body_)\n\n const fetchOptions =\n typeof fetchOptions_ === 'function'\n ? await fetchOptions_(body_)\n : fetchOptions_\n\n const response = await promise.withTimeout(\n ({ signal }) => {\n const init: RequestInit = {\n ...fetchOptions,\n body,\n headers: {\n 'Content-Type': 'application/json',\n ...fetchOptions?.headers,\n },\n method: fetchOptions?.method ?? 'POST',\n signal: fetchOptions?.signal ?? (timeout > 0 ? signal : null),\n }\n const request = new Request(url, init)\n return fetchFn(request)\n },\n {\n timeout,\n signal: true,\n },\n )\n\n const data = await (async () => {\n if (\n response.headers.get('Content-Type')?.startsWith('application/json')\n )\n return response.json()\n return response.text().then((data) => {\n try {\n return JSON.parse(data || '{}')\n } catch (err) {\n if (response.ok)\n throw new MalformedResponseError({\n response: data,\n })\n return { error: data }\n }\n })\n })()\n\n if (!response.ok)\n throw new HttpError({\n body,\n details: JSON.stringify(data.error) ?? response.statusText,\n response,\n url,\n })\n\n return data as never\n },\n },\n { raw: options.raw },\n )\n}\n\nexport declare namespace fromHttp {\n type Options<\n raw extends boolean = false,\n schema extends RpcSchema.Generic = RpcSchema.Default,\n > = internal.Options<raw, HttpOptions, schema>\n\n type ErrorType =\n | promise.withTimeout.ErrorType\n | HttpError\n | Errors.GlobalErrorType\n}\n\n/** Thrown when a HTTP request fails. */\nexport class HttpError extends Errors.BaseError {\n override readonly name = 'RpcTransport.HttpError'\n\n constructor({\n body,\n details,\n response,\n url,\n }: { body: unknown; details: string; response: Response; url: string }) {\n super('HTTP request failed.', {\n details,\n metaMessages: [\n `Status: ${response.status}`,\n `URL: ${getUrl(url)}`,\n body ? `Body: ${JSON.stringify(body)}` : undefined,\n ],\n })\n }\n}\n\n/** Thrown when a HTTP response is malformed. */\nexport class MalformedResponseError extends Errors.BaseError {\n override readonly name = 'RpcTransport.MalformedResponseError'\n\n constructor({ response }: { response: string }) {\n super('HTTP Response could not be parsed as JSON.', {\n metaMessages: [`Response: ${response}`],\n })\n }\n}\n", "import * as Errors from '../Errors.js'\n\n/** @internal */\nexport function withTimeout<data>(\n fn: withTimeout.Fn<data>,\n options: withTimeout.Options,\n): Promise<data> {\n const { errorInstance = new TimeoutError(), timeout, signal } = options\n return new Promise((resolve, reject) => {\n ;(async () => {\n let timeoutId: any\n try {\n const controller = new AbortController()\n if (timeout > 0)\n timeoutId = setTimeout(() => {\n if (signal) {\n controller.abort()\n } else {\n reject(errorInstance)\n }\n }, timeout) as any\n resolve(await fn({ signal: controller.signal }))\n } catch (err) {\n if ((err as Error)?.name === 'AbortError') reject(errorInstance)\n reject(err)\n } finally {\n clearTimeout(timeoutId)\n }\n })()\n })\n}\n\n/** @internal */\nexport declare namespace withTimeout {\n type Fn<data> = ({\n signal,\n }: { signal: AbortController['signal'] | null }) => Promise<data>\n\n type Options = {\n // The error instance to throw when the timeout is reached.\n errorInstance?: Error | undefined\n // The timeout (in ms).\n timeout: number\n // Whether or not the timeout should use an abort signal.\n signal?: boolean | undefined\n }\n\n type ErrorType = TimeoutError | Errors.GlobalErrorType\n}\n\n/** @internal */\n\n/**\n * Thrown when an operation times out.\n * @internal\n */\nexport class TimeoutError extends Errors.BaseError {\n override readonly name = 'Promise.TimeoutError'\n\n constructor() {\n super('Operation timed out.')\n }\n}\n", "import type * as Errors from '../Errors.js'\nimport * as RpcRequest from '../RpcRequest.js'\nimport * as RpcResponse from '../RpcResponse.js'\nimport type * as RpcSchema from '../RpcSchema.js'\nimport type * as RpcTransport from '../RpcTransport.js'\nimport type { Compute } from './types.js'\n\n/** @internal */\nexport type Options<\n raw extends boolean | undefined = undefined,\n options extends Record<string, unknown> = {},\n schema extends RpcSchema.Generic = RpcSchema.Default,\n> = {\n /**\n * Enables raw mode – responses will return an object with `result` and `error` properties instead of returning the `result` directly and throwing errors.\n *\n * - `true`: a JSON-RPC response object will be returned with `result` and `error` properties.\n * - `false`: the JSON-RPC response object's `result` property will be returned directly, and JSON-RPC Errors will be thrown.\n *\n * @default false\n */\n raw?: raw | boolean | undefined\n /**\n * RPC Schema to use for the Transport's `request` function.\n * See {@link ox#RpcSchema.(from:function)} for more.\n *\n * @default `RpcSchema.Default`\n */\n schema?: schema | RpcSchema.Default | undefined\n} & options\n\n/** @internal */\nexport function create<\n options extends Record<string, unknown> = {},\n schema extends RpcSchema.Generic = RpcSchema.Default,\n raw extends boolean = false,\n>(\n transport: create.Transport<options>,\n options_root?: Options<raw, options, schema>,\n): RpcTransport.RpcTransport<raw, options, schema> {\n const requestStore = RpcRequest.createStore()\n\n return {\n request: async ({ method, params }, options: any = {}) => {\n const body = requestStore.prepare({ method, params } as never)\n\n const data = await transport.request(body as never, options as never)\n\n return RpcResponse.parse(data, {\n raw: options.raw ?? options_root?.raw,\n }) as never\n },\n }\n}\n\n/** @internal */\nexport declare namespace create {\n type Transport<options extends Record<string, unknown> = {}> = {\n request: (\n body: Compute<Omit<RpcRequest.RpcRequest, '_returnType'>>,\n options: options,\n ) => Promise<RpcResponse.RpcResponse>\n }\n\n type ErrorType =\n | RpcRequest.createStore.ErrorType\n | RpcResponse.parse.ErrorType\n | Errors.GlobalErrorType\n}\n", "import { secp256r1 } from '@noble/curves/p256'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as PublicKey from './PublicKey.js'\nimport type * as Signature from './Signature.js'\nimport * as Entropy from './internal/entropy.js'\n\n/** Re-export of noble/curves P256 utilities. */\nexport const noble = secp256r1\n\n/**\n * Computes the P256 ECDSA public key from a provided private key.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const publicKey = P256.getPublicKey({ privateKey: '0x...' })\n * ```\n *\n * @param options - The options to compute the public key.\n * @returns The computed public key.\n */\nexport function getPublicKey(\n options: getPublicKey.Options,\n): PublicKey.PublicKey {\n const { privateKey } = options\n const point = secp256r1.ProjectivePoint.fromPrivateKey(\n typeof privateKey === 'string'\n ? privateKey.slice(2)\n : Hex.fromBytes(privateKey).slice(2),\n )\n return PublicKey.from(point)\n}\n\nexport declare namespace getPublicKey {\n type Options = {\n /**\n * Private key to compute the public key from.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Generates a random P256 ECDSA private key.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const privateKey = P256.randomPrivateKey()\n * ```\n *\n * @param options - The options to generate the private key.\n * @returns The generated private key.\n */\nexport function randomPrivateKey<as extends 'Hex' | 'Bytes' = 'Hex'>(\n options: randomPrivateKey.Options<as> = {},\n): randomPrivateKey.ReturnType<as> {\n const { as = 'Hex' } = options\n const bytes = secp256r1.utils.randomPrivateKey()\n if (as === 'Hex') return Hex.fromBytes(bytes) as never\n return bytes as never\n}\n\nexport declare namespace randomPrivateKey {\n type Options<as extends 'Hex' | 'Bytes' = 'Hex'> = {\n /**\n * Format of the returned private key.\n * @default 'Hex'\n */\n as?: as | 'Hex' | 'Bytes' | undefined\n }\n\n type ReturnType<as extends 'Hex' | 'Bytes'> =\n | (as extends 'Bytes' ? Bytes.Bytes : never)\n | (as extends 'Hex' ? Hex.Hex : never)\n\n type ErrorType = Hex.fromBytes.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Recovers the signing public key from the signed payload and signature.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const signature = P256.sign({ payload: '0xdeadbeef', privateKey: '0x...' })\n *\n * const publicKey = P256.recoverPublicKey({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The recovery options.\n * @returns The recovered public key.\n */\nexport function recoverPublicKey(\n options: recoverPublicKey.Options,\n): PublicKey.PublicKey {\n const { payload, signature } = options\n const { r, s, yParity } = signature\n const signature_ = new secp256r1.Signature(\n BigInt(r),\n BigInt(s),\n ).addRecoveryBit(yParity)\n const payload_ =\n payload instanceof Uint8Array ? Hex.fromBytes(payload) : payload\n const point = signature_.recoverPublicKey(payload_.substring(2))\n return PublicKey.from(point)\n}\n\nexport declare namespace recoverPublicKey {\n type Options = {\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n /** Signature of the payload. */\n signature: Signature.Signature\n }\n\n type ErrorType =\n | PublicKey.from.ErrorType\n | Hex.fromBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Signs the payload with the provided private key and returns a P256 signature.\n *\n * @example\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const signature = P256.sign({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * privateKey: '0x...' // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The signing options.\n * @returns The ECDSA {@link ox#Signature.Signature}.\n */\nexport function sign(options: sign.Options): Signature.Signature {\n const {\n extraEntropy = Entropy.extraEntropy,\n hash,\n payload,\n privateKey,\n } = options\n const { r, s, recovery } = secp256r1.sign(\n payload instanceof Uint8Array ? payload : Bytes.fromHex(payload),\n privateKey instanceof Uint8Array ? privateKey : Bytes.fromHex(privateKey),\n {\n extraEntropy:\n typeof extraEntropy === 'boolean'\n ? extraEntropy\n : Hex.from(extraEntropy).slice(2),\n lowS: true,\n ...(hash ? { prehash: true } : {}),\n },\n )\n return {\n r,\n s,\n yParity: recovery,\n }\n}\n\nexport declare namespace sign {\n type Options = {\n /**\n * Extra entropy to add to the signing process. Setting to `false` will disable it.\n * @default true\n */\n extraEntropy?: boolean | Hex.Hex | Bytes.Bytes | undefined\n /**\n * If set to `true`, the payload will be hashed (sha256) before being signed.\n */\n hash?: boolean | undefined\n /**\n * Payload to sign.\n */\n payload: Hex.Hex | Bytes.Bytes\n /**\n * ECDSA private key.\n */\n privateKey: Hex.Hex | Bytes.Bytes\n }\n\n type ErrorType = Bytes.fromHex.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a payload was signed by the provided public key.\n *\n * @example\n *\n * ```ts twoslash\n * import { P256 } from 'ox'\n *\n * const privateKey = P256.randomPrivateKey()\n * const publicKey = P256.getPublicKey({ privateKey })\n * const signature = P256.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = P256.verify({ // [!code focus]\n * publicKey, // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided public key.\n */\nexport function verify(options: verify.Options): boolean {\n const { hash, payload, publicKey, signature } = options\n return secp256r1.verify(\n signature,\n payload instanceof Uint8Array ? payload : Bytes.fromHex(payload),\n PublicKey.toHex(publicKey).substring(2),\n ...(hash ? [{ prehash: true, lowS: true }] : []),\n )\n}\n\nexport declare namespace verify {\n type Options = {\n /** If set to `true`, the payload will be hashed (sha256) before being verified. */\n hash?: boolean | undefined\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n /** Public key that signed the payload. */\n publicKey: PublicKey.PublicKey<boolean>\n /** Signature of the payload. */\n signature: Signature.Signature<boolean>\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { createCurve } from './_shortw_utils.js';\nimport { createHasher } from './abstract/hash-to-curve.js';\nimport { Field } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\n\n// NIST secp256r1 aka p256\n// https://www.secg.org/sec2-v2.pdf, https://neuromancer.sk/std/nist/P-256\n\nconst Fp256 = Field(BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'));\nconst CURVE_A = Fp256.create(BigInt('-3'));\nconst CURVE_B = BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b');\n\n// prettier-ignore\nexport const p256 = createCurve({\n a: CURVE_A, // Equation params: a, b\n b: CURVE_B,\n Fp: Fp256, // Field: 2n**224n * (2n**32n-1n) + 2n**192n + 2n**96n-1n\n // Curve order, total count of valid points in the field\n n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n // Base (generator) point (x, y)\n Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n h: BigInt(1),\n lowS: false,\n} as const, sha256);\nexport const secp256r1 = p256;\n\nconst mapSWU = /* @__PURE__ */ (() =>\n mapToCurveSimpleSWU(Fp256, {\n A: CURVE_A,\n B: CURVE_B,\n Z: Fp256.create(BigInt('-10')),\n }))();\n\nconst htf = /* @__PURE__ */ (() =>\n createHasher(secp256r1.ProjectivePoint, (scalars: bigint[]) => mapSWU(scalars[0]), {\n DST: 'P256_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'P256_XMD:SHA-256_SSWU_NU_',\n p: Fp256.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n }))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "import * as Address from './Address.js'\nimport * as Errors from './Errors.js'\nimport type { ExactPartial } from './internal/types.js'\nimport { uid } from './internal/uid.js'\n\nexport const domainRegex =\n /^([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}(:[0-9]{1,5})?$/\n\nexport const ipRegex =\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:[0-9]{1,5})?$/\n\nexport const localhostRegex = /^localhost(:[0-9]{1,5})?$/\n\nexport const nonceRegex = /^[a-zA-Z0-9]{8,}$/\n\nexport const schemeRegex = /^([a-zA-Z][a-zA-Z0-9+-.]*)$/\n\n// https://regexr.com/80gdj\nexport const prefixRegex =\n /^(?:(?<scheme>[a-zA-Z][a-zA-Z0-9+-.]*):\\/\\/)?(?<domain>[a-zA-Z0-9+-.]*(?::[0-9]{1,5})?) (?:wants you to sign in with your Ethereum account:\\n)(?<address>0x[a-fA-F0-9]{40})\\n\\n(?:(?<statement>.*)\\n\\n)?/\n\n// https://regexr.com/80gf9\nexport const suffixRegex =\n /(?:URI: (?<uri>.+))\\n(?:Version: (?<version>.+))\\n(?:Chain ID: (?<chainId>\\d+))\\n(?:Nonce: (?<nonce>[a-zA-Z0-9]+))\\n(?:Issued At: (?<issuedAt>.+))(?:\\nExpiration Time: (?<expirationTime>.+))?(?:\\nNot Before: (?<notBefore>.+))?(?:\\nRequest ID: (?<requestId>.+))?/\n\n/** [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) message fields. */\nexport type Message = {\n /**\n * The Ethereum address performing the signing.\n */\n address: Address.Address\n /**\n * The [EIP-155](https://eips.ethereum.org/EIPS/eip-155) Chain ID to which the session is bound,\n */\n chainId: number\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority that is requesting the signing.\n */\n domain: string\n /**\n * Time when the signed authentication message is no longer valid.\n */\n expirationTime?: Date | undefined\n /**\n * Time when the message was generated, typically the current time.\n */\n issuedAt?: Date | undefined\n /**\n * A random string typically chosen by the relying party and used to prevent replay attacks.\n */\n nonce: string\n /**\n * Time when the signed authentication message will become valid.\n */\n notBefore?: Date | undefined\n /**\n * A system-specific identifier that may be used to uniquely refer to the sign-in request.\n */\n requestId?: string | undefined\n /**\n * A list of information or references to information the user wishes to have resolved as part of authentication by the relying party.\n */\n resources?: string[] | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme of the origin of the request.\n */\n scheme?: string | undefined\n /**\n * A human-readable ASCII assertion that the user will sign.\n */\n statement?: string | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) URI referring to the resource that is the subject of the signing (as in the subject of a claim).\n */\n uri: string\n /**\n * The current version of the SIWE Message.\n */\n version: '1'\n}\n\n/**\n * Creates [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.createMessage({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * chainId: 1,\n * domain: 'example.com',\n * nonce: 'foobarbaz',\n * uri: 'https://example.com/path',\n * version: '1',\n * })\n * // @log: \"example.com wants you to sign in with your Ethereum account:\n * // @log: 0xA0Cf798816D4b9b9866b5330EEa46a18382f251e\n * // @log:\n * // @log:\n * // @log: URI: https://example.com/path\n * // @log: Version: 1\n * // @log: Chain ID: 1\n * // @log: Nonce: foobarbaz\n * // @log: Issued At: 2023-02-01T00:00:00.000Z\"\n * ```\n *\n * @param value - Values to use when creating EIP-4361 formatted message.\n * @returns EIP-4361 formatted message.\n */\nexport function createMessage(value: Message): string {\n const {\n chainId,\n domain,\n expirationTime,\n issuedAt = new Date(),\n nonce,\n notBefore,\n requestId,\n resources,\n scheme,\n uri,\n version,\n } = value\n\n // Validate fields\n {\n // Required fields\n if (chainId !== Math.floor(chainId))\n throw new InvalidMessageFieldError({\n field: 'chainId',\n metaMessages: [\n '- Chain ID must be a EIP-155 chain ID.',\n '- See https://eips.ethereum.org/EIPS/eip-155',\n '',\n `Provided value: ${chainId}`,\n ],\n })\n if (\n !(\n domainRegex.test(domain) ||\n ipRegex.test(domain) ||\n localhostRegex.test(domain)\n )\n )\n throw new InvalidMessageFieldError({\n field: 'domain',\n metaMessages: [\n '- Domain must be an RFC 3986 authority.',\n '- See https://www.rfc-editor.org/rfc/rfc3986',\n '',\n `Provided value: ${domain}`,\n ],\n })\n if (!nonceRegex.test(nonce))\n throw new InvalidMessageFieldError({\n field: 'nonce',\n metaMessages: [\n '- Nonce must be at least 8 characters.',\n '- Nonce must be alphanumeric.',\n '',\n `Provided value: ${nonce}`,\n ],\n })\n if (!isUri(uri))\n throw new InvalidMessageFieldError({\n field: 'uri',\n metaMessages: [\n '- URI must be a RFC 3986 URI referring to the resource that is the subject of the signing.',\n '- See https://www.rfc-editor.org/rfc/rfc3986',\n '',\n `Provided value: ${uri}`,\n ],\n })\n if (version !== '1')\n throw new InvalidMessageFieldError({\n field: 'version',\n metaMessages: [\n \"- Version must be '1'.\",\n '',\n `Provided value: ${version}`,\n ],\n })\n\n // Optional fields\n if (scheme && !schemeRegex.test(scheme))\n throw new InvalidMessageFieldError({\n field: 'scheme',\n metaMessages: [\n '- Scheme must be an RFC 3986 URI scheme.',\n '- See https://www.rfc-editor.org/rfc/rfc3986#section-3.1',\n '',\n `Provided value: ${scheme}`,\n ],\n })\n const statement = value.statement\n if (statement?.includes('\\n'))\n throw new InvalidMessageFieldError({\n field: 'statement',\n metaMessages: [\n \"- Statement must not include '\\\\n'.\",\n '',\n `Provided value: ${statement}`,\n ],\n })\n }\n\n // Construct message\n const address = Address.from(value.address, { checksum: true })\n const origin = (() => {\n if (scheme) return `${scheme}://${domain}`\n return domain\n })()\n const statement = (() => {\n if (!value.statement) return ''\n return `${value.statement}\\n`\n })()\n const prefix = `${origin} wants you to sign in with your Ethereum account:\\n${address}\\n\\n${statement}`\n\n let suffix = `URI: ${uri}\\nVersion: ${version}\\nChain ID: ${chainId}\\nNonce: ${nonce}\\nIssued At: ${issuedAt.toISOString()}`\n\n if (expirationTime)\n suffix += `\\nExpiration Time: ${expirationTime.toISOString()}`\n if (notBefore) suffix += `\\nNot Before: ${notBefore.toISOString()}`\n if (requestId) suffix += `\\nRequest ID: ${requestId}`\n if (resources) {\n let content = '\\nResources:'\n for (const resource of resources) {\n if (!isUri(resource))\n throw new InvalidMessageFieldError({\n field: 'resources',\n metaMessages: [\n '- Every resource must be a RFC 3986 URI.',\n '- See https://www.rfc-editor.org/rfc/rfc3986',\n '',\n `Provided value: ${resource}`,\n ],\n })\n content += `\\n- ${resource}`\n }\n suffix += content\n }\n\n return `${prefix}\\n${suffix}`\n}\n\nexport declare namespace createMessage {\n type ErrorType =\n | Address.from.ErrorType\n | InvalidMessageFieldError\n | Errors.GlobalErrorType\n}\n\n/**\n * Generates random [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) nonce.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.generateNonce()\n * // @log: '65ed4681d4efe0270b923ff5f4b097b1c95974dc33aeebecd5724c42fd86dfd25dc70b27ef836b2aa22e68f19ebcccc1'\n * ```\n *\n * @returns Random nonce.\n */\nexport function generateNonce(): string {\n return uid(96)\n}\n\n/**\n * Check if the given URI is a valid [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) URI.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.isUri('https://example.com/foo')\n * // @log: true\n * ```\n *\n * @param value - Value to check.\n * @returns `false` if invalid, otherwise the valid URI.\n */\n// based on https://github.com/ogt/valid-url\nexport function isUri(value: string): false | string {\n // check for illegal characters\n if (/[^a-z0-9\\:\\/\\?\\#\\[\\]\\@\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=\\.\\-\\_\\~\\%]/i.test(value))\n return false\n\n // check for hex escapes that aren't complete\n if (/%[^0-9a-f]/i.test(value)) return false\n if (/%[0-9a-f](:?[^0-9a-f]|$)/i.test(value)) return false\n\n // from RFC 3986\n const splitted = splitUri(value)\n const scheme = splitted[1]\n const authority = splitted[2]\n const path = splitted[3]\n const query = splitted[4]\n const fragment = splitted[5]\n\n // scheme and path are required, though the path can be empty\n if (!(scheme?.length && path && path.length >= 0)) return false\n\n // if authority is present, the path must be empty or begin with a /\n if (authority?.length) {\n if (!(path.length === 0 || /^\\//.test(path))) return false\n } else {\n // if authority is not present, the path must not start with //\n if (/^\\/\\//.test(path)) return false\n }\n\n // scheme must begin with a letter, then consist of letters, digits, +, ., or -\n if (!/^[a-z][a-z0-9\\+\\-\\.]*$/.test(scheme.toLowerCase())) return false\n\n let out = ''\n // re-assemble the URL per section 5.3 in RFC 3986\n out += `${scheme}:`\n if (authority?.length) out += `//${authority}`\n\n out += path\n\n if (query?.length) out += `?${query}`\n if (fragment?.length) out += `#${fragment}`\n\n return out\n}\n\nfunction splitUri(value: string) {\n return value.match(\n /(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?/,\n )!\n}\n\n/**\n * [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message into message fields object.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.parseMessage(`example.com wants you to sign in with your Ethereum account:\n * 0xA0Cf798816D4b9b9866b5330EEa46a18382f251e\n *\n * I accept the ExampleOrg Terms of Service: https://example.com/tos\n *\n * URI: https://example.com/path\n * Version: 1\n * Chain ID: 1\n * Nonce: foobarbaz\n * Issued At: 2023-02-01T00:00:00.000Z`)\n * // @log: {\n * // @log: address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * // @log: chainId: 1,\n * // @log: domain: 'example.com',\n * // @log: issuedAt: '2023-02-01T00:00:00.000Z',\n * // @log: nonce: 'foobarbaz',\n * // @log: statement: 'I accept the ExampleOrg Terms of Service: https://example.com/tos',\n * // @log: uri: 'https://example.com/path',\n * // @log: version: '1',\n * // @log: }\n * ```\n *\n * @param message - [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) formatted message.\n * @returns Message fields object.\n */\nexport function parseMessage(message: string): ExactPartial<Message> {\n const { scheme, statement, ...prefix } = (message.match(prefixRegex)\n ?.groups ?? {}) as {\n address: Address.Address\n domain: string\n scheme?: string\n statement?: string\n }\n const { chainId, expirationTime, issuedAt, notBefore, requestId, ...suffix } =\n (message.match(suffixRegex)?.groups ?? {}) as {\n chainId: string\n expirationTime?: string\n issuedAt?: string\n nonce: string\n notBefore?: string\n requestId?: string\n uri: string\n version: '1'\n }\n const resources = message.split('Resources:')[1]?.split('\\n- ').slice(1)\n return {\n ...prefix,\n ...suffix,\n ...(chainId ? { chainId: Number(chainId) } : {}),\n ...(expirationTime ? { expirationTime: new Date(expirationTime) } : {}),\n ...(issuedAt ? { issuedAt: new Date(issuedAt) } : {}),\n ...(notBefore ? { notBefore: new Date(notBefore) } : {}),\n ...(requestId ? { requestId } : {}),\n ...(resources ? { resources } : {}),\n ...(scheme ? { scheme } : {}),\n ...(statement ? { statement } : {}),\n }\n}\n\n/**\n * Validates [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) message.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.validateMessage({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * domain: 'example.com',\n * message: {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * chainId: 1,\n * domain: 'example.com',\n * nonce: 'foobarbaz',\n * uri: 'https://example.com/path',\n * version: '1',\n * },\n * nonce: 'foobarbaz',\n * })\n * // @log: true\n * ```\n *\n * @param value - Values to use when validating EIP-4361 formatted message.\n * @returns Whether the message is valid.\n */\nexport function validateMessage(value: validateMessage.Value): boolean {\n const { address, domain, message, nonce, scheme, time = new Date() } = value\n\n if (domain && message.domain !== domain) return false\n if (nonce && message.nonce !== nonce) return false\n if (scheme && message.scheme !== scheme) return false\n\n if (message.expirationTime && time >= message.expirationTime) return false\n if (message.notBefore && time < message.notBefore) return false\n\n try {\n if (!message.address) return false\n if (address && !Address.isEqual(message.address, address)) return false\n } catch {\n return false\n }\n\n return true\n}\n\nexport declare namespace validateMessage {\n interface Value {\n /**\n * Ethereum address to check against.\n */\n address?: Address.Address | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986) authority to check against.\n */\n domain?: string | undefined\n /**\n * EIP-4361 message fields.\n */\n message: ExactPartial<Message>\n /**\n * Random string to check against.\n */\n nonce?: string | undefined\n /**\n * [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) URI scheme to check against.\n */\n scheme?: string | undefined\n /**\n * Current time to check optional `expirationTime` and `notBefore` fields.\n *\n * @default new Date()\n */\n time?: Date | undefined\n }\n}\n\n/**\n * Thrown when a field in a SIWE Message is invalid.\n *\n * @example\n * ```ts twoslash\n * import { Siwe } from 'ox'\n *\n * Siwe.createMessage({\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * chainId: 1.1,\n * domain: 'example.com',\n * nonce: 'foobarbaz',\n * uri: 'https://example.com/path',\n * version: '1',\n * })\n * // @error: Siwe.InvalidMessageFieldError: Invalid Sign-In with Ethereum message field \"chainId\".\n * // @error: - Chain ID must be a EIP-155 chain ID.\n * // @error: - See https://eips.ethereum.org/EIPS/eip-155\n * // @error: Provided value: 1.1\n * ```\n */\nexport class InvalidMessageFieldError extends Errors.BaseError {\n override readonly name = 'Siwe.InvalidMessageFieldError'\n\n constructor(parameters: {\n field: string\n metaMessages?: string[] | undefined\n }) {\n const { field, metaMessages } = parameters\n super(`Invalid Sign-In with Ethereum message field \"${field}\".`, {\n metaMessages,\n })\n }\n}\n", "const size = 256\nlet index = size\nlet buffer: string\n\n/** @internal */\nexport function uid(length = 11) {\n if (!buffer || index + length > size * 2) {\n buffer = ''\n index = 0\n for (let i = 0; i < size; i++) {\n buffer += ((256 + Math.random() * 256) | 0).toString(16).substring(1)\n }\n }\n return buffer.substring(index, index++ + length)\n}\n", "import type * as Address from './Address.js'\nimport * as Errors from './Errors.js'\nimport type * as Hex from './Hex.js'\nimport * as Value from './Value.js'\nimport type { Compute } from './internal/types.js'\n\n/** Base type for a Transaction Envelope. Transaction Envelopes inherit this type. */\nexport type Base<\n type extends string = string,\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n> = Compute<\n {\n /** EIP-155 Chain ID. */\n chainId: numberType\n /** Contract code or a hashed method call with encoded args */\n data?: Hex.Hex | undefined\n /** @alias `data` – added for TransactionEnvelope - Transaction compatibility. */\n input?: Hex.Hex | undefined\n /** Sender of the transaction. */\n from?: Address.Address | undefined\n /** Gas provided for transaction execution */\n gas?: bigintType | undefined\n /** Unique number identifying this transaction */\n nonce?: bigintType | undefined\n /** Transaction recipient */\n to?: Address.Address | null | undefined\n /** Transaction type */\n type: type\n /** Value in wei sent with this transaction */\n value?: bigintType | undefined\n /** ECDSA signature r. */\n r?: bigintType | undefined\n /** ECDSA signature s. */\n s?: bigintType | undefined\n /** ECDSA signature yParity. */\n yParity?: numberType | undefined\n /** @deprecated ECDSA signature v (for backwards compatibility). */\n v?: numberType | undefined\n } & (signed extends true ? { r: bigintType; s: bigintType } : {})\n>\n\n/** RPC representation of a {@link ox#(TransactionEnvelope:namespace).Base}. */\nexport type BaseRpc<\n type extends string = string,\n signed extends boolean = boolean,\n> = Base<type, signed, Hex.Hex, Hex.Hex>\n\n/** Signed representation of a {@link ox#(TransactionEnvelope:namespace).Base}. */\nexport type BaseSigned<type extends string = string> = Base<type, true>\n\n/**\n * Thrown when a fee cap is too high.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559 } from 'ox'\n *\n * TransactionEnvelopeEip1559.assert({\n * maxFeePerGas: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * })\n * // @error: TransactionEnvelope.FeeCapTooHighError: The fee cap (`maxFeePerGas`/`maxPriorityFeePerGas` = 115792089237316195423570985008687907853269984665640564039457584007913.129639936 gwei) cannot be higher than the maximum allowed value (2^256-1).\n * ```\n */\nexport class FeeCapTooHighError extends Errors.BaseError {\n override readonly name = 'TransactionEnvelope.FeeCapTooHighError'\n constructor({\n feeCap,\n }: {\n feeCap?: bigint | undefined\n } = {}) {\n super(\n `The fee cap (\\`maxFeePerGas\\`/\\`maxPriorityFeePerGas\\`${\n feeCap ? ` = ${Value.formatGwei(feeCap)} gwei` : ''\n }) cannot be higher than the maximum allowed value (2^256-1).`,\n )\n }\n}\n\n/**\n * Thrown when a gas price is too high.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeLegacy } from 'ox'\n *\n * TransactionEnvelopeLegacy.assert({\n * gasPrice: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * })\n * // @error: TransactionEnvelope.GasPriceTooHighError: The gas price (`gasPrice` = 115792089237316195423570985008687907853269984665640564039457584007913.129639936 gwei) cannot be higher than the maximum allowed value (2^256-1).\n * ```\n */\nexport class GasPriceTooHighError extends Errors.BaseError {\n override readonly name = 'TransactionEnvelope.GasPriceTooHighError'\n constructor({\n gasPrice,\n }: {\n gasPrice?: bigint | undefined\n } = {}) {\n super(\n `The gas price (\\`gasPrice\\`${\n gasPrice ? ` = ${Value.formatGwei(gasPrice)} gwei` : ''\n }) cannot be higher than the maximum allowed value (2^256-1).`,\n )\n }\n}\n\n/**\n * Thrown when a chain ID is invalid.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559 } from 'ox'\n *\n * TransactionEnvelopeEip1559.assert({ chainId: 0 })\n * // @error: TransactionEnvelope.InvalidChainIdError: Chain ID \"0\" is invalid.\n * ```\n */\nexport class InvalidChainIdError extends Errors.BaseError {\n override readonly name = 'TransactionEnvelope.InvalidChainIdError'\n constructor({ chainId }: { chainId?: number | undefined }) {\n super(\n typeof chainId !== 'undefined'\n ? `Chain ID \"${chainId}\" is invalid.`\n : 'Chain ID is invalid.',\n )\n }\n}\n\n/**\n * Thrown when a serialized transaction is invalid.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559 } from 'ox'\n *\n * TransactionEnvelopeEip1559.deserialize('0x02c0')\n * // @error: TransactionEnvelope.InvalidSerializedError: Invalid serialized transaction of type \"eip1559\" was provided.\n * // @error: Serialized Transaction: \"0x02c0\"\n * // @error: Missing Attributes: chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gas, to, value, data, accessList\n * ```\n */\nexport class InvalidSerializedError extends Errors.BaseError {\n override readonly name = 'TransactionEnvelope.InvalidSerializedError'\n constructor({\n attributes,\n serialized,\n type,\n }: {\n attributes: Record<string, unknown>\n serialized: Hex.Hex\n type: string\n }) {\n const missing = Object.entries(attributes)\n .map(([key, value]) => (typeof value === 'undefined' ? key : undefined))\n .filter(Boolean)\n super(`Invalid serialized transaction of type \"${type}\" was provided.`, {\n metaMessages: [\n `Serialized Transaction: \"${serialized}\"`,\n missing.length > 0 ? `Missing Attributes: ${missing.join(', ')}` : '',\n ].filter(Boolean),\n })\n }\n}\n\n/**\n * Thrown when a tip is higher than a fee cap.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559 } from 'ox'\n *\n * TransactionEnvelopeEip1559.assert({\n * chainId: 1,\n * maxFeePerGas: 10n,\n * maxPriorityFeePerGas: 11n,\n * })\n * // @error: TransactionEnvelope.TipAboveFeeCapError: The provided tip (`maxPriorityFeePerGas` = 11 gwei) cannot be higher than the fee cap (`maxFeePerGas` = 10 gwei).\n * ```\n */\nexport class TipAboveFeeCapError extends Errors.BaseError {\n override readonly name = 'TransactionEnvelope.TipAboveFeeCapError'\n constructor({\n maxPriorityFeePerGas,\n maxFeePerGas,\n }: {\n maxPriorityFeePerGas?: bigint | undefined\n maxFeePerGas?: bigint | undefined\n } = {}) {\n super(\n [\n `The provided tip (\\`maxPriorityFeePerGas\\`${\n maxPriorityFeePerGas\n ? ` = ${Value.formatGwei(maxPriorityFeePerGas)} gwei`\n : ''\n }) cannot be higher than the fee cap (\\`maxFeePerGas\\`${\n maxFeePerGas ? ` = ${Value.formatGwei(maxFeePerGas)} gwei` : ''\n }).`,\n ].join('\\n'),\n )\n }\n}\n", "import * as Errors from './Errors.js'\n\n/** @see https://ethereum.github.io/yellowpaper/paper.pdf */\nexport const exponents = {\n wei: 0,\n gwei: 9,\n szabo: 12,\n finney: 15,\n ether: 18,\n} as const\n\n/**\n * Formats a `bigint` Value to its string representation (divided by the given exponent).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.format(420_000_000_000n, 9)\n * // @log: '420'\n * ```\n *\n * @param value - The `bigint` Value to format.\n * @param decimals - The exponent to divide the `bigint` Value by.\n * @returns The string representation of the Value.\n */\nexport function format(value: bigint, decimals = 0) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n\nexport declare namespace format {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Formats a `bigint` Value (default: wei) to a string representation of Ether.\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.formatEther(1_000_000_000_000_000_000n)\n * // @log: '1'\n * ```\n *\n * @param wei - The Value to format.\n * @param unit - The unit to format the Value in. @default 'wei'.\n * @returns The Ether string representation of the Value.\n */\nexport function formatEther(\n wei: bigint,\n unit: 'wei' | 'gwei' | 'szabo' | 'finney' = 'wei',\n) {\n return format(wei, exponents.ether - exponents[unit])\n}\n\nexport declare namespace formatEther {\n type ErrorType = format.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Formats a `bigint` Value (default: wei) to a string representation of Gwei.\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.formatGwei(1_000_000_000n)\n * // @log: '1'\n * ```\n *\n * @param wei - The Value to format.\n * @param unit - The unit to format the Value in. @default 'wei'.\n * @returns The Gwei string representation of the Value.\n */\nexport function formatGwei(wei: bigint, unit: 'wei' = 'wei') {\n return format(wei, exponents.gwei - exponents[unit])\n}\n\nexport declare namespace formatGwei {\n type ErrorType = format.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Parses a `string` representation of a Value to `bigint` (multiplied by the given exponent).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.from('420', 9)\n * // @log: 420000000000n\n * ```\n *\n * @param value - The string representation of the Value.\n * @param decimals - The exponent to multiply the Value by.\n * @returns The `bigint` representation of the Value.\n */\nexport function from(value: string, decimals = 0) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value })\n\n let [integer = '', fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n\nexport declare namespace from {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Parses a string representation of Ether to a `bigint` Value (default: wei).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.fromEther('420')\n * // @log: 420000000000000000000n\n * ```\n *\n * @param ether - String representation of Ether.\n * @param unit - The unit to parse to. @default 'wei'.\n * @returns A `bigint` Value.\n */\nexport function fromEther(\n ether: string,\n unit: 'wei' | 'gwei' | 'szabo' | 'finney' = 'wei',\n) {\n return from(ether, exponents.ether - exponents[unit])\n}\n\nexport declare namespace fromEther {\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Parses a string representation of Gwei to a `bigint` Value (default: wei).\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.fromGwei('420')\n * // @log: 420000000000n\n * ```\n *\n * @param gwei - String representation of Gwei.\n * @param unit - The unit to parse to. @default 'wei'.\n * @returns A `bigint` Value.\n */\nexport function fromGwei(gwei: string, unit: 'wei' = 'wei') {\n return from(gwei, exponents.gwei - exponents[unit])\n}\n\nexport declare namespace fromGwei {\n type ErrorType = from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Thrown when a value is not a valid decimal number.\n *\n * @example\n * ```ts twoslash\n * import { Value } from 'ox'\n *\n * Value.fromEther('123.456.789')\n * // @error: Value.InvalidDecimalNumberError: Value `123.456.789` is not a valid decimal number.\n * ```\n */\nexport class InvalidDecimalNumberError extends Errors.BaseError {\n override readonly name = 'Value.InvalidDecimalNumberError'\n constructor({ value }: { value: string }) {\n super(`Value \\`${value}\\` is not a valid decimal number.`)\n }\n}\n", "import * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\nimport * as TransactionEnvelope from './TransactionEnvelope.js'\nimport type {\n Assign,\n Branded,\n Compute,\n PartialBy,\n UnionPartialBy,\n} from './internal/types.js'\n\nexport type TransactionEnvelopeLegacy<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n type extends string = Type,\n> = Compute<\n PartialBy<\n TransactionEnvelope.Base<type, signed, bigintType, numberType>,\n 'chainId'\n > & {\n /** Base fee per gas. */\n gasPrice?: bigintType | undefined\n }\n>\n\nexport type Rpc<signed extends boolean = boolean> = TransactionEnvelopeLegacy<\n signed,\n Hex.Hex,\n Hex.Hex,\n '0x0'\n>\n\nexport type Serialized = Branded<`0x${string}`, 'legacy'>\n\nexport type Signed = TransactionEnvelopeLegacy<true>\n\nexport const type = 'legacy'\nexport type Type = typeof type\n\n/**\n * Asserts a {@link ox#TransactionEnvelopeLegacy.TransactionEnvelopeLegacy} is valid.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeLegacy, Value } from 'ox'\n *\n * TransactionEnvelopeLegacy.assert({\n * gasPrice: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @error: GasPriceTooHighError:\n * // @error: The gas price (`gasPrice` = 115792089237316195423570985008687907853269984665640564039457584007913 gwei) cannot be\n * // @error: higher than the maximum allowed value (2^256-1).\n * ```\n *\n * @param envelope - The transaction envelope to assert.\n */\nexport function assert(envelope: PartialBy<TransactionEnvelopeLegacy, 'type'>) {\n const { chainId, gasPrice, to } = envelope\n if (to) Address.assert(to, { strict: false })\n if (typeof chainId !== 'undefined' && chainId <= 0)\n throw new TransactionEnvelope.InvalidChainIdError({ chainId })\n if (gasPrice && BigInt(gasPrice) > 2n ** 256n - 1n)\n throw new TransactionEnvelope.GasPriceTooHighError({ gasPrice })\n}\n\nexport declare namespace assert {\n type ErrorType =\n | Address.assert.ErrorType\n | TransactionEnvelope.InvalidChainIdError\n | TransactionEnvelope.GasPriceTooHighError\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#TransactionEnvelopeLegacy.TransactionEnvelopeLegacy} from its serialized form.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeLegacy } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.deserialize('0x01ef0182031184773594008477359400809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c0')\n * // @log: {\n * // @log: type: 'legacy',\n * // @log: nonce: 785n,\n * // @log: gasPrice: 2000000000n,\n * // @log: gas: 1000000n,\n * // @log: to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param serialized - The serialized transaction.\n * @returns Deserialized Transaction Envelope.\n */\nexport function deserialize(\n serialized: Hex.Hex,\n): Compute<TransactionEnvelopeLegacy> {\n const tuple = Rlp.toHex(serialized)\n\n const [nonce, gasPrice, gas, to, value, data, chainIdOrV_, r, s] =\n tuple as readonly Hex.Hex[]\n\n if (!(tuple.length === 6 || tuple.length === 9))\n throw new TransactionEnvelope.InvalidSerializedError({\n attributes: {\n nonce,\n gasPrice,\n gas,\n to,\n value,\n data,\n ...(tuple.length > 6\n ? {\n v: chainIdOrV_,\n r,\n s,\n }\n : {}),\n },\n serialized,\n type,\n })\n\n const transaction = {\n type,\n } as TransactionEnvelopeLegacy\n if (Hex.validate(to) && to !== '0x') transaction.to = to\n if (Hex.validate(gas) && gas !== '0x') transaction.gas = BigInt(gas)\n if (Hex.validate(data) && data !== '0x') transaction.data = data\n if (Hex.validate(nonce) && nonce !== '0x') transaction.nonce = BigInt(nonce)\n if (Hex.validate(value) && value !== '0x') transaction.value = BigInt(value)\n if (Hex.validate(gasPrice) && gasPrice !== '0x')\n transaction.gasPrice = BigInt(gasPrice)\n\n if (tuple.length === 6) return transaction\n\n const chainIdOrV =\n Hex.validate(chainIdOrV_) && chainIdOrV_ !== '0x'\n ? Number(chainIdOrV_ as Hex.Hex)\n : 0\n\n if (s === '0x' && r === '0x') {\n if (chainIdOrV > 0) transaction.chainId = Number(chainIdOrV)\n return transaction\n }\n\n const v = chainIdOrV\n const chainId: number | undefined = Math.floor((v - 35) / 2)\n if (chainId > 0) transaction.chainId = chainId\n else if (v !== 27 && v !== 28) throw new Signature.InvalidVError({ value: v })\n\n transaction.yParity = Signature.vToYParity(v)\n transaction.v = v\n transaction.s = s === '0x' ? 0n : BigInt(s!)\n transaction.r = r === '0x' ? 0n : BigInt(r!)\n\n assert(transaction)\n\n return transaction\n}\n\nexport declare namespace deserialize {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an arbitrary transaction object into a legacy Transaction Envelope.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeLegacy, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from({\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the transaction envelope.\n *\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeLegacy, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from({\n * chainId: 1,\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeLegacy.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const envelope_signed = TransactionEnvelopeLegacy.from(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: authorizationList: [...],\n * // @log: chainId: 1,\n * // @log: gasPrice: 10000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip7702',\n * // @log: value: 1000000000000000000n,\n * // @log: r: 125...n,\n * // @log: s: 642...n,\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * It is possible to instantiate an legacy Transaction Envelope from a {@link ox#TransactionEnvelopeLegacy.Serialized} value.\n *\n * ```ts twoslash\n * import { TransactionEnvelopeLegacy } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from('0xf858018203118502540be4008504a817c800809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c08477359400e1a001627c687261b0e7f8638af1112efa8a77e23656f6e7945275b19e9deed80261')\n * // @log: {\n * // @log: chainId: 1,\n * // @log: gasPrice: 10000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'legacy',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param envelope - The transaction object to convert.\n * @param options - Options.\n * @returns A legacy Transaction Envelope.\n */\nexport function from<\n const envelope extends\n | UnionPartialBy<TransactionEnvelopeLegacy, 'type'>\n | Hex.Hex,\n const signature extends Signature.Signature | undefined = undefined,\n>(\n envelope:\n | envelope\n | UnionPartialBy<TransactionEnvelopeLegacy, 'type'>\n | Hex.Hex,\n options: from.Options<signature> = {},\n): from.ReturnType<envelope, signature> {\n const { signature } = options\n\n const envelope_ = (\n typeof envelope === 'string' ? deserialize(envelope) : envelope\n ) as TransactionEnvelopeLegacy\n\n assert(envelope_)\n\n const signature_ = (() => {\n if (!signature) return {}\n const s = Signature.from(signature) as any\n s.v = Signature.yParityToV(s.yParity)\n return s\n })()\n\n return {\n ...envelope_,\n ...signature_,\n type: 'legacy',\n } as never\n}\n\nexport declare namespace from {\n type Options<signature extends Signature.Signature | undefined = undefined> =\n {\n signature?: signature | Signature.Signature | undefined\n }\n\n type ReturnType<\n envelope extends\n | UnionPartialBy<TransactionEnvelopeLegacy, 'type'>\n | Hex.Hex = TransactionEnvelopeLegacy | Hex.Hex,\n signature extends Signature.Signature | undefined = undefined,\n > = Compute<\n envelope extends Hex.Hex\n ? TransactionEnvelopeLegacy\n : Assign<\n envelope,\n (signature extends Signature.Signature\n ? Readonly<\n signature & {\n v: signature['yParity'] extends 0 ? 27 : 28\n }\n >\n : {}) & {\n readonly type: 'legacy'\n }\n >\n >\n\n type ErrorType =\n | deserialize.ErrorType\n | assert.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Returns the payload to sign for a {@link ox#TransactionEnvelopeLegacy.TransactionEnvelopeLegacy}.\n *\n * @example\n * The example below demonstrates how to compute the sign payload which can be used\n * with ECDSA signing utilities like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, TransactionEnvelopeLegacy } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from({\n * nonce: 0n,\n * gasPrice: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const payload = TransactionEnvelopeLegacy.getSignPayload(envelope) // [!code focus]\n * // @log: '0x...'\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param envelope - The transaction envelope to get the sign payload for.\n * @returns The sign payload.\n */\nexport function getSignPayload(\n envelope: TransactionEnvelopeLegacy<false>,\n): getSignPayload.ReturnType {\n return hash(envelope, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n type ReturnType = Hex.Hex\n\n type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Hashes a {@link ox#TransactionEnvelopeLegacy.TransactionEnvelopeLegacy}. This is the \"transaction hash\".\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeLegacy } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from({\n * chainId: 1,\n * nonce: 0n,\n * gasPrice: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeLegacy.getSignPayload(envelope),\n * privateKey: '0x...'\n * })\n *\n * const envelope_signed = TransactionEnvelopeLegacy.from(envelope, { signature })\n *\n * const hash = TransactionEnvelopeLegacy.hash(envelope_signed) // [!code focus]\n * ```\n *\n * @param envelope - The Legacy Transaction Envelope to hash.\n * @param options - Options.\n * @returns The hash of the transaction envelope.\n */\nexport function hash<presign extends boolean = false>(\n envelope: TransactionEnvelopeLegacy<presign extends true ? false : true>,\n options: hash.Options<presign> = {},\n): hash.ReturnType {\n const { presign } = options\n return Hash.keccak256(\n serialize({\n ...envelope,\n ...(presign\n ? {\n r: undefined,\n s: undefined,\n yParity: undefined,\n v: undefined,\n }\n : {}),\n }),\n )\n}\n\nexport declare namespace hash {\n type Options<presign extends boolean = false> = {\n /** Whether to hash this transaction for signing. @default false */\n presign?: presign | boolean | undefined\n }\n\n type ReturnType = Hex.Hex\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | serialize.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#TransactionEnvelopeLegacy.TransactionEnvelopeLegacy}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { TransactionEnvelopeLegacy } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from({\n * chainId: 1,\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const serialized = TransactionEnvelopeLegacy.serialize(envelope) // [!code focus]\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the serialized Transaction Envelope.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, TransactionEnvelopeLegacy, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from({\n * chainId: 1,\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeLegacy.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const serialized = TransactionEnvelopeLegacy.serialize(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n *\n * // ... send `serialized` transaction to JSON-RPC `eth_sendRawTransaction`\n * ```\n *\n * @param envelope - The Transaction Envelope to serialize.\n * @param options - Options.\n * @returns The serialized Transaction Envelope.\n */\nexport function serialize(\n envelope: PartialBy<TransactionEnvelopeLegacy, 'type'>,\n options: serialize.Options = {},\n): Serialized {\n const { chainId = 0, gas, data, input, nonce, to, value, gasPrice } = envelope\n\n assert(envelope)\n\n let serialized = [\n nonce ? Hex.fromNumber(nonce) : '0x',\n gasPrice ? Hex.fromNumber(gasPrice) : '0x',\n gas ? Hex.fromNumber(gas) : '0x',\n to ?? '0x',\n value ? Hex.fromNumber(value) : '0x',\n data ?? input ?? '0x',\n ]\n\n const signature = (() => {\n if (options.signature)\n return {\n r: options.signature.r,\n s: options.signature.s,\n v: Signature.yParityToV(options.signature.yParity),\n }\n\n if (typeof envelope.r === 'undefined' || typeof envelope.s === 'undefined')\n return undefined\n return {\n r: envelope.r,\n s: envelope.s,\n v: envelope.v!,\n }\n })()\n\n if (signature) {\n const v = (() => {\n // EIP-155 (inferred chainId)\n if (signature.v >= 35) {\n const inferredChainId = Math.floor((signature.v - 35) / 2)\n if (inferredChainId > 0) return signature.v\n return 27 + (signature.v === 35 ? 0 : 1)\n }\n\n // EIP-155 (explicit chainId)\n if (chainId > 0) return chainId * 2 + 35 + signature.v - 27\n\n // Pre-EIP-155 (no chainId)\n const v = 27 + (signature.v === 27 ? 0 : 1)\n if (signature.v !== v)\n throw new Signature.InvalidVError({ value: signature.v })\n return v\n })()\n\n serialized = [\n ...serialized,\n Hex.fromNumber(v),\n signature.r === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(signature.r)),\n signature.s === 0n ? '0x' : Hex.trimLeft(Hex.fromNumber(signature.s)),\n ]\n } else if (chainId > 0)\n serialized = [...serialized, Hex.fromNumber(chainId), '0x', '0x']\n\n return Rlp.fromHex(serialized) as never\n}\n\nexport declare namespace serialize {\n type Options = {\n /** Signature to append to the serialized Transaction Envelope. */\n signature?: Signature.Signature | undefined\n }\n\n type ErrorType =\n | assert.ErrorType\n | Hex.fromNumber.ErrorType\n | Hex.trimLeft.ErrorType\n | Rlp.fromHex.ErrorType\n | Signature.InvalidVError\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#TransactionEnvelopeLegacy.TransactionEnvelopeLegacy} to an {@link ox#TransactionEnvelopeLegacy.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest, TransactionEnvelopeLegacy, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeLegacy.from({\n * chainId: 1,\n * nonce: 0n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: Value.fromEther('1'),\n * })\n *\n * const envelope_rpc = TransactionEnvelopeLegacy.toRpc(envelope) // [!code focus]\n *\n * const request = RpcRequest.from({\n * id: 0,\n * method: 'eth_sendTransaction',\n * params: [envelope_rpc],\n * })\n * ```\n *\n * @param envelope - The legacy transaction envelope to convert.\n * @returns An RPC-formatted legacy transaction envelope.\n */\nexport function toRpc(envelope: Omit<TransactionEnvelopeLegacy, 'type'>): Rpc {\n const signature = Signature.extract(envelope)!\n\n return {\n ...envelope,\n chainId:\n typeof envelope.chainId === 'number'\n ? Hex.fromNumber(envelope.chainId)\n : undefined,\n data: envelope.data ?? envelope.input,\n type: '0x0',\n ...(typeof envelope.gas === 'bigint'\n ? { gas: Hex.fromNumber(envelope.gas) }\n : {}),\n ...(typeof envelope.nonce === 'bigint'\n ? { nonce: Hex.fromNumber(envelope.nonce) }\n : {}),\n ...(typeof envelope.value === 'bigint'\n ? { value: Hex.fromNumber(envelope.value) }\n : {}),\n ...(typeof envelope.gasPrice === 'bigint'\n ? { gasPrice: Hex.fromNumber(envelope.gasPrice) }\n : {}),\n ...(signature\n ? {\n ...Signature.toRpc(signature),\n v: signature.yParity === 0 ? '0x1b' : '0x1c',\n }\n : {}),\n } as never\n}\n\nexport declare namespace toRpc {\n export type ErrorType = Signature.extract.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#TransactionEnvelopeLegacy.TransactionEnvelopeLegacy}. Returns `true` if the envelope is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeLegacy, Value } from 'ox'\n *\n * const valid = TransactionEnvelopeLegacy.assert({\n * gasPrice: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @log: false\n * ```\n *\n * @param envelope - The transaction envelope to validate.\n */\nexport function validate(\n envelope: PartialBy<TransactionEnvelopeLegacy, 'type'>,\n) {\n try {\n assert(envelope)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as AccessList from './AccessList.js'\nimport * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\nimport * as TransactionEnvelope from './TransactionEnvelope.js'\nimport type {\n Assign,\n Compute,\n PartialBy,\n UnionPartialBy,\n} from './internal/types.js'\n\nexport type TransactionEnvelopeEip1559<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n type extends string = Type,\n> = Compute<\n TransactionEnvelope.Base<type, signed, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList?: AccessList.AccessList | undefined\n /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */\n maxFeePerGas?: bigintType | undefined\n /** Max priority fee per gas (in wei). */\n maxPriorityFeePerGas?: bigintType | undefined\n }\n>\n\nexport type Rpc<signed extends boolean = boolean> = TransactionEnvelopeEip1559<\n signed,\n Hex.Hex,\n Hex.Hex,\n '0x2'\n>\n\nexport type Serialized = `${SerializedType}${string}`\n\nexport const serializedType = '0x02' as const\nexport type SerializedType = typeof serializedType\n\nexport type Signed = TransactionEnvelopeEip1559<true>\n\nexport const type = 'eip1559' as const\nexport type Type = typeof type\n\n/**\n * Asserts a {@link ox#TransactionEnvelopeEip1559.TransactionEnvelopeEip1559} is valid.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559, Value } from 'ox'\n *\n * TransactionEnvelopeEip1559.assert({\n * maxFeePerGas: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @error: FeeCapTooHighError:\n * // @error: The fee cap (`masFeePerGas` = 115792089237316195423570985008687907853269984665640564039457584007913 gwei) cannot be\n * // @error: higher than the maximum allowed value (2^256-1).\n * ```\n *\n * @param envelope - The transaction envelope to assert.\n */\nexport function assert(\n envelope: PartialBy<TransactionEnvelopeEip1559, 'type'>,\n) {\n const { chainId, maxPriorityFeePerGas, maxFeePerGas, to } = envelope\n if (chainId <= 0)\n throw new TransactionEnvelope.InvalidChainIdError({ chainId })\n if (to) Address.assert(to, { strict: false })\n if (maxFeePerGas && BigInt(maxFeePerGas) > 2n ** 256n - 1n)\n throw new TransactionEnvelope.FeeCapTooHighError({ feeCap: maxFeePerGas })\n if (\n maxPriorityFeePerGas &&\n maxFeePerGas &&\n maxPriorityFeePerGas > maxFeePerGas\n )\n throw new TransactionEnvelope.TipAboveFeeCapError({\n maxFeePerGas,\n maxPriorityFeePerGas,\n })\n}\n\nexport declare namespace assert {\n type ErrorType =\n | Address.assert.ErrorType\n | TransactionEnvelope.InvalidChainIdError\n | TransactionEnvelope.FeeCapTooHighError\n | TransactionEnvelope.TipAboveFeeCapError\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#TransactionEnvelopeEip1559.TransactionEnvelopeEip1559} from its serialized form.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.deserialize('0x02ef0182031184773594008477359400809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c0')\n * // @log: {\n * // @log: type: 'eip1559',\n * // @log: nonce: 785n,\n * // @log: maxFeePerGas: 2000000000n,\n * // @log: gas: 1000000n,\n * // @log: to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param serialized - The serialized transaction.\n * @returns Deserialized Transaction Envelope.\n */\nexport function deserialize(\n serialized: Serialized,\n): Compute<TransactionEnvelopeEip1559> {\n const transactionArray = Rlp.toHex(Hex.slice(serialized, 1))\n\n const [\n chainId,\n nonce,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gas,\n to,\n value,\n data,\n accessList,\n yParity,\n r,\n s,\n ] = transactionArray as readonly Hex.Hex[]\n\n if (!(transactionArray.length === 9 || transactionArray.length === 12))\n throw new TransactionEnvelope.InvalidSerializedError({\n attributes: {\n chainId,\n nonce,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gas,\n to,\n value,\n data,\n accessList,\n ...(transactionArray.length > 9\n ? {\n yParity,\n r,\n s,\n }\n : {}),\n },\n serialized,\n type,\n })\n\n let transaction = {\n chainId: Number(chainId),\n type,\n } as TransactionEnvelopeEip1559\n if (Hex.validate(to) && to !== '0x') transaction.to = to\n if (Hex.validate(gas) && gas !== '0x') transaction.gas = BigInt(gas)\n if (Hex.validate(data) && data !== '0x') transaction.data = data\n if (Hex.validate(nonce) && nonce !== '0x') transaction.nonce = BigInt(nonce)\n if (Hex.validate(value) && value !== '0x') transaction.value = BigInt(value)\n if (Hex.validate(maxFeePerGas) && maxFeePerGas !== '0x')\n transaction.maxFeePerGas = BigInt(maxFeePerGas)\n if (Hex.validate(maxPriorityFeePerGas) && maxPriorityFeePerGas !== '0x')\n transaction.maxPriorityFeePerGas = BigInt(maxPriorityFeePerGas)\n if (accessList!.length !== 0 && accessList !== '0x')\n transaction.accessList = AccessList.fromTupleList(accessList as any)\n\n const signature =\n r && s && yParity ? Signature.fromTuple([yParity, r, s]) : undefined\n if (signature)\n transaction = {\n ...transaction,\n ...signature,\n } as TransactionEnvelopeEip1559\n\n assert(transaction)\n\n return transaction\n}\n\nexport declare namespace deserialize {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an arbitrary transaction object into an EIP-1559 Transaction Envelope.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from({\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the transaction envelope.\n *\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip1559, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from({\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip1559.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const envelope_signed = TransactionEnvelopeEip1559.from(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: chainId: 1,\n * // @log: maxFeePerGas: 10000000000n,\n * // @log: maxPriorityFeePerGas: 1000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip1559',\n * // @log: value: 1000000000000000000n,\n * // @log: r: 125...n,\n * // @log: s: 642...n,\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * It is possible to instantiate an EIP-1559 Transaction Envelope from a {@link ox#TransactionEnvelopeEip1559.Serialized} value.\n *\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from('0x02f858018203118502540be4008504a817c800809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c08477359400e1a001627c687261b0e7f8638af1112efa8a77e23656f6e7945275b19e9deed80261')\n * // @log: {\n * // @log: chainId: 1,\n * // @log: maxFeePerGas: 10000000000n,\n * // @log: maxPriorityFeePerGas: 1000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip1559',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param envelope - The transaction object to convert.\n * @param options - Options.\n * @returns An EIP-1559 Transaction Envelope.\n */\nexport function from<\n const envelope extends\n | UnionPartialBy<TransactionEnvelopeEip1559, 'type'>\n | Serialized,\n const signature extends Signature.Signature | undefined = undefined,\n>(\n envelope:\n | envelope\n | UnionPartialBy<TransactionEnvelopeEip1559, 'type'>\n | Serialized,\n options: from.Options<signature> = {},\n): from.ReturnType<envelope, signature> {\n const { signature } = options\n\n const envelope_ = (\n typeof envelope === 'string' ? deserialize(envelope) : envelope\n ) as TransactionEnvelopeEip1559\n\n assert(envelope_)\n\n return {\n ...envelope_,\n ...(signature ? Signature.from(signature) : {}),\n type: 'eip1559',\n } as never\n}\n\nexport declare namespace from {\n type Options<signature extends Signature.Signature | undefined = undefined> =\n {\n signature?: signature | Signature.Signature | undefined\n }\n\n type ReturnType<\n envelope extends\n | UnionPartialBy<TransactionEnvelopeEip1559, 'type'>\n | Hex.Hex = TransactionEnvelopeEip1559 | Hex.Hex,\n signature extends Signature.Signature | undefined = undefined,\n > = Compute<\n envelope extends Hex.Hex\n ? TransactionEnvelopeEip1559\n : Assign<\n envelope,\n (signature extends Signature.Signature ? Readonly<signature> : {}) & {\n readonly type: 'eip1559'\n }\n >\n >\n\n type ErrorType =\n | deserialize.ErrorType\n | assert.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Returns the payload to sign for a {@link ox#TransactionEnvelopeEip1559.TransactionEnvelopeEip1559}.\n *\n * @example\n * The example below demonstrates how to compute the sign payload which can be used\n * with ECDSA signing utilities like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip1559 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from({\n * chainId: 1,\n * nonce: 0n,\n * maxFeePerGas: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const payload = TransactionEnvelopeEip1559.getSignPayload(envelope) // [!code focus]\n * // @log: '0x...'\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param envelope - The transaction envelope to get the sign payload for.\n * @returns The sign payload.\n */\nexport function getSignPayload(\n envelope: TransactionEnvelopeEip1559,\n): getSignPayload.ReturnType {\n return hash(envelope, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n type ReturnType = Hex.Hex\n\n type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Hashes a {@link ox#TransactionEnvelopeEip1559.TransactionEnvelopeEip1559}. This is the \"transaction hash\".\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip1559 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from({\n * chainId: 1,\n * nonce: 0n,\n * maxFeePerGas: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip1559.getSignPayload(envelope),\n * privateKey: '0x...'\n * })\n *\n * const envelope_signed = TransactionEnvelopeEip1559.from(envelope, { signature })\n *\n * const hash = TransactionEnvelopeEip1559.hash(envelope_signed) // [!code focus]\n * ```\n *\n * @param envelope - The EIP-1559 Transaction Envelope to hash.\n * @param options - Options.\n * @returns The hash of the transaction envelope.\n */\nexport function hash<presign extends boolean = false>(\n envelope: TransactionEnvelopeEip1559<presign extends true ? false : true>,\n options: hash.Options<presign> = {},\n): hash.ReturnType {\n const { presign } = options\n return Hash.keccak256(\n serialize({\n ...envelope,\n ...(presign\n ? {\n r: undefined,\n s: undefined,\n yParity: undefined,\n v: undefined,\n }\n : {}),\n }),\n )\n}\n\nexport declare namespace hash {\n type Options<presign extends boolean = false> = {\n /** Whether to hash this transaction for signing. @default false */\n presign?: presign | boolean | undefined\n }\n\n type ReturnType = Hex.Hex\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | serialize.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#TransactionEnvelopeEip1559.TransactionEnvelopeEip1559}.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from({\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const serialized = TransactionEnvelopeEip1559.serialize(envelope) // [!code focus]\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the serialized Transaction Envelope.\n *\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip1559, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from({\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip1559.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const serialized = TransactionEnvelopeEip1559.serialize(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n *\n * // ... send `serialized` transaction to JSON-RPC `eth_sendRawTransaction`\n * ```\n *\n * @param envelope - The Transaction Envelope to serialize.\n * @param options - Options.\n * @returns The serialized Transaction Envelope.\n */\nexport function serialize(\n envelope: PartialBy<TransactionEnvelopeEip1559, 'type'>,\n options: serialize.Options = {},\n): Serialized {\n const {\n chainId,\n gas,\n nonce,\n to,\n value,\n maxFeePerGas,\n maxPriorityFeePerGas,\n accessList,\n data,\n input,\n } = envelope\n\n assert(envelope)\n\n const accessTupleList = AccessList.toTupleList(accessList)\n\n const signature = Signature.extract(options.signature || envelope)\n\n const serialized = [\n Hex.fromNumber(chainId),\n nonce ? Hex.fromNumber(nonce) : '0x',\n maxPriorityFeePerGas ? Hex.fromNumber(maxPriorityFeePerGas) : '0x',\n maxFeePerGas ? Hex.fromNumber(maxFeePerGas) : '0x',\n gas ? Hex.fromNumber(gas) : '0x',\n to ?? '0x',\n value ? Hex.fromNumber(value) : '0x',\n data ?? input ?? '0x',\n accessTupleList,\n ...(signature ? Signature.toTuple(signature) : []),\n ]\n\n return Hex.concat(serializedType, Rlp.fromHex(serialized)) as Serialized\n}\n\nexport declare namespace serialize {\n type Options = {\n /** Signature to append to the serialized Transaction Envelope. */\n signature?: Signature.Signature | undefined\n }\n\n type ErrorType =\n | assert.ErrorType\n | Hex.fromNumber.ErrorType\n | Signature.toTuple.ErrorType\n | Hex.concat.ErrorType\n | Rlp.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#TransactionEnvelopeEip1559.TransactionEnvelopeEip1559} to an {@link ox#TransactionEnvelopeEip1559.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest, TransactionEnvelopeEip1559, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip1559.from({\n * chainId: 1,\n * nonce: 0n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: Value.fromEther('1'),\n * })\n *\n * const envelope_rpc = TransactionEnvelopeEip1559.toRpc(envelope) // [!code focus]\n *\n * const request = RpcRequest.from({\n * id: 0,\n * method: 'eth_sendTransaction',\n * params: [envelope_rpc],\n * })\n * ```\n *\n * @param envelope - The EIP-1559 transaction envelope to convert.\n * @returns An RPC-formatted EIP-1559 transaction envelope.\n */\nexport function toRpc(envelope: Omit<TransactionEnvelopeEip1559, 'type'>): Rpc {\n const signature = Signature.extract(envelope)\n\n return {\n ...envelope,\n chainId: Hex.fromNumber(envelope.chainId),\n data: envelope.data ?? envelope.input,\n type: '0x2',\n ...(typeof envelope.gas === 'bigint'\n ? { gas: Hex.fromNumber(envelope.gas) }\n : {}),\n ...(typeof envelope.nonce === 'bigint'\n ? { nonce: Hex.fromNumber(envelope.nonce) }\n : {}),\n ...(typeof envelope.value === 'bigint'\n ? { value: Hex.fromNumber(envelope.value) }\n : {}),\n ...(typeof envelope.maxFeePerGas === 'bigint'\n ? { maxFeePerGas: Hex.fromNumber(envelope.maxFeePerGas) }\n : {}),\n ...(typeof envelope.maxPriorityFeePerGas === 'bigint'\n ? {\n maxPriorityFeePerGas: Hex.fromNumber(envelope.maxPriorityFeePerGas),\n }\n : {}),\n ...(signature ? Signature.toRpc(signature) : {}),\n } as never\n}\n\nexport declare namespace toRpc {\n export type ErrorType = Signature.extract.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#TransactionEnvelopeEip1559.TransactionEnvelopeEip1559}. Returns `true` if the envelope is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip1559, Value } from 'ox'\n *\n * const valid = TransactionEnvelopeEip1559.assert({\n * maxFeePerGas: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @log: false\n * ```\n *\n * @param envelope - The transaction envelope to validate.\n */\nexport function validate(\n envelope: PartialBy<TransactionEnvelopeEip1559, 'type'>,\n) {\n try {\n assert(envelope)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as AccessList from './AccessList.js'\nimport * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\nimport * as TransactionEnvelope from './TransactionEnvelope.js'\nimport type {\n Assign,\n Compute,\n PartialBy,\n UnionPartialBy,\n} from './internal/types.js'\n\nexport type TransactionEnvelopeEip2930<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n type extends string = Type,\n> = Compute<\n TransactionEnvelope.Base<type, signed, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList?: AccessList.AccessList | undefined\n /** Base fee per gas. */\n gasPrice?: bigintType | undefined\n }\n>\n\nexport type Rpc<signed extends boolean = boolean> = TransactionEnvelopeEip2930<\n signed,\n Hex.Hex,\n Hex.Hex,\n '0x1'\n>\n\nexport type Serialized = `${SerializedType}${string}`\n\nexport const serializedType = '0x01' as const\nexport type SerializedType = typeof serializedType\n\nexport type Signed = TransactionEnvelopeEip2930<true>\n\nexport const type = 'eip2930' as const\nexport type Type = typeof type\n\n/**\n * Asserts a {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930} is valid.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip2930, Value } from 'ox'\n *\n * TransactionEnvelopeEip2930.assert({\n * gasPrice: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @error: GasPriceTooHighError:\n * // @error: The gas price (`gasPrice` = 115792089237316195423570985008687907853269984665640564039457584007913 gwei) cannot be\n * // @error: higher than the maximum allowed value (2^256-1).\n * ```\n *\n * @param envelope - The transaction envelope to assert.\n */\nexport function assert(\n envelope: PartialBy<TransactionEnvelopeEip2930, 'type'>,\n) {\n const { chainId, gasPrice, to } = envelope\n if (chainId <= 0)\n throw new TransactionEnvelope.InvalidChainIdError({ chainId })\n if (to) Address.assert(to, { strict: false })\n if (gasPrice && BigInt(gasPrice) > 2n ** 256n - 1n)\n throw new TransactionEnvelope.GasPriceTooHighError({ gasPrice })\n}\n\nexport declare namespace assert {\n type ErrorType =\n | Address.assert.ErrorType\n | TransactionEnvelope.InvalidChainIdError\n | TransactionEnvelope.GasPriceTooHighError\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930} from its serialized form.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip2930 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.deserialize('0x01ef0182031184773594008477359400809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c0')\n * // @log: {\n * // @log: type: 'eip2930',\n * // @log: nonce: 785n,\n * // @log: gasPrice: 2000000000n,\n * // @log: gas: 1000000n,\n * // @log: to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param serialized - The serialized transaction.\n * @returns Deserialized Transaction Envelope.\n */\nexport function deserialize(\n serialized: Serialized,\n): TransactionEnvelopeEip2930 {\n const transactionArray = Rlp.toHex(Hex.slice(serialized, 1))\n\n const [\n chainId,\n nonce,\n gasPrice,\n gas,\n to,\n value,\n data,\n accessList,\n yParity,\n r,\n s,\n ] = transactionArray as readonly Hex.Hex[]\n\n if (!(transactionArray.length === 8 || transactionArray.length === 11))\n throw new TransactionEnvelope.InvalidSerializedError({\n attributes: {\n chainId,\n nonce,\n gasPrice,\n gas,\n to,\n value,\n data,\n accessList,\n ...(transactionArray.length > 8\n ? {\n yParity,\n r,\n s,\n }\n : {}),\n },\n serialized,\n type,\n })\n\n let transaction = {\n chainId: Number(chainId as Hex.Hex),\n type,\n } as TransactionEnvelopeEip2930\n if (Hex.validate(to) && to !== '0x') transaction.to = to\n if (Hex.validate(gas) && gas !== '0x') transaction.gas = BigInt(gas)\n if (Hex.validate(data) && data !== '0x') transaction.data = data\n if (Hex.validate(nonce) && nonce !== '0x') transaction.nonce = BigInt(nonce)\n if (Hex.validate(value) && value !== '0x') transaction.value = BigInt(value)\n if (Hex.validate(gasPrice) && gasPrice !== '0x')\n transaction.gasPrice = BigInt(gasPrice)\n if (accessList!.length !== 0 && accessList !== '0x')\n transaction.accessList = AccessList.fromTupleList(accessList as any)\n\n const signature =\n r && s && yParity ? Signature.fromTuple([yParity, r, s]) : undefined\n if (signature)\n transaction = {\n ...transaction,\n ...signature,\n } as TransactionEnvelopeEip2930\n\n assert(transaction)\n\n return transaction\n}\n\nexport declare namespace deserialize {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an arbitrary transaction object into an EIP-2930 Transaction Envelope.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { TransactionEnvelopeEip2930, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from({\n * chainId: 1,\n * accessList: [...],\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the transaction envelope.\n *\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip2930, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from({\n * chainId: 1,\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip2930.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const envelope_signed = TransactionEnvelopeEip2930.from(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: chainId: 1,\n * // @log: gasPrice: 10000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip2930',\n * // @log: value: 1000000000000000000n,\n * // @log: r: 125...n,\n * // @log: s: 642...n,\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * It is possible to instantiate an EIP-2930 Transaction Envelope from a {@link ox#TransactionEnvelopeEip2930.Serialized} value.\n *\n * ```ts twoslash\n * import { TransactionEnvelopeEip2930 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from('0x01f858018203118502540be4008504a817c800809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c08477359400e1a001627c687261b0e7f8638af1112efa8a77e23656f6e7945275b19e9deed80261')\n * // @log: {\n * // @log: chainId: 1,\n * // @log: gasPrice: 10000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip2930',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param envelope - The transaction object to convert.\n * @param options - Options.\n * @returns A {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930}\n */\nexport function from<\n const envelope extends\n | UnionPartialBy<TransactionEnvelopeEip2930, 'type'>\n | Serialized,\n const signature extends Signature.Signature | undefined = undefined,\n>(\n envelope:\n | envelope\n | UnionPartialBy<TransactionEnvelopeEip2930, 'type'>\n | Serialized,\n options: from.Options<signature> = {},\n): from.ReturnType<envelope, signature> {\n const { signature } = options\n\n const envelope_ = (\n typeof envelope === 'string' ? deserialize(envelope) : envelope\n ) as TransactionEnvelopeEip2930\n\n assert(envelope_)\n\n return {\n ...envelope_,\n ...(signature ? Signature.from(signature) : {}),\n type: 'eip2930',\n } as never\n}\n\nexport declare namespace from {\n type Options<signature extends Signature.Signature | undefined = undefined> =\n {\n signature?: signature | Signature.Signature | undefined\n }\n\n type ReturnType<\n envelope extends\n | UnionPartialBy<TransactionEnvelopeEip2930, 'type'>\n | Hex.Hex = TransactionEnvelopeEip2930 | Hex.Hex,\n signature extends Signature.Signature | undefined = undefined,\n > = Compute<\n envelope extends Hex.Hex\n ? TransactionEnvelopeEip2930\n : Assign<\n envelope,\n (signature extends Signature.Signature ? Readonly<signature> : {}) & {\n readonly type: 'eip2930'\n }\n >\n >\n\n type ErrorType =\n | deserialize.ErrorType\n | assert.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Returns the payload to sign for a {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930}.\n *\n * @example\n * The example below demonstrates how to compute the sign payload which can be used\n * with ECDSA signing utilities like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip2930 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from({\n * chainId: 1,\n * nonce: 0n,\n * gasPrice: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const payload = TransactionEnvelopeEip2930.getSignPayload(envelope) // [!code focus]\n * // @log: '0x...'\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param envelope - The transaction envelope to get the sign payload for.\n * @returns The sign payload.\n */\nexport function getSignPayload(\n envelope: TransactionEnvelopeEip2930,\n): getSignPayload.ReturnType {\n return hash(envelope, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n type ReturnType = Hex.Hex\n\n type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Hashes a {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930}. This is the \"transaction hash\".\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip2930 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from({\n * chainId: 1,\n * nonce: 0n,\n * gasPrice: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip2930.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const envelope_signed = TransactionEnvelopeEip2930.from(envelope, {\n * signature,\n * })\n *\n * const hash = TransactionEnvelopeEip2930.hash(envelope_signed) // [!code focus]\n * ```\n *\n * @param envelope - The EIP-2930 Transaction Envelope to hash.\n * @param options - Options.\n * @returns The hash of the transaction envelope.\n */\nexport function hash<presign extends boolean = false>(\n envelope: TransactionEnvelopeEip2930<presign extends true ? false : true>,\n options: hash.Options<presign> = {},\n): hash.ReturnType {\n const { presign } = options\n return Hash.keccak256(\n serialize({\n ...envelope,\n ...(presign\n ? {\n r: undefined,\n s: undefined,\n yParity: undefined,\n v: undefined,\n }\n : {}),\n }),\n )\n}\n\nexport declare namespace hash {\n type Options<presign extends boolean = false> = {\n /** Whether to hash this transaction for signing. @default false */\n presign?: presign | boolean | undefined\n }\n\n type ReturnType = Hex.Hex\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | serialize.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930}.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip2930, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from({\n * chainId: 1,\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const serialized = TransactionEnvelopeEip2930.serialize(envelope) // [!code focus]\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the serialized Transaction Envelope.\n *\n * ```ts twoslash\n * import { Secp256k1, TransactionEnvelopeEip2930, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from({\n * chainId: 1,\n * gasPrice: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip2930.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const serialized = TransactionEnvelopeEip2930.serialize(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n *\n * // ... send `serialized` transaction to JSON-RPC `eth_sendRawTransaction`\n * ```\n *\n * @param envelope - The Transaction Envelope to serialize.\n * @param options - Options.\n * @returns The serialized Transaction Envelope.\n */\nexport function serialize(\n envelope: PartialBy<TransactionEnvelopeEip2930, 'type'>,\n options: serialize.Options = {},\n): Serialized {\n const { chainId, gas, data, input, nonce, to, value, accessList, gasPrice } =\n envelope\n\n assert(envelope)\n\n const accessTupleList = AccessList.toTupleList(accessList)\n\n const signature = Signature.extract(options.signature || (envelope as any))\n\n const serialized = [\n Hex.fromNumber(chainId),\n nonce ? Hex.fromNumber(nonce) : '0x',\n gasPrice ? Hex.fromNumber(gasPrice) : '0x',\n gas ? Hex.fromNumber(gas) : '0x',\n to ?? '0x',\n value ? Hex.fromNumber(value) : '0x',\n data ?? input ?? '0x',\n accessTupleList,\n ...(signature ? Signature.toTuple(signature) : []),\n ] as const\n\n return Hex.concat('0x01', Rlp.fromHex(serialized)) as Serialized\n}\n\nexport declare namespace serialize {\n type Options = {\n /** Signature to append to the serialized Transaction Envelope. */\n signature?: Signature.Signature | undefined\n }\n\n type ErrorType =\n | assert.ErrorType\n | Hex.fromNumber.ErrorType\n | Signature.toTuple.ErrorType\n | Hex.concat.ErrorType\n | Rlp.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930} to an {@link ox#TransactionEnvelopeEip2930.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { RpcRequest, TransactionEnvelopeEip2930, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip2930.from({\n * chainId: 1,\n * nonce: 0n,\n * gas: 21000n,\n * maxFeePerGas: Value.fromGwei('20'),\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: Value.fromEther('1'),\n * })\n *\n * const envelope_rpc = TransactionEnvelopeEip2930.toRpc(envelope) // [!code focus]\n *\n * const request = RpcRequest.from({\n * id: 0,\n * method: 'eth_sendTransaction',\n * params: [envelope_rpc],\n * })\n * ```\n *\n * @param envelope - The EIP-2930 transaction envelope to convert.\n * @returns An RPC-formatted EIP-2930 transaction envelope.\n */\nexport function toRpc(envelope: Omit<TransactionEnvelopeEip2930, 'type'>): Rpc {\n const signature = Signature.extract(envelope)!\n\n return {\n ...envelope,\n chainId: Hex.fromNumber(envelope.chainId),\n data: envelope.data ?? envelope.input,\n ...(typeof envelope.gas === 'bigint'\n ? { gas: Hex.fromNumber(envelope.gas) }\n : {}),\n ...(typeof envelope.nonce === 'bigint'\n ? { nonce: Hex.fromNumber(envelope.nonce) }\n : {}),\n ...(typeof envelope.value === 'bigint'\n ? { value: Hex.fromNumber(envelope.value) }\n : {}),\n ...(typeof envelope.gasPrice === 'bigint'\n ? { gasPrice: Hex.fromNumber(envelope.gasPrice) }\n : {}),\n type: '0x1',\n ...(signature ? Signature.toRpc(signature) : {}),\n } as never\n}\n\nexport declare namespace toRpc {\n export type ErrorType = Signature.extract.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#TransactionEnvelopeEip2930.TransactionEnvelopeEip2930}. Returns `true` if the envelope is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip2930, Value } from 'ox'\n *\n * const valid = TransactionEnvelopeEip2930.assert({\n * gasPrice: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @log: false\n * ```\n *\n * @param envelope - The transaction envelope to validate.\n */\nexport function validate(\n envelope: PartialBy<TransactionEnvelopeEip2930, 'type'>,\n) {\n try {\n assert(envelope)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import * as AccessList from './AccessList.js'\nimport * as Blobs from './Blobs.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Kzg from './Kzg.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\nimport * as TransactionEnvelope from './TransactionEnvelope.js'\nimport * as TransactionEnvelopeEip1559 from './TransactionEnvelopeEip1559.js'\nimport type {\n Assign,\n Compute,\n PartialBy,\n UnionPartialBy,\n} from './internal/types.js'\n\nexport type TransactionEnvelopeEip4844<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n type extends string = Type,\n> = Compute<\n TransactionEnvelope.Base<type, signed, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList?: AccessList.AccessList | undefined\n /** Versioned hashes of blobs to be included in the transaction. */\n blobVersionedHashes: readonly Hex.Hex[]\n /** Maximum total fee per gas sender is willing to pay for blob gas (in wei). */\n maxFeePerBlobGas?: bigintType | undefined\n /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */\n maxFeePerGas?: bigintType | undefined\n /** Max priority fee per gas (in wei). */\n maxPriorityFeePerGas?: bigintType | undefined\n /** The sidecars associated with this transaction. When defined, the envelope is in the \"network wrapper\" format. */\n sidecars?: readonly Blobs.BlobSidecar<Hex.Hex>[] | undefined\n }\n>\n\nexport type Rpc<signed extends boolean = boolean> = TransactionEnvelopeEip4844<\n signed,\n Hex.Hex,\n Hex.Hex,\n '0x3'\n>\n\nexport type Serialized = `${SerializedType}${string}`\n\nexport const serializedType = '0x03' as const\nexport type SerializedType = typeof serializedType\n\nexport type Signed = TransactionEnvelopeEip4844<true>\n\nexport const type = 'eip4844' as const\nexport type Type = 'eip4844'\n\n/**\n * Asserts a {@link ox#TransactionEnvelopeEip4844.TransactionEnvelopeEip4844} is valid.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip4844, Value } from 'ox'\n *\n * TransactionEnvelopeEip4844.assert({\n * blobVersionedHashes: [],\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @error: EmptyBlobVersionedHashesError: Blob versioned hashes must not be empty.\n * ```\n *\n * @param envelope - The transaction envelope to assert.\n */\nexport function assert(\n envelope: PartialBy<TransactionEnvelopeEip4844, 'type'>,\n) {\n const { blobVersionedHashes } = envelope\n if (blobVersionedHashes) {\n if (blobVersionedHashes.length === 0)\n throw new Blobs.EmptyBlobVersionedHashesError()\n for (const hash of blobVersionedHashes) {\n const size = Hex.size(hash)\n const version = Hex.toNumber(Hex.slice(hash, 0, 1))\n if (size !== 32)\n throw new Blobs.InvalidVersionedHashSizeError({ hash, size })\n if (version !== Kzg.versionedHashVersion)\n throw new Blobs.InvalidVersionedHashVersionError({\n hash,\n version,\n })\n }\n }\n TransactionEnvelopeEip1559.assert(\n envelope as {} as TransactionEnvelopeEip1559.TransactionEnvelopeEip1559,\n )\n}\n\nexport declare namespace assert {\n type ErrorType =\n | TransactionEnvelopeEip1559.assert.ErrorType\n | Hex.size.ErrorType\n | Hex.toNumber.ErrorType\n | Hex.slice.ErrorType\n | Blobs.EmptyBlobVersionedHashesError\n | Blobs.InvalidVersionedHashSizeError\n | Blobs.InvalidVersionedHashVersionError\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#TransactionEnvelopeEip4844.TransactionEnvelopeEip4844} from its serialized form.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip4844 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip4844.deserialize('0x03ef0182031184773594008477359400809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c0')\n * // @log: {\n * // @log: blobVersionedHashes: [...],\n * // @log: type: 'eip4844',\n * // @log: nonce: 785n,\n * // @log: maxFeePerGas: 2000000000n,\n * // @log: gas: 1000000n,\n * // @log: to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param serialized - The serialized transaction.\n * @returns Deserialized Transaction Envelope.\n */\nexport function deserialize(\n serialized: Serialized,\n): Compute<TransactionEnvelopeEip4844> {\n const transactionOrWrapperArray = Rlp.toHex(Hex.slice(serialized, 1))\n\n const hasNetworkWrapper = transactionOrWrapperArray.length === 4\n\n const transactionArray = hasNetworkWrapper\n ? transactionOrWrapperArray[0]!\n : transactionOrWrapperArray\n const wrapperArray = hasNetworkWrapper\n ? transactionOrWrapperArray.slice(1)\n : []\n\n const [\n chainId,\n nonce,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gas,\n to,\n value,\n data,\n accessList,\n maxFeePerBlobGas,\n blobVersionedHashes,\n yParity,\n r,\n s,\n ] = transactionArray\n const [blobs, commitments, proofs] = wrapperArray\n\n if (!(transactionArray.length === 11 || transactionArray.length === 14))\n throw new TransactionEnvelope.InvalidSerializedError({\n attributes: {\n chainId,\n nonce,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gas,\n to,\n value,\n data,\n accessList,\n ...(transactionArray.length > 9\n ? {\n yParity,\n r,\n s,\n }\n : {}),\n },\n serialized,\n type,\n })\n\n let transaction = {\n blobVersionedHashes: blobVersionedHashes as Hex.Hex[],\n chainId: Number(chainId),\n type,\n } as TransactionEnvelopeEip4844\n if (Hex.validate(to) && to !== '0x') transaction.to = to\n if (Hex.validate(gas) && gas !== '0x') transaction.gas = BigInt(gas)\n if (Hex.validate(data) && data !== '0x') transaction.data = data\n if (Hex.validate(nonce) && nonce !== '0x') transaction.nonce = BigInt(nonce)\n if (Hex.validate(value) && value !== '0x') transaction.value = BigInt(value)\n if (Hex.validate(maxFeePerBlobGas) && maxFeePerBlobGas !== '0x')\n transaction.maxFeePerBlobGas = BigInt(maxFeePerBlobGas)\n if (Hex.validate(maxFeePerGas) && maxFeePerGas !== '0x')\n transaction.maxFeePerGas = BigInt(maxFeePerGas)\n if (Hex.validate(maxPriorityFeePerGas) && maxPriorityFeePerGas !== '0x')\n transaction.maxPriorityFeePerGas = BigInt(maxPriorityFeePerGas)\n if (accessList?.length !== 0 && accessList !== '0x')\n transaction.accessList = AccessList.fromTupleList(accessList as any)\n if (blobs && commitments && proofs)\n transaction.sidecars = Blobs.toSidecars(blobs as Hex.Hex[], {\n commitments: commitments as Hex.Hex[],\n proofs: proofs as Hex.Hex[],\n })\n\n const signature =\n r && s && yParity\n ? Signature.fromTuple([yParity as Hex.Hex, r as Hex.Hex, s as Hex.Hex])\n : undefined\n if (signature)\n transaction = {\n ...transaction,\n ...signature,\n } as TransactionEnvelopeEip4844\n\n assert(transaction)\n\n return transaction\n}\n\nexport declare namespace deserialize {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an arbitrary transaction object into an EIP-4844 Transaction Envelope.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs, TransactionEnvelopeEip4844, Value } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const blobVersionedHashes = Blobs.toVersionedHashes(blobs, { kzg })\n *\n * const envelope = TransactionEnvelopeEip4844.from({\n * chainId: 1,\n * blobVersionedHashes,\n * maxFeePerBlobGas: Value.fromGwei('3'),\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the transaction envelope.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs, Secp256k1, TransactionEnvelopeEip4844, Value } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const sidecars = Blobs.toSidecars(blobs, { kzg })\n * const blobVersionedHashes = Blobs.sidecarsToVersionedHashes(sidecars)\n *\n * const envelope = TransactionEnvelopeEip4844.from({\n * blobVersionedHashes,\n * chainId: 1,\n * maxFeePerBlobGas: Value.fromGwei('3'),\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip4844.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const envelope_signed = TransactionEnvelopeEip4844.from(envelope, { // [!code focus]\n * sidecars, // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: blobVersionedHashes: [...],\n * // @log: chainId: 1,\n * // @log: maxFeePerBlobGas: 3000000000n,\n * // @log: maxFeePerGas: 10000000000n,\n * // @log: maxPriorityFeePerGas: 1000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip4844',\n * // @log: value: 1000000000000000000n,\n * // @log: r: 125...n,\n * // @log: s: 642...n,\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * It is possible to instantiate an EIP-4844 Transaction Envelope from a {@link ox#TransactionEnvelopeEip4844.Serialized} value.\n *\n * ```ts twoslash\n * import { TransactionEnvelopeEip4844 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip4844.from('0x03f858018203118502540be4008504a817c800809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c08477359400e1a001627c687261b0e7f8638af1112efa8a77e23656f6e7945275b19e9deed80261')\n * // @log: {\n * // @log: blobVersionedHashes: [...],\n * // @log: chainId: 1,\n * // @log: maxFeePerGas: 10000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip4844',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param envelope - The transaction object to convert.\n * @param options - Options.\n * @returns An EIP-4844 Transaction Envelope.\n */\nexport function from<\n const envelope extends\n | UnionPartialBy<TransactionEnvelopeEip4844, 'type'>\n | Serialized,\n const signature extends Signature.Signature | undefined = undefined,\n>(\n envelope:\n | envelope\n | UnionPartialBy<TransactionEnvelopeEip4844, 'type'>\n | Serialized,\n options: from.Options<signature> = {},\n): from.ReturnType<envelope, signature> {\n const { signature } = options\n\n const envelope_ = (\n typeof envelope === 'string' ? deserialize(envelope) : envelope\n ) as TransactionEnvelopeEip4844\n\n assert(envelope_)\n\n return {\n ...envelope_,\n ...(signature ? Signature.from(signature) : {}),\n type: 'eip4844',\n } as never\n}\n\nexport declare namespace from {\n type Options<signature extends Signature.Signature | undefined = undefined> =\n {\n signature?: signature | Signature.Signature | undefined\n }\n\n type ReturnType<\n envelope extends\n | UnionPartialBy<TransactionEnvelopeEip4844, 'type'>\n | Hex.Hex = TransactionEnvelopeEip4844 | Hex.Hex,\n signature extends Signature.Signature | undefined = undefined,\n > = Compute<\n envelope extends Hex.Hex\n ? TransactionEnvelopeEip4844\n : Assign<\n envelope,\n (signature extends Signature.Signature ? Readonly<signature> : {}) & {\n readonly type: 'eip4844'\n }\n >\n >\n\n type ErrorType =\n | deserialize.ErrorType\n | assert.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Returns the payload to sign for a {@link ox#TransactionEnvelopeEip4844.TransactionEnvelopeEip4844}.\n *\n * @example\n * The example below demonstrates how to compute the sign payload which can be used\n * with ECDSA signing utilities like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs, Secp256k1, TransactionEnvelopeEip4844 } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const blobVersionedHashes = Blobs.toVersionedHashes(blobs, { kzg })\n *\n * const envelope = TransactionEnvelopeEip4844.from({\n * blobVersionedHashes,\n * chainId: 1,\n * nonce: 0n,\n * maxFeePerGas: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const payload = TransactionEnvelopeEip4844.getSignPayload(envelope) // [!code focus]\n * // @log: '0x...'\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param envelope - The transaction envelope to get the sign payload for.\n * @returns The sign payload.\n */\nexport function getSignPayload(\n envelope: TransactionEnvelopeEip4844,\n): getSignPayload.ReturnType {\n return hash(envelope, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n type ReturnType = Hex.Hex\n\n type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Hashes a {@link ox#TransactionEnvelopeEip4844.TransactionEnvelopeEip4844}. This is the \"transaction hash\".\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs, TransactionEnvelopeEip4844 } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const blobVersionedHashes = Blobs.toVersionedHashes(blobs, { kzg })\n *\n * const envelope = TransactionEnvelopeEip4844.from({\n * blobVersionedHashes,\n * chainId: 1,\n * nonce: 0n,\n * maxFeePerGas: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const hash = TransactionEnvelopeEip4844.hash(envelope) // [!code focus]\n * ```\n *\n * @param envelope - The EIP-4844 Transaction Envelope to hash.\n * @param options - Options.\n * @returns The hash of the transaction envelope.\n */\nexport function hash<presign extends boolean = false>(\n envelope: TransactionEnvelopeEip4844<presign extends true ? false : true>,\n options: hash.Options<presign> = {},\n): hash.ReturnType {\n const { presign } = options\n return Hash.keccak256(\n serialize({\n ...envelope,\n ...(presign\n ? {\n sidecars: undefined,\n r: undefined,\n s: undefined,\n yParity: undefined,\n v: undefined,\n }\n : {}),\n }),\n )\n}\n\nexport declare namespace hash {\n type Options<presign extends boolean = false> = {\n /** Whether to hash this transaction for signing. @default false */\n presign?: presign | boolean | undefined\n }\n\n type ReturnType = Hex.Hex\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | serialize.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#TransactionEnvelopeEip4844.TransactionEnvelopeEip4844}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs, TransactionEnvelopeEip4844 } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const blobVersionedHashes = Blobs.toVersionedHashes(blobs, { kzg })\n *\n * const envelope = TransactionEnvelopeEip4844.from({\n * blobVersionedHashes,\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const serialized = TransactionEnvelopeEip4844.serialize(envelope) // [!code focus]\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the serialized Transaction Envelope.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Blobs, Secp256k1, TransactionEnvelopeEip4844, Value } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const sidecars = Blobs.toSidecars(blobs, { kzg })\n * const blobVersionedHashes = Blobs.sidecarsToVersionedHashes(blobs)\n *\n * const envelope = TransactionEnvelopeEip4844.from({\n * blobVersionedHashes,\n * chainId: 1,\n * maxFeePerBlobGas: Value.fromGwei('3'),\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip4844.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const serialized = TransactionEnvelopeEip4844.serialize(envelope, { // [!code focus]\n * sidecars, // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n *\n * // ... send `serialized` transaction to JSON-RPC `eth_sendRawTransaction`\n * ```\n *\n * @param envelope - The Transaction Envelope to serialize.\n * @param options - Options.\n * @returns The serialized Transaction Envelope.\n */\nexport function serialize(\n envelope: PartialBy<TransactionEnvelopeEip4844, 'type'>,\n options: serialize.Options = {},\n): Serialized {\n const {\n blobVersionedHashes,\n chainId,\n gas,\n nonce,\n to,\n value,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n accessList,\n data,\n } = envelope\n\n assert(envelope)\n\n const accessTupleList = AccessList.toTupleList(accessList)\n\n const signature = Signature.extract(options.signature || envelope)\n\n const serialized = [\n Hex.fromNumber(chainId),\n nonce ? Hex.fromNumber(nonce) : '0x',\n maxPriorityFeePerGas ? Hex.fromNumber(maxPriorityFeePerGas) : '0x',\n maxFeePerGas ? Hex.fromNumber(maxFeePerGas) : '0x',\n gas ? Hex.fromNumber(gas) : '0x',\n to ?? '0x',\n value ? Hex.fromNumber(value) : '0x',\n data ?? '0x',\n accessTupleList,\n maxFeePerBlobGas ? Hex.fromNumber(maxFeePerBlobGas) : '0x',\n blobVersionedHashes ?? [],\n ...(signature ? Signature.toTuple(signature) : []),\n ] as const\n\n const sidecars = options.sidecars || envelope.sidecars\n const blobs: Hex.Hex[] = []\n const commitments: Hex.Hex[] = []\n const proofs: Hex.Hex[] = []\n if (sidecars)\n for (let i = 0; i < sidecars.length; i++) {\n const { blob, commitment, proof } = sidecars[i]!\n blobs.push(blob)\n commitments.push(commitment)\n proofs.push(proof)\n }\n\n return Hex.concat(\n '0x03',\n sidecars\n ? // If sidecars are provided, envelope turns into a \"network wrapper\":\n Rlp.fromHex([serialized, blobs, commitments, proofs])\n : // Otherwise, standard envelope is used:\n Rlp.fromHex(serialized),\n ) as Serialized\n}\n\nexport declare namespace serialize {\n type Options = {\n /** Signature to append to the serialized Transaction Envelope. */\n signature?: Signature.Signature | undefined\n /** Sidecars to append to the serialized Transaction Envelope. */\n sidecars?: Blobs.BlobSidecars<Hex.Hex> | undefined\n }\n\n type ErrorType =\n | assert.ErrorType\n | Hex.fromNumber.ErrorType\n | Signature.toTuple.ErrorType\n | Hex.concat.ErrorType\n | Rlp.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Converts an {@link ox#TransactionEnvelopeEip4844.TransactionEnvelopeEip4844} to an {@link ox#TransactionEnvelopeEip4844.Rpc}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Blobs, RpcRequest, TransactionEnvelopeEip4844, Value } from 'ox'\n * import { kzg } from './kzg'\n *\n * const blobs = Blobs.from('0xdeadbeef')\n * const blobVersionedHashes = Blobs.toVersionedHashes(blobs, { kzg })\n *\n * const envelope = TransactionEnvelopeEip4844.from({\n * blobVersionedHashes,\n * chainId: 1,\n * nonce: 0n,\n * gas: 21000n,\n * maxFeePerBlobGas: Value.fromGwei('20'),\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: Value.fromEther('1'),\n * })\n *\n * const envelope_rpc = TransactionEnvelopeEip4844.toRpc(envelope) // [!code focus]\n *\n * const request = RpcRequest.from({\n * id: 0,\n * method: 'eth_sendTransaction',\n * params: [envelope_rpc],\n * })\n * ```\n *\n * @param envelope - The EIP-4844 transaction envelope to convert.\n * @returns An RPC-formatted EIP-4844 transaction envelope.\n */\nexport function toRpc(envelope: Omit<TransactionEnvelopeEip4844, 'type'>): Rpc {\n const signature = Signature.extract(envelope)\n\n return {\n ...envelope,\n chainId: Hex.fromNumber(envelope.chainId),\n data: envelope.data ?? envelope.input,\n ...(typeof envelope.gas === 'bigint'\n ? { gas: Hex.fromNumber(envelope.gas) }\n : {}),\n ...(typeof envelope.nonce === 'bigint'\n ? { nonce: Hex.fromNumber(envelope.nonce) }\n : {}),\n ...(typeof envelope.value === 'bigint'\n ? { value: Hex.fromNumber(envelope.value) }\n : {}),\n ...(typeof envelope.maxFeePerBlobGas === 'bigint'\n ? { maxFeePerBlobGas: Hex.fromNumber(envelope.maxFeePerBlobGas) }\n : {}),\n ...(typeof envelope.maxFeePerGas === 'bigint'\n ? { maxFeePerGas: Hex.fromNumber(envelope.maxFeePerGas) }\n : {}),\n ...(typeof envelope.maxPriorityFeePerGas === 'bigint'\n ? { maxPriorityFeePerGas: Hex.fromNumber(envelope.maxPriorityFeePerGas) }\n : {}),\n type: '0x3',\n ...(signature ? Signature.toRpc(signature) : {}),\n } as never\n}\n\nexport declare namespace toRpc {\n export type ErrorType = Signature.extract.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#TransactionEnvelopeEip4844.TransactionEnvelopeEip4844}. Returns `true` if the envelope is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip4844, Value } from 'ox'\n *\n * const valid = TransactionEnvelopeEip4844.assert({\n * blobVersionedHashes: [],\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @log: false\n * ```\n *\n * @param envelope - The transaction envelope to validate.\n */\nexport function validate(\n envelope: PartialBy<TransactionEnvelopeEip4844, 'type'>,\n) {\n try {\n assert(envelope)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type { Assign } from './internal/types.js'\n\nimport type { PartialBy, UnionPartialBy } from './internal/types.js'\n\nimport * as AccessList from './AccessList.js'\nimport * as Address from './Address.js'\nimport * as Authorization from './Authorization.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Rlp from './Rlp.js'\nimport * as Signature from './Signature.js'\nimport * as TransactionEnvelope from './TransactionEnvelope.js'\nimport * as TransactionEnvelopeEip1559 from './TransactionEnvelopeEip1559.js'\nimport type { Compute } from './internal/types.js'\n\nexport type TransactionEnvelopeEip7702<\n signed extends boolean = boolean,\n bigintType = bigint,\n numberType = number,\n type extends string = Type,\n> = Compute<\n TransactionEnvelope.Base<type, signed, bigintType, numberType> & {\n /** EIP-2930 Access List. */\n accessList?: AccessList.AccessList | undefined\n /** EIP-7702 Authorization List. */\n authorizationList: Authorization.ListSigned<bigintType, numberType>\n /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */\n maxFeePerGas?: bigintType | undefined\n /** Max priority fee per gas (in wei). */\n maxPriorityFeePerGas?: bigintType | undefined\n }\n>\n\nexport type Rpc<signed extends boolean = boolean> = TransactionEnvelopeEip7702<\n signed,\n Hex.Hex,\n Hex.Hex,\n '0x4'\n>\n\nexport type Serialized = `${SerializedType}${string}`\n\nexport type Signed = TransactionEnvelopeEip7702<true>\n\nexport const serializedType = '0x04' as const\nexport type SerializedType = typeof serializedType\n\nexport const type = 'eip7702' as const\nexport type Type = typeof type\n\n/**\n * Asserts a {@link ox#TransactionEnvelopeEip7702.TransactionEnvelopeEip7702} is valid.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip7702, Value } from 'ox'\n *\n * TransactionEnvelopeEip7702.assert({\n * authorizationList: [],\n * maxFeePerGas: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @error: FeeCapTooHighError:\n * // @error: The fee cap (`masFeePerGas` = 115792089237316195423570985008687907853269984665640564039457584007913 gwei) cannot be\n * // @error: higher than the maximum allowed value (2^256-1).\n * ```\n *\n * @param envelope - The transaction envelope to assert.\n */\nexport function assert(\n envelope: PartialBy<TransactionEnvelopeEip7702, 'type'>,\n) {\n const { authorizationList } = envelope\n if (authorizationList) {\n for (const authorization of authorizationList) {\n const { address, chainId } = authorization\n if (address) Address.assert(address, { strict: false })\n if (Number(chainId) < 0)\n throw new TransactionEnvelope.InvalidChainIdError({ chainId })\n }\n }\n TransactionEnvelopeEip1559.assert(\n envelope as {} as TransactionEnvelopeEip1559.TransactionEnvelopeEip1559,\n )\n}\n\nexport declare namespace assert {\n type ErrorType =\n | Address.assert.ErrorType\n | TransactionEnvelope.InvalidChainIdError\n | Errors.GlobalErrorType\n}\n\n/**\n * Deserializes a {@link ox#TransactionEnvelopeEip7702.TransactionEnvelopeEip7702} from its serialized form.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip7702 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip7702.deserialize('0x04ef0182031184773594008477359400809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c0')\n * // @log: {\n * // @log: authorizationList: [...],\n * // @log: type: 'eip7702',\n * // @log: nonce: 785n,\n * // @log: maxFeePerGas: 2000000000n,\n * // @log: gas: 1000000n,\n * // @log: to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param serialized - The serialized transaction.\n * @returns Deserialized Transaction Envelope.\n */\nexport function deserialize(\n serialized: Serialized,\n): Compute<TransactionEnvelopeEip7702> {\n const transactionArray = Rlp.toHex(Hex.slice(serialized, 1))\n\n const [\n chainId,\n nonce,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gas,\n to,\n value,\n data,\n accessList,\n authorizationList,\n yParity,\n r,\n s,\n ] = transactionArray as readonly Hex.Hex[]\n\n if (!(transactionArray.length === 10 || transactionArray.length === 13))\n throw new TransactionEnvelope.InvalidSerializedError({\n attributes: {\n chainId,\n nonce,\n maxPriorityFeePerGas,\n maxFeePerGas,\n gas,\n to,\n value,\n data,\n accessList,\n authorizationList,\n ...(transactionArray.length > 9\n ? {\n yParity,\n r,\n s,\n }\n : {}),\n },\n serialized,\n type,\n })\n\n let transaction = {\n chainId: Number(chainId),\n type,\n } as TransactionEnvelopeEip7702\n if (Hex.validate(to) && to !== '0x') transaction.to = to\n if (Hex.validate(gas) && gas !== '0x') transaction.gas = BigInt(gas)\n if (Hex.validate(data) && data !== '0x') transaction.data = data\n if (Hex.validate(nonce) && nonce !== '0x') transaction.nonce = BigInt(nonce)\n if (Hex.validate(value) && value !== '0x') transaction.value = BigInt(value)\n if (Hex.validate(maxFeePerGas) && maxFeePerGas !== '0x')\n transaction.maxFeePerGas = BigInt(maxFeePerGas)\n if (Hex.validate(maxPriorityFeePerGas) && maxPriorityFeePerGas !== '0x')\n transaction.maxPriorityFeePerGas = BigInt(maxPriorityFeePerGas)\n if (accessList!.length !== 0 && accessList !== '0x')\n transaction.accessList = AccessList.fromTupleList(accessList as never)\n if (authorizationList !== '0x')\n transaction.authorizationList = Authorization.fromTupleList(\n authorizationList as never,\n )\n\n const signature =\n r && s && yParity ? Signature.fromTuple([yParity, r, s]) : undefined\n if (signature)\n transaction = {\n ...transaction,\n ...signature,\n } as TransactionEnvelopeEip7702\n\n assert(transaction)\n\n return transaction\n}\n\nexport declare namespace deserialize {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Converts an arbitrary transaction object into an EIP-7702 Transaction Envelope.\n *\n * @example\n * ```ts twoslash\n * import { Authorization, Secp256k1, TransactionEnvelopeEip7702, Value } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * chainId: 1,\n * nonce: 0n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: Authorization.getSignPayload(authorization),\n * privateKey: '0x...',\n * })\n *\n * const authorizationList = [Authorization.from(authorization, { signature })]\n *\n * const envelope = TransactionEnvelopeEip7702.from({ // [!code focus]\n * authorizationList, // [!code focus]\n * chainId: 1, // [!code focus]\n * maxFeePerGas: Value.fromGwei('10'), // [!code focus]\n * maxPriorityFeePerGas: Value.fromGwei('1'), // [!code focus]\n * to: '0x0000000000000000000000000000000000000000', // [!code focus]\n * value: Value.fromEther('1'), // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the transaction envelope.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, TransactionEnvelopeEip7702, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip7702.from({\n * authorizationList: [...],\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * maxPriorityFeePerGas: Value.fromGwei('1'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip7702.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const envelope_signed = TransactionEnvelopeEip7702.from(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: authorizationList: [...],\n * // @log: chainId: 1,\n * // @log: maxFeePerGas: 10000000000n,\n * // @log: maxPriorityFeePerGas: 1000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip7702',\n * // @log: value: 1000000000000000000n,\n * // @log: r: 125...n,\n * // @log: s: 642...n,\n * // @log: yParity: 0,\n * // @log: }\n * ```\n *\n * @example\n * ### From Serialized\n *\n * It is possible to instantiate an EIP-7702 Transaction Envelope from a {@link ox#TransactionEnvelopeEip7702.Serialized} value.\n *\n * ```ts twoslash\n * import { TransactionEnvelopeEip7702 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip7702.from('0x04f858018203118502540be4008504a817c800809470997970c51812dc3a010c7d01b50e0d17dc79c8880de0b6b3a764000080c08477359400e1a001627c687261b0e7f8638af1112efa8a77e23656f6e7945275b19e9deed80261')\n * // @log: {\n * // @log: authorizationList: [...],\n * // @log: chainId: 1,\n * // @log: maxFeePerGas: 10000000000n,\n * // @log: to: '0x0000000000000000000000000000000000000000',\n * // @log: type: 'eip7702',\n * // @log: value: 1000000000000000000n,\n * // @log: }\n * ```\n *\n * @param envelope - The transaction object to convert.\n * @param options - Options.\n * @returns An EIP-7702 Transaction Envelope.\n */\nexport function from<\n const envelope extends\n | UnionPartialBy<TransactionEnvelopeEip7702, 'type'>\n | Serialized,\n const signature extends Signature.Signature | undefined = undefined,\n>(\n envelope:\n | envelope\n | UnionPartialBy<TransactionEnvelopeEip7702, 'type'>\n | Serialized,\n options: from.Options<signature> = {},\n): from.ReturnType<envelope, signature> {\n const { signature } = options\n\n const envelope_ = (\n typeof envelope === 'string' ? deserialize(envelope) : envelope\n ) as TransactionEnvelopeEip7702\n\n assert(envelope_)\n\n return {\n ...envelope_,\n ...(signature ? Signature.from(signature) : {}),\n type: 'eip7702',\n } as never\n}\n\nexport declare namespace from {\n type Options<signature extends Signature.Signature | undefined = undefined> =\n {\n signature?: signature | Signature.Signature | undefined\n }\n\n type ReturnType<\n envelope extends\n | UnionPartialBy<TransactionEnvelopeEip7702, 'type'>\n | Hex.Hex = TransactionEnvelopeEip7702 | Hex.Hex,\n signature extends Signature.Signature | undefined = undefined,\n > = Compute<\n envelope extends Hex.Hex\n ? TransactionEnvelopeEip7702\n : Assign<\n envelope,\n (signature extends Signature.Signature ? Readonly<signature> : {}) & {\n readonly type: 'eip7702'\n }\n >\n >\n\n type ErrorType =\n | deserialize.ErrorType\n | assert.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Returns the payload to sign for a {@link ox#TransactionEnvelopeEip7702.TransactionEnvelopeEip7702}.\n *\n * @example\n * The example below demonstrates how to compute the sign payload which can be used\n * with ECDSA signing utilities like {@link ox#Secp256k1.(sign:function)}.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, TransactionEnvelopeEip7702 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip7702.from({\n * authorizationList: [...],\n * chainId: 1,\n * nonce: 0n,\n * maxFeePerGas: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const payload = TransactionEnvelopeEip7702.getSignPayload(envelope) // [!code focus]\n * // @log: '0x...'\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param envelope - The transaction envelope to get the sign payload for.\n * @returns The sign payload.\n */\nexport function getSignPayload(\n envelope: TransactionEnvelopeEip7702,\n): getSignPayload.ReturnType {\n return hash(envelope, { presign: true })\n}\n\nexport declare namespace getSignPayload {\n type ReturnType = Hex.Hex\n\n type ErrorType = hash.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Hashes a {@link ox#TransactionEnvelopeEip7702.TransactionEnvelopeEip7702}. This is the \"transaction hash\".\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, TransactionEnvelopeEip7702 } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip7702.from({\n * authorizationList: [...],\n * chainId: 1,\n * nonce: 0n,\n * maxFeePerGas: 1000000000n,\n * gas: 21000n,\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip7702.getSignPayload(envelope),\n * privateKey: '0x...'\n * })\n *\n * const envelope_signed = TransactionEnvelopeEip7702.from(envelope, { signature })\n *\n * const hash = TransactionEnvelopeEip7702.hash(envelope_signed) // [!code focus]\n * ```\n *\n * @param envelope - The EIP-7702 Transaction Envelope to hash.\n * @param options - Options.\n * @returns The hash of the transaction envelope.\n */\nexport function hash<presign extends boolean = false>(\n envelope: TransactionEnvelopeEip7702<presign extends true ? false : true>,\n options: hash.Options<presign> = {},\n): hash.ReturnType {\n const { presign } = options\n return Hash.keccak256(\n serialize({\n ...envelope,\n ...(presign\n ? {\n r: undefined,\n s: undefined,\n yParity: undefined,\n }\n : {}),\n }),\n )\n}\n\nexport declare namespace hash {\n type Options<presign extends boolean = false> = {\n /** Whether to hash this transaction for signing. @default false */\n presign?: presign | boolean | undefined\n }\n\n type ReturnType = Hex.Hex\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | serialize.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes a {@link ox#TransactionEnvelopeEip7702.TransactionEnvelopeEip7702}.\n *\n * @example\n * ```ts twoslash\n * // @noErrors\n * import { Authorization, Secp256k1, TransactionEnvelopeEip7702, Value } from 'ox'\n *\n * const authorization = Authorization.from({\n * address: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * chainId: 1,\n * nonce: 0n,\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: Authorization.getSignPayload(authorization),\n * privateKey: '0x...',\n * })\n *\n * const authorizationList = [Authorization.from(authorization, { signature })]\n *\n * const envelope = TransactionEnvelopeEip7702.from({\n * authorizationList,\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const serialized = TransactionEnvelopeEip7702.serialize(envelope) // [!code focus]\n * ```\n *\n * @example\n * ### Attaching Signatures\n *\n * It is possible to attach a `signature` to the serialized Transaction Envelope.\n *\n * ```ts twoslash\n * // @noErrors\n * import { Secp256k1, TransactionEnvelopeEip7702, Value } from 'ox'\n *\n * const envelope = TransactionEnvelopeEip7702.from({\n * authorizationList: [...],\n * chainId: 1,\n * maxFeePerGas: Value.fromGwei('10'),\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n *\n * const signature = Secp256k1.sign({\n * payload: TransactionEnvelopeEip7702.getSignPayload(envelope),\n * privateKey: '0x...',\n * })\n *\n * const serialized = TransactionEnvelopeEip7702.serialize(envelope, { // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n *\n * // ... send `serialized` transaction to JSON-RPC `eth_sendRawTransaction`\n * ```\n *\n * @param envelope - The Transaction Envelope to serialize.\n * @param options - Options.\n * @returns The serialized Transaction Envelope.\n */\nexport function serialize(\n envelope: PartialBy<TransactionEnvelopeEip7702, 'type'>,\n options: serialize.Options = {},\n): Serialized {\n const {\n authorizationList,\n chainId,\n gas,\n nonce,\n to,\n value,\n maxFeePerGas,\n maxPriorityFeePerGas,\n accessList,\n data,\n input,\n } = envelope\n\n assert(envelope)\n\n const accessTupleList = AccessList.toTupleList(accessList)\n const authorizationTupleList = Authorization.toTupleList(authorizationList)\n\n const signature = Signature.extract(options.signature || envelope)\n\n const serialized = [\n Hex.fromNumber(chainId),\n nonce ? Hex.fromNumber(nonce) : '0x',\n maxPriorityFeePerGas ? Hex.fromNumber(maxPriorityFeePerGas) : '0x',\n maxFeePerGas ? Hex.fromNumber(maxFeePerGas) : '0x',\n gas ? Hex.fromNumber(gas) : '0x',\n to ?? '0x',\n value ? Hex.fromNumber(value) : '0x',\n data ?? input ?? '0x',\n accessTupleList,\n authorizationTupleList,\n ...(signature ? Signature.toTuple(signature) : []),\n ]\n\n return Hex.concat(serializedType, Rlp.fromHex(serialized)) as Serialized\n}\n\nexport declare namespace serialize {\n type Options = {\n /** Signature to append to the serialized Transaction Envelope. */\n signature?: Signature.Signature | undefined\n }\n\n type ErrorType =\n | assert.ErrorType\n | Hex.fromNumber.ErrorType\n | Signature.toTuple.ErrorType\n | Hex.concat.ErrorType\n | Rlp.fromHex.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Validates a {@link ox#TransactionEnvelopeEip7702.TransactionEnvelopeEip7702}. Returns `true` if the envelope is valid, `false` otherwise.\n *\n * @example\n * ```ts twoslash\n * import { TransactionEnvelopeEip7702, Value } from 'ox'\n *\n * const valid = TransactionEnvelopeEip7702.validate({\n * authorizationList: [],\n * maxFeePerGas: 2n ** 256n - 1n + 1n,\n * chainId: 1,\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('1'),\n * })\n * // @log: false\n * ```\n *\n * @param envelope - The transaction envelope to validate.\n */\nexport function validate(\n envelope: PartialBy<TransactionEnvelopeEip7702, 'type'>,\n) {\n try {\n assert(envelope)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = Errors.GlobalErrorType\n}\n", "import type * as Address from './Address.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport * as Log from './Log.js'\nimport type { Compute } from './internal/types.js'\n\n/** An Transaction Receipt as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.yaml). */\nexport type TransactionReceipt<\n status = Status,\n type = Type,\n bigintType = bigint,\n numberType = number,\n> = Compute<{\n /** The actual value per gas deducted from the sender's account for blob gas. Only specified for blob transactions as defined by EIP-4844. */\n blobGasPrice?: bigintType | undefined\n /** The amount of blob gas used. Only specified for blob transactions as defined by EIP-4844. */\n blobGasUsed?: bigintType | undefined\n /** Hash of block containing this transaction */\n blockHash: Hex.Hex\n /** Number of block containing this transaction */\n blockNumber: bigintType\n /** Address of new contract or `null` if no contract was created */\n contractAddress?: Address.Address | null | undefined\n /** Gas used by this and all preceding transactions in this block */\n cumulativeGasUsed: bigintType\n /** Pre-London, it is equal to the transaction's gasPrice. Post-London, it is equal to the actual gas price paid for inclusion. */\n effectiveGasPrice: bigintType\n /** Transaction sender */\n from: Address.Address\n /** Gas used by this transaction */\n gasUsed: bigintType\n /** List of log objects generated by this transaction */\n logs: Log.Log<false, bigintType, numberType>[]\n /** Logs bloom filter */\n logsBloom: Hex.Hex\n /** The post-transaction state root. Only specified for transactions included before the Byzantium upgrade. */\n root?: Hex.Hex | undefined\n /** `success` if this transaction was successful or `reverted` if it failed */\n status: status\n /** Transaction recipient or `null` if deploying a contract */\n to: Address.Address | null\n /** Hash of this transaction */\n transactionHash: Hex.Hex\n /** Index of this transaction in the block */\n transactionIndex: numberType\n /** Transaction type */\n type: type\n}>\n\n/** An RPC Transaction Receipt as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.yaml). */\nexport type Rpc = TransactionReceipt<RpcStatus, RpcType, Hex.Hex, Hex.Hex>\n\n/**\n * Union of Transaction Receipt statuses.\n *\n * - `success`\n * - `reverted`\n */\nexport type Status = 'success' | 'reverted'\n\n/**\n * Union of RPC Transaction Receipt statuses.\n *\n * - `0x0`\n * - `0x1`\n */\nexport type RpcStatus = '0x0' | '0x1'\n\n/**\n * Union of Transaction Receipt types.\n *\n * - `legacy`\n * - `eip1559`\n * - `eip2930`\n * - `eip4844`\n * - `eip7702`\n * - any other string\n */\nexport type Type =\n | 'legacy'\n | 'eip1559'\n | 'eip2930'\n | 'eip4844'\n | 'eip7702'\n | (string & {})\n\n/**\n * Union of RPC Transaction Receipt types.\n *\n * - `0x0`: legacy transactions\n * - `0x1`: EIP-1559 transactions\n * - `0x2`: EIP-2930 transactions\n * - `0x3`: EIP-4844 transactions\n * - `0x4`: EIP-7702 transactions\n * - any other string\n */\nexport type RpcType = '0x0' | '0x1' | '0x2' | '0x3' | '0x4' | (string & {})\n\n/** RPC status to status mapping. */\nexport const fromRpcStatus = {\n '0x0': 'reverted',\n '0x1': 'success',\n} as const\n\n/** Status to RPC status mapping. */\nexport const toRpcStatus = {\n reverted: '0x0',\n success: '0x1',\n} as const\n\n/** RPC type to type mapping. */\nexport const fromRpcType = {\n '0x0': 'legacy',\n '0x1': 'eip2930',\n '0x2': 'eip1559',\n '0x3': 'eip4844',\n '0x4': 'eip7702',\n} as const\n\n/** Type to RPC type mapping. */\nexport const toRpcType = {\n legacy: '0x0',\n eip2930: '0x1',\n eip1559: '0x2',\n eip4844: '0x3',\n eip7702: '0x4',\n} as const\n\n/**\n * Converts a {@link ox#TransactionReceipt.Rpc} to an {@link ox#TransactionReceipt.TransactionReceipt}.\n *\n * @example\n * ```ts twoslash\n * import { TransactionReceipt } from 'ox'\n *\n * const receipt = TransactionReceipt.fromRpc({\n * blobGasPrice: '0x42069',\n * blobGasUsed: '0x1337',\n * blockHash:\n * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',\n * blockNumber: '0x12f296f',\n * contractAddress: null,\n * cumulativeGasUsed: '0x82515',\n * effectiveGasPrice: '0x21c2f6c09',\n * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',\n * gasUsed: '0x2abba',\n * logs: [],\n * logsBloom:\n * '0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000',\n * status: '0x1',\n * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',\n * transactionHash:\n * '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',\n * transactionIndex: '0x2',\n * type: '0x2',\n * })\n * // @log: {\n * // @log: blobGasPrice: 270441n,\n * // @log: blobGasUsed: 4919n,\n * // @log: blockHash: \"0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b\",\n * // @log: blockNumber: 19868015n,\n * // @log: contractAddress: null,\n * // @log: cumulativeGasUsed: 533781n,\n * // @log: effectiveGasPrice: 9062804489n,\n * // @log: from: \"0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6\",\n * // @log: gasUsed: 175034n,\n * // @log: logs: [],\n * // @log: logsBloom: \"0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000\",\n * // @log: root: undefined,\n * // @log: status: \"success\",\n * // @log: to: \"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",\n * // @log: transactionHash: \"0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0\",\n * // @log: transactionIndex: 2,\n * // @log: type: \"eip1559\",\n * // @log: }\n * ```\n *\n * @example\n * ### End-to-end\n *\n * Below is an example of how to use the `TransactionReceipt.fromRpc` method to convert an RPC transaction receipt to a {@link ox#TransactionReceipt.TransactionReceipt} object.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { TransactionReceipt } from 'ox'\n *\n * const receipt = await window.ethereum!\n * .request({\n * method: 'eth_getTransactionReceipt',\n * params: [\n * '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',\n * ],\n * })\n * .then(TransactionReceipt.fromRpc) // [!code hl]\n * // @log: {\n * // @log: blobGasPrice: 270441n,\n * // @log: blobGasUsed: 4919n,\n * // @log: blockHash: \"0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b\",\n * // @log: blockNumber: 19868015n,\n * // @log: contractAddress: null,\n * // @log: cumulativeGasUsed: 533781n,\n * // @log: effectiveGasPrice: 9062804489n,\n * // @log: from: \"0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6\",\n * // @log: gasUsed: 175034n,\n * // @log: logs: [],\n * // @log: logsBloom: \"0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000\",\n * // @log: root: undefined,\n * // @log: status: \"success\",\n * // @log: to: \"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",\n * // @log: transactionHash: \"0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0\",\n * // @log: transactionIndex: 2,\n * // @log: type: \"eip1559\",\n * // @log: }\n * ```\n *\n * :::note\n *\n * For simplicity, the above example uses `window.ethereum.request`, but you can use any\n * type of JSON-RPC interface.\n *\n * :::\n *\n * @param receipt - The RPC receipt to convert.\n * @returns An instantiated {@link ox#TransactionReceipt.TransactionReceipt}.\n */\nexport function fromRpc<const receipt extends Rpc | null>(\n receipt: receipt | Rpc | null,\n): receipt extends Rpc ? TransactionReceipt : null {\n if (!receipt) return null as never\n\n return {\n ...receipt,\n blobGasPrice: receipt.blobGasPrice\n ? BigInt(receipt.blobGasPrice)\n : undefined,\n blobGasUsed: receipt.blobGasUsed ? BigInt(receipt.blobGasUsed) : undefined,\n blockNumber: BigInt(receipt.blockNumber ?? 0n),\n cumulativeGasUsed: BigInt(receipt.cumulativeGasUsed ?? 0n),\n effectiveGasPrice: BigInt(receipt.effectiveGasPrice ?? 0n),\n gasUsed: BigInt(receipt.gasUsed ?? 0n),\n logs: receipt.logs.map((log) => Log.fromRpc(log, { pending: false })),\n status: fromRpcStatus[receipt.status],\n transactionIndex: Number(receipt.transactionIndex ?? 0),\n type: (fromRpcType as any)[receipt.type] || receipt.type,\n } as never\n}\n\nexport declare namespace fromRpc {\n export type ErrorType = Log.fromRpc.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Converts a {@link ox#TransactionReceipt.TransactionReceipt} to a {@link ox#TransactionReceipt.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { TransactionReceipt } from 'ox'\n *\n * const receipt = TransactionReceipt.toRpc({\n * blobGasPrice: 270441n,\n * blobGasUsed: 4919n,\n * blockHash:\n * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',\n * blockNumber: 19868015n,\n * contractAddress: null,\n * cumulativeGasUsed: 533781n,\n * effectiveGasPrice: 9062804489n,\n * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',\n * gasUsed: 175034n,\n * logs: [],\n * logsBloom:\n * '0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000',\n * root: undefined,\n * status: 'success',\n * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',\n * transactionHash:\n * '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',\n * transactionIndex: 2,\n * type: 'eip1559',\n * })\n * // @log: {\n * // @log: blobGasPrice: \"0x042069\",\n * // @log: blobGasUsed: \"0x1337\",\n * // @log: blockHash: \"0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b\",\n * // @log: blockNumber: \"0x012f296f\",\n * // @log: contractAddress: null,\n * // @log: cumulativeGasUsed: \"0x082515\",\n * // @log: effectiveGasPrice: \"0x021c2f6c09\",\n * // @log: from: \"0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6\",\n * // @log: gasUsed: \"0x02abba\",\n * // @log: logs: [],\n * // @log: logsBloom: \"0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000\",\n * // @log: root: undefined,\n * // @log: status: \"0x1\",\n * // @log: to: \"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\",\n * // @log: transactionHash: \"0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0\",\n * // @log: transactionIndex: \"0x02\",\n * // @log: type: \"eip1559\",\n * // @log: }\n * ```\n *\n * @param receipt - The receipt to convert.\n * @returns An RPC receipt.\n */\nexport function toRpc(receipt: TransactionReceipt): Rpc {\n return {\n blobGasPrice: receipt.blobGasPrice\n ? Hex.fromNumber(receipt.blobGasPrice)\n : undefined,\n blobGasUsed: receipt.blobGasUsed\n ? Hex.fromNumber(receipt.blobGasUsed)\n : undefined,\n blockHash: receipt.blockHash,\n blockNumber: Hex.fromNumber(receipt.blockNumber),\n contractAddress: receipt.contractAddress,\n cumulativeGasUsed: Hex.fromNumber(receipt.cumulativeGasUsed),\n effectiveGasPrice: Hex.fromNumber(receipt.effectiveGasPrice),\n from: receipt.from,\n gasUsed: Hex.fromNumber(receipt.gasUsed),\n logs: receipt.logs.map(Log.toRpc as never),\n logsBloom: receipt.logsBloom,\n root: receipt.root,\n status: toRpcStatus[receipt.status],\n to: receipt.to,\n transactionHash: receipt.transactionHash,\n transactionIndex: Hex.fromNumber(receipt.transactionIndex),\n type: (toRpcType as any)[receipt.type] ?? receipt.type,\n }\n}\n\nexport declare namespace toRpc {\n export type ErrorType = Hex.fromNumber.ErrorType | Errors.GlobalErrorType\n}\n", "import type * as AccessList from './AccessList.js'\nimport type * as Address from './Address.js'\nimport * as Authorization from './Authorization.js'\nimport type * as Errors from './Errors.js'\nimport * as Hex from './Hex.js'\nimport type { Compute } from './internal/types.js'\n\n/** A Transaction Request that is generic to all transaction types, as defined in the [Execution API specification](https://github.com/ethereum/execution-apis/blob/4aca1d7a3e5aab24c8f6437131289ad386944eaa/src/schemas/transaction.yaml#L358-L423). */\nexport type TransactionRequest<\n bigintType = bigint,\n numberType = number,\n type extends string = string,\n> = Compute<{\n /** EIP-2930 Access List. */\n accessList?: AccessList.AccessList | undefined\n /** EIP-7702 Authorization List. */\n authorizationList?:\n | Authorization.ListSigned<bigintType, numberType>\n | undefined\n /** Versioned hashes of blobs to be included in the transaction. */\n blobVersionedHashes?: readonly Hex.Hex[]\n /** Raw blob data. */\n blobs?: readonly Hex.Hex[] | undefined\n /** EIP-155 Chain ID. */\n chainId?: numberType | undefined\n /** Contract code or a hashed method call with encoded args */\n data?: Hex.Hex | undefined\n /** @alias `data` – added for TransactionEnvelope - Transaction compatibility. */\n input?: Hex.Hex | undefined\n /** Sender of the transaction. */\n from?: Address.Address | undefined\n /** Gas provided for transaction execution */\n gas?: bigintType | undefined\n /** Base fee per gas. */\n gasPrice?: bigintType | undefined\n /** Maximum total fee per gas sender is willing to pay for blob gas (in wei). */\n maxFeePerBlobGas?: bigintType | undefined\n /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */\n maxFeePerGas?: bigintType | undefined\n /** Max priority fee per gas (in wei). */\n maxPriorityFeePerGas?: bigintType | undefined\n /** Unique number identifying this transaction */\n nonce?: bigintType | undefined\n /** Transaction recipient */\n to?: Address.Address | null | undefined\n /** Transaction type */\n type?: type | undefined\n /** Value in wei sent with this transaction */\n value?: bigintType | undefined\n}>\n\n/** RPC representation of a {@link ox#TransactionRequest.TransactionRequest}. */\nexport type Rpc = TransactionRequest<Hex.Hex, Hex.Hex, string>\n\n/**\n * Converts a {@link ox#TransactionRequest.TransactionRequest} to a {@link ox#TransactionRequest.Rpc}.\n *\n * @example\n * ```ts twoslash\n * import { TransactionRequest, Value } from 'ox'\n *\n * const request = TransactionRequest.toRpc({\n * to: '0x0000000000000000000000000000000000000000',\n * value: Value.fromEther('0.01'),\n * })\n * ```\n *\n * @example\n * ### Using with a Provider\n *\n * You can use {@link ox#Provider.(from:function)} to instantiate an EIP-1193 Provider and\n * send a transaction to the Wallet using the `eth_sendTransaction` method.\n *\n * ```ts twoslash\n * import 'ox/window'\n * import { Provider, TransactionRequest, Value } from 'ox'\n *\n * const provider = Provider.from(window.ethereum!)\n *\n * const request = TransactionRequest.toRpc({\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: Value.fromEther('0.01'),\n * })\n *\n * const hash = await provider.request({ // [!code focus]\n * method: 'eth_sendTransaction', // [!code focus]\n * params: [request], // [!code focus]\n * }) // [!code focus]\n * ```\n *\n * @param request - The request to convert.\n * @returns An RPC request.\n */\nexport function toRpc(request: TransactionRequest): Rpc {\n const request_rpc: Rpc = {}\n\n if (typeof request.accessList !== 'undefined')\n request_rpc.accessList = request.accessList\n if (typeof request.authorizationList !== 'undefined')\n request_rpc.authorizationList = Authorization.toRpcList(\n request.authorizationList,\n )\n if (typeof request.blobVersionedHashes !== 'undefined')\n request_rpc.blobVersionedHashes = request.blobVersionedHashes\n if (typeof request.blobs !== 'undefined') request_rpc.blobs = request.blobs\n if (typeof request.chainId !== 'undefined')\n request_rpc.chainId = Hex.fromNumber(request.chainId)\n if (typeof request.data !== 'undefined') {\n request_rpc.data = request.data\n request_rpc.input = request.data\n } else if (typeof request.input !== 'undefined') {\n request_rpc.data = request.input\n request_rpc.input = request.input\n }\n if (typeof request.from !== 'undefined') request_rpc.from = request.from\n if (typeof request.gas !== 'undefined')\n request_rpc.gas = Hex.fromNumber(request.gas)\n if (typeof request.gasPrice !== 'undefined')\n request_rpc.gasPrice = Hex.fromNumber(request.gasPrice)\n if (typeof request.maxFeePerBlobGas !== 'undefined')\n request_rpc.maxFeePerBlobGas = Hex.fromNumber(request.maxFeePerBlobGas)\n if (typeof request.maxFeePerGas !== 'undefined')\n request_rpc.maxFeePerGas = Hex.fromNumber(request.maxFeePerGas)\n if (typeof request.maxPriorityFeePerGas !== 'undefined')\n request_rpc.maxPriorityFeePerGas = Hex.fromNumber(\n request.maxPriorityFeePerGas,\n )\n if (typeof request.maxPriorityFeePerGas !== 'undefined')\n request_rpc.maxPriorityFeePerGas = Hex.fromNumber(\n request.maxPriorityFeePerGas,\n )\n if (typeof request.nonce !== 'undefined')\n request_rpc.nonce = Hex.fromNumber(request.nonce)\n if (typeof request.to !== 'undefined') request_rpc.to = request.to\n if (typeof request.type !== 'undefined') request_rpc.type = request.type\n if (typeof request.value !== 'undefined')\n request_rpc.value = Hex.fromNumber(request.value)\n\n return request_rpc\n}\n\nexport declare namespace toRpc {\n export type ErrorType =\n | Authorization.toRpcList.ErrorType\n | Hex.fromNumber.ErrorType\n | Errors.GlobalErrorType\n}\n", "import type * as abitype from 'abitype'\nimport * as AbiParameters from './AbiParameters.js'\nimport * as Address from './Address.js'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as Json from './Json.js'\nimport * as Solidity from './Solidity.js'\nimport type { Compute } from './internal/types.js'\n\nexport type TypedData = abitype.TypedData\nexport type Domain = abitype.TypedDataDomain\nexport type Parameter = abitype.TypedDataParameter\n\n// TODO: Make reusable for Viem?\nexport type Definition<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n ///\n primaryTypes = typedData extends TypedData ? keyof typedData : string,\n> = primaryType extends 'EIP712Domain'\n ? EIP712DomainDefinition<typedData, primaryType>\n : MessageDefinition<typedData, primaryType, primaryTypes>\n\nexport type EIP712DomainDefinition<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends 'EIP712Domain' = 'EIP712Domain',\n ///\n schema extends Record<string, unknown> = typedData extends TypedData\n ? abitype.TypedDataToPrimitiveTypes<typedData>\n : Record<string, unknown>,\n> = {\n types?: typedData | undefined\n} & {\n primaryType:\n | 'EIP712Domain'\n | (primaryType extends 'EIP712Domain' ? primaryType : never)\n domain: schema extends { EIP712Domain: infer domain }\n ? domain\n : Compute<Domain>\n message?: undefined\n}\n\nexport type MessageDefinition<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends keyof typedData = keyof typedData,\n ///\n primaryTypes = typedData extends TypedData ? keyof typedData : string,\n schema extends Record<string, unknown> = typedData extends TypedData\n ? abitype.TypedDataToPrimitiveTypes<typedData>\n : Record<string, unknown>,\n message = schema[primaryType extends keyof schema\n ? primaryType\n : keyof schema],\n> = {\n types: typedData\n} & {\n primaryType:\n | primaryTypes // show all values\n | (primaryType extends primaryTypes ? primaryType : never) // infer value\n domain?:\n | (schema extends { EIP712Domain: infer domain } ? domain : Compute<Domain>)\n | undefined\n message: { [_: string]: any } extends message // Check if message was inferred\n ? Record<string, unknown>\n : message\n}\n\n/**\n * Asserts that [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) is valid.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.assert({\n * domain: {\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * },\n * primaryType: 'Foo',\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * message: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * ```\n *\n * @param value - The Typed Data to validate.\n */\nexport function assert<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(value: assert.Value<typedData, primaryType>): void {\n const { domain, message, primaryType, types } =\n value as unknown as assert.Value\n\n const validateData = (\n struct: readonly Parameter[],\n data: Record<string, unknown>,\n ) => {\n for (const param of struct) {\n const { name, type } = param\n const value = data[name]\n\n const integerMatch = type.match(Solidity.integerRegex)\n if (\n integerMatch &&\n (typeof value === 'number' || typeof value === 'bigint')\n ) {\n const [, base, size_] = integerMatch\n // If number cannot be cast to a sized hex value, it is out of range\n // and will throw.\n Hex.fromNumber(value, {\n signed: base === 'int',\n size: Number.parseInt(size_ ?? '') / 8,\n })\n }\n\n if (\n type === 'address' &&\n typeof value === 'string' &&\n !Address.validate(value)\n )\n throw new Address.InvalidAddressError({\n address: value,\n cause: new Address.InvalidInputError(),\n })\n\n const bytesMatch = type.match(Solidity.bytesRegex)\n if (bytesMatch) {\n const [, size] = bytesMatch\n if (size && Hex.size(value as Hex.Hex) !== Number.parseInt(size))\n throw new BytesSizeMismatchError({\n expectedSize: Number.parseInt(size),\n givenSize: Hex.size(value as Hex.Hex),\n })\n }\n\n const struct = types[type]\n if (struct) {\n validateReference(type)\n validateData(struct, value as Record<string, unknown>)\n }\n }\n }\n\n // Validate domain types.\n if (types.EIP712Domain && domain) {\n if (typeof domain !== 'object') throw new InvalidDomainError({ domain })\n validateData(types.EIP712Domain, domain)\n }\n\n // Validate message types.\n if (primaryType !== 'EIP712Domain') {\n if (types[primaryType]) validateData(types[primaryType], message)\n else throw new InvalidPrimaryTypeError({ primaryType, types })\n }\n}\n\nexport declare namespace assert {\n type Value<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n > = Definition<typedData, primaryType>\n\n type ErrorType =\n | Address.InvalidAddressError\n | BytesSizeMismatchError\n | InvalidPrimaryTypeError\n | Hex.fromNumber.ErrorType\n | Hex.size.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Creates [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) [`domainSeparator`](https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator) for the provided domain.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.domainSeparator({\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * })\n * // @log: '0x9911ee4f58a7059a8f5385248040e6984d80e2c849500fe6a4d11c4fa98c2af3'\n * ```\n *\n * @param domain - The domain for which to create the domain separator.\n * @returns The domain separator.\n */\nexport function domainSeparator(domain: Domain): Hex.Hex {\n return hashDomain({\n domain,\n })\n}\n\nexport declare namespace domainSeparator {\n type ErrorType = hashDomain.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Encodes typed data in [EIP-712 format](https://eips.ethereum.org/EIPS/eip-712): `0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)`.\n *\n * @example\n * ```ts twoslash\n * import { TypedData, Hash } from 'ox'\n *\n * const data = TypedData.encode({ // [!code focus:33]\n * domain: {\n * name: 'Ether Mail',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0x0000000000000000000000000000000000000000',\n * },\n * types: {\n * Person: [\n * { name: 'name', type: 'string' },\n * { name: 'wallet', type: 'address' },\n * ],\n * Mail: [\n * { name: 'from', type: 'Person' },\n * { name: 'to', type: 'Person' },\n * { name: 'contents', type: 'string' },\n * ],\n * },\n * primaryType: 'Mail',\n * message: {\n * from: {\n * name: 'Cow',\n * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n * },\n * to: {\n * name: 'Bob',\n * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n * },\n * contents: 'Hello, Bob!',\n * },\n * })\n * // @log: '0x19012fdf3441fcaf4f30c7e16292b258a5d7054a4e2e00dbd7b7d2f467f2b8fb9413c52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e'\n * // @log: (0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message))\n *\n * const hash = Hash.keccak256(data)\n * ```\n *\n * @param value - The Typed Data to encode.\n * @returns The encoded Typed Data.\n */\nexport function encode<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(value: encode.Value<typedData, primaryType>): Hex.Hex {\n const { domain = {}, message, primaryType } = value as encode.Value\n\n const types = {\n EIP712Domain: extractEip712DomainTypes(domain),\n ...value.types,\n } as TypedData\n\n // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc\n // as we can't statically check this with TypeScript.\n assert({\n domain,\n message,\n primaryType,\n types,\n })\n\n // Typed Data Format: `0x19 ‖ 0x01 ‖ domainSeparator ‖ hashStruct(message)`\n const parts: Hex.Hex[] = ['0x19', '0x01']\n if (domain)\n parts.push(\n hashDomain({\n domain,\n types,\n }),\n )\n if (primaryType !== 'EIP712Domain')\n parts.push(\n hashStruct({\n data: message,\n primaryType,\n types,\n }),\n )\n\n return Hex.concat(...parts)\n}\n\nexport declare namespace encode {\n type Value<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n > = Definition<typedData, primaryType>\n\n type ErrorType =\n | extractEip712DomainTypes.ErrorType\n | hashDomain.ErrorType\n | hashStruct.ErrorType\n | assert.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Encodes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema for the provided primaryType.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.encodeType({\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * primaryType: 'Foo',\n * })\n * // @log: 'Foo(address address,string name,string foo)'\n * ```\n *\n * @param value - The Typed Data schema.\n * @returns The encoded type.\n */\nexport function encodeType(value: encodeType.Value): string {\n const { primaryType, types } = value\n\n let result = ''\n const unsortedDeps = findTypeDependencies({ primaryType, types })\n unsortedDeps.delete(primaryType)\n\n const deps = [primaryType, ...Array.from(unsortedDeps).sort()]\n for (const type of deps) {\n result += `${type}(${(types[type] ?? [])\n .map(({ name, type: t }) => `${t} ${name}`)\n .join(',')})`\n }\n\n return result\n}\n\nexport declare namespace encodeType {\n type Value = {\n primaryType: string\n types: TypedData\n }\n\n type ErrorType = findTypeDependencies.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Gets [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema for EIP-721 domain.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.extractEip712DomainTypes({\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * })\n * // @log: [\n * // @log: { 'name': 'name', 'type': 'string' },\n * // @log: { 'name': 'version', 'type': 'string' },\n * // @log: { 'name': 'chainId', 'type': 'uint256' },\n * // @log: { 'name': 'verifyingContract', 'type': 'address' },\n * // @log: ]\n * ```\n *\n * @param domain - The EIP-712 domain.\n * @returns The EIP-712 domain schema.\n */\nexport function extractEip712DomainTypes(\n domain: Domain | undefined,\n): Parameter[] {\n return [\n typeof domain?.name === 'string' && { name: 'name', type: 'string' },\n domain?.version && { name: 'version', type: 'string' },\n typeof domain?.chainId === 'number' && {\n name: 'chainId',\n type: 'uint256',\n },\n domain?.verifyingContract && {\n name: 'verifyingContract',\n type: 'address',\n },\n domain?.salt && { name: 'salt', type: 'bytes32' },\n ].filter(Boolean) as Parameter[]\n}\n\nexport declare namespace extractEip712DomainTypes {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Gets the payload to use for signing typed data in [EIP-712 format](https://eips.ethereum.org/EIPS/eip-712).\n *\n * @example\n * ```ts twoslash\n * import { Secp256k1, TypedData, Hash } from 'ox'\n *\n * const payload = TypedData.getSignPayload({ // [!code focus:99]\n * domain: {\n * name: 'Ether Mail',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0x0000000000000000000000000000000000000000',\n * },\n * types: {\n * Person: [\n * { name: 'name', type: 'string' },\n * { name: 'wallet', type: 'address' },\n * ],\n * Mail: [\n * { name: 'from', type: 'Person' },\n * { name: 'to', type: 'Person' },\n * { name: 'contents', type: 'string' },\n * ],\n * },\n * primaryType: 'Mail',\n * message: {\n * from: {\n * name: 'Cow',\n * wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',\n * },\n * to: {\n * name: 'Bob',\n * wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',\n * },\n * contents: 'Hello, Bob!',\n * },\n * })\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param value - The typed data to get the sign payload for.\n * @returns The payload to use for signing.\n */\nexport function getSignPayload<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(value: encode.Value<typedData, primaryType>): Hex.Hex {\n return Hash.keccak256(encode(value))\n}\n\nexport declare namespace getSignPayload {\n type ErrorType =\n | Hash.keccak256.ErrorType\n | encode.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Hashes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) domain.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.hashDomain({\n * domain: {\n * name: 'Ether Mail',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0x0000000000000000000000000000000000000000',\n * },\n * })\n * // @log: '0x6192106f129ce05c9075d319c1fa6ea9b3ae37cbd0c1ef92e2be7137bb07baa1'\n * ```\n *\n * @param value - The Typed Data domain and types.\n * @returns The hashed domain.\n */\nexport function hashDomain(value: hashDomain.Value): Hex.Hex {\n const { domain, types } = value\n return hashStruct({\n data: domain,\n primaryType: 'EIP712Domain',\n types: {\n ...types,\n EIP712Domain: types?.EIP712Domain || extractEip712DomainTypes(domain),\n },\n })\n}\n\nexport declare namespace hashDomain {\n type Value = {\n /** The Typed Data domain. */\n domain: Domain\n /** The Typed Data types. */\n types?:\n | {\n EIP712Domain?: readonly Parameter[] | undefined\n [key: string]: readonly Parameter[] | undefined\n }\n | undefined\n }\n\n type ErrorType = hashStruct.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Hashes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) struct.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.hashStruct({\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * primaryType: 'Foo',\n * data: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * // @log: '0x996fb3b6d48c50312d69abdd4c1b6fb02057c85aa86bb8d04c6f023326a168ce'\n * ```\n *\n * @param value - The Typed Data struct to hash.\n * @returns The hashed Typed Data struct.\n */\nexport function hashStruct(value: hashStruct.Value): Hex.Hex {\n const { data, primaryType, types } = value\n const encoded = encodeData({\n data,\n primaryType,\n types,\n })\n return Hash.keccak256(encoded)\n}\n\nexport declare namespace hashStruct {\n type Value = {\n /** The Typed Data struct to hash. */\n data: Record<string, unknown>\n /** The primary type of the Typed Data struct. */\n primaryType: string\n /** The types of the Typed Data struct. */\n types: TypedData\n }\n\n type ErrorType =\n | encodeData.ErrorType\n | Hash.keccak256.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Serializes [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) schema into string.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * TypedData.serialize({\n * domain: {\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * },\n * primaryType: 'Foo',\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * message: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * // @log: \"{\"domain\":{},\"message\":{\"address\":\"0xb9cab4f0e46f7f6b1024b5a7463734fa68e633f9\",\"name\":\"jxom\",\"foo\":\"0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9\"},\"primaryType\":\"Foo\",\"types\":{\"Foo\":[{\"name\":\"address\",\"type\":\"address\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"foo\",\"type\":\"string\"}]}}\"\n * ```\n *\n * @param value - The Typed Data schema to serialize.\n * @returns The serialized Typed Data schema. w\n */\nexport function serialize<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(value: serialize.Value<typedData, primaryType>): string {\n const {\n domain: domain_,\n message: message_,\n primaryType,\n types,\n } = value as unknown as serialize.Value\n\n const normalizeData = (\n struct: readonly Parameter[],\n value: Record<string, unknown>,\n ) => {\n const data = { ...value }\n for (const param of struct) {\n const { name, type } = param\n if (type === 'address') data[name] = (data[name] as string).toLowerCase()\n }\n return data\n }\n\n const domain = (() => {\n if (!domain_) return {}\n const type = types.EIP712Domain ?? extractEip712DomainTypes(domain_)\n return normalizeData(type, domain_)\n })()\n\n const message = (() => {\n if (primaryType === 'EIP712Domain') return undefined\n if (!types[primaryType]) return {}\n return normalizeData(types[primaryType], message_)\n })()\n\n return Json.stringify({ domain, message, primaryType, types }, (_, value) => {\n if (typeof value === 'bigint') return value.toString()\n return value\n })\n}\n\nexport declare namespace serialize {\n type Value<\n typedData extends TypedData | Record<string, unknown> = TypedData,\n primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData,\n > = Definition<typedData, primaryType>\n\n type ErrorType = Json.stringify.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Checks if [EIP-712 Typed Data](https://eips.ethereum.org/EIPS/eip-712) is valid.\n *\n * @example\n * ```ts twoslash\n * import { TypedData } from 'ox'\n *\n * const valid = TypedData.validate({\n * domain: {\n * name: 'Ether!',\n * version: '1',\n * chainId: 1,\n * verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n * },\n * primaryType: 'Foo',\n * types: {\n * Foo: [\n * { name: 'address', type: 'address' },\n * { name: 'name', type: 'string' },\n * { name: 'foo', type: 'string' },\n * ],\n * },\n * message: {\n * address: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * name: 'jxom',\n * foo: '0xb9CAB4F0E46F7F6b1024b5A7463734fa68E633f9',\n * },\n * })\n * // @log: true\n * ```\n *\n * @param value - The Typed Data to validate.\n */\nexport function validate<\n const typedData extends TypedData | Record<string, unknown>,\n primaryType extends keyof typedData | 'EIP712Domain',\n>(value: assert.Value<typedData, primaryType>): boolean {\n try {\n assert(value)\n return true\n } catch {\n return false\n }\n}\n\nexport declare namespace validate {\n type ErrorType = assert.ErrorType | Errors.GlobalErrorType\n}\n\n/** Thrown when the bytes size of a typed data value does not match the expected size. */\nexport class BytesSizeMismatchError extends Errors.BaseError {\n override readonly name = 'TypedData.BytesSizeMismatchError'\n\n constructor({\n expectedSize,\n givenSize,\n }: { expectedSize: number; givenSize: number }) {\n super(`Expected bytes${expectedSize}, got bytes${givenSize}.`)\n }\n}\n\n/** Thrown when the domain is invalid. */\nexport class InvalidDomainError extends Errors.BaseError {\n override readonly name = 'TypedData.InvalidDomainError'\n\n constructor({ domain }: { domain: unknown }) {\n super(`Invalid domain \"${Json.stringify(domain)}\".`, {\n metaMessages: ['Must be a valid EIP-712 domain.'],\n })\n }\n}\n\n/** Thrown when the primary type of a typed data value is invalid. */\nexport class InvalidPrimaryTypeError extends Errors.BaseError {\n override readonly name = 'TypedData.InvalidPrimaryTypeError'\n\n constructor({\n primaryType,\n types,\n }: { primaryType: string; types: TypedData | Record<string, unknown> }) {\n super(\n `Invalid primary type \\`${primaryType}\\` must be one of \\`${JSON.stringify(Object.keys(types))}\\`.`,\n {\n metaMessages: ['Check that the primary type is a key in `types`.'],\n },\n )\n }\n}\n\n/** Thrown when the struct type is not a valid type. */\nexport class InvalidStructTypeError extends Errors.BaseError {\n override readonly name = 'TypedData.InvalidStructTypeError'\n\n constructor({ type }: { type: string }) {\n super(`Struct type \"${type}\" is invalid.`, {\n metaMessages: ['Struct type must not be a Solidity type.'],\n })\n }\n}\n\n/** @internal */\nexport function encodeData(value: {\n data: Record<string, unknown>\n primaryType: string\n types: TypedData\n}): Hex.Hex {\n const { data, primaryType, types } = value\n const encodedTypes: AbiParameters.Parameter[] = [{ type: 'bytes32' }]\n const encodedValues: unknown[] = [hashType({ primaryType, types })]\n\n for (const field of types[primaryType] ?? []) {\n const [type, value] = encodeField({\n types,\n name: field.name,\n type: field.type,\n value: data[field.name],\n })\n encodedTypes.push(type)\n encodedValues.push(value)\n }\n\n return AbiParameters.encode(encodedTypes, encodedValues)\n}\n\n/** @internal */\nexport declare namespace encodeData {\n type ErrorType =\n | AbiParameters.encode.ErrorType\n | encodeField.ErrorType\n | hashType.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function hashType(value: {\n primaryType: string\n types: TypedData\n}): Hex.Hex {\n const { primaryType, types } = value\n const encodedHashType = Hex.fromString(encodeType({ primaryType, types }))\n return Hash.keccak256(encodedHashType)\n}\n\n/** @internal */\nexport declare namespace hashType {\n type ErrorType =\n | Hex.fromString.ErrorType\n | encodeType.ErrorType\n | Hash.keccak256.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function encodeField(properties: {\n types: TypedData\n name: string\n type: string\n value: any\n}): [type: AbiParameters.Parameter, value: Hex.Hex] {\n let { types, name, type, value } = properties\n\n if (types[type] !== undefined)\n return [\n { type: 'bytes32' },\n Hash.keccak256(encodeData({ data: value, primaryType: type, types })),\n ]\n\n if (type === 'bytes') {\n const prepend = value.length % 2 ? '0' : ''\n value = `0x${prepend + value.slice(2)}`\n return [{ type: 'bytes32' }, Hash.keccak256(value, { as: 'Hex' })]\n }\n\n if (type === 'string')\n return [\n { type: 'bytes32' },\n Hash.keccak256(Bytes.fromString(value), { as: 'Hex' }),\n ]\n\n if (type.lastIndexOf(']') === type.length - 1) {\n const parsedType = type.slice(0, type.lastIndexOf('['))\n const typeValuePairs = (value as [AbiParameters.Parameter, any][]).map(\n (item) =>\n encodeField({\n name,\n type: parsedType,\n types,\n value: item,\n }),\n )\n return [\n { type: 'bytes32' },\n Hash.keccak256(\n AbiParameters.encode(\n typeValuePairs.map(([t]) => t),\n typeValuePairs.map(([, v]) => v),\n ),\n ),\n ]\n }\n\n return [{ type }, value]\n}\n\n/** @internal */\nexport declare namespace encodeField {\n type ErrorType =\n | AbiParameters.encode.ErrorType\n | Hash.keccak256.ErrorType\n | Bytes.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** @internal */\nexport function findTypeDependencies(\n value: {\n primaryType: string\n types: TypedData\n },\n results: Set<string> = new Set(),\n): Set<string> {\n const { primaryType: primaryType_, types } = value\n const match = primaryType_.match(/^\\w*/u)\n const primaryType = match?.[0]!\n if (results.has(primaryType) || types[primaryType] === undefined)\n return results\n\n results.add(primaryType)\n\n for (const field of types[primaryType])\n findTypeDependencies({ primaryType: field.type, types }, results)\n return results\n}\n\n/** @internal */\nexport declare namespace findTypeDependencies {\n type ErrorType = Errors.GlobalErrorType\n}\n\n/** @internal */\nfunction validateReference(type: string) {\n // Struct type must not be a Solidity type.\n if (\n type === 'address' ||\n type === 'bool' ||\n type === 'string' ||\n type.startsWith('bytes') ||\n type.startsWith('uint') ||\n type.startsWith('int')\n )\n throw new InvalidStructTypeError({ type })\n}\n", "import type * as Address from './Address.js'\nimport type * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\n\n/**\n * Encodes data with a validator in [ERC-191 format](https://eips.ethereum.org/EIPS/eip-191#version-0x00): `0x19 ‖ 0x00 ‖ <intended validator address> ‖ <data to sign>`.\n *\n * @example\n * ```ts twoslash\n * import { Hex, ValidatorData } from 'ox'\n *\n * const encoded = ValidatorData.encode({\n * data: Hex.fromString('hello world'),\n * validator: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045',\n * })\n * // @log: '0x1900d8da6bf26964af9d7eed9e03e53415d37aa9604568656c6c6f20776f726c64'\n * // @log: '0x19 ‖ 0x00 ‖ 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 ‖ \"hello world\"'\n * ```\n *\n * @param value - The data to encode.\n * @returns The encoded personal sign message.\n */\nexport function encode(value: encode.Value): Hex.Hex {\n const { data, validator } = value\n return Hex.concat(\n // Validator Data Format: `0x19 ‖ 0x00 ‖ <intended validator address> ‖ <data to sign>`\n '0x19',\n '0x00',\n validator,\n Hex.from(data),\n )\n}\n\nexport declare namespace encode {\n type Value = {\n data: Hex.Hex | Bytes.Bytes\n validator: Address.Address\n }\n\n type ErrorType =\n | Hex.concat.ErrorType\n | Hex.from.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Gets the payload to use for signing [ERC-191 formatted](https://eips.ethereum.org/EIPS/eip-191#0x00) data with an intended validator.\n *\n * @example\n * ```ts twoslash\n * import { Hex, Secp256k1, ValidatorData } from 'ox'\n *\n * const payload = ValidatorData.getSignPayload({ // [!code focus]\n * data: Hex.fromString('hello world'), // [!code focus]\n * validator: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045', // [!code focus]\n * }) // [!code focus]\n *\n * const signature = Secp256k1.sign({ payload, privateKey: '0x...' })\n * ```\n *\n * @param value - The data to get the sign payload for.\n * @returns The payload to use for signing.\n */\nexport function getSignPayload(value: getSignPayload.Value): Hex.Hex {\n return Hash.keccak256(encode(value))\n}\n\nexport declare namespace getSignPayload {\n type Value = {\n data: Hex.Hex | Bytes.Bytes\n validator: Address.Address\n }\n\n type ErrorType =\n | Hash.keccak256.ErrorType\n | encode.ErrorType\n | Errors.GlobalErrorType\n}\n", "import * as Base64 from './Base64.js'\nimport * as Bytes from './Bytes.js'\nimport * as Errors from './Errors.js'\nimport * as Hash from './Hash.js'\nimport * as Hex from './Hex.js'\nimport * as P256 from './P256.js'\nimport type * as PublicKey from './PublicKey.js'\nimport type * as Signature from './Signature.js'\nimport type { Compute, OneOf } from './internal/types.js'\nimport * as internal from './internal/webauthn.js'\n\n/** A WebAuthn-flavored P256 credential. */\nexport type P256Credential = {\n id: string\n publicKey: PublicKey.PublicKey\n raw: internal.PublicKeyCredential\n}\n\n/** Metadata for a WebAuthn P256 signature. */\nexport type SignMetadata = Compute<{\n authenticatorData: Hex.Hex\n challengeIndex: number\n clientDataJSON: string\n typeIndex: number\n userVerificationRequired: boolean\n}>\n\nexport const createChallenge = Uint8Array.from([\n 105, 171, 180, 181, 160, 222, 75, 198, 42, 42, 32, 31, 141, 37, 186, 233,\n])\n\n/**\n * Creates a new WebAuthn P256 Credential, which can be stored and later used for signing.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const credential = await WebAuthnP256.createCredential({ name: 'Example' }) // [!code focus]\n * // @log: {\n * // @log: id: 'oZ48...',\n * // @log: publicKey: { x: 51421...5123n, y: 12345...6789n },\n * // @log: raw: PublicKeyCredential {},\n * // @log: }\n *\n * const { metadata, signature } = await WebAuthnP256.sign({\n * credentialId: credential.id,\n * challenge: '0xdeadbeef',\n * })\n * ```\n *\n * @param options - Credential creation options.\n * @returns A WebAuthn P256 credential.\n */\nexport async function createCredential(\n options: createCredential.Options,\n): Promise<P256Credential> {\n const {\n createFn = window.navigator.credentials.create.bind(\n window.navigator.credentials,\n ),\n ...rest\n } = options\n const creationOptions = getCredentialCreationOptions(rest)\n try {\n const credential = (await createFn(\n creationOptions,\n )) as internal.PublicKeyCredential\n if (!credential) throw new CredentialCreationFailedError()\n\n const response = credential.response as AuthenticatorAttestationResponse\n const publicKey = await internal.parseCredentialPublicKey(response)\n\n return {\n id: credential.id,\n publicKey,\n raw: credential,\n }\n } catch (error) {\n throw new CredentialCreationFailedError({\n cause: error as Error,\n })\n }\n}\n\nexport declare namespace createCredential {\n type Options = getCredentialCreationOptions.Options & {\n /**\n * Credential creation function. Useful for environments that do not support\n * the WebAuthn API natively (i.e. React Native or testing environments).\n *\n * @default window.navigator.credentials.create\n */\n createFn?:\n | ((\n options?: internal.CredentialCreationOptions | undefined,\n ) => Promise<internal.Credential | null>)\n | undefined\n }\n\n type ErrorType =\n | getCredentialCreationOptions.ErrorType\n | internal.parseCredentialPublicKey.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Gets the authenticator data which contains information about the\n * processing of an authenticator request (ie. from `WebAuthnP256.sign`).\n *\n * :::warning\n *\n * This function is mainly for testing purposes or for manually constructing\n * autenticator data. In most cases you will not need this function.\n * `authenticatorData` is typically returned as part of the\n * {@link ox#WebAuthnP256.(sign:function)} response (ie. an authenticator response).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const authenticatorData = WebAuthnP256.getAuthenticatorData({\n * rpId: 'example.com',\n * signCount: 420,\n * })\n * // @log: \"0xa379a6f6eeafb9a55e378c118034e2751e682fab9f2d30ab13d2125586ce194705000001a4\"\n * ```\n *\n * @param options - Options to construct the authenticator data.\n * @returns The authenticator data.\n */\nexport function getAuthenticatorData(\n options: getAuthenticatorData.Options = {},\n): Hex.Hex {\n const { flag = 5, rpId = window.location.hostname, signCount = 0 } = options\n const rpIdHash = Hash.sha256(Hex.fromString(rpId))\n const flag_bytes = Hex.fromNumber(flag, { size: 1 })\n const signCount_bytes = Hex.fromNumber(signCount, { size: 4 })\n return Hex.concat(rpIdHash, flag_bytes, signCount_bytes)\n}\n\nexport declare namespace getAuthenticatorData {\n type Options = {\n /** A bitfield that indicates various attributes that were asserted by the authenticator. [Read more](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API/Authenticator_data#flags) */\n flag?: number | undefined\n /** The [Relying Party ID](https://w3c.github.io/webauthn/#relying-party-identifier) that the credential is scoped to. */\n rpId?: internal.PublicKeyCredentialRequestOptions['rpId'] | undefined\n /** A signature counter, if supported by the authenticator (set to 0 otherwise). */\n signCount?: number | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Constructs the Client Data in stringified JSON format which represents client data that\n * was passed to `credentials.get()` in {@link ox#WebAuthnP256.(sign:function)}.\n *\n * :::warning\n *\n * This function is mainly for testing purposes or for manually constructing\n * client data. In most cases you will not need this function.\n * `clientDataJSON` is typically returned as part of the\n * {@link ox#WebAuthnP256.(sign:function)} response (ie. an authenticator response).\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const clientDataJSON = WebAuthnP256.getClientDataJSON({\n * challenge: '0xdeadbeef',\n * origin: 'https://example.com',\n * })\n * // @log: \"{\"type\":\"webauthn.get\",\"challenge\":\"3q2-7w\",\"origin\":\"https://example.com\",\"crossOrigin\":false}\"\n * ```\n *\n * @param options - Options to construct the client data.\n * @returns The client data.\n */\nexport function getClientDataJSON(options: getClientDataJSON.Options): string {\n const {\n challenge,\n crossOrigin = false,\n extraClientData,\n origin = window.location.origin,\n } = options\n\n return JSON.stringify({\n type: 'webauthn.get',\n challenge: Base64.fromHex(challenge, { url: true, pad: false }),\n origin,\n crossOrigin,\n ...extraClientData,\n })\n}\n\nexport declare namespace getClientDataJSON {\n type Options = {\n /** The challenge to sign. */\n challenge: Hex.Hex\n /** If set to `true`, it means that the calling context is an `<iframe>` that is not same origin with its ancestor frames. */\n crossOrigin?: boolean | undefined\n /** Additional client data to include in the client data JSON. */\n extraClientData?: Record<string, unknown> | undefined\n /** The fully qualified origin of the relying party which has been given by the client/browser to the authenticator. */\n origin?: string | undefined\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n\n/**\n * Returns the creation options for a P256 WebAuthn Credential to be used with\n * the Web Authentication API.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const options = WebAuthnP256.getCredentialCreationOptions({ name: 'Example' })\n *\n * const credential = await window.navigator.credentials.create(options)\n * ```\n *\n * @param options - Options.\n * @returns The credential creation options.\n */\nexport function getCredentialCreationOptions(\n options: getCredentialCreationOptions.Options,\n): internal.CredentialCreationOptions {\n const {\n attestation = 'none',\n authenticatorSelection = {\n residentKey: 'preferred',\n requireResidentKey: false,\n userVerification: 'required',\n },\n challenge = createChallenge,\n excludeCredentialIds,\n name: name_,\n rp = {\n id: window.location.hostname,\n name: window.document.title,\n },\n user,\n extensions,\n } = options\n const name = (user?.name ?? name_)!\n return {\n publicKey: {\n attestation,\n authenticatorSelection,\n challenge,\n ...(excludeCredentialIds\n ? {\n excludeCredentials: excludeCredentialIds?.map((id) => ({\n id: Base64.toBytes(id),\n type: 'public-key',\n })),\n }\n : {}),\n pubKeyCredParams: [\n {\n type: 'public-key',\n alg: -7, // p256\n },\n ],\n rp,\n user: {\n id: user?.id ?? Hash.keccak256(Bytes.fromString(name), { as: 'Bytes' }),\n name,\n displayName: user?.displayName ?? name,\n },\n extensions,\n },\n } as internal.CredentialCreationOptions\n}\n\nexport declare namespace getCredentialCreationOptions {\n type Options = {\n /**\n * A string specifying the relying party's preference for how the attestation statement\n * (i.e., provision of verifiable evidence of the authenticity of the authenticator and its data)\n * is conveyed during credential creation.\n */\n attestation?:\n | internal.PublicKeyCredentialCreationOptions['attestation']\n | undefined\n /**\n * An object whose properties are criteria used to filter out the potential authenticators\n * for the credential creation operation.\n */\n authenticatorSelection?:\n | internal.PublicKeyCredentialCreationOptions['authenticatorSelection']\n | undefined\n /**\n * An `ArrayBuffer`, `TypedArray`, or `DataView` used as a cryptographic challenge.\n */\n challenge?:\n | internal.PublicKeyCredentialCreationOptions['challenge']\n | undefined\n /**\n * List of credential IDs to exclude from the creation. This property can be used\n * to prevent creation of a credential if it already exists.\n */\n excludeCredentialIds?: readonly string[] | undefined\n /**\n * List of Web Authentication API credentials to use during creation or authentication.\n */\n extensions?:\n | internal.PublicKeyCredentialCreationOptions['extensions']\n | undefined\n /**\n * An object describing the relying party that requested the credential creation\n */\n rp?:\n | {\n id: string\n name: string\n }\n | undefined\n /**\n * A numerical hint, in milliseconds, which indicates the time the calling web app is willing to wait for the creation operation to complete.\n */\n timeout?: internal.PublicKeyCredentialCreationOptions['timeout'] | undefined\n } & OneOf<\n | {\n /** Name for the credential (user.name). */\n name: string\n }\n | {\n /**\n * An object describing the user account for which the credential is generated.\n */\n user: {\n displayName?: string\n id?: BufferSource\n name: string\n }\n }\n >\n\n type ErrorType =\n | Base64.toBytes.ErrorType\n | Hash.keccak256.ErrorType\n | Bytes.fromString.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Returns the request options to sign a challenge with the Web Authentication API.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const options = WebAuthnP256.getCredentialRequestOptions({\n * challenge: '0xdeadbeef',\n * })\n *\n * const credential = await window.navigator.credentials.get(options)\n * ```\n *\n * @param options - Options.\n * @returns The credential request options.\n */\nexport function getCredentialRequestOptions(\n options: getCredentialRequestOptions.Options,\n): internal.CredentialRequestOptions {\n const {\n credentialId,\n challenge,\n rpId = window.location.hostname,\n userVerification = 'required',\n } = options\n return {\n publicKey: {\n ...(credentialId\n ? {\n allowCredentials: [\n {\n id: Base64.toBytes(credentialId),\n type: 'public-key',\n },\n ],\n }\n : {}),\n challenge: Bytes.fromHex(challenge),\n rpId,\n userVerification,\n },\n }\n}\n\nexport declare namespace getCredentialRequestOptions {\n type Options = {\n /** The credential ID to use. */\n credentialId?: string | undefined\n /** The challenge to sign. */\n challenge: Hex.Hex\n /** The relying party identifier to use. */\n rpId?: internal.PublicKeyCredentialRequestOptions['rpId'] | undefined\n /** The user verification requirement. */\n userVerification?:\n | internal.PublicKeyCredentialRequestOptions['userVerification']\n | undefined\n }\n\n type ErrorType =\n | Bytes.fromHex.ErrorType\n | Base64.toBytes.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Constructs the final digest that was signed and computed by the authenticator. This payload includes\n * the cryptographic `challenge`, as well as authenticator metadata (`authenticatorData` + `clientDataJSON`).\n * This value can be also used with raw P256 verification (such as {@link ox#P256.(verify:function)} or\n * {@link ox#WebCryptoP256.(verify:function)}).\n *\n * :::warning\n *\n * This function is mainly for testing purposes or for manually constructing\n * signing payloads. In most cases you will not need this function and\n * instead use {@link ox#WebAuthnP256.(sign:function)}.\n *\n * :::\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256, WebCryptoP256 } from 'ox'\n *\n * const { metadata, payload } = WebAuthnP256.getSignPayload({ // [!code focus]\n * challenge: '0xdeadbeef', // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: metadata: {\n * // @log: authenticatorData: \"0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000\",\n * // @log: challengeIndex: 23,\n * // @log: clientDataJSON: \"{\"type\":\"webauthn.get\",\"challenge\":\"9jEFijuhEWrM4SOW-tChJbUEHEP44VcjcJ-Bqo1fTM8\",\"origin\":\"http://localhost:5173\",\"crossOrigin\":false}\",\n * // @log: typeIndex: 1,\n * // @log: userVerificationRequired: true,\n * // @log: },\n * // @log: payload: \"0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d9763050000000045086dcb06a5f234db625bcdc94e657f86b76b6fd3eb9c30543eabc1e577a4b0\",\n * // @log: }\n *\n * const { publicKey, privateKey } = await WebCryptoP256.createKeyPair()\n *\n * const signature = await WebCryptoP256.sign({\n * payload,\n * privateKey,\n * })\n * ```\n *\n * @param options - Options to construct the signing payload.\n * @returns The signing payload.\n */\nexport function getSignPayload(\n options: getSignPayload.Options,\n): getSignPayload.ReturnType {\n const {\n challenge,\n crossOrigin,\n extraClientData,\n flag,\n origin,\n rpId,\n signCount,\n userVerification = 'required',\n } = options\n\n const authenticatorData = getAuthenticatorData({\n flag,\n rpId,\n signCount,\n })\n const clientDataJSON = getClientDataJSON({\n challenge,\n crossOrigin,\n extraClientData,\n origin,\n })\n const clientDataJSONHash = Hash.sha256(Hex.fromString(clientDataJSON))\n\n const challengeIndex = clientDataJSON.indexOf('\"challenge\"')\n const typeIndex = clientDataJSON.indexOf('\"type\"')\n\n const metadata = {\n authenticatorData,\n clientDataJSON,\n challengeIndex,\n typeIndex,\n userVerificationRequired: userVerification === 'required',\n }\n\n const payload = Hex.concat(authenticatorData, clientDataJSONHash)\n\n return { metadata, payload }\n}\n\nexport declare namespace getSignPayload {\n type Options = {\n /** The challenge to sign. */\n challenge: Hex.Hex\n /** If set to `true`, it means that the calling context is an `<iframe>` that is not same origin with its ancestor frames. */\n crossOrigin?: boolean | undefined\n /** Additional client data to include in the client data JSON. */\n extraClientData?: Record<string, unknown> | undefined\n /** If set to `true`, the payload will be hashed before being returned. */\n hash?: boolean | undefined\n /** A bitfield that indicates various attributes that were asserted by the authenticator. [Read more](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API/Authenticator_data#flags) */\n flag?: number | undefined\n /** The fully qualified origin of the relying party which has been given by the client/browser to the authenticator. */\n origin?: string | undefined\n /** The [Relying Party ID](https://w3c.github.io/webauthn/#relying-party-identifier) that the credential is scoped to. */\n rpId?: internal.PublicKeyCredentialRequestOptions['rpId'] | undefined\n /** A signature counter, if supported by the authenticator (set to 0 otherwise). */\n signCount?: number | undefined\n /** The user verification requirement that the authenticator will enforce. */\n userVerification?:\n | internal.PublicKeyCredentialRequestOptions['userVerification']\n | undefined\n }\n\n type ReturnType = {\n metadata: SignMetadata\n payload: Hex.Hex\n }\n\n type ErrorType =\n | Hash.sha256.ErrorType\n | Hex.concat.ErrorType\n | Hex.fromString.ErrorType\n | getAuthenticatorData.ErrorType\n | getClientDataJSON.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Signs a challenge using a stored WebAuthn P256 Credential. If no Credential is provided,\n * a prompt will be displayed for the user to select an existing Credential\n * that was previously registered.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const credential = await WebAuthnP256.createCredential({\n * name: 'Example',\n * })\n *\n * const { metadata, signature } = await WebAuthnP256.sign({ // [!code focus]\n * credentialId: credential.id, // [!code focus]\n * challenge: '0xdeadbeef', // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: metadata: {\n * // @log: authenticatorData: '0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000',\n * // @log: clientDataJSON: '{\"type\":\"webauthn.get\",\"challenge\":\"9jEFijuhEWrM4SOW-tChJbUEHEP44VcjcJ-Bqo1fTM8\",\"origin\":\"http://localhost:5173\",\"crossOrigin\":false}',\n * // @log: challengeIndex: 23,\n * // @log: typeIndex: 1,\n * // @log: userVerificationRequired: true,\n * // @log: },\n * // @log: signature: { r: 51231...4215n, s: 12345...6789n },\n * // @log: }\n * ```\n *\n * @param options - Options.\n * @returns The signature.\n */\nexport async function sign(options: sign.Options): Promise<sign.ReturnType> {\n const {\n getFn = window.navigator.credentials.get.bind(window.navigator.credentials),\n ...rest\n } = options\n const requestOptions = getCredentialRequestOptions(rest)\n try {\n const credential = (await getFn(\n requestOptions,\n )) as internal.PublicKeyCredential\n if (!credential) throw new CredentialRequestFailedError()\n const response = credential.response as AuthenticatorAssertionResponse\n\n const clientDataJSON = String.fromCharCode(\n ...new Uint8Array(response.clientDataJSON),\n )\n const challengeIndex = clientDataJSON.indexOf('\"challenge\"')\n const typeIndex = clientDataJSON.indexOf('\"type\"')\n\n const signature = internal.parseAsn1Signature(\n new Uint8Array(response.signature),\n )\n\n return {\n metadata: {\n authenticatorData: Hex.fromBytes(\n new Uint8Array(response.authenticatorData),\n ),\n clientDataJSON,\n challengeIndex,\n typeIndex,\n userVerificationRequired:\n requestOptions.publicKey!.userVerification === 'required',\n },\n signature,\n raw: credential,\n }\n } catch (error) {\n throw new CredentialRequestFailedError({\n cause: error as Error,\n })\n }\n}\n\nexport declare namespace sign {\n type Options = getCredentialRequestOptions.Options & {\n /**\n * Credential request function. Useful for environments that do not support\n * the WebAuthn API natively (i.e. React Native or testing environments).\n *\n * @default window.navigator.credentials.get\n */\n getFn?:\n | ((\n options?: internal.CredentialRequestOptions | undefined,\n ) => Promise<internal.Credential | null>)\n | undefined\n }\n\n type ReturnType = {\n metadata: SignMetadata\n raw: internal.PublicKeyCredential\n signature: Signature.Signature<false>\n }\n\n type ErrorType =\n | Hex.fromBytes.ErrorType\n | getCredentialRequestOptions.ErrorType\n | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a signature using the Credential's public key and the challenge which was signed.\n *\n * @example\n * ```ts twoslash\n * import { WebAuthnP256 } from 'ox'\n *\n * const credential = await WebAuthnP256.createCredential({\n * name: 'Example',\n * })\n *\n * const { metadata, signature } = await WebAuthnP256.sign({\n * credentialId: credential.id,\n * challenge: '0xdeadbeef',\n * })\n *\n * const result = await WebAuthnP256.verify({ // [!code focus]\n * metadata, // [!code focus]\n * challenge: '0xdeadbeef', // [!code focus]\n * publicKey: credential.publicKey, // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: true\n * ```\n *\n * @param options - Options.\n * @returns Whether the signature is valid.\n */\nexport function verify(options: verify.Options): boolean {\n const { challenge, hash = true, metadata, publicKey, signature } = options\n const {\n authenticatorData,\n challengeIndex,\n clientDataJSON,\n typeIndex,\n userVerificationRequired,\n } = metadata\n\n const authenticatorDataBytes = Bytes.fromHex(authenticatorData)\n\n // Check length of `authenticatorData`.\n if (authenticatorDataBytes.length < 37) return false\n\n const flag = authenticatorDataBytes[32]!\n\n // Verify that the UP bit of the flags in authData is set.\n if ((flag & 0x01) !== 0x01) return false\n\n // If user verification was determined to be required, verify that\n // the UV bit of the flags in authData is set. Otherwise, ignore the\n // value of the UV flag.\n if (userVerificationRequired && (flag & 0x04) !== 0x04) return false\n\n // If the BE bit of the flags in authData is not set, verify that\n // the BS bit is not set.\n if ((flag & 0x08) !== 0x08 && (flag & 0x10) === 0x10) return false\n\n // Check that response is for an authentication assertion\n const type = '\"type\":\"webauthn.get\"'\n if (type !== clientDataJSON.slice(Number(typeIndex), type.length + 1))\n return false\n\n // Check that hash is in the clientDataJSON.\n const match = clientDataJSON\n .slice(Number(challengeIndex))\n .match(/^\"challenge\":\"(.*?)\"/)\n if (!match) return false\n\n // Validate the challenge in the clientDataJSON.\n const [_, challenge_extracted] = match\n if (Hex.fromBytes(Base64.toBytes(challenge_extracted!)) !== challenge)\n return false\n\n const clientDataJSONHash = Hash.sha256(Bytes.fromString(clientDataJSON), {\n as: 'Bytes',\n })\n const payload = Bytes.concat(authenticatorDataBytes, clientDataJSONHash)\n\n return P256.verify({\n hash,\n payload,\n publicKey,\n signature,\n })\n}\n\nexport declare namespace verify {\n type Options = {\n /** The challenge to verify. */\n challenge: Hex.Hex\n /** If set to `true`, the payload will be hashed (sha256) before being verified. */\n hash?: boolean | undefined\n /** The public key to verify the signature with. */\n publicKey: PublicKey.PublicKey\n /** The signature to verify. */\n signature: Signature.Signature<false>\n /** The metadata to verify the signature with. */\n metadata: SignMetadata\n }\n\n type ErrorType =\n | Base64.toBytes.ErrorType\n | Bytes.concat.ErrorType\n | Bytes.fromHex.ErrorType\n | P256.verify.ErrorType\n | Errors.GlobalErrorType\n}\n\n/** Thrown when a WebAuthn P256 credential creation fails. */\nexport class CredentialCreationFailedError extends Errors.BaseError<Error> {\n override readonly name = 'WebAuthnP256.CredentialCreationFailedError'\n\n constructor({ cause }: { cause?: Error | undefined } = {}) {\n super('Failed to create credential.', {\n cause,\n })\n }\n}\n\n/** Thrown when a WebAuthn P256 credential request fails. */\nexport class CredentialRequestFailedError extends Errors.BaseError<Error> {\n override readonly name = 'WebAuthnP256.CredentialRequestFailedError'\n\n constructor({ cause }: { cause?: Error | undefined } = {}) {\n super('Failed to request credential.', {\n cause,\n })\n }\n}\n", "import { p256 } from '@noble/curves/p256'\nimport type * as Errors from '../Errors.js'\nimport * as Hex from '../Hex.js'\nimport * as PublicKey from '../PublicKey.js'\nimport { CredentialCreationFailedError } from '../WebAuthnP256.js'\n\n/** @internal */\nexport type AttestationConveyancePreference =\n | 'direct'\n | 'enterprise'\n | 'indirect'\n | 'none'\n\n/** @internal */\nexport type AuthenticatorAttachment = 'cross-platform' | 'platform'\n\n/** @internal */\nexport type AuthenticatorTransport =\n | 'ble'\n | 'hybrid'\n | 'internal'\n | 'nfc'\n | 'usb'\n\n/** @internal */\nexport type COSEAlgorithmIdentifier = number\n\n/** @internal */\nexport type CredentialMediationRequirement =\n | 'conditional'\n | 'optional'\n | 'required'\n | 'silent'\n\n/** @internal */\nexport type PublicKeyCredentialType = 'public-key'\n\n/** @internal */\nexport type ResidentKeyRequirement = 'discouraged' | 'preferred' | 'required'\n\n/** @internal */\nexport type UserVerificationRequirement =\n | 'discouraged'\n | 'preferred'\n | 'required'\n\n/** @internal */\nexport type LargeBlobSupport = {\n support: 'required' | 'preferred'\n}\n\n/** @internal */\nexport type BufferSource = ArrayBufferView | ArrayBuffer\n\n/** @internal */\nexport type PrfExtension = Record<'eval', Record<'first', Uint8Array>>\n\n/** @internal */\nexport interface AuthenticationExtensionsClientInputs {\n appid?: string\n credProps?: boolean\n hmacCreateSecret?: boolean\n minPinLength?: boolean\n prf?: PrfExtension\n largeBlob?: LargeBlobSupport\n}\n\n/** @internal */\nexport interface AuthenticatorSelectionCriteria {\n authenticatorAttachment?: AuthenticatorAttachment\n requireResidentKey?: boolean\n residentKey?: ResidentKeyRequirement\n userVerification?: UserVerificationRequirement\n}\n\n/** @internal */\nexport interface Credential {\n readonly id: string\n readonly type: string\n}\n\n/** @internal */\nexport interface CredentialCreationOptions {\n publicKey?: PublicKeyCredentialCreationOptions\n signal?: AbortSignal\n}\n\n/** @internal */\nexport interface CredentialRequestOptions {\n mediation?: CredentialMediationRequirement\n publicKey?: PublicKeyCredentialRequestOptions\n signal?: AbortSignal\n}\n\n/** @internal */\nexport interface PublicKeyCredential extends Credential {\n readonly authenticatorAttachment: string | null\n readonly rawId: ArrayBuffer\n readonly response: AuthenticatorResponse\n getClientExtensionResults(): AuthenticationExtensionsClientOutputs\n}\n\n/** @internal */\nexport interface PublicKeyCredentialCreationOptions {\n attestation?: AttestationConveyancePreference\n authenticatorSelection?: AuthenticatorSelectionCriteria\n challenge: BufferSource\n excludeCredentials?: PublicKeyCredentialDescriptor[]\n extensions?: AuthenticationExtensionsClientInputs\n pubKeyCredParams: PublicKeyCredentialParameters[]\n rp: PublicKeyCredentialRpEntity\n timeout?: number\n user: PublicKeyCredentialUserEntity\n}\n\n/** @internal */\nexport interface PublicKeyCredentialDescriptor {\n id: BufferSource\n transports?: AuthenticatorTransport[]\n type: PublicKeyCredentialType\n}\n\n/** @internal */\nexport interface PublicKeyCredentialEntity {\n name: string\n}\n\n/** @internal */\nexport interface PublicKeyCredentialParameters {\n alg: COSEAlgorithmIdentifier\n type: PublicKeyCredentialType\n}\n\n/** @internal */\nexport interface PublicKeyCredentialRequestOptions {\n allowCredentials?: PublicKeyCredentialDescriptor[]\n challenge: BufferSource\n extensions?: AuthenticationExtensionsClientInputs\n rpId?: string\n timeout?: number\n userVerification?: UserVerificationRequirement\n}\n\n/** @internal */\nexport interface PublicKeyCredentialRpEntity extends PublicKeyCredentialEntity {\n id?: string\n}\n\n/** @internal */\nexport interface PublicKeyCredentialUserEntity\n extends PublicKeyCredentialEntity {\n displayName: string\n id: BufferSource\n}\n\n/**\n * Parses an ASN.1 signature into a r and s value.\n *\n * @internal\n */\nexport function parseAsn1Signature(bytes: Uint8Array) {\n const r_start = bytes[4] === 0 ? 5 : 4\n const r_end = r_start + 32\n const s_start = bytes[r_end + 2] === 0 ? r_end + 3 : r_end + 2\n\n const r = BigInt(Hex.fromBytes(bytes.slice(r_start, r_end)))\n const s = BigInt(Hex.fromBytes(bytes.slice(s_start)))\n\n return {\n r,\n s: s > p256.CURVE.n / 2n ? p256.CURVE.n - s : s,\n }\n}\n\n/**\n * Parses a public key into x and y coordinates from the public key\n * defined on the credential.\n *\n * @internal\n */\nexport async function parseCredentialPublicKey(\n response: AuthenticatorAttestationResponse,\n): Promise<PublicKey.PublicKey> {\n try {\n const publicKeyBuffer = response.getPublicKey()\n if (!publicKeyBuffer) throw new CredentialCreationFailedError()\n\n // Converting `publicKeyBuffer` throws when credential is created by 1Password Firefox Add-on\n const publicKeyBytes = new Uint8Array(publicKeyBuffer)\n const cryptoKey = await crypto.subtle.importKey(\n 'spki',\n new Uint8Array(publicKeyBytes),\n {\n name: 'ECDSA',\n namedCurve: 'P-256',\n hash: 'SHA-256',\n },\n true,\n ['verify'],\n )\n const publicKey = new Uint8Array(\n await crypto.subtle.exportKey('raw', cryptoKey),\n )\n return PublicKey.from(publicKey)\n } catch (error) {\n // Fallback for 1Password Firefox Add-on restricts access to certain credential properties\n // so we need to use `attestationObject` to extract the public key.\n // https://github.com/passwordless-id/webauthn/issues/50#issuecomment-2072902094\n if ((error as Error).message !== 'Permission denied to access object')\n throw error\n\n const data = new Uint8Array(response.attestationObject)\n const coordinateLength = 0x20\n const cborPrefix = 0x58\n\n const findStart = (key: number) => {\n const coordinate = new Uint8Array([key, cborPrefix, coordinateLength])\n for (let i = 0; i < data.length - coordinate.length; i++)\n if (coordinate.every((byte, j) => data[i + j] === byte))\n return i + coordinate.length\n throw new CredentialCreationFailedError()\n }\n\n const xStart = findStart(0x21)\n const yStart = findStart(0x22)\n\n return PublicKey.from(\n new Uint8Array([\n 0x04,\n ...data.slice(xStart, xStart + coordinateLength),\n ...data.slice(yStart, yStart + coordinateLength),\n ]),\n )\n }\n}\n\nexport declare namespace parseCredentialPublicKey {\n type ErrorType = CredentialCreationFailedError | Errors.GlobalErrorType\n}\n", "import { p256 } from '@noble/curves/p256'\nimport * as Bytes from './Bytes.js'\nimport type * as Errors from './Errors.js'\nimport type * as Hex from './Hex.js'\nimport * as PublicKey from './PublicKey.js'\nimport type * as Signature from './Signature.js'\nimport type { Compute } from './internal/types.js'\n\n/**\n * Generates an ECDSA P256 key pair that includes:\n *\n * - a `privateKey` of type [`CryptoKey`](https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey)\n *\n * - a `publicKey` of type {@link ox#Hex.Hex} or {@link ox#Bytes.Bytes}\n *\n * @example\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { publicKey, privateKey } = await WebCryptoP256.createKeyPair()\n * // @log: {\n * // @log: privateKey: CryptoKey {},\n * // @log: publicKey: {\n * // @log: x: 59295962801117472859457908919941473389380284132224861839820747729565200149877n,\n * // @log: y: 24099691209996290925259367678540227198235484593389470330605641003500238088869n,\n * // @log: prefix: 4,\n * // @log: },\n * // @log: }\n * ```\n *\n * @param options - Options for creating the key pair.\n * @returns The key pair.\n */\nexport async function createKeyPair(\n options: createKeyPair.Options = {},\n): Promise<createKeyPair.ReturnType> {\n const { extractable = false } = options\n const keypair = await globalThis.crypto.subtle.generateKey(\n {\n name: 'ECDSA',\n namedCurve: 'P-256',\n },\n extractable,\n ['sign', 'verify'],\n )\n const publicKey_raw = await globalThis.crypto.subtle.exportKey(\n 'raw',\n keypair.publicKey,\n )\n const publicKey = PublicKey.from(new Uint8Array(publicKey_raw))\n return {\n privateKey: keypair.privateKey,\n publicKey,\n }\n}\n\nexport declare namespace createKeyPair {\n type Options = {\n /** A boolean value indicating whether it will be possible to export the private key using `globalThis.crypto.subtle.exportKey()`. */\n extractable?: boolean | undefined\n }\n\n type ReturnType = Compute<{\n privateKey: CryptoKey\n publicKey: PublicKey.PublicKey\n }>\n\n type ErrorType = PublicKey.from.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Signs a payload with the provided `CryptoKey` private key and returns a P256 signature.\n *\n * @example\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { privateKey } = await WebCryptoP256.createKeyPair()\n *\n * const signature = await WebCryptoP256.sign({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * privateKey, // [!code focus]\n * }) // [!code focus]\n * // @log: {\n * // @log: r: 151231...4423n,\n * // @log: s: 516123...5512n,\n * // @log: }\n * ```\n *\n * @param options - Options for signing the payload.\n * @returns The P256 ECDSA {@link ox#Signature.Signature}.\n */\nexport async function sign(\n options: sign.Options,\n): Promise<Signature.Signature<false>> {\n const { payload, privateKey } = options\n const signature = await globalThis.crypto.subtle.sign(\n {\n name: 'ECDSA',\n hash: 'SHA-256',\n },\n privateKey,\n Bytes.from(payload),\n )\n const signature_bytes = Bytes.fromArray(new Uint8Array(signature))\n const r = Bytes.toBigInt(Bytes.slice(signature_bytes, 0, 32))\n let s = Bytes.toBigInt(Bytes.slice(signature_bytes, 32, 64))\n if (s > p256.CURVE.n / 2n) s = p256.CURVE.n - s\n return { r, s }\n}\n\nexport declare namespace sign {\n type Options = {\n /** Payload to sign. */\n payload: Hex.Hex | Bytes.Bytes\n /** ECDSA private key. */\n privateKey: CryptoKey\n }\n\n type ErrorType = Bytes.fromArray.ErrorType | Errors.GlobalErrorType\n}\n\n/**\n * Verifies a payload was signed by the provided public key.\n *\n * @example\n *\n * ```ts twoslash\n * import { WebCryptoP256 } from 'ox'\n *\n * const { privateKey, publicKey } = await WebCryptoP256.createKeyPair()\n * const signature = await WebCryptoP256.sign({ payload: '0xdeadbeef', privateKey })\n *\n * const verified = await WebCryptoP256.verify({ // [!code focus]\n * payload: '0xdeadbeef', // [!code focus]\n * publicKey, // [!code focus]\n * signature, // [!code focus]\n * }) // [!code focus]\n * // @log: true\n * ```\n *\n * @param options - The verification options.\n * @returns Whether the payload was signed by the provided public key.\n */\nexport async function verify(options: verify.Options): Promise<boolean> {\n const { payload, signature } = options\n\n const publicKey = await globalThis.crypto.subtle.importKey(\n 'raw',\n PublicKey.toBytes(options.publicKey),\n { name: 'ECDSA', namedCurve: 'P-256' },\n true,\n ['verify'],\n )\n\n return await globalThis.crypto.subtle.verify(\n {\n name: 'ECDSA',\n hash: 'SHA-256',\n },\n publicKey,\n Bytes.concat(Bytes.fromNumber(signature.r), Bytes.fromNumber(signature.s)),\n Bytes.from(payload),\n )\n}\n\nexport declare namespace verify {\n type Options = {\n /** Public key that signed the payload. */\n publicKey: PublicKey.PublicKey<boolean>\n /** Signature of the payload. */\n signature: Signature.Signature<false>\n /** Payload that was signed. */\n payload: Hex.Hex | Bytes.Bytes\n }\n\n type ErrorType = Errors.GlobalErrorType\n}\n", "import { Provider, RpcRequest, RpcResponse } from 'ox';\nimport { frameHost } from './frameHost';\nconst emitter = Provider.createEmitter();\nconst store = RpcRequest.createStore();\nfunction toProviderRpcError({ code, details, }) {\n switch (code) {\n case 4001:\n return new Provider.UserRejectedRequestError();\n case 4100:\n return new Provider.UnauthorizedError();\n case 4200:\n return new Provider.UnsupportedMethodError();\n case 4900:\n return new Provider.DisconnectedError();\n case 4901:\n return new Provider.ChainDisconnectedError();\n default:\n return new Provider.ProviderRpcError(code, details ?? 'Unknown provider RPC error');\n }\n}\nexport const provider = Provider.from({\n ...emitter,\n async request(args) {\n // @ts-expect-error\n const request = store.prepare(args);\n try {\n const response = await frameHost\n .ethProviderRequestV2(request)\n .then((res) => RpcResponse.parse(res, { request, raw: true }));\n if (response.error) {\n throw toProviderRpcError(response.error);\n }\n return response.result;\n }\n catch (e) {\n // ethProviderRequestV2 not supported, fall back to v1\n if (e instanceof Error &&\n e.message.match(/cannot read property 'apply'/i)) {\n return await frameHost.ethProviderRequest(request);\n }\n if (e instanceof Provider.ProviderRpcError ||\n e instanceof RpcResponse.BaseError) {\n throw e;\n }\n throw new RpcResponse.InternalError({\n message: e instanceof Error ? e.message : undefined,\n });\n }\n },\n});\nfunction announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\n// Required to pass SSR\nif (typeof document !== 'undefined') {\n // forward eip6963:requestProvider events to the host\n document.addEventListener('eip6963:requestProvider', () => {\n frameHost.eip6963RequestProvider();\n });\n // react native webview events\n document.addEventListener('FarcasterFrameEthProviderEvent', (event) => {\n if (event instanceof MessageEvent) {\n const ethProviderEvent = event.data;\n // @ts-expect-error\n emitter.emit(ethProviderEvent.event, ...ethProviderEvent.params);\n }\n });\n document.addEventListener('FarcasterFrameEvent', (event) => {\n if (event instanceof MessageEvent) {\n const frameEvent = event.data;\n if (frameEvent.event === 'eip6963:announceProvider') {\n announceProvider({\n info: frameEvent.info,\n provider: provider,\n });\n }\n }\n });\n}\n// Required to pass SSR\nif (typeof window !== 'undefined') {\n // forward eip6963:requestProvider events to the host\n window.addEventListener('eip6963:requestProvider', () => {\n frameHost.eip6963RequestProvider();\n });\n // web events\n window.addEventListener('message', (event) => {\n if (event instanceof MessageEvent) {\n if (event.data.type === 'frameEthProviderEvent') {\n const ethProviderEvent = event.data;\n // @ts-expect-error\n emitter.emit(ethProviderEvent.event, ...ethProviderEvent.params);\n }\n }\n });\n window.addEventListener('message', (event) => {\n if (event instanceof MessageEvent) {\n if (event.data.type === 'frameEvent') {\n const frameEvent = event.data.event;\n if (frameEvent.event === 'eip6963:announceProvider') {\n announceProvider({\n info: frameEvent.info,\n provider: provider,\n });\n }\n }\n }\n });\n}\n", "import { AddFrame, SignIn } from '@farcaster/frame-core';\nimport { EventEmitter } from 'eventemitter3';\nimport { frameHost } from './frameHost';\nimport { provider } from './provider';\nexport function createEmitter() {\n const emitter = new EventEmitter();\n return {\n get eventNames() {\n return emitter.eventNames.bind(emitter);\n },\n get listenerCount() {\n return emitter.listenerCount.bind(emitter);\n },\n get listeners() {\n return emitter.listeners.bind(emitter);\n },\n addListener: emitter.addListener.bind(emitter),\n emit: emitter.emit.bind(emitter),\n off: emitter.off.bind(emitter),\n on: emitter.on.bind(emitter),\n once: emitter.once.bind(emitter),\n removeAllListeners: emitter.removeAllListeners.bind(emitter),\n removeListener: emitter.removeListener.bind(emitter),\n };\n}\nconst emitter = createEmitter();\nexport const sdk = {\n ...emitter,\n context: frameHost.context,\n actions: {\n setPrimaryButton: frameHost.setPrimaryButton.bind(frameHost),\n ready: frameHost.ready.bind(frameHost),\n close: frameHost.close.bind(frameHost),\n viewProfile: frameHost.viewProfile.bind(frameHost),\n viewToken: frameHost.viewToken.bind(frameHost),\n swap: frameHost.swap.bind(frameHost),\n signIn: async (options) => {\n const response = await frameHost.signIn(options);\n if (response.result) {\n return response.result;\n }\n if (response.error.type === 'rejected_by_user') {\n throw new SignIn.RejectedByUser();\n }\n throw new Error('Unreachable');\n },\n openUrl: (url) => {\n return frameHost.openUrl(url.trim());\n },\n addFrame: async () => {\n const response = await frameHost.addFrame();\n if (response.result) {\n return response.result;\n }\n if (response.error.type === 'invalid_domain_manifest') {\n throw new AddFrame.InvalidDomainManifest();\n }\n if (response.error.type === 'rejected_by_user') {\n throw new AddFrame.RejectedByUser();\n }\n throw new Error('Unreachable');\n },\n },\n wallet: {\n ethProvider: provider,\n },\n};\n// Required to pass SSR\nif (typeof document !== 'undefined') {\n // react native webview events\n document.addEventListener('FarcasterFrameEvent', (event) => {\n if (event instanceof MessageEvent) {\n const frameEvent = event.data;\n if (frameEvent.event === 'primary_button_clicked') {\n emitter.emit('primaryButtonClicked');\n }\n else if (frameEvent.event === 'frame_added') {\n emitter.emit('frameAdded', {\n notificationDetails: frameEvent.notificationDetails,\n });\n }\n else if (frameEvent.event === 'frame_add_rejected') {\n emitter.emit('frameAddRejected', { reason: frameEvent.reason });\n }\n else if (frameEvent.event === 'frame_removed') {\n emitter.emit('frameRemoved');\n }\n else if (frameEvent.event === 'notifications_enabled') {\n emitter.emit('notificationsEnabled', {\n notificationDetails: frameEvent.notificationDetails,\n });\n }\n else if (frameEvent.event === 'notifications_disabled') {\n emitter.emit('notificationsDisabled');\n }\n }\n });\n}\n// Required to pass SSR\nif (typeof window !== 'undefined') {\n // web events\n window.addEventListener('message', (event) => {\n if (event instanceof MessageEvent) {\n if (event.data.type === 'frameEvent') {\n const frameEvent = event.data.event;\n if (frameEvent.event === 'primary_button_clicked') {\n emitter.emit('primaryButtonClicked');\n }\n else if (frameEvent.event === 'frame_added') {\n emitter.emit('frameAdded', {\n notificationDetails: frameEvent.notificationDetails,\n });\n }\n else if (frameEvent.event === 'frame_add_rejected') {\n emitter.emit('frameAddRejected', { reason: frameEvent.reason });\n }\n else if (frameEvent.event === 'frame_removed') {\n emitter.emit('frameRemoved');\n }\n else if (frameEvent.event === 'notifications_enabled') {\n emitter.emit('notificationsEnabled', {\n notificationDetails: frameEvent.notificationDetails,\n });\n }\n else if (frameEvent.event === 'notifications_disabled') {\n emitter.emit('notificationsDisabled');\n }\n }\n }\n });\n}\n", "import { sdk } from './sdk';\nexport * from './sdk';\nexport * from '@farcaster/frame-core';\nexport default sdk;\n"],
|
|
5
|
-
"mappings": "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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA+/DlB,MAAM,IAAI;;;AC//DT,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA+/DnB,MAAM,IAAI;;;AC//DR,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UA+/Dd,MAAM,IAAI;;;AC//Db,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OA+/DjB,MAAM,IAAI;;;AC//DV,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA+/DnB,MAAM,IAAI;;;AC//DR,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA+/DhB,MAAM,IAAI;;;AC//DX,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA+/Df,MAAM,IAAI;;;AC//DZ,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA+/DrB,MAAM,IAAI;;;AC//DN,IAAMC,YAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OA+/DjB,MAAM,IAAI;;;AC//DV,IAAMC,aAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
|
|
6
|
-
"names": ["RejectedByUser", "RejectedByUser", "util", "objectUtil", "path", "errorUtil", "path", "errorMap", "version", "base64", "ctx", "result", "index", "issues", "type", "elements", "size", "processed", "ZodFirstPartyTypeKind", "type", "path", "obj", "returnValue", "endpoint", "proxy", "decode", "encode", "format", "from", "fromAbi", "format", "from", "BaseError", "BaseError", "ripemd160", "sha256", "validate", "assert", "concat", "from", "fromBoolean", "fromNumber", "fromString", "isEqual", "padLeft", "padRight", "slice", "toBigInt", "toBoolean", "toNumber", "toString", "trimLeft", "validate", "SizeExceedsPaddingSizeError", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "from", "random", "size", "toBytes", "trimRight", "value", "size", "assertSize", "hex", "size", "SizeOverflowError", "assertStartOffset", "SliceOffsetOutOfBoundsError", "assertEndOffset", "pad", "SizeExceedsPaddingSizeError", "trim", "from", "hex", "assertSize", "signed", "size", "pad", "random", "assertStartOffset", "assertEndOffset", "trim", "trimRight", "toBytes", "BaseError", "SizeOverflowError", "SliceOffsetOutOfBoundsError", "SizeExceedsPaddingSizeError", "type", "encoder", "assert", "concat", "index", "from", "fromBoolean", "size", "padLeft", "hex", "assertSize", "BaseError", "fromNumber", "fromString", "padRight", "isEqual", "slice", "toBigInt", "toBoolean", "trimLeft", "toNumber", "toString", "validate", "type", "from", "ripemd160", "sha256", "validate", "size", "assert", "checksum", "from", "isEqual", "validate", "size", "assert", "from", "fromBytes", "fromHex", "toBytes", "toHex", "validate", "assert", "from", "fromHex", "validate", "fromBytes", "x", "prefix", "toBytes", "toHex", "BaseError", "size", "assert", "checksum", "hash", "fromString", "from", "toHex", "isEqual", "validate", "BaseError", "BaseError", "validate", "index", "format", "from", "abiItem", "index", "BaseError", "type", "size", "encode", "format", "from", "type", "checksum", "wrap", "slice", "toNumber", "length", "consumed", "value", "toBoolean", "size", "signed", "toBigInt", "toString", "trimLeft", "assert", "BaseError", "index", "size", "BaseError", "data", "encode", "type", "encodePacked", "assert", "size", "format", "from", "BaseError", "decode", "encode", "format", "from", "fromAbi", "item", "decode", "encode", "format", "from", "fromAbi", "getSelector", "decode", "size", "encode", "getSelector", "format", "from", "fromAbi", "decode", "encode", "format", "from", "fromAbi", "getSelector", "isEqual", "fromString", "index", "value", "input", "decode", "getSelector", "size", "encode", "format", "from", "fromAbi", "BaseError", "type", "format", "from", "fromAbi", "getSelector", "size", "fromAbi", "getSelector", "encode", "format", "from", "assert", "validate", "size", "BaseError", "from", "concat", "fromString", "size", "from", "fromRpc", "fromTuple", "fromTupleList", "toRpc", "toTuple", "toTupleList", "from", "fromBytes", "fromHex", "toBytes", "toHex", "toBytes", "toHex", "to", "length", "BaseError", "from", "fromBytes", "fromHex", "hex", "encode", "InvalidSerializedSizeError", "assert", "from", "fromBytes", "fromHex", "toBytes", "toHex", "validate", "assert", "fromBytes", "fromHex", "InvalidSerializedSizeError", "yParity", "from", "toBytes", "toHex", "validate", "BaseError", "size", "from", "fromRpc", "fromTuple", "fromTupleList", "fromHex", "toTuple", "toRpc", "toTupleList", "fromBytes", "fromHex", "fromString", "toBytes", "toHex", "toString", "from", "hex", "fromBytes", "from", "fromHex", "fromString", "toBytes", "toHex", "pad", "toString", "fromBytes", "fromHex", "fromString", "toBytes", "toHex", "toString", "encoder", "decoder", "fromBytes", "pad", "base64", "fromHex", "fromString", "toBytes", "size", "toHex", "toString", "from", "to", "toBytes", "toHex", "from", "version", "sha256", "from", "size", "to", "length", "toHex", "toBytes", "BaseError", "hash", "fromRpc", "toRpc", "fromRpc", "toRpc", "fromRpc", "toRpc", "fromRpc", "toRpc", "fromRpc", "toRpc", "toRpc", "fromRpc", "validate", "hash", "validate", "size", "Fp", "Fr", "Fp2", "Fp6", "Fp12", "utils", "getPublicKey", "sign", "verify", "msg", "_0n", "_1n", "_2n", "_3n", "Fp", "powers", "Fp2", "G2psi", "G2psi2", "FpLegendre", "concatBytes", "Fp6", "Fp4Square", "Fp12", "_0n", "_1n", "_2n", "_3n", "z", "sha256", "concatBytes", "x", "hex", "bytesToHex", "from", "to", "randomBytes", "point", "size", "from", "fromString", "fromBytes", "fromHex", "toBytes", "toHex", "toBytes", "toHex", "fromBytes", "fromHex", "hex", "from", "from", "fromNumber", "fromBytes", "padLeft", "validate", "concat", "decode", "V", "type", "split", "g", "decomposed", "hash", "fromString", "concat", "fromRpc", "toRpc", "fromRpc", "toRpc", "anumber", "wrap", "encode", "decode", "from", "to", "anumber", "normalize", "padding", "checksum", "sha256", "checksum", "encode", "decode", "normalize", "secp256k1", "version", "path", "index", "hash", "getPublicKey", "noble", "randomPrivateKey", "sign", "verify", "noble", "getPublicKey", "from", "randomPrivateKey", "sign", "extraEntropy", "hash", "verify", "isEqual", "toBytes", "path", "getPublicKey", "from", "index", "fromRpc", "toRpc", "fromRpc", "toRpc", "wordlist", "random", "validate", "hash", "wordlist", "normalize", "normalize", "wordlist", "wordlist", "wordlist", "wordlist", "wordlist", "wordlist", "wordlist", "wordlist", "wordlist", "random", "wordlist", "path", "from", "validate", "encode", "getSignPayload", "encode", "from", "size", "getSignPayload", "from", "BaseError", "InvalidInputError", "from", "parse", "emitter", "EventEmitter", "from", "provider", "parse", "BaseError", "from", "from", "options", "BaseError", "create", "parse", "create", "init", "data", "BaseError", "getPublicKey", "noble", "randomPrivateKey", "recoverPublicKey", "sign", "verify", "sha256", "noble", "getPublicKey", "from", "randomPrivateKey", "recoverPublicKey", "sign", "extraEntropy", "hash", "verify", "toHex", "size", "version", "statement", "from", "path", "isEqual", "BaseError", "format", "from", "format", "from", "BaseError", "BaseError", "type", "assert", "from", "getSignPayload", "hash", "toRpc", "validate", "assert", "to", "toHex", "from", "getSignPayload", "hash", "v", "fromHex", "toRpc", "validate", "assert", "deserialize", "from", "getSignPayload", "hash", "serialize", "toRpc", "type", "validate", "type", "assert", "to", "deserialize", "toHex", "from", "getSignPayload", "hash", "serialize", "fromHex", "toRpc", "validate", "assert", "deserialize", "from", "getSignPayload", "hash", "serialize", "serializedType", "toRpc", "type", "validate", "serializedType", "type", "assert", "to", "deserialize", "toHex", "from", "getSignPayload", "hash", "serialize", "fromHex", "toRpc", "validate", "assert", "deserialize", "from", "getSignPayload", "hash", "serialize", "serializedType", "toRpc", "type", "validate", "serializedType", "type", "assert", "hash", "size", "version", "deserialize", "toHex", "to", "from", "getSignPayload", "serialize", "fromHex", "toRpc", "validate", "assert", "deserialize", "from", "getSignPayload", "hash", "serialize", "serializedType", "type", "validate", "serializedType", "type", "assert", "deserialize", "toHex", "to", "fromTupleList", "from", "getSignPayload", "hash", "serialize", "toTupleList", "fromHex", "validate", "fromRpc", "fromRpcType", "toRpc", "toRpcType", "fromRpcType", "toRpcType", "fromRpc", "toRpc", "toRpc", "toRpc", "BytesSizeMismatchError", "assert", "encode", "encodeData", "getSignPayload", "serialize", "validate", "assert", "type", "value", "validate", "size", "BytesSizeMismatchError", "struct", "encode", "getSignPayload", "encodeData", "serialize", "BaseError", "fromString", "encode", "getSignPayload", "encode", "from", "getSignPayload", "getSignPayload", "sign", "verify", "from", "sha256", "fromHex", "toBytes", "fromString", "getSignPayload", "sign", "verify", "hash", "type", "concat", "BaseError", "sign", "verify", "from", "sign", "toBigInt", "slice", "verify", "toBytes", "concat", "fromNumber", "createEmitter", "emitter", "EventEmitter"]
|
|
7
|
-
}
|